diff --git a/.vscode/settings.json b/.vscode/settings.json index 6c2e5b5f..655b2a21 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,8 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[solidity]": { - "editor.defaultFormatter": "JuanBlanco.solidity" + "editor.defaultFormatter": "JuanBlanco.solidity", + "editor.tabSize": 4 }, "editor.defaultFormatter": "esbenp.prettier-vscode", @@ -13,6 +14,6 @@ "files.eol": "\n", "solidity.packageDefaultDependenciesContractsDirectory": "contracts", "solidity.packageDefaultDependenciesDirectory": "node_modules", - "solidity.compileUsingRemoteVersion": "v0.8.17", + "solidity.compileUsingRemoteVersion": "", "solidity.formatter": "forge" } diff --git a/README.md b/README.md index 410b69ee..2f836355 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ This directory contains code used for third-party integration. Since this reposi This directory contains protocol contracts related to access, contract discovery, data reporting, etc. -1. `AccountFactory.sol` is used to deploy Credit Accounts and managed the existing Credit Account queue. Credit Managers take accounts from the factory when a new account in Gearbox is opened and return them after the account is closed. +1. `AccountFactoryV3.sol` is used to deploy Credit Accounts and managed the existing Credit Account queue. Credit Managers take accounts from the factory when a new account in Gearbox is opened and return them after the account is closed. 2. `ACL.sol` is the main access control contract in the system. Contracts that inherit `ACLNonReentrantTrait.sol` use `ACL.sol` to determine access to configurator-only functions. 3. `AddressProvider.sol` is used by other contracts in the system to determine the up-to-date addresses of core contracts, such as `ACL`, `PriceOracle`, `GearToken`, etc. 4. `ContractsRegister.sol` contains a list of legitimate Gearbox Credit Managers and pools connected to the system. @@ -53,10 +53,10 @@ This directory contains protocol contracts related to access, contract discovery This directory contains the contracts responsible for managing Credit Accounts, tracking Credit Account collateral and debt, facilitating interactions with third-party contracts, etc. These contracts encapsulate the primary functions of the protocol. -1. `CreditAccount.sol` is a contract that acts as a user's smart wallet with out-of-the-box leverage. Credit Accounts store all of the user's collateral and borrowed assets, and can execute calls to third-party protocols routed to them by the user. In essence, a Credit Account acts as a substitute to the user's own EOA/Smart Wallet when interacting with protocols, but can also hold borrowed assets and only executes operations that are allowed by its respective Credit Manager. +1. `CreditAccountV3.sol` is a contract that acts as a user's smart wallet with out-of-the-box leverage. Credit Accounts store all of the user's collateral and borrowed assets, and can execute calls to third-party protocols routed to them by the user. In essence, a Credit Account acts as a substitute to the user's own EOA/Smart Wallet when interacting with protocols, but can also hold borrowed assets and only executes operations that are allowed by its respective Credit Manager. 2. `CreditManager.sol` is the primary backend contract of the Gearbox protocol, responsible for opening and closing accounts, routing calls to third-party protocols on behalf of Credit Account owners, performing account health checks, and tracking the lists of allowed third-party contracts and collateral tokens. Credit Managers cannot be interacted with directly by users - this has to be done through either an adapter or Credit Facade. 3. `CreditFacade.sol` is the main interface through which users interact with the Gearbox protocol. It allows users to manage their accounts and carry out multicalls, while performing necessary access and security checks for all operations. -4. `CreditConfigurator.sol` is an admin contract used to configure various security properties of the connected Credit Manager / Credit Facade, such as allowing new collateral tokens and adapters, changing fee parameters, etc. +4. `CreditConfiguratorV3.sol` is an admin contract used to configure various security properties of the connected Credit Manager / Credit Facade, such as allowing new collateral tokens and adapters, changing fee parameters, etc. ### Factories diff --git a/bin/contracts/test/suites/GenesisFactory-solc-output.json b/bin/contracts/test/suites/GenesisFactory-solc-output.json deleted file mode 100644 index 41d6226a..00000000 --- a/bin/contracts/test/suites/GenesisFactory-solc-output.json +++ /dev/null @@ -1,403956 +0,0 @@ -{ - "contracts": { - "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol": { - "AccountFactoryV2": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addressProvider", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CallerNotConfiguratorException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "MasterCreditAccountAlreadyDeployed", - "type": "error" - }, - { - "inputs": [], - "name": "RegisteredCreditManagerOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "addCreditManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "masterCreditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "usedAccount", - "type": "address" - } - ], - "name": "returnCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "takeCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotConfiguratorException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-Configurator" - } - ], - "CallerNotCreditManagerException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-CreditManagerV3" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "params": { - "addressProvider": "Address of address repository" - } - }, - "returnCreditAccount(address)": { - "details": "Retrieves the Credit Account from the Credit Manager and adds it to the stock", - "params": { - "usedAccount": "Address of returned credit account" - } - }, - "takeCreditAccount(uint256,uint256)": { - "details": "Provides a new credit account to a Credit Manager", - "returns": { - "creditAccount": "Address of credit account" - } - } - }, - "stateVariables": { - "masterCreditAccounts": { - "details": "Address of master credit account for cloning" - }, - "version": { - "details": "Contract version" - } - }, - "title": "Disposable credit accounts factory", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1603": { - "entryPoint": null, - "id": 1603, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_1657": { - "entryPoint": null, - "id": 1657, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_43": { - "entryPoint": null, - "id": 43, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 356, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60c060405234801561001057600080fd5b50604051610dd9380380610dd983398101604081905261002f91610164565b8080806001600160a01b03811661005957604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100bb9190610164565b6001600160a01b03908116608052839250821690506100ed57604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561012b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014f9190610164565b6001600160a01b031660a05250610194915050565b60006020828403121561017657600080fd5b81516001600160a01b038116811461018d57600080fd5b9392505050565b60805160a051610c1a6101bf60003960006103aa01526000818160ef01526101570152610c1a6000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806321d184561461006757806354fd4d501461009757806389b77b3e146100ae578063a4c98fed146100c1578063a50cf2c8146100ea578063e26b2f6314610111575b600080fd5b61007a61007536600461042a565b610124565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a061012c81565b60405190815260200161008e565b6100bf6100bc36600461044c565b50565b005b61007a6100cf36600461044c565b6000602081905290815260409020546001600160a01b031681565b61007a7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf61011f36600461044c565b610142565b60008061012f6102b0565b905061013a816102ea565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156101a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ca919061047c565b6101e7576040516361081c1560e01b815260040160405180910390fd5b806101f181610388565b61020e57604051635e35244560e11b815260040160405180910390fd5b336000908152602081905260409020546001600160a01b0316156102455760405163494f0b8760e11b815260040160405180910390fd5b816040516102529061041d565b6001600160a01b039091168152602001604051809103906000f08015801561027e573d6000803e3d6000fd5b5033600090815260208190526040902080546001600160a01b0319166001600160a01b03929092169190911790555050565b336000908152602081905260409020546001600160a01b0316806102e757604051631f51116760e01b815260040160405180910390fd5b90565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166103835760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa1580156103f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610417919061047c565b92915050565b6107468061049f83390190565b6000806040838503121561043d57600080fd5b50508035926020909101359150565b60006020828403121561045e57600080fd5b81356001600160a01b038116811461047557600080fd5b9392505050565b60006020828403121561048e57600080fd5b8151801515811461047557600080fdfe60a060405234801561001057600080fd5b5060405161074638038061074683398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516106af6100976000396000818160960152818160f2015261015501526106af6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631cff79cd1461005157806354fd4d501461007a578063c12c21c014610091578063d1660f99146100d0575b600080fd5b61006461005f3660046104da565b6100e5565b60405161007191906105ec565b60405180910390f35b61008361012c81565b604051908152602001610071565b6100b87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610071565b6100e36100de3660046105ff565b61014a565b005b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013057604051631f51116760e01b815260040160405180910390fd5b6101436001600160a01b038416836101ac565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461019357604051631f51116760e01b815260040160405180910390fd5b6101a76001600160a01b03841683836101f0565b505050565b6060610143838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610242565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101a7908490610324565b6060824710156102a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084015b60405180910390fd5b600080866001600160a01b031685876040516102c4919061063b565b60006040518083038185875af1925050503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b5091509150610317878383876103f6565b925050505b949350505050565b6000610379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661046f9092919063ffffffff16565b8051909150156101a757808060200190518101906103979190610657565b6101a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161029f565b6060831561046557825160000361045e576001600160a01b0385163b61045e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161029f565b508161031c565b61031c838361047e565b606061031c8484600085610242565b81511561048e5781518083602001fd5b8060405162461bcd60e51b815260040161029f91906105ec565b80356001600160a01b03811681146104bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156104ed57600080fd5b6104f6836104a8565b9150602083013567ffffffffffffffff8082111561051357600080fd5b818501915085601f83011261052757600080fd5b813581811115610539576105396104c4565b604051601f8201601f19908116603f01168101908382118183101715610561576105616104c4565b8160405282815288602084870101111561057a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156105b757818101518382015260200161059f565b50506000910152565b600081518084526105d881602086016020860161059c565b601f01601f19169290920160200192915050565b60208152600061014360208301846105c0565b60008060006060848603121561061457600080fd5b61061d846104a8565b925061062b602085016104a8565b9150604084013590509250925092565b6000825161064d81846020870161059c565b9190910192915050565b60006020828403121561066957600080fd5b8151801515811461014357600080fdfea2646970667358221220b5524a6a196bd7a4eb92abb0c23cc62168cd0712857c0cbfbb8ded75bd2d6d7a64736f6c63430008110033a264697066735822122052feffa21cd7583e008500e4b0dee70d2b38905c8410050b8ba2d160fa72381264736f6c63430008110033", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xDD9 CODESIZE SUB DUP1 PUSH2 0xDD9 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x164 JUMP JUMPDEST DUP1 DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x59 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x97 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB SWAP2 SWAP1 PUSH2 0x164 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 MSTORE DUP4 SWAP3 POP DUP3 AND SWAP1 POP PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC513C9BB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14F SWAP2 SWAP1 PUSH2 0x164 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH2 0x194 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x176 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xC1A PUSH2 0x1BF PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x3AA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xEF ADD MSTORE PUSH2 0x157 ADD MSTORE PUSH2 0xC1A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x21D18456 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x89B77B3E EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xA4C98FED EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0xE26B2F63 EQ PUSH2 0x111 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x42A JUMP JUMPDEST PUSH2 0x124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH2 0xBF PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST POP JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7A PUSH2 0xCF CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x7A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xBF PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST PUSH2 0x142 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12F PUSH2 0x2B0 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A DUP2 PUSH2 0x2EA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CA SWAP2 SWAP1 PUSH2 0x47C JUMP JUMPDEST PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1F1 DUP2 PUSH2 0x388 JUMP JUMPDEST PUSH2 0x20E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E352445 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x245 JUMPI PUSH1 0x40 MLOAD PUSH4 0x494F0B87 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH2 0x252 SWAP1 PUSH2 0x41D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x27E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x417 SWAP2 SWAP1 PUSH2 0x47C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x746 DUP1 PUSH2 0x49F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x746 CODESIZE SUB DUP1 PUSH2 0x746 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x6AF PUSH2 0x97 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x96 ADD MSTORE DUP2 DUP2 PUSH1 0xF2 ADD MSTORE PUSH2 0x155 ADD MSTORE PUSH2 0x6AF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0xD0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xB8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x143 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x193 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x1F0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1A7 SWAP1 DUP5 SWAP1 PUSH2 0x324 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C4 SWAP2 SWAP1 PUSH2 0x63B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x301 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x306 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x317 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3F6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x46F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x465 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x45E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x29F JUMP JUMPDEST POP DUP2 PUSH2 0x31C JUMP JUMPDEST PUSH2 0x31C DUP4 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x242 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x48E JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F6 DUP4 PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x539 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x561 JUMPI PUSH2 0x561 PUSH2 0x4C4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x59F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x59C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x143 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x61D DUP5 PUSH2 0x4A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x62B PUSH1 0x20 DUP6 ADD PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x64D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x59C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 MSTORE 0x4A PUSH11 0x196BD7A4EB92ABB0C23CC6 0x21 PUSH9 0xCD0712857C0CBFBB8D 0xED PUSH22 0xBD2D6D7A64736F6C63430008110033A2646970667358 0x22 SLT KECCAK256 MSTORE INVALID SELFDESTRUCT LOG2 SHR 0xD7 PC RETURNDATACOPY STOP DUP6 STOP 0xE4 0xB0 0xDE 0xE7 0xD 0x2B CODESIZE SWAP1 0x5C DUP5 LT SDIV SIGNEXTEND DUP12 LOG2 0xD1 PUSH1 0xFA PUSH19 0x381264736F6C63430008110033000000000000 ", - "sourceMap": "615:1778:0:-:0;;;1005:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1091:15;;;-1:-1:-1;;;;;381:18:10;;377:53;;408:22;;-1:-1:-1;;;408:22:10;;;;;;;;;;;377:53;885:15:8::1;-1:-1:-1::0;;;;;869:39:8::1;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;857:54:8;;::::1;;::::0;934:15:9;;-1:-1:-1;381:18:10;;;-1:-1:-1;377:53:10;;408:22;;-1:-1:-1;;;408:22:10;;;;;;;;;;;377:53;1001:15:9::1;-1:-1:-1::0;;;;;985:53:9::1;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;961:80:9::1;;::::0;-1:-1:-1;615:1778:0;;-1:-1:-1;;615:1778:0;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;:::-;615:1778:0;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_acl_1583": { - "entryPoint": null, - "id": 1583, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getMasterCreditAccountOrRevert_137": { - "entryPoint": 688, - "id": 137, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@addCreditManager_113": { - "entryPoint": 322, - "id": 113, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@clone_16852": { - "entryPoint": 746, - "id": 16852, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isRegisteredCreditManager_1683": { - "entryPoint": 904, - "id": 1683, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@masterCreditAccounts_24": { - "entryPoint": null, - "id": 24, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@returnCreditAccount_74": { - "entryPoint": null, - "id": 74, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@takeCreditAccount_67": { - "entryPoint": 292, - "id": 67, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@version_28": { - "entryPoint": null, - "id": 28, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1100, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 1148, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_uint256": { - "entryPoint": 1066, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1800:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "101:161:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "147:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "156:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "149:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "149:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "149:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "122:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "131:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "118:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "118:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "143:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "114:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "114:32:70" - }, - "nodeType": "YulIf", - "src": "111:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "172:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "195:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "182:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "182:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "172:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "214:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "241:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "237:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "237:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "224:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "214:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "59:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "70:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "82:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "90:6:70", - "type": "" - } - ], - "src": "14:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "368:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "378:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "390:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "401:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "386:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "386:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "378:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "420:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "435:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "451:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "456:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "447:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "447:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "460:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "443:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "431:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "431:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "413:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "413:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "413:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "337:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "348:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "359:4:70", - "type": "" - } - ], - "src": "267:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "576:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "586:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "598:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "609:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "594:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "594:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "586:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "628:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "639:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "621:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "621:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "621:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "545:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "556:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "567:4:70", - "type": "" - } - ], - "src": "475:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "727:216:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "773:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "782:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "785:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "775:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "775:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "775:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "748:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "757:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "744:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "744:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "769:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "740:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "740:32:70" - }, - "nodeType": "YulIf", - "src": "737:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "798:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "824:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "811:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "811:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "802:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "897:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "906:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "909:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "899:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "899:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "899:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "856:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "867:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "882:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "887:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "878:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "878:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "891:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "874:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "874:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "863:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "863:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "853:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "853:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "846:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "846:50:70" - }, - "nodeType": "YulIf", - "src": "843:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "922:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "932:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "922:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "693:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "704:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "716:6:70", - "type": "" - } - ], - "src": "657:286:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1063:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1073:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1085:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1096:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1081:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1081:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1073:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1115:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1130:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1146:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1151:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1142:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1142:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1155:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1138:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1138:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1126:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1126:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1108:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1108:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1108:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1032:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1043:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1054:4:70", - "type": "" - } - ], - "src": "948:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1248:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1294:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1303:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1306:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1296:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1296:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1296:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1269:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1278:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1265:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1265:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1290:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1261:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1261:32:70" - }, - "nodeType": "YulIf", - "src": "1258:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1319:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1338:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1332:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1332:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1323:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1401:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1410:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1413:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1403:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1403:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1403:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1370:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1391:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1384:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1384:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1377:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1377:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1367:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1367:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1360:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1360:40:70" - }, - "nodeType": "YulIf", - "src": "1357:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "1426:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1436:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1426:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1214:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1225:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1237:6:70", - "type": "" - } - ], - "src": "1170:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1626:172:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1643:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1654:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1636:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1636:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1636:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1677:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1688:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1673:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1673:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1693:2:70", - "type": "", - "value": "22" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1666:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1666:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1666:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1716:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1727:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1712:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1712:18:70" - }, - { - "hexValue": "455243313136373a20637265617465206661696c6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1732:24:70", - "type": "", - "value": "ERC1167: create failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1705:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1705:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1705:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1766:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1778:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1789:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1774:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1774:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1766:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1603:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1617:4:70", - "type": "" - } - ], - "src": "1452:346:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 22)\n mstore(add(headStart, 64), \"ERC1167: create failed\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1583": [ - { - "length": 32, - "start": 239 - }, - { - "length": 32, - "start": 343 - } - ], - "1638": [ - { - "length": 32, - "start": 938 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c806321d184561461006757806354fd4d501461009757806389b77b3e146100ae578063a4c98fed146100c1578063a50cf2c8146100ea578063e26b2f6314610111575b600080fd5b61007a61007536600461042a565b610124565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a061012c81565b60405190815260200161008e565b6100bf6100bc36600461044c565b50565b005b61007a6100cf36600461044c565b6000602081905290815260409020546001600160a01b031681565b61007a7f000000000000000000000000000000000000000000000000000000000000000081565b6100bf61011f36600461044c565b610142565b60008061012f6102b0565b905061013a816102ea565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156101a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ca919061047c565b6101e7576040516361081c1560e01b815260040160405180910390fd5b806101f181610388565b61020e57604051635e35244560e11b815260040160405180910390fd5b336000908152602081905260409020546001600160a01b0316156102455760405163494f0b8760e11b815260040160405180910390fd5b816040516102529061041d565b6001600160a01b039091168152602001604051809103906000f08015801561027e573d6000803e3d6000fd5b5033600090815260208190526040902080546001600160a01b0319166001600160a01b03929092169190911790555050565b336000908152602081905260409020546001600160a01b0316806102e757604051631f51116760e01b815260040160405180910390fd5b90565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166103835760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b604482015260640160405180910390fd5b919050565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa1580156103f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610417919061047c565b92915050565b6107468061049f83390190565b6000806040838503121561043d57600080fd5b50508035926020909101359150565b60006020828403121561045e57600080fd5b81356001600160a01b038116811461047557600080fd5b9392505050565b60006020828403121561048e57600080fd5b8151801515811461047557600080fdfe60a060405234801561001057600080fd5b5060405161074638038061074683398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516106af6100976000396000818160960152818160f2015261015501526106af6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631cff79cd1461005157806354fd4d501461007a578063c12c21c014610091578063d1660f99146100d0575b600080fd5b61006461005f3660046104da565b6100e5565b60405161007191906105ec565b60405180910390f35b61008361012c81565b604051908152602001610071565b6100b87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610071565b6100e36100de3660046105ff565b61014a565b005b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013057604051631f51116760e01b815260040160405180910390fd5b6101436001600160a01b038416836101ac565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461019357604051631f51116760e01b815260040160405180910390fd5b6101a76001600160a01b03841683836101f0565b505050565b6060610143838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610242565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101a7908490610324565b6060824710156102a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084015b60405180910390fd5b600080866001600160a01b031685876040516102c4919061063b565b60006040518083038185875af1925050503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b5091509150610317878383876103f6565b925050505b949350505050565b6000610379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661046f9092919063ffffffff16565b8051909150156101a757808060200190518101906103979190610657565b6101a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161029f565b6060831561046557825160000361045e576001600160a01b0385163b61045e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161029f565b508161031c565b61031c838361047e565b606061031c8484600085610242565b81511561048e5781518083602001fd5b8060405162461bcd60e51b815260040161029f91906105ec565b80356001600160a01b03811681146104bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156104ed57600080fd5b6104f6836104a8565b9150602083013567ffffffffffffffff8082111561051357600080fd5b818501915085601f83011261052757600080fd5b813581811115610539576105396104c4565b604051601f8201601f19908116603f01168101908382118183101715610561576105616104c4565b8160405282815288602084870101111561057a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156105b757818101518382015260200161059f565b50506000910152565b600081518084526105d881602086016020860161059c565b601f01601f19169290920160200192915050565b60208152600061014360208301846105c0565b60008060006060848603121561061457600080fd5b61061d846104a8565b925061062b602085016104a8565b9150604084013590509250925092565b6000825161064d81846020870161059c565b9190910192915050565b60006020828403121561066957600080fd5b8151801515811461014357600080fdfea2646970667358221220b5524a6a196bd7a4eb92abb0c23cc62168cd0712857c0cbfbb8ded75bd2d6d7a64736f6c63430008110033a264697066735822122052feffa21cd7583e008500e4b0dee70d2b38905c8410050b8ba2d160fa72381264736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x21D18456 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x89B77B3E EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0xA4C98FED EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0xE26B2F63 EQ PUSH2 0x111 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x42A JUMP JUMPDEST PUSH2 0x124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA0 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8E JUMP JUMPDEST PUSH2 0xBF PUSH2 0xBC CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST POP JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7A PUSH2 0xCF CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x7A PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xBF PUSH2 0x11F CALLDATASIZE PUSH1 0x4 PUSH2 0x44C JUMP JUMPDEST PUSH2 0x142 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12F PUSH2 0x2B0 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A DUP2 PUSH2 0x2EA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CA SWAP2 SWAP1 PUSH2 0x47C JUMP JUMPDEST PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1F1 DUP2 PUSH2 0x388 JUMP JUMPDEST PUSH2 0x20E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E352445 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x245 JUMPI PUSH1 0x40 MLOAD PUSH4 0x494F0B87 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH2 0x252 SWAP1 PUSH2 0x41D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x27E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH2 0x2E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x417 SWAP2 SWAP1 PUSH2 0x47C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x746 DUP1 PUSH2 0x49F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x48E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x746 CODESIZE SUB DUP1 PUSH2 0x746 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x6AF PUSH2 0x97 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x96 ADD MSTORE DUP2 DUP2 PUSH1 0xF2 ADD MSTORE PUSH2 0x155 ADD MSTORE PUSH2 0x6AF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0xD0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xB8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x143 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x193 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x1F0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1A7 SWAP1 DUP5 SWAP1 PUSH2 0x324 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C4 SWAP2 SWAP1 PUSH2 0x63B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x301 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x306 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x317 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3F6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x46F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x465 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x45E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x29F JUMP JUMPDEST POP DUP2 PUSH2 0x31C JUMP JUMPDEST PUSH2 0x31C DUP4 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x242 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x48E JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F6 DUP4 PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x539 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x561 JUMPI PUSH2 0x561 PUSH2 0x4C4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x59F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x59C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x143 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x61D DUP5 PUSH2 0x4A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x62B PUSH1 0x20 DUP6 ADD PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x64D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x59C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 MSTORE 0x4A PUSH11 0x196BD7A4EB92ABB0C23CC6 0x21 PUSH9 0xCD0712857C0CBFBB8D 0xED PUSH22 0xBD2D6D7A64736F6C63430008110033A2646970667358 0x22 SLT KECCAK256 MSTORE INVALID SELFDESTRUCT LOG2 SHR 0xD7 PC RETURNDATACOPY STOP DUP6 STOP 0xE4 0xB0 0xDE 0xE7 0xD 0x2B CODESIZE SWAP1 0x5C DUP5 LT SDIV SIGNEXTEND DUP12 LOG2 0xD1 PUSH1 0xFA PUSH19 0x381264736F6C63430008110033000000000000 ", - "sourceMap": "615:1778:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1235:386;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;431:32:70;;;413:51;;401:2;386:18;1235:386:0;;;;;;;;850:38;;884:4;850:38;;;;;621:25:70;;;609:2;594:18;850:38:0;475:177:70;1627:115:0;;;;;;:::i;:::-;;;;;758:55;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;758:55:0;;;659:26:8;;;;;1770:369:0;;;;;;:::i;:::-;;:::i;1235:386::-;1307:21;1340:27;1370:33;:31;:33::i;:::-;1340:63;;1495:33;1508:19;1495:12;:33::i;:::-;1479:49;1235:386;-1:-1:-1;;;;1235:386:0:o;1770:369::-;1023:31:8;;-1:-1:-1;;;1023:31:8;;1043:10;1023:31;;;413:51:70;1023:4:8;-1:-1:-1;;;;;1023:19:8;;;;386:18:70;;1023:31:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1018:102;;1077:32;;-1:-1:-1;;;1077:32:8;;;;;;;;;;;1018:102;1897:13:0::1;1426:31:9;1452:4;1426:25;:31::i;:::-;1421:83;;1466:38;;-1:-1:-1::0;;;1466:38:9::1;;;;;;;;;;;1421:83;1951:10:0::2;1974:1;1930:32:::0;;;::::2;::::0;;;;;;;-1:-1:-1;;;;;1930:32:0::2;:46:::0;1926:120:::2;;1999:36;;-1:-1:-1::0;;;1999:36:0::2;;;;;;;;;;;1926:120;2117:13;2099:32;;;;;:::i;:::-;-1:-1:-1::0;;;;;431:32:70;;;413:51;;401:2;386:18;2099:32:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;2077:10:0::2;2056:20;:32:::0;;;::::2;::::0;;;;;;:76;;-1:-1:-1;;;;;;2056:76:0::2;-1:-1:-1::0;;;;;2056:76:0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;1770:369:0:o;2145:246::-;2271:10;2211:16;2250:32;;;;;;;;;;;-1:-1:-1;;;;;2250:32:0;;2292:93;;2341:33;;-1:-1:-1;;;2341:33:0;;;;;;;;;;;2292:93;2145:246;:::o;973:759:54:-;1030:16;1362:48;1344:14;1338:4;1334:25;1328:4;1324:36;1321:90;1315:4;1308:104;1569:32;1552:14;1546:4;1542:25;1539:63;1533:4;1526:77;1644:4;1638;1635:1;1628:21;1616:33;-1:-1:-1;;;;;;1676:22:54;;1668:57;;;;-1:-1:-1;;;1668:57:54;;1654:2:70;1668:57:54;;;1636:21:70;1693:2;1673:18;;;1666:30;-1:-1:-1;;;1712:18:70;;;1705:52;1774:18;;1668:57:54;;;;;;;;973:759;;;:::o;1171:129:9:-;1267:26;;-1:-1:-1;;;1267:26:9;;-1:-1:-1;;;;;431:32:70;;;1267:26:9;;;413:51:70;1244:4:9;;1267:3;:19;;;;;;386:18:70;;1267:26:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1260:33;1171:129;-1:-1:-1;;1171:129:9:o;-1:-1:-1:-;;;;;;;;:::o;14:248:70:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:70;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:70:o;657:286::-;716:6;769:2;757:9;748:7;744:23;740:32;737:52;;;785:1;782;775:12;737:52;811:23;;-1:-1:-1;;;;;863:31:70;;853:42;;843:70;;909:1;906;899:12;843:70;932:5;657:286;-1:-1:-1;;;657:286:70:o;1170:277::-;1237:6;1290:2;1278:9;1269:7;1265:23;1261:32;1258:52;;;1306:1;1303;1296:12;1258:52;1338:9;1332:16;1391:5;1384:13;1377:21;1370:5;1367:32;1357:60;;1413:1;1410;1403:12" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "619600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "_acl()": "infinite", - "addCreditManager(address)": "infinite", - "masterCreditAccounts(address)": "2559", - "returnCreditAccount(address)": "279", - "takeCreditAccount(uint256,uint256)": "infinite", - "version()": "195" - }, - "internal": { - "_getMasterCreditAccountOrRevert()": "infinite" - } - }, - "methodIdentifiers": { - "_acl()": "a50cf2c8", - "addCreditManager(address)": "e26b2f63", - "masterCreditAccounts(address)": "a4c98fed", - "returnCreditAccount(address)": "89b77b3e", - "takeCreditAccount(uint256,uint256)": "21d18456", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotConfiguratorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MasterCreditAccountAlreadyDeployed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegisteredCreditManagerOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"addCreditManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"masterCreditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"usedAccount\",\"type\":\"address\"}],\"name\":\"returnCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"takeCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotConfiguratorException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-Configurator\"}],\"CallerNotCreditManagerException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-CreditManagerV3\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"addressProvider\":\"Address of address repository\"}},\"returnCreditAccount(address)\":{\"details\":\"Retrieves the Credit Account from the Credit Manager and adds it to the stock\",\"params\":{\"usedAccount\":\"Address of returned credit account\"}},\"takeCreditAccount(uint256,uint256)\":{\"details\":\"Provides a new credit account to a Credit Manager\",\"returns\":{\"creditAccount\":\"Address of credit account\"}}},\"stateVariables\":{\"masterCreditAccounts\":{\"details\":\"Address of master credit account for cloning\"},\"version\":{\"details\":\"Contract version\"}},\"title\":\"Disposable credit accounts factory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol\":\"AccountFactoryV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x8195b1103c4a784b1645ff8485d5fbf6994eeb8d033f34953fb76987c9aa7f74\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://995e2a8c9ee5befe9493b15e7991cd3d575ef11d6f4024aee9cda00af27686d0\",\"dweb:/ipfs/QmeHkzcHNwoPcC4i2G3G6LDF9oChusiztyGTYsq5fotHgb\"]},\"/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0xf28a6b6e4e5da385ddfc95ae6e0719484a14a240687ad7a514435eede83c9efc\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c5a5189a274068c60f5e73fd5f3d32a262042b05c368a8aa140b3913a3104c71\",\"dweb:/ipfs/QmcT2U2H77TvKcbzyHp5XAZXiXrAGK1CbTzWZbPX7nhLC2\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0x7ec541ae052e1b6f45932028f4dcef0c05dbdb07f377cf244016b17bf026c092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c812d20108a644e7c069e425659ef400a6e1cddf945f0cca0e3c28140f900353\",\"dweb:/ipfs/QmZ2GKfgTEw8ESBcTcpg19SvxnaqxK5rjEyzBRhJHBENZm\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol\":{\"keccak256\":\"0x8c1ac20b391ec15c994d89b77d297edff4d99a9cef63f1a16b10c8a64aefa6f3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://50308df8f32fcba6dbadbc3d720b24351d80c89e432d3915e00f24a7262c508a\",\"dweb:/ipfs/QmVmecTuUqKdbT56vPJBuCQLTVSgKbQU5KSuUWTH6rJLca\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":{\"keccak256\":\"0xdecb13fa2b9269e64c184276cc62b7c9ecde2bf9427402b6534690572fd2d821\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff9189896a9447a469ad1d12d6fa2694aa8e0ca2a4e858f028752ba57787722a\",\"dweb:/ipfs/QmTy3ADxN8CA4QHVkHe7R24UpHaHmvZW5KQGZb7grBCCGJ\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4da0f451fe5aefdb95204dbec4a9448a8a2b00a444864bb5dbf7162da842a0f7\",\"dweb:/ipfs/QmYciAwNiJzgGMAqSTUANwMjy5HykNUvmkQ5PQhNTRqrB5\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 24, - "contract": "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol:AccountFactoryV2", - "label": "masterCreditAccounts", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_address)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol": { - "CreditAccount": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CallerNotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "safeTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotCreditManagerException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-CreditManagerV3" - } - ] - }, - "kind": "dev", - "methods": { - "execute(address,bytes)": { - "details": "Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.", - "params": { - "data": "Data to call the contract with.", - "destination": "Contract address to be called." - } - }, - "safeTransfer(address,address,uint256)": { - "details": "Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.", - "params": { - "amount": "Amount to be transferred.", - "to": "Address of the recipient.", - "token": "Token to be transferred from the Credit Account." - } - } - }, - "stateVariables": { - "creditManager": { - "details": "Address of the currently connected Credit Manager" - } - }, - "title": "Credit Account", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_185": { - "entryPoint": null, - "id": 185, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 64, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60a060405234801561001057600080fd5b5060405161074638038061074683398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516106af6100976000396000818160960152818160f2015261015501526106af6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631cff79cd1461005157806354fd4d501461007a578063c12c21c014610091578063d1660f99146100d0575b600080fd5b61006461005f3660046104da565b6100e5565b60405161007191906105ec565b60405180910390f35b61008361012c81565b604051908152602001610071565b6100b87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610071565b6100e36100de3660046105ff565b61014a565b005b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013057604051631f51116760e01b815260040160405180910390fd5b6101436001600160a01b038416836101ac565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461019357604051631f51116760e01b815260040160405180910390fd5b6101a76001600160a01b03841683836101f0565b505050565b6060610143838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610242565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101a7908490610324565b6060824710156102a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084015b60405180910390fd5b600080866001600160a01b031685876040516102c4919061063b565b60006040518083038185875af1925050503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b5091509150610317878383876103f6565b925050505b949350505050565b6000610379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661046f9092919063ffffffff16565b8051909150156101a757808060200190518101906103979190610657565b6101a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161029f565b6060831561046557825160000361045e576001600160a01b0385163b61045e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161029f565b508161031c565b61031c838361047e565b606061031c8484600085610242565b81511561048e5781518083602001fd5b8060405162461bcd60e51b815260040161029f91906105ec565b80356001600160a01b03811681146104bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156104ed57600080fd5b6104f6836104a8565b9150602083013567ffffffffffffffff8082111561051357600080fd5b818501915085601f83011261052757600080fd5b813581811115610539576105396104c4565b604051601f8201601f19908116603f01168101908382118183101715610561576105616104c4565b8160405282815288602084870101111561057a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156105b757818101518382015260200161059f565b50506000910152565b600081518084526105d881602086016020860161059c565b601f01601f19169290920160200192915050565b60208152600061014360208301846105c0565b60008060006060848603121561061457600080fd5b61061d846104a8565b925061062b602085016104a8565b9150604084013590509250925092565b6000825161064d81846020870161059c565b9190910192915050565b60006020828403121561066957600080fd5b8151801515811461014357600080fdfea2646970667358221220b5524a6a196bd7a4eb92abb0c23cc62168cd0712857c0cbfbb8ded75bd2d6d7a64736f6c63430008110033", - "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x746 CODESIZE SUB DUP1 PUSH2 0x746 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x6AF PUSH2 0x97 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0x96 ADD MSTORE DUP2 DUP2 PUSH1 0xF2 ADD MSTORE PUSH2 0x155 ADD MSTORE PUSH2 0x6AF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0xD0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xB8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x143 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x193 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x1F0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1A7 SWAP1 DUP5 SWAP1 PUSH2 0x324 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C4 SWAP2 SWAP1 PUSH2 0x63B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x301 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x306 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x317 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3F6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x46F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x465 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x45E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x29F JUMP JUMPDEST POP DUP2 PUSH2 0x31C JUMP JUMPDEST PUSH2 0x31C DUP4 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x242 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x48E JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F6 DUP4 PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x539 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x561 JUMPI PUSH2 0x561 PUSH2 0x4C4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x59F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x59C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x143 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x61D DUP5 PUSH2 0x4A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x62B PUSH1 0x20 DUP6 ADD PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x64D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x59C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 MSTORE 0x4A PUSH11 0x196BD7A4EB92ABB0C23CC6 0x21 PUSH9 0xCD0712857C0CBFBB8D 0xED PUSH22 0xBD2D6D7A64736F6C6343000811003300000000000000 ", - "sourceMap": "935:1480:1:-:0;;;1436:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1482:30:1;;;935:1480;;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;:::-;935:1480:1;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_callOptionalReturn_18246": { - "entryPoint": 804, - "id": 18246, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_revert_18719": { - "entryPoint": 1150, - "id": 18719, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@creditManager_158": { - "entryPoint": null, - "id": 158, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@execute_224": { - "entryPoint": 229, - "id": 224, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionCallWithValue_18544": { - "entryPoint": 578, - "id": 18544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@functionCall_18460": { - "entryPoint": 428, - "id": 18460, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionCall_18480": { - "entryPoint": 1135, - "id": 18480, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@isContract_18408": { - "entryPoint": null, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@safeTransfer_17998": { - "entryPoint": 496, - "id": 17998, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@safeTransfer_206": { - "entryPoint": 330, - "id": 206, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@verifyCallResultFromTarget_18675": { - "entryPoint": 1014, - "id": 18675, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@version_161": { - "entryPoint": null, - "id": 161, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 1192, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 1535, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr": { - "entryPoint": 1242, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 1623, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_bytes": { - "entryPoint": 1472, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1595, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 1516, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 1436, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1220, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:5049:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "73:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "82:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "82:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "73:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "165:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "174:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "177:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "167:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "167:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "167:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "124:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "135:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "146:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "142:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "142:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "131:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "131:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "121:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "121:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "114:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "114:50:70" - }, - "nodeType": "YulIf", - "src": "111:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:70", - "type": "" - } - ], - "src": "14:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "224:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "241:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "253:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "244:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "244:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "234:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "234:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "234:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "281:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "284:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "274:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "274:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "274:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "305:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "308:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "298:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "298:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "298:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "192:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "420:899:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "466:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "475:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "478:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "468:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "468:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "468:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "441:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "450:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "437:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "437:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "462:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "433:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "433:32:70" - }, - "nodeType": "YulIf", - "src": "430:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "491:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "520:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "501:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "501:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "491:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "539:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "570:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "581:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "566:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "566:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "553:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "553:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "543:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "594:28:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "604:18:70", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "598:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "649:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "658:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "661:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "651:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "651:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "651:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "637:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "645:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "634:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "634:14:70" - }, - "nodeType": "YulIf", - "src": "631:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "674:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "688:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "699:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "684:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "684:22:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "678:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "754:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "763:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "766:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "756:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "756:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "756:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "733:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "737:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "729:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "729:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "744:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "725:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "725:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "718:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "718:35:70" - }, - "nodeType": "YulIf", - "src": "715:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "779:26:70", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "802:2:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "789:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "789:16:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "783:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "828:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "830:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "830:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "830:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "820:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "824:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "817:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "817:10:70" - }, - "nodeType": "YulIf", - "src": "814:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "859:17:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "873:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "869:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "869:7:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "863:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "885:23:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "905:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "899:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "899:9:70" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "889:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "917:71:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "939:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "963:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "967:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "959:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "959:13:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "974:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "955:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "955:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "951:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "951:31:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "984:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "947:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "947:40:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "935:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "935:53:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "921:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1047:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1049:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1049:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1049:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1006:10:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1018:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1003:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1003:18:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1026:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1038:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1023:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1023:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1000:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1000:46:70" - }, - "nodeType": "YulIf", - "src": "997:72:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1085:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1089:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1078:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1078:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1078:22:70" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1116:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1124:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1109:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1109:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1109:18:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1173:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1182:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1185:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1175:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1175:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1175:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1150:2:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1154:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1146:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1159:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1142:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1142:20:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1164:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1139:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1139:33:70" - }, - "nodeType": "YulIf", - "src": "1136:53:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1215:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1223:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1211:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1211:15:70" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1232:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1236:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1228:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1228:11:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1241:2:70" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "1198:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1198:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1198:46:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1268:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1276:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1264:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1264:15:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1281:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1260:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1260:24:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1286:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1253:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1253:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1253:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "1297:16:70", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1307:6:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1297:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "378:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "389:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "401:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "409:6:70", - "type": "" - } - ], - "src": "324:995:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1390:184:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1400:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1409:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1404:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1469:63:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1494:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1499:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1490:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1490:11:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1513:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1518:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1509:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1503:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1503:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1483:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1483:39:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1483:39:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1430:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1433:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1427:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1427:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1441:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1443:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1452:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1455:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1448:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1448:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1443:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1423:3:70", - "statements": [] - }, - "src": "1419:113:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1552:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1557:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1548:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1548:16:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1566:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1541:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1541:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1541:27:70" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1368:3:70", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1373:3:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1378:6:70", - "type": "" - } - ], - "src": "1324:250:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1628:221:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1638:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1658:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1652:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1652:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1642:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1680:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1685:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1673:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1673:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1673:19:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1740:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1747:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1736:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1736:16:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1758:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1763:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1754:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1754:14:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1770:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "1701:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "1701:76:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1701:76:70" - }, - { - "nodeType": "YulAssignment", - "src": "1786:57:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1801:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1814:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1822:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1810:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1831:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1827:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1827:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1806:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1797:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1797:39:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1838:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1793:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1793:50:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1786:3:70" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1605:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1612:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1620:3:70", - "type": "" - } - ], - "src": "1579:270:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1973:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1990:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2001:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1983:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1983:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1983:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "2013:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2038:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2050:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2061:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2046:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2046:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "2021:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "2021:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2013:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1942:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1953:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1964:4:70", - "type": "" - } - ], - "src": "1854:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2177:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2187:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2199:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2210:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2195:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2187:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2229:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2240:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2222:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2222:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2222:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2146:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2157:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2168:4:70", - "type": "" - } - ], - "src": "2076:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2359:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2369:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2381:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2392:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2377:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2377:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2369:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2411:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2426:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2442:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2447:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2438:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2438:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2451:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2434:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2434:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2422:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2422:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2404:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2404:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2404:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2328:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2339:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2350:4:70", - "type": "" - } - ], - "src": "2258:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2570:224:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2616:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2625:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2628:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2618:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2618:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2618:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2591:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2600:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2587:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2587:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2612:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2583:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2583:32:70" - }, - "nodeType": "YulIf", - "src": "2580:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2641:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2670:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2651:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2651:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2641:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2689:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2722:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2733:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2718:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2718:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2699:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2699:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2689:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2746:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2773:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2784:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2769:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2769:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2756:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2756:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2746:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2520:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2531:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2543:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2551:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2559:6:70", - "type": "" - } - ], - "src": "2466:328:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2928:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2938:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2950:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2961:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2946:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2946:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2938:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2980:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2995:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3011:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3016:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3007:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3007:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3020:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3003:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3003:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2991:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2991:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2973:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2973:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2973:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3044:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3055:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3040:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3040:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3060:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3033:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3033:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3033:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2889:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2900:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2908:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2919:4:70", - "type": "" - } - ], - "src": "2799:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3252:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3269:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3280:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3262:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3262:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3262:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3303:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3314:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3299:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3299:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3319:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3292:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3292:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3292:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3342:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3353:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3338:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3338:18:70" - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3358:34:70", - "type": "", - "value": "Address: insufficient balance fo" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3331:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3331:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3331:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3413:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3424:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3409:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3409:18:70" - }, - { - "hexValue": "722063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3429:8:70", - "type": "", - "value": "r call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3402:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3402:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3402:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "3447:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3459:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3470:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3455:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3455:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3447:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3229:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3243:4:70", - "type": "" - } - ], - "src": "3078:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3622:150:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3632:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3652:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3646:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3646:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3636:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3707:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3715:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3703:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3703:17:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3722:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3727:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "3668:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "3668:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3668:66:70" - }, - { - "nodeType": "YulAssignment", - "src": "3743:23:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3754:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3759:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3750:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3750:16:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3743:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3598:3:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3603:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3614:3:70", - "type": "" - } - ], - "src": "3485:287:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3855:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3901:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3910:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3913:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3903:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3903:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3903:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3876:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3885:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3872:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3872:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3897:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3868:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3868:32:70" - }, - "nodeType": "YulIf", - "src": "3865:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3926:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3945:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3939:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3939:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3930:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4008:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4017:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4020:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4010:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4010:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4010:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3977:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3998:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3991:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3991:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3984:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3984:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3974:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3974:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3967:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3967:40:70" - }, - "nodeType": "YulIf", - "src": "3964:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "4033:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4043:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4033:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3821:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3832:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3844:6:70", - "type": "" - } - ], - "src": "3777:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4233:232:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4250:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4261:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4243:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4243:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4243:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4284:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4295:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4280:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4280:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4300:2:70", - "type": "", - "value": "42" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4273:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4273:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4273:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4323:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4334:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4319:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4319:18:70" - }, - { - "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4339:34:70", - "type": "", - "value": "SafeERC20: ERC20 operation did n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4312:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4312:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4312:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4394:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4405:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4390:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4390:18:70" - }, - { - "hexValue": "6f742073756363656564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4410:12:70", - "type": "", - "value": "ot succeed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4383:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4383:40:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4383:40:70" - }, - { - "nodeType": "YulAssignment", - "src": "4432:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4444:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4455:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4440:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4440:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4432:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4210:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4224:4:70", - "type": "" - } - ], - "src": "4059:406:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4644:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4661:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4672:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4654:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4654:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4654:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4695:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4706:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4691:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4691:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4711:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4684:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4684:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4684:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4734:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4745:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4730:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4730:18:70" - }, - { - "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4750:31:70", - "type": "", - "value": "Address: call to non-contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4723:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4723:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4723:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "4791:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4803:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4814:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4799:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4799:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4791:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4621:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4635:4:70", - "type": "" - } - ], - "src": "4470:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4949:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4966:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4977:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4959:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4959:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4959:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "4989:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5014:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5026:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5037:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5022:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5022:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "4997:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4997:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4989:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4918:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4929:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4940:4:70", - "type": "" - } - ], - "src": "4828:219:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := calldataload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n mstore(add(add(memPtr, _3), 32), 0)\n value1 := memPtr\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n mstore(add(headStart, 96), \"ot succeed\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "158": [ - { - "length": 32, - "start": 150 - }, - { - "length": 32, - "start": 242 - }, - { - "length": 32, - "start": 341 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80631cff79cd1461005157806354fd4d501461007a578063c12c21c014610091578063d1660f99146100d0575b600080fd5b61006461005f3660046104da565b6100e5565b60405161007191906105ec565b60405180910390f35b61008361012c81565b604051908152602001610071565b6100b87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610071565b6100e36100de3660046105ff565b61014a565b005b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461013057604051631f51116760e01b815260040160405180910390fd5b6101436001600160a01b038416836101ac565b9392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461019357604051631f51116760e01b815260040160405180910390fd5b6101a76001600160a01b03841683836101f0565b505050565b6060610143838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610242565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101a7908490610324565b6060824710156102a85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084015b60405180910390fd5b600080866001600160a01b031685876040516102c4919061063b565b60006040518083038185875af1925050503d8060008114610301576040519150601f19603f3d011682016040523d82523d6000602084013e610306565b606091505b5091509150610317878383876103f6565b925050505b949350505050565b6000610379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661046f9092919063ffffffff16565b8051909150156101a757808060200190518101906103979190610657565b6101a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161029f565b6060831561046557825160000361045e576001600160a01b0385163b61045e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161029f565b508161031c565b61031c838361047e565b606061031c8484600085610242565b81511561048e5781518083602001fd5b8060405162461bcd60e51b815260040161029f91906105ec565b80356001600160a01b03811681146104bf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156104ed57600080fd5b6104f6836104a8565b9150602083013567ffffffffffffffff8082111561051357600080fd5b818501915085601f83011261052757600080fd5b813581811115610539576105396104c4565b604051601f8201601f19908116603f01168101908382118183101715610561576105616104c4565b8160405282815288602084870101111561057a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156105b757818101518382015260200161059f565b50506000910152565b600081518084526105d881602086016020860161059c565b601f01601f19169290920160200192915050565b60208152600061014360208301846105c0565b60008060006060848603121561061457600080fd5b61061d846104a8565b925061062b602085016104a8565b9150604084013590509250925092565b6000825161064d81846020870161059c565b9190910192915050565b60006020828403121561066957600080fd5b8151801515811461014357600080fdfea2646970667358221220b5524a6a196bd7a4eb92abb0c23cc62168cd0712857c0cbfbb8ded75bd2d6d7a64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x91 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0xD0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x12C DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xB8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x71 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0xDE CALLDATASIZE PUSH1 0x4 PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x14A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x130 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x143 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x1AC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x193 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x1F0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1A7 SWAP1 DUP5 SWAP1 PUSH2 0x324 JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2C4 SWAP2 SWAP1 PUSH2 0x63B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x301 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x306 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x317 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3F6 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x46F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1A7 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x465 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x45E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x29F JUMP JUMPDEST POP DUP2 PUSH2 0x31C JUMP JUMPDEST PUSH2 0x31C DUP4 DUP4 PUSH2 0x47E JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x242 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x48E JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x29F SWAP2 SWAP1 PUSH2 0x5EC JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F6 DUP4 PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x513 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x539 PUSH2 0x4C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x561 JUMPI PUSH2 0x561 PUSH2 0x4C4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x57A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5B7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x59F JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x5D8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x59C JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x143 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x614 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x61D DUP5 PUSH2 0x4A8 JUMP JUMPDEST SWAP3 POP PUSH2 0x62B PUSH1 0x20 DUP6 ADD PUSH2 0x4A8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x64D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x59C JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x143 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 MSTORE 0x4A PUSH11 0x196BD7A4EB92ABB0C23CC6 0x21 PUSH9 0xCD0712857C0CBFBB8D 0xED PUSH22 0xBD2D6D7A64736F6C6343000811003300000000000000 ", - "sourceMap": "935:1480:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2238:175;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1160:38;;1194:4;1160:38;;;;;2222:25:70;;;2210:2;2195:18;1160:38:1;2076:177:70;1091:38:1;;;;;;;;-1:-1:-1;;;;;2422:32:70;;;2404:51;;2392:2;2377:18;1091:38:1;2258:203:70;1811:191:1;;;;;;:::i;:::-;;:::i;:::-;;2238:175;2331:12;1319:10;-1:-1:-1;;;;;1333:13:1;1319:27;;1315:98;;1369:33;;-1:-1:-1;;;1369:33:1;;;;;;;;;;;1315:98;2362:30:::1;-1:-1:-1::0;;;;;2362:24:1;::::1;2387:4:::0;2362:24:::1;:30::i;:::-;2355:37:::0;2238:175;-1:-1:-1;;;2238:175:1:o;1811:191::-;1319:10;-1:-1:-1;;;;;1333:13:1;1319:27;;1315:98;;1369:33;;-1:-1:-1;;;1369:33:1;;;;;;;;;;;1315:98;1945:38:::1;-1:-1:-1::0;;;;;1945:26:1;::::1;1972:2:::0;1976:6;1945:26:::1;:38::i;:::-;1811:191:::0;;;:::o;3466:185:65:-;3541:12;3572:72;3594:6;3602:4;3608:1;3572:72;;;;;;;;;;;;;;;;;:21;:72::i;763:205:62:-;902:58;;;-1:-1:-1;;;;;2991:32:70;;902:58:62;;;2973:51:70;3040:18;;;;3033:34;;;902:58:62;;;;;;;;;;2946:18:70;;;;902:58:62;;;;;;;;-1:-1:-1;;;;;902:58:62;-1:-1:-1;;;902:58:62;;;875:86;;895:5;;875:19;:86::i;4960:446:65:-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:65;;3280:2:70;5149:81:65;;;3262:21:70;3319:2;3299:18;;;3292:30;3358:34;3338:18;;;3331:62;-1:-1:-1;;;3409:18:70;;;3402:36;3455:19;;5149:81:65;;;;;;;;;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:65;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;;;;4960:446;;;;;;;:::o;3747:706:62:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:62;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:62;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:62;;4261:2:70;4351:85:62;;;4243:21:70;4300:2;4280:18;;;4273:30;4339:34;4319:18;;;4312:62;-1:-1:-1;;;4390:18:70;;;4383:40;4440:19;;4351:85:62;4059:406:70;7466:628:65;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:65;;;7908:60;;;;-1:-1:-1;;;7908:60:65;;4672:2:70;7908:60:65;;;4654:21:70;4711:2;4691:18;;;4684:30;4750:31;4730:18;;;4723:59;4799:18;;7908:60:65;4470:353:70;7908:60:65;-1:-1:-1;8003:10:65;7996:17;;7670:418;8044:33;8052:10;8064:12;8044:7;:33::i;3873:223::-;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;8616:540::-;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:65;;;;;;;;:::i;14:173:70:-;82:20;;-1:-1:-1;;;;;131:31:70;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:127::-;253:10;248:3;244:20;241:1;234:31;284:4;281:1;274:15;308:4;305:1;298:15;324:995;401:6;409;462:2;450:9;441:7;437:23;433:32;430:52;;;478:1;475;468:12;430:52;501:29;520:9;501:29;:::i;:::-;491:39;;581:2;570:9;566:18;553:32;604:18;645:2;637:6;634:14;631:34;;;661:1;658;651:12;631:34;699:6;688:9;684:22;674:32;;744:7;737:4;733:2;729:13;725:27;715:55;;766:1;763;756:12;715:55;802:2;789:16;824:2;820;817:10;814:36;;;830:18;;:::i;:::-;905:2;899:9;873:2;959:13;;-1:-1:-1;;955:22:70;;;979:2;951:31;947:40;935:53;;;1003:18;;;1023:22;;;1000:46;997:72;;;1049:18;;:::i;:::-;1089:10;1085:2;1078:22;1124:2;1116:6;1109:18;1164:7;1159:2;1154;1150;1146:11;1142:20;1139:33;1136:53;;;1185:1;1182;1175:12;1136:53;1241:2;1236;1232;1228:11;1223:2;1215:6;1211:15;1198:46;1286:1;1281:2;1276;1268:6;1264:15;1260:24;1253:35;1307:6;1297:16;;;;;;;324:995;;;;;:::o;1324:250::-;1409:1;1419:113;1433:6;1430:1;1427:13;1419:113;;;1509:11;;;1503:18;1490:11;;;1483:39;1455:2;1448:10;1419:113;;;-1:-1:-1;;1566:1:70;1548:16;;1541:27;1324:250::o;1579:270::-;1620:3;1658:5;1652:12;1685:6;1680:3;1673:19;1701:76;1770:6;1763:4;1758:3;1754:14;1747:4;1740:5;1736:16;1701:76;:::i;:::-;1831:2;1810:15;-1:-1:-1;;1806:29:70;1797:39;;;;1838:4;1793:50;;1579:270;-1:-1:-1;;1579:270:70:o;1854:217::-;2001:2;1990:9;1983:21;1964:4;2021:44;2061:2;2050:9;2046:18;2038:6;2021:44;:::i;2466:328::-;2543:6;2551;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:52;;;2628:1;2625;2618:12;2580:52;2651:29;2670:9;2651:29;:::i;:::-;2641:39;;2699:38;2733:2;2722:9;2718:18;2699:38;:::i;:::-;2689:48;;2784:2;2773:9;2769:18;2756:32;2746:42;;2466:328;;;;;:::o;3485:287::-;3614:3;3652:6;3646:13;3668:66;3727:6;3722:3;3715:4;3707:6;3703:17;3668:66;:::i;:::-;3750:16;;;;;3485:287;-1:-1:-1;;3485:287:70:o;3777:277::-;3844:6;3897:2;3885:9;3876:7;3872:23;3868:32;3865:52;;;3913:1;3910;3903:12;3865:52;3945:9;3939:16;3998:5;3991:13;3984:21;3977:5;3974:32;3964:60;;4020:1;4017;4010:12" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "342200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "creditManager()": "infinite", - "execute(address,bytes)": "infinite", - "safeTransfer(address,address,uint256)": "infinite", - "version()": "195" - } - }, - "methodIdentifiers": { - "creditManager()": "c12c21c0", - "execute(address,bytes)": "1cff79cd", - "safeTransfer(address,address,uint256)": "d1660f99", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"safeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotCreditManagerException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-CreditManagerV3\"}]},\"kind\":\"dev\",\"methods\":{\"execute(address,bytes)\":{\"details\":\"Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\",\"params\":{\"data\":\"Data to call the contract with.\",\"destination\":\"Contract address to be called.\"}},\"safeTransfer(address,address,uint256)\":{\"details\":\"Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\",\"params\":{\"amount\":\"Amount to be transferred.\",\"to\":\"Address of the recipient.\",\"token\":\"Token to be transferred from the Credit Account.\"}}},\"stateVariables\":{\"creditManager\":{\"details\":\"Address of the currently connected Credit Manager\"}},\"title\":\"Credit Account\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol\":\"CreditAccount\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0xf28a6b6e4e5da385ddfc95ae6e0719484a14a240687ad7a514435eede83c9efc\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c5a5189a274068c60f5e73fd5f3d32a262042b05c368a8aa140b3913a3104c71\",\"dweb:/ipfs/QmcT2U2H77TvKcbzyHp5XAZXiXrAGK1CbTzWZbPX7nhLC2\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol": { - "IAccountFactory": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "usedAccount", - "type": "address" - } - ], - "name": "returnCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "takeCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "returnCreditAccount(address)": { - "details": "Retrieves the Credit Account from the Credit Manager and adds it to the stock", - "params": { - "usedAccount": "Address of returned credit account" - } - }, - "takeCreditAccount(uint256,uint256)": { - "details": "Provides a new credit account to a Credit Manager" - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "returnCreditAccount(address)": "89b77b3e", - "takeCreditAccount(uint256,uint256)": "21d18456", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"usedAccount\",\"type\":\"address\"}],\"name\":\"returnCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"takeCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"returnCreditAccount(address)\":{\"details\":\"Retrieves the Credit Account from the Credit Manager and adds it to the stock\",\"params\":{\"usedAccount\":\"Address of returned credit account\"}},\"takeCreditAccount(uint256,uint256)\":{\"details\":\"Provides a new credit account to a Credit Manager\"},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":\"IAccountFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0x7ec541ae052e1b6f45932028f4dcef0c05dbdb07f377cf244016b17bf026c092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c812d20108a644e7c069e425659ef400a6e1cddf945f0cca0e3c28140f900353\",\"dweb:/ipfs/QmZ2GKfgTEw8ESBcTcpg19SvxnaqxK5rjEyzBRhJHBENZm\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IAccountFactoryEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - } - ], - "devdoc": { - "events": { - "NewCreditAccount(address)": { - "details": "Emits when a new Credit Account is created" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"NewCreditAccount(address)\":{\"details\":\"Emits when a new Credit Account is created\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":\"IAccountFactoryEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0x7ec541ae052e1b6f45932028f4dcef0c05dbdb07f377cf244016b17bf026c092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c812d20108a644e7c069e425659ef400a6e1cddf945f0cca0e3c28140f900353\",\"dweb:/ipfs/QmZ2GKfgTEw8ESBcTcpg19SvxnaqxK5rjEyzBRhJHBENZm\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol": { - "IPool4626": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "AddCreditManager", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Borrow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "BorrowLimitChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "DepositWithReferral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "ReceiveUncoveredLoss", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "Repay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "SetExpectedLiquidityLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newInterestRateModel", - "type": "address" - } - ], - "name": "SetInterestRateModel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPoolQuotaKeeper", - "type": "address" - } - ], - "name": "SetPoolQuotaKeeper", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "limit", - "type": "uint256" - } - ], - "name": "SetTotalBorrowedLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "SetWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract AddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [ - { - "internalType": "address", - "name": "assetTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "availableLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "borrowRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "calcLinearCumulative_RAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int128", - "name": "_quotaRevenueChange", - "type": "int128" - } - ], - "name": "changeQuotaRevenue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "connectPoolQuotaManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "convertToAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "convertToShares", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "creditManagerBorrowed", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "creditManagerLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditManagers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "depositReferral", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "expectedLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "expectedLiquidityLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "lendCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "maxAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "maxShares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "maxShares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "maxAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poolQuotaKeeper", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewMint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "repayCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "supportsQuotas", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "timestampLU", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "totalManagedAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBorrowed", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBorrowedLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlyingToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "newQuotaRevenue", - "type": "uint128" - } - ], - "name": "updateQuotaRevenue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawFee", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addressProvider()": { - "details": "Address provider" - }, - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "asset()": { - "details": "Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert." - }, - "availableLiquidity()": { - "details": "Available liquidity (pool balance in underlying token)" - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "borrowRate()": { - "details": "Calculates the current borrow rate, RAY format" - }, - "calcLinearCumulative_RAY()": { - "details": "Current interest index, RAY format" - }, - "changeQuotaRevenue(int128)": { - "details": "Updates quota index" - }, - "convertToAssets(uint256)": { - "details": "Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." - }, - "convertToShares(uint256)": { - "details": "Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." - }, - "creditManagerBorrowed(address)": { - "details": "Borrow limit for particular credit manager" - }, - "creditManagerLimit(address)": { - "details": "Borrow limit for particular credit manager" - }, - "creditManagers()": { - "details": "Addresses of all connected credit managers" - }, - "decimals()": { - "details": "Returns the decimals places of the token." - }, - "deposit(uint256,address)": { - "details": "Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "expectedLiquidity()": { - "details": "The same value like in total assets in ERC4626 standrt" - }, - "expectedLiquidityLimit()": { - "details": "Limit for expected liquidity, 2**256-1 if no limit there" - }, - "lendCreditAccount(uint256,address)": { - "details": "Lends pool funds to a Credit Account", - "params": { - "borrowedAmount": "Credit Account's debt principal", - "creditAccount": "Credit Account's address" - } - }, - "maxDeposit(address)": { - "details": "Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert." - }, - "maxMint(address)": { - "details": "Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert." - }, - "maxRedeem(address)": { - "details": "Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert." - }, - "maxWithdraw(address)": { - "details": "Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert." - }, - "mint(uint256,address)": { - "details": "Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "name()": { - "details": "Returns the name of the token." - }, - "poolQuotaKeeper()": { - "details": "PoolQuotaKeeper address" - }, - "previewDeposit(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "previewMint(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting." - }, - "previewRedeem(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming." - }, - "previewWithdraw(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "redeem(uint256,address,address)": { - "details": "Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." - }, - "repayCreditAccount(uint256,uint256,uint256)": { - "details": "Repays the Credit Account's debt", - "params": { - "borrowedAmount": "Amount of principal ro repay", - "loss": "Amount of underlying that the CA wan't able to repay", - "profit": "The treasury profit from repayment" - } - }, - "supportsQuotas()": { - "details": "Whether the pool supports quotas" - }, - "symbol()": { - "details": "Returns the symbol of the token." - }, - "timestampLU()": { - "details": "Timestamp of the pool's last update" - }, - "totalAssets()": { - "details": "Returns the total amount of the underlying asset that is “managed” by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert." - }, - "totalBorrowed()": { - "details": "Total borrowed amount (includes principal only)" - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "underlyingToken()": { - "details": "Address of the underlying" - }, - "version()": { - "details": "Returns contract version" - }, - "withdraw(uint256,address,address)": { - "details": "Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." - }, - "withdrawFee()": { - "details": "Withdrawal fee" - } - }, - "title": "Pool 4626 More: https://dev.gearbox.fi/developers/pool/abstractpoolservice", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addressProvider()": "2954018c", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "asset()": "38d52e0f", - "availableLiquidity()": "74375359", - "balanceOf(address)": "70a08231", - "borrowRate()": "c914b437", - "burn(uint256)": "42966c68", - "calcLinearCumulative_RAY()": "0fce70fb", - "changeQuotaRevenue(int128)": "351f6ca3", - "connectPoolQuotaManager(address)": "02fe51a3", - "convertToAssets(uint256)": "07a2d13a", - "convertToShares(uint256)": "c6e6f592", - "creditManagerBorrowed(address)": "7a99c017", - "creditManagerLimit(address)": "74135a51", - "creditManagers()": "dac54431", - "decimals()": "313ce567", - "deposit(uint256,address)": "6e553f65", - "depositReferral(uint256,address,uint16)": "d5989713", - "expectedLiquidity()": "fe14112d", - "expectedLiquidityLimit()": "ef8d9603", - "lendCreditAccount(uint256,address)": "bf28068b", - "maxDeposit(address)": "402d267d", - "maxMint(address)": "c63d75b6", - "maxRedeem(address)": "d905777e", - "maxWithdraw(address)": "ce96cb77", - "mint(uint256,address)": "94bf804d", - "name()": "06fdde03", - "poolQuotaKeeper()": "be8da14b", - "previewDeposit(uint256)": "ef8b30f7", - "previewMint(uint256)": "b3d7f6b9", - "previewRedeem(uint256)": "4cdad506", - "previewWithdraw(uint256)": "0a28a477", - "redeem(uint256,address,address)": "ba087652", - "repayCreditAccount(uint256,uint256,uint256)": "ca9505e4", - "supportsQuotas()": "9fd8a10c", - "symbol()": "95d89b41", - "timestampLU()": "08182d58", - "totalAssets()": "01e1d114", - "totalBorrowed()": "4c19386c", - "totalBorrowedLimit()": "4f9d2aa4", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "underlyingToken()": "2495a599", - "updateQuotaRevenue(uint128)": "dfd8d233", - "version()": "54fd4d50", - "withdraw(uint256,address,address)": "b460af94", - "withdrawFee()": "e941fa78" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"AddCreditManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"BorrowLimitChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"DepositWithReferral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"ReceiveUncoveredLoss\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"SetExpectedLiquidityLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"SetInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPoolQuotaKeeper\",\"type\":\"address\"}],\"name\":\"SetPoolQuotaKeeper\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SetTotalBorrowedLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"SetWithdrawFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract AddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"availableLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calcLinearCumulative_RAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int128\",\"name\":\"_quotaRevenueChange\",\"type\":\"int128\"}],\"name\":\"changeQuotaRevenue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"connectPoolQuotaManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"creditManagerBorrowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"creditManagerLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManagers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositReferral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedLiquidityLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"lendCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolQuotaKeeper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"repayCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"supportsQuotas\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestampLU\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrowedLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newQuotaRevenue\",\"type\":\"uint128\"}],\"name\":\"updateQuotaRevenue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFee\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addressProvider()\":{\"details\":\"Address provider\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"availableLiquidity()\":{\"details\":\"Available liquidity (pool balance in underlying token)\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowRate()\":{\"details\":\"Calculates the current borrow rate, RAY format\"},\"calcLinearCumulative_RAY()\":{\"details\":\"Current interest index, RAY format\"},\"changeQuotaRevenue(int128)\":{\"details\":\"Updates quota index\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"creditManagerBorrowed(address)\":{\"details\":\"Borrow limit for particular credit manager\"},\"creditManagerLimit(address)\":{\"details\":\"Borrow limit for particular credit manager\"},\"creditManagers()\":{\"details\":\"Addresses of all connected credit managers\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"expectedLiquidity()\":{\"details\":\"The same value like in total assets in ERC4626 standrt\"},\"expectedLiquidityLimit()\":{\"details\":\"Limit for expected liquidity, 2**256-1 if no limit there\"},\"lendCreditAccount(uint256,address)\":{\"details\":\"Lends pool funds to a Credit Account\",\"params\":{\"borrowedAmount\":\"Credit Account's debt principal\",\"creditAccount\":\"Credit Account's address\"}},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"poolQuotaKeeper()\":{\"details\":\"PoolQuotaKeeper address\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"repayCreditAccount(uint256,uint256,uint256)\":{\"details\":\"Repays the Credit Account's debt\",\"params\":{\"borrowedAmount\":\"Amount of principal ro repay\",\"loss\":\"Amount of underlying that the CA wan't able to repay\",\"profit\":\"The treasury profit from repayment\"}},\"supportsQuotas()\":{\"details\":\"Whether the pool supports quotas\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"timestampLU()\":{\"details\":\"Timestamp of the pool's last update\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalBorrowed()\":{\"details\":\"Total borrowed amount (includes principal only)\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"underlyingToken()\":{\"details\":\"Address of the underlying\"},\"version()\":{\"details\":\"Returns contract version\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"withdrawFee()\":{\"details\":\"Withdrawal fee\"}},\"title\":\"Pool 4626 More: https://dev.gearbox.fi/developers/pool/abstractpoolservice\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"repayCreditAccount(uint256,uint256,uint256)\":{\"notice\":\"Assumes that the underlying (including principal + interest + fees) was already transferred\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":\"IPool4626\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":{\"keccak256\":\"0x15c2053e52a08294a944ae110dd1e0a12e19d9d9745737542e6422a5abbebb38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cbe740138c55fbd331a3ded7d2f4013c7afccbb8fb08dc7125bdd8da3257db8\",\"dweb:/ipfs/QmTetdSAkqsx7vv5u6f6ciRDWfHU1hjn9ojK5YJjfey7PX\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "repayCreditAccount(uint256,uint256,uint256)": { - "notice": "Assumes that the underlying (including principal + interest + fees) was already transferred" - } - }, - "version": 1 - } - }, - "IPool4626Events": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "AddCreditManager", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Borrow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "BorrowLimitChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "DepositWithReferral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "ReceiveUncoveredLoss", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "Repay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "SetExpectedLiquidityLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newInterestRateModel", - "type": "address" - } - ], - "name": "SetInterestRateModel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPoolQuotaKeeper", - "type": "address" - } - ], - "name": "SetPoolQuotaKeeper", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "limit", - "type": "uint256" - } - ], - "name": "SetTotalBorrowedLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "SetWithdrawFee", - "type": "event" - } - ], - "devdoc": { - "events": { - "AddCreditManager(address)": { - "details": "Emits on connecting a new Credit Manager" - }, - "Borrow(address,address,uint256)": { - "details": "Emits on a Credit Manager borrowing funds for a Credit Account" - }, - "BorrowLimitChanged(address,uint256)": { - "details": "Emits when a Credit Manager is forbidden to borrow" - }, - "DepositWithReferral(address,address,uint256,uint16)": { - "details": "Emits on new liquidity being added to the pool" - }, - "ReceiveUncoveredLoss(address,uint256)": { - "details": "Emitted when loss is incurred that can't be covered by treasury funds" - }, - "Repay(address,uint256,uint256,uint256)": { - "details": "Emits on repayment of a Credit Account's debt" - }, - "SetExpectedLiquidityLimit(uint256)": { - "details": "Emits when the liquidity limit is changed" - }, - "SetInterestRateModel(address)": { - "details": "Emits on updating the interest rate model" - }, - "SetPoolQuotaKeeper(address)": { - "details": "Emits each time when new Pool Quota Manager updated" - }, - "SetWithdrawFee(uint256)": { - "details": "Emits when the withdrawal fee is changed" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"AddCreditManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"BorrowLimitChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"DepositWithReferral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"ReceiveUncoveredLoss\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"SetExpectedLiquidityLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"SetInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPoolQuotaKeeper\",\"type\":\"address\"}],\"name\":\"SetPoolQuotaKeeper\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SetTotalBorrowedLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"SetWithdrawFee\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AddCreditManager(address)\":{\"details\":\"Emits on connecting a new Credit Manager\"},\"Borrow(address,address,uint256)\":{\"details\":\"Emits on a Credit Manager borrowing funds for a Credit Account\"},\"BorrowLimitChanged(address,uint256)\":{\"details\":\"Emits when a Credit Manager is forbidden to borrow\"},\"DepositWithReferral(address,address,uint256,uint16)\":{\"details\":\"Emits on new liquidity being added to the pool\"},\"ReceiveUncoveredLoss(address,uint256)\":{\"details\":\"Emitted when loss is incurred that can't be covered by treasury funds\"},\"Repay(address,uint256,uint256,uint256)\":{\"details\":\"Emits on repayment of a Credit Account's debt\"},\"SetExpectedLiquidityLimit(uint256)\":{\"details\":\"Emits when the liquidity limit is changed\"},\"SetInterestRateModel(address)\":{\"details\":\"Emits on updating the interest rate model\"},\"SetPoolQuotaKeeper(address)\":{\"details\":\"Emits each time when new Pool Quota Manager updated\"},\"SetWithdrawFee(uint256)\":{\"details\":\"Emits when the withdrawal fee is changed\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":\"IPool4626Events\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":{\"keccak256\":\"0x15c2053e52a08294a944ae110dd1e0a12e19d9d9745737542e6422a5abbebb38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cbe740138c55fbd331a3ded7d2f4013c7afccbb8fb08dc7125bdd8da3257db8\",\"dweb:/ipfs/QmTetdSAkqsx7vv5u6f6ciRDWfHU1hjn9ojK5YJjfey7PX\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol": { - "IWETHGateway": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "depositFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "depositReferral", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "deposit(address,address)": { - "details": "POOL V3:" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "balanceOf(address)": "70a08231", - "deposit(address,address)": "f9609f08", - "depositFor(address,uint256)": "2f4f21e2", - "depositReferral(address,address,uint16)": "cd604a31", - "mint(address,uint256,address)": "0d4d1513", - "redeem(address,uint256,address,address)": "fea53be1", - "withdraw(address,uint256,address,address)": "dfcd412e", - "withdrawTo(address)": "72b0d90c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositReferral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"deposit(address,address)\":{\"details\":\"POOL V3:\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol\":\"IWETHGateway\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x995f818158c4e1aa59528855a9f3c27a055750f454e4719f3ee3189b4546ca7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02adbbe9097cccb4a83f0d321cbe0c699b1d60d6d784d5dcca14d8fee2afc015\",\"dweb:/ipfs/QmTyHJ3D95dyfMJXjDFyBu6TpiAnmpFT9of1oF8MFdLKku\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol": { - "WETHGateway": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addressProvider", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ReceiveIsNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "RegisteredCreditManagerOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "RegisteredPoolOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "WethPoolsOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "depositFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "depositReferral", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "devdoc": { - "errors": { - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor", - "params": { - "addressProvider": "Address Repository for upgradable contract model" - } - } - }, - "title": "WETHGateway", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1657": { - "entryPoint": null, - "id": 1657, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_17205": { - "entryPoint": null, - "id": 17205, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_953": { - "entryPoint": null, - "id": 953, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 370, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60c06040523480156200001157600080fd5b50604051620016c5380380620016c5833981016040819052620000349162000172565b600160005580806001600160a01b0381166200006357604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c8919062000172565b6001600160a01b0390811660805283169150620000fa905057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f919062000172565b6001600160a01b031660a05250620001a4565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b60805160a05161147e620002476000396000818160a5015281816101420152818161027001528181610343015281816103b2015281816104c601528181610649015281816106fc01528181610828015281816108fb01528181610a0901528181610ac701528181610b7a01528181610c9b01528181610d6e01528181610ed501528181610f6f0152610ff8015260008181610e3a0152611092015261147e6000f3fe6080604052600436106100955760003560e01c806372b0d90c1161005957806372b0d90c146101bf578063cd604a31146101df578063dfcd412e146101f2578063f9609f0814610212578063fea53be11461022557600080fd5b80630d4d1513146100ea5780632f4f21e2146101105780633fc8cef31461013057806354fd4d501461017c57806370a082311461019257600080fd5b366100e557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e3576040516377ead08760e11b815260040160405180910390fd5b005b600080fd5b6100fd6100f836600461124f565b610245565b6040519081526020015b60405180910390f35b34801561011c57600080fd5b506100e361012b366004611291565b610558565b34801561013c57600080fd5b506101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610107565b34801561018857600080fd5b506100fd61012c81565b34801561019e57600080fd5b506100fd6101ad3660046112bd565b60016020526000908152604090205481565b3480156101cb57600080fd5b506100e36101da3660046112bd565b6105b1565b6100fd6101ed3660046112e1565b61061e565b3480156101fe57600080fd5b506100fd61020d366004611328565b6107fd565b6100fd61022036600461137b565b610a9c565b34801561023157600080fd5b506100fd610240366004611328565b610c70565b60008361025181610e18565b61026e57604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa91906113b4565b6001600160a01b03161461032157604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015233906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906113d1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505061042e8734610eae565b6040516394bf804d60e01b8152600481018790526001600160a01b0386811660248301528816906394bf804d906044016020604051808303816000875af115801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a191906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906113d1565b61053b9190611400565b9050801561054d5761054d8382610fe2565b505050509392505050565b3361056281611070565b61057f57604051635e35244560e11b815260040160405180910390fd5b6001600160a01b038316600090815260016020526040812080548492906105a7908490611413565b9091555050505050565b6105b96110c3565b6001600160a01b03811660009081526001602081905260409091205490811115610610576001600160a01b038216600090815260016020819052604090912081905561061090839061060b9084611400565b610fe2565b5061061b6001600055565b50565b60008361062a81610e18565b61064757604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906113b4565b6001600160a01b0316146106fa57604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b50505050506107788534610eae565b60405163d598971360e01b81523460048201526001600160a01b03858116602483015261ffff8516604483015286169063d5989713906064016020604051808303816000875af11580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f491906113d1565b95945050505050565b60008461080981610e18565b61082657604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906113b4565b6001600160a01b0316146108d957604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906113d1565b604051632d182be560e21b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063b460af94906064015b6020604051808303816000875af11580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e491906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906113d1565b610a7e9190611400565b90508015610a9057610a908382610fe2565b50505050949350505050565b600082610aa881610e18565b610ac557604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5191906113b4565b6001600160a01b031614610b7857604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b5050505050610bf68434610eae565b604051636e553f6560e01b81523460048201526001600160a01b038481166024830152851690636e553f65906044016020604051808303816000875af1158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6891906113d1565b949350505050565b600084610c7c81610e18565b610c9957604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906113b4565b6001600160a01b031614610d4c57604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906113d1565b604051635d043b2960e11b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063ba087652906064016109a1565b604051635b16ebb760e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb7906024015b602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611426565b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4291906113d1565b1015610fde5760405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611426565b505b5050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b50610fde925050506001600160a01b03831682611121565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401610e67565b60026000540361111a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b804710156111715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611111565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b5050905080610fdc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611111565b6001600160a01b038116811461061b57600080fd5b60008060006060848603121561126457600080fd5b833561126f8161123a565b92506020840135915060408401356112868161123a565b809150509250925092565b600080604083850312156112a457600080fd5b82356112af8161123a565b946020939093013593505050565b6000602082840312156112cf57600080fd5b81356112da8161123a565b9392505050565b6000806000606084860312156112f657600080fd5b83356113018161123a565b925060208401356113118161123a565b9150604084013561ffff8116811461128657600080fd5b6000806000806080858703121561133e57600080fd5b84356113498161123a565b93506020850135925060408501356113608161123a565b915060608501356113708161123a565b939692955090935050565b6000806040838503121561138e57600080fd5b82356113998161123a565b915060208301356113a98161123a565b809150509250929050565b6000602082840312156113c657600080fd5b81516112da8161123a565b6000602082840312156113e357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ea857610ea86113ea565b80820180821115610ea857610ea86113ea565b60006020828403121561143857600080fd5b815180151581146112da57600080fdfea2646970667358221220cb4af6bfdb718634b9264c949899ac22d1c5f59bf3c6f8047430621a5ee8d16664736f6c63430008110033", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16C5 CODESIZE SUB DUP1 PUSH3 0x16C5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC513C9BB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xC8 SWAP2 SWAP1 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 MSTORE DUP4 AND SWAP2 POP PUSH3 0xFA SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C252F91 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x139 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x15F SWAP2 SWAP1 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH3 0x1A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x147E PUSH3 0x247 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0xA5 ADD MSTORE DUP2 DUP2 PUSH2 0x142 ADD MSTORE DUP2 DUP2 PUSH2 0x270 ADD MSTORE DUP2 DUP2 PUSH2 0x343 ADD MSTORE DUP2 DUP2 PUSH2 0x3B2 ADD MSTORE DUP2 DUP2 PUSH2 0x4C6 ADD MSTORE DUP2 DUP2 PUSH2 0x649 ADD MSTORE DUP2 DUP2 PUSH2 0x6FC ADD MSTORE DUP2 DUP2 PUSH2 0x828 ADD MSTORE DUP2 DUP2 PUSH2 0x8FB ADD MSTORE DUP2 DUP2 PUSH2 0xA09 ADD MSTORE DUP2 DUP2 PUSH2 0xAC7 ADD MSTORE DUP2 DUP2 PUSH2 0xB7A ADD MSTORE DUP2 DUP2 PUSH2 0xC9B ADD MSTORE DUP2 DUP2 PUSH2 0xD6E ADD MSTORE DUP2 DUP2 PUSH2 0xED5 ADD MSTORE DUP2 DUP2 PUSH2 0xF6F ADD MSTORE PUSH2 0xFF8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0xE3A ADD MSTORE PUSH2 0x1092 ADD MSTORE PUSH2 0x147E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72B0D90C GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x72B0D90C EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0xCD604A31 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xDFCD412E EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xF9609F08 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xFEA53BE1 EQ PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD4D1513 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2F4F21E2 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x77EAD087 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFD PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x124F JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x558 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x107 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x12C DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x1AD CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x1DA CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH2 0x5B1 JUMP JUMPDEST PUSH2 0xFD PUSH2 0x1ED CALLDATASIZE PUSH1 0x4 PUSH2 0x12E1 JUMP JUMPDEST PUSH2 0x61E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x20D CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0x7FD JUMP JUMPDEST PUSH2 0xFD PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0x137B JUMP JUMPDEST PUSH2 0xA9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0xC70 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x251 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x26E JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FA SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x321 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x41F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x42E DUP8 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x94BF804D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 AND SWAP1 PUSH4 0x94BF804D SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x47D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A1 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x531 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0x53B SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x54D JUMPI PUSH2 0x54D DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x562 DUP2 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x57F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E352445 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5A7 SWAP1 DUP5 SWAP1 PUSH2 0x1413 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5B9 PUSH2 0x10C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 DUP2 GT ISZERO PUSH2 0x610 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x610 SWAP1 DUP4 SWAP1 PUSH2 0x60B SWAP1 DUP5 PUSH2 0x1400 JUMP JUMPDEST PUSH2 0xFE2 JUMP JUMPDEST POP PUSH2 0x61B PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x62A DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x647 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6D3 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x755 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x769 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x778 DUP6 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD5989713 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH2 0xFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xD5989713 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7F4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x809 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x826 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B2 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x942 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x966 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D182BE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xB460AF94 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9E4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA74 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0xA7E SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA90 JUMPI PUSH2 0xA90 DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xAA8 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xAC5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB51 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xB78 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xBF6 DUP5 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6E553F65 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x6E553F65 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC68 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0xC7C DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xC99 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD25 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD4C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDD9 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5D043B29 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xBA087652 SWAP1 PUSH1 0x64 ADD PUSH2 0x9A1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF42 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST LT ISZERO PUSH2 0xFDE JUMPI PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 NOT PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFDC SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1044 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1058 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xFDE SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x111A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11BE JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11C3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xFDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x126F DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1286 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x12AF DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1301 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1311 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x133E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1349 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1360 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1370 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x138E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1399 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x13A9 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x12DA JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0x4A 0xF6 0xBF 0xDB PUSH18 0x8634B9264C949899AC22D1C5F59BF3C6F804 PUSH21 0x30621A5EE8D16664736F6C63430008110033000000 ", - "sourceMap": "1574:4480:6:-:0;;;2789:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:1:57;1821:7;:22;2849:15:6;;-1:-1:-1;;;;;381:18:10;;377:53;;408:22;;-1:-1:-1;;;408:22:10;;;;;;;;;;;377:53;1001:15:9::1;-1:-1:-1::0;;;;;985:53:9::1;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;961:80:9;;::::1;;::::0;2880:29:6;::::1;::::0;-1:-1:-1;2876:64:6::1;::::0;-1:-1:-1;2876:64:6::1;2918:22;;-1:-1:-1::0;;;2918:22:6::1;;;;;;;;;;;2876:64;2973:15;-1:-1:-1::0;;;;;2957:45:6::1;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2950:54:6::1;;::::0;-1:-1:-1;1574:4480:6;;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;:::-;1574:4480:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_1271": { - "entryPoint": null, - "id": 1271, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_checkAllowance_1255": { - "entryPoint": 3758, - "id": 1255, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_nonReentrantAfter_17239": { - "entryPoint": null, - "id": 17239, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_nonReentrantBefore_17231": { - "entryPoint": 4291, - "id": 17231, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_unwrapWETH_1220": { - "entryPoint": 4066, - "id": 1220, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@balanceOf_853": { - "entryPoint": null, - "id": 853, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@depositFor_1163": { - "entryPoint": 1368, - "id": 1163, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@depositReferral_1033": { - "entryPoint": 1566, - "id": 1033, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@deposit_992": { - "entryPoint": 2716, - "id": 992, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@isRegisteredCreditManager_1683": { - "entryPoint": 4208, - "id": 1683, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isRegisteredPool_1670": { - "entryPoint": 3608, - "id": 1670, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@mint_1078": { - "entryPoint": 581, - "id": 1078, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@redeem_1144": { - "entryPoint": 3184, - "id": 1144, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@sendValue_18442": { - "entryPoint": 4385, - "id": 18442, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@version_856": { - "entryPoint": null, - "id": 856, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@weth_847": { - "entryPoint": null, - "id": 847, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@withdrawTo_1196": { - "entryPoint": 1457, - "id": 1196, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@withdraw_1111": { - "entryPoint": 2045, - "id": 1111, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 4797, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 5044, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 4987, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint16": { - "entryPoint": 4833, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_uint256": { - "entryPoint": 4753, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_address": { - "entryPoint": 4687, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_uint256t_addresst_address": { - "entryPoint": 4904, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 5158, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 5073, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address_t_uint16__to_t_uint256_t_address_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 5139, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 5120, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 5098, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 4666, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:7212:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "59:86:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "82:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "108:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "113:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "104:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "117:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "100:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "89:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "89:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "79:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "79:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "72:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "72:50:70" - }, - "nodeType": "YulIf", - "src": "69:70:70" - } - ] - }, - "name": "validator_revert_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "48:5:70", - "type": "" - } - ], - "src": "14:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "254:352:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "300:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "302:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "302:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "275:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "284:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "271:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "271:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "296:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "267:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "267:32:70" - }, - "nodeType": "YulIf", - "src": "264:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "325:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "351:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "338:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "338:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "329:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "395:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "370:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "370:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "370:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "410:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "420:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "410:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "434:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "461:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "472:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "457:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "457:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "444:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "444:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "434:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "485:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "517:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "528:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "513:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "513:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "500:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "500:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "489:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "566:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "541:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "541:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "541:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "583:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "593:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "583:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "204:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "215:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "227:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "235:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "243:6:70", - "type": "" - } - ], - "src": "150:456:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "712:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "722:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "734:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "745:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "730:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "730:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "722:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "764:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "775:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "757:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "757:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "757:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "681:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "692:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "703:4:70", - "type": "" - } - ], - "src": "611:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "880:228:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "926:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "935:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "938:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "928:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "928:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "928:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "901:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "910:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "897:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "897:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "893:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "893:32:70" - }, - "nodeType": "YulIf", - "src": "890:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "951:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "977:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "964:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "964:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "955:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1021:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "996:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "996:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "996:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "1036:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1046:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1036:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1060:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1087:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1098:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1083:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1083:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1070:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1070:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1060:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "838:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "849:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "861:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "869:6:70", - "type": "" - } - ], - "src": "793:315:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1214:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1224:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1236:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1247:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1232:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1232:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1224:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1266:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1281:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1297:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1302:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1293:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1293:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1306:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1289:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1289:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1277:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1277:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1259:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1259:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1259:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1183:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1194:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1205:4:70", - "type": "" - } - ], - "src": "1113:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1391:177:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1437:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1446:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1449:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1439:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1439:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1439:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1412:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1421:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1408:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1408:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1433:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1404:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1404:32:70" - }, - "nodeType": "YulIf", - "src": "1401:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1462:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1488:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1475:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1475:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1466:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1532:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "1507:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "1507:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1507:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "1547:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1557:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1547:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1357:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1368:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1380:6:70", - "type": "" - } - ], - "src": "1321:247:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1676:453:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1722:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1731:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1734:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1724:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1724:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1724:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1697:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1706:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1693:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1693:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1718:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1689:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1689:32:70" - }, - "nodeType": "YulIf", - "src": "1686:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1747:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1773:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1760:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1760:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1751:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1817:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "1792:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "1792:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1792:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "1832:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1842:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1832:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1856:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1888:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1899:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1884:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1884:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1871:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1871:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "1860:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1937:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "1912:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "1912:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1912:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "1954:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1964:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1954:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1980:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2012:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2023:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2008:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2008:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1995:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1995:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "1984:7:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2081:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2090:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2093:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2083:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2083:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2083:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2049:7:70" - }, - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2062:7:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2071:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2058:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2058:20:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2046:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2046:33:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2039:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2039:41:70" - }, - "nodeType": "YulIf", - "src": "2036:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "2106:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2116:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2106:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1626:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1637:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1649:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1657:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1665:6:70", - "type": "" - } - ], - "src": "1573:556:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2255:477:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2302:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2311:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2314:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2304:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2304:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2304:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2276:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2285:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2272:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2272:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2297:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2268:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2268:33:70" - }, - "nodeType": "YulIf", - "src": "2265:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2327:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2353:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2340:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2340:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2331:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2397:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2372:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2372:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2372:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "2412:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2422:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2412:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2436:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2463:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2474:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2459:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2459:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2446:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2446:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2436:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2487:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2519:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2530:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2515:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2515:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2502:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2502:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "2491:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2568:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2543:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2543:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2543:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "2585:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2595:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2585:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2611:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2643:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2654:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2639:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2639:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2626:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2626:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "2615:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2692:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2667:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2667:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2667:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "2709:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2719:7:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "2709:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2197:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2208:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2220:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2228:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2236:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "2244:6:70", - "type": "" - } - ], - "src": "2134:598:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2824:301:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2870:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2879:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2882:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2872:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2872:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2872:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2845:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2854:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2841:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2841:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2866:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2837:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2837:32:70" - }, - "nodeType": "YulIf", - "src": "2834:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2895:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2921:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2908:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2908:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2899:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2965:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2940:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2940:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2940:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "2980:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2990:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2980:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3004:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3036:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3047:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3032:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3032:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3019:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3019:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "3008:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3085:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3060:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3060:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3060:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "3102:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3112:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3102:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2782:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2793:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2805:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2813:6:70", - "type": "" - } - ], - "src": "2737:388:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3211:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3257:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3266:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3269:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3259:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3259:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3259:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3232:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3241:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3228:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3228:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3253:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3224:32:70" - }, - "nodeType": "YulIf", - "src": "3221:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3282:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3301:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3295:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3295:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3286:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3345:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3320:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3320:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3320:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "3360:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3370:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3360:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3177:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3188:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3200:6:70", - "type": "" - } - ], - "src": "3130:251:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3467:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3513:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3522:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3525:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3515:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3515:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3515:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3488:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3497:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3484:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3484:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3509:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3480:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3480:32:70" - }, - "nodeType": "YulIf", - "src": "3477:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "3538:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3554:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3548:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3548:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3538:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3433:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3444:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3456:6:70", - "type": "" - } - ], - "src": "3386:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3704:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3714:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3726:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3737:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3722:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3722:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3714:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3756:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3767:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3749:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3749:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3749:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3794:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3805:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3790:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3790:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3814:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3830:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3835:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3826:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3826:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3839:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3822:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3822:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3810:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3783:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3783:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3783:60:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3665:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3676:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3684:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3695:4:70", - "type": "" - } - ], - "src": "3575:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3886:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3903:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3910:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3915:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3906:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3906:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3896:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3896:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3896:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3943:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3946:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3936:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3936:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3936:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3967:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3970:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3960:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3960:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3960:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "3854:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4035:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4045:17:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4057:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4060:1:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4053:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4053:9:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "4045:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4086:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4088:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4088:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4088:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "4077:4:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4083:1:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4074:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4074:11:70" - }, - "nodeType": "YulIf", - "src": "4071:37:70" - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "4017:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "4020:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "4026:4:70", - "type": "" - } - ], - "src": "3986:128:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4167:77:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4177:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4188:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4191:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4184:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4184:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "4177:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4216:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4218:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4218:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4218:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4208:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "4211:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4205:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4205:10:70" - }, - "nodeType": "YulIf", - "src": "4202:36:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "4150:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "4153:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "4159:3:70", - "type": "" - } - ], - "src": "4119:125:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4404:201:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4414:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4426:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4437:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4422:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4422:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4414:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4456:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4467:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4449:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4449:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4449:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4494:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4505:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4490:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4490:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4514:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4530:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4535:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4526:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4526:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4539:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4522:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4522:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4510:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4510:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4483:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4483:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4483:60:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4563:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4574:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4559:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4559:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4583:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4591:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4579:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4579:19:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4552:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4552:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4552:47:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address_t_uint16__to_t_uint256_t_address_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4357:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4368:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4376:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4384:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4395:4:70", - "type": "" - } - ], - "src": "4249:356:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4767:218:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4777:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4789:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4800:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4785:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4785:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4777:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4819:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4830:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4812:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4812:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4812:25:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4846:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4864:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4869:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4860:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4860:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4873:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4856:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4856:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4850:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4895:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4906:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4891:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4891:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4915:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4923:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4911:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4911:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4884:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4884:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4884:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4947:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4958:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4943:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4943:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4967:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4975:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4963:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4963:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4936:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4936:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4936:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4720:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4731:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4739:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4747:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4758:4:70", - "type": "" - } - ], - "src": "4610:375:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5068:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5114:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5123:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5126:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5116:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5116:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5116:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5089:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5098:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5085:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5085:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5110:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5081:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5081:32:70" - }, - "nodeType": "YulIf", - "src": "5078:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5139:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5158:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5152:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5152:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5143:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5221:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5230:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5233:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5223:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5223:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5223:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5190:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5211:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5204:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5204:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5197:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5197:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5187:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5187:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5180:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5180:40:70" - }, - "nodeType": "YulIf", - "src": "5177:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "5246:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5256:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5246:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5034:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5045:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5057:6:70", - "type": "" - } - ], - "src": "4990:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5401:175:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5411:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5423:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5434:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5419:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5419:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5411:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5446:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5464:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5469:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5460:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5460:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5473:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5456:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5456:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "5450:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5491:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5506:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5514:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5502:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5484:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5484:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5484:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5538:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5549:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5534:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5534:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5558:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5566:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5554:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5527:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5527:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5527:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5362:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5373:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5381:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5392:4:70", - "type": "" - } - ], - "src": "5272:304:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5710:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5720:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5732:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5743:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5728:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5728:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5720:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5762:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5777:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5793:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5798:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5789:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5789:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5802:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5785:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5785:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5773:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5773:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5755:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5755:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5755:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5826:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5837:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5822:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5822:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5842:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5815:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5815:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5815:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5671:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5682:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5690:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5701:4:70", - "type": "" - } - ], - "src": "5581:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6034:181:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6051:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6062:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6044:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6044:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6044:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6085:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6096:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6081:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6081:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6101:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6074:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6074:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6074:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6124:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6135:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6120:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6120:18:70" - }, - { - "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6140:33:70", - "type": "", - "value": "ReentrancyGuard: reentrant call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6113:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6113:61:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6113:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "6183:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6195:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6206:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6191:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6191:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6183:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6011:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6025:4:70", - "type": "" - } - ], - "src": "5860:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6394:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6411:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6422:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6404:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6404:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6404:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6445:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6456:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6441:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6441:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6461:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6434:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6434:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6434:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6484:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6495:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6480:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6480:18:70" - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6500:31:70", - "type": "", - "value": "Address: insufficient balance" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6473:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6473:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6473:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "6541:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6553:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6564:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6549:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6549:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6541:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6371:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6385:4:70", - "type": "" - } - ], - "src": "6220:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6769:14:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6771:10:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6778:3:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "6771:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "6753:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "6761:3:70", - "type": "" - } - ], - "src": "6578:205:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6962:248:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6979:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6990:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6972:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6972:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6972:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7013:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7024:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7009:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7009:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7029:2:70", - "type": "", - "value": "58" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7002:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7002:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7002:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7052:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7063:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7048:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7048:18:70" - }, - { - "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c2072", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7068:34:70", - "type": "", - "value": "Address: unable to send value, r" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7041:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7041:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7041:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7123:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7134:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7119:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7119:18:70" - }, - { - "hexValue": "6563697069656e74206d61792068617665207265766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7139:28:70", - "type": "", - "value": "ecipient may have reverted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7112:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7112:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7112:56:70" - }, - { - "nodeType": "YulAssignment", - "src": "7177:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7189:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7200:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7185:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7185:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7177:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6939:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6953:4:70", - "type": "" - } - ], - "src": "6788:422:70" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_address(value_1)\n value2 := value_1\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_addresst_addresst_uint16(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n if iszero(eq(value_2, and(value_2, 0xffff))) { revert(0, 0) }\n value2 := value_2\n }\n function abi_decode_tuple_t_addresst_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_address(value_1)\n value2 := value_1\n let value_2 := calldataload(add(headStart, 96))\n validator_revert_address(value_2)\n value3 := value_2\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_uint256_t_address_t_uint16__to_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), and(value2, 0xffff))\n }\n function abi_encode_tuple_t_uint256_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n let _1 := sub(shl(160, 1), 1)\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), and(value2, _1))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: insufficient balance\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n { end := pos }\n function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 58)\n mstore(add(headStart, 64), \"Address: unable to send value, r\")\n mstore(add(headStart, 96), \"ecipient may have reverted\")\n tail := add(headStart, 128)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "847": [ - { - "length": 32, - "start": 165 - }, - { - "length": 32, - "start": 322 - }, - { - "length": 32, - "start": 624 - }, - { - "length": 32, - "start": 835 - }, - { - "length": 32, - "start": 946 - }, - { - "length": 32, - "start": 1222 - }, - { - "length": 32, - "start": 1609 - }, - { - "length": 32, - "start": 1788 - }, - { - "length": 32, - "start": 2088 - }, - { - "length": 32, - "start": 2299 - }, - { - "length": 32, - "start": 2569 - }, - { - "length": 32, - "start": 2759 - }, - { - "length": 32, - "start": 2938 - }, - { - "length": 32, - "start": 3227 - }, - { - "length": 32, - "start": 3438 - }, - { - "length": 32, - "start": 3797 - }, - { - "length": 32, - "start": 3951 - }, - { - "length": 32, - "start": 4088 - } - ], - "1638": [ - { - "length": 32, - "start": 3642 - }, - { - "length": 32, - "start": 4242 - } - ] - }, - "linkReferences": {}, - "object": "6080604052600436106100955760003560e01c806372b0d90c1161005957806372b0d90c146101bf578063cd604a31146101df578063dfcd412e146101f2578063f9609f0814610212578063fea53be11461022557600080fd5b80630d4d1513146100ea5780632f4f21e2146101105780633fc8cef31461013057806354fd4d501461017c57806370a082311461019257600080fd5b366100e557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e3576040516377ead08760e11b815260040160405180910390fd5b005b600080fd5b6100fd6100f836600461124f565b610245565b6040519081526020015b60405180910390f35b34801561011c57600080fd5b506100e361012b366004611291565b610558565b34801561013c57600080fd5b506101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610107565b34801561018857600080fd5b506100fd61012c81565b34801561019e57600080fd5b506100fd6101ad3660046112bd565b60016020526000908152604090205481565b3480156101cb57600080fd5b506100e36101da3660046112bd565b6105b1565b6100fd6101ed3660046112e1565b61061e565b3480156101fe57600080fd5b506100fd61020d366004611328565b6107fd565b6100fd61022036600461137b565b610a9c565b34801561023157600080fd5b506100fd610240366004611328565b610c70565b60008361025181610e18565b61026e57604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa91906113b4565b6001600160a01b03161461032157604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015233906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906113d1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505061042e8734610eae565b6040516394bf804d60e01b8152600481018790526001600160a01b0386811660248301528816906394bf804d906044016020604051808303816000875af115801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a191906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906113d1565b61053b9190611400565b9050801561054d5761054d8382610fe2565b505050509392505050565b3361056281611070565b61057f57604051635e35244560e11b815260040160405180910390fd5b6001600160a01b038316600090815260016020526040812080548492906105a7908490611413565b9091555050505050565b6105b96110c3565b6001600160a01b03811660009081526001602081905260409091205490811115610610576001600160a01b038216600090815260016020819052604090912081905561061090839061060b9084611400565b610fe2565b5061061b6001600055565b50565b60008361062a81610e18565b61064757604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906113b4565b6001600160a01b0316146106fa57604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b50505050506107788534610eae565b60405163d598971360e01b81523460048201526001600160a01b03858116602483015261ffff8516604483015286169063d5989713906064016020604051808303816000875af11580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f491906113d1565b95945050505050565b60008461080981610e18565b61082657604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906113b4565b6001600160a01b0316146108d957604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906113d1565b604051632d182be560e21b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063b460af94906064015b6020604051808303816000875af11580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e491906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906113d1565b610a7e9190611400565b90508015610a9057610a908382610fe2565b50505050949350505050565b600082610aa881610e18565b610ac557604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5191906113b4565b6001600160a01b031614610b7857604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b5050505050610bf68434610eae565b604051636e553f6560e01b81523460048201526001600160a01b038481166024830152851690636e553f65906044016020604051808303816000875af1158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6891906113d1565b949350505050565b600084610c7c81610e18565b610c9957604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906113b4565b6001600160a01b031614610d4c57604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906113d1565b604051635d043b2960e11b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063ba087652906064016109a1565b604051635b16ebb760e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb7906024015b602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611426565b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4291906113d1565b1015610fde5760405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611426565b505b5050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b50610fde925050506001600160a01b03831682611121565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401610e67565b60026000540361111a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b804710156111715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611111565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b5050905080610fdc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611111565b6001600160a01b038116811461061b57600080fd5b60008060006060848603121561126457600080fd5b833561126f8161123a565b92506020840135915060408401356112868161123a565b809150509250925092565b600080604083850312156112a457600080fd5b82356112af8161123a565b946020939093013593505050565b6000602082840312156112cf57600080fd5b81356112da8161123a565b9392505050565b6000806000606084860312156112f657600080fd5b83356113018161123a565b925060208401356113118161123a565b9150604084013561ffff8116811461128657600080fd5b6000806000806080858703121561133e57600080fd5b84356113498161123a565b93506020850135925060408501356113608161123a565b915060608501356113708161123a565b939692955090935050565b6000806040838503121561138e57600080fd5b82356113998161123a565b915060208301356113a98161123a565b809150509250929050565b6000602082840312156113c657600080fd5b81516112da8161123a565b6000602082840312156113e357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ea857610ea86113ea565b80820180821115610ea857610ea86113ea565b60006020828403121561143857600080fd5b815180151581146112da57600080fdfea2646970667358221220cb4af6bfdb718634b9264c949899ac22d1c5f59bf3c6f8047430621a5ee8d16664736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72B0D90C GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x72B0D90C EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0xCD604A31 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xDFCD412E EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xF9609F08 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xFEA53BE1 EQ PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD4D1513 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2F4F21E2 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x77EAD087 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFD PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x124F JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x558 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x107 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x12C DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x1AD CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x1DA CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH2 0x5B1 JUMP JUMPDEST PUSH2 0xFD PUSH2 0x1ED CALLDATASIZE PUSH1 0x4 PUSH2 0x12E1 JUMP JUMPDEST PUSH2 0x61E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x20D CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0x7FD JUMP JUMPDEST PUSH2 0xFD PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0x137B JUMP JUMPDEST PUSH2 0xA9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0xC70 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x251 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x26E JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FA SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x321 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x41F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x42E DUP8 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x94BF804D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 AND SWAP1 PUSH4 0x94BF804D SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x47D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A1 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x531 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0x53B SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x54D JUMPI PUSH2 0x54D DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x562 DUP2 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x57F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E352445 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5A7 SWAP1 DUP5 SWAP1 PUSH2 0x1413 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5B9 PUSH2 0x10C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 DUP2 GT ISZERO PUSH2 0x610 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x610 SWAP1 DUP4 SWAP1 PUSH2 0x60B SWAP1 DUP5 PUSH2 0x1400 JUMP JUMPDEST PUSH2 0xFE2 JUMP JUMPDEST POP PUSH2 0x61B PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x62A DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x647 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6D3 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x755 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x769 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x778 DUP6 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD5989713 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH2 0xFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xD5989713 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7F4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x809 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x826 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B2 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x942 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x966 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D182BE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xB460AF94 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9E4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA74 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0xA7E SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA90 JUMPI PUSH2 0xA90 DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xAA8 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xAC5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB51 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xB78 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xBF6 DUP5 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6E553F65 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x6E553F65 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC68 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0xC7C DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xC99 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD25 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD4C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDD9 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5D043B29 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xBA087652 SWAP1 PUSH1 0x64 ADD PUSH2 0x9A1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF42 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST LT ISZERO PUSH2 0xFDE JUMPI PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 NOT PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFDC SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1044 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1058 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xFDE SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x111A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11BE JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11C3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xFDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x126F DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1286 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x12AF DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1301 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1311 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x133E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1349 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1360 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1370 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x138E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1399 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x13A9 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x12DA JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0x4A 0xF6 0xBF 0xDB PUSH18 0x8634B9264C949899AC22D1C5F59BF3C6F804 PUSH21 0x30621A5EE8D16664736F6C63430008110033000000 ", - "sourceMap": "1574:4480:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5967:10;-1:-1:-1;;;;;5989:4:6;5967:27;;5963:70;;6003:30;;-1:-1:-1;;;6003:30:6;;;;;;;;;;;5963:70;1574:4480;;;;;3748:376;;;;;;:::i;:::-;;:::i;:::-;;;757:25:70;;;745:2;730:18;3748:376:6;;;;;;;;4760:146;;;;;;;;;;-1:-1:-1;4760:146:6;;;;;:::i;:::-;;:::i;1730:29::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1277:32:70;;;1259:51;;1247:2;1232:18;1730:29:6;1113:203:70;1864:38:6;;;;;;;;;;;;1898:4;1864:38;;1766:67;;;;;;;;;;-1:-1:-1;1766:67:6;;;;;:::i;:::-;;;;;;;;;;;;;;4912:233;;;;;;;;;;-1:-1:-1;4912:233:6;;;;;:::i;:::-;;:::i;3368:374::-;;;;;;:::i;:::-;;:::i;4130:299::-;;;;;;;;;;-1:-1:-1;4130:299:6;;;;;:::i;:::-;;:::i;3039:323::-;;;;;;:::i;:::-;;:::i;4435:295::-;;;;;;;;;;-1:-1:-1;4435:295:6;;;;;:::i;:::-;;:::i;3748:376::-;3948:14;3881:4;2041:22;2058:4;2041:16;:22::i;:::-;2036:65;;2072:29;;-1:-1:-1;;;2072:29:6;;;;;;;;;;;2036:65;2167:4;-1:-1:-1;;;;;2127:44:6;2140:4;-1:-1:-1;;;;;2127:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2127:44:6;;2123:81;;2180:24;;-1:-1:-1;;;2180:24:6;;;;;;;;;;;2123:81;2439:37:::1;::::0;-1:-1:-1;;;2439:37:6;;2470:4:::1;2439:37;::::0;::::1;1259:51:70::0;3919:10:6::1;::::0;2415:21:::1;::::0;-1:-1:-1;;;;;2446:4:6::1;2439:22;::::0;::::1;::::0;1232:18:70;;2439:37:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2415:61;;3984:4:::2;-1:-1:-1::0;;;;;3978:19:6::2;;4005:9;3978:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;4028:32;4044:4;4050:9;4028:15;:32::i;:::-;4079:38;::::0;-1:-1:-1;;;4079:38:6;;::::2;::::0;::::2;3749:25:70::0;;;-1:-1:-1;;;;;3810:32:70;;;3790:18;;;3783:60;4079:20:6;::::2;::::0;::::2;::::0;3722:18:70;;4079:38:6::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2514:37:::1;::::0;-1:-1:-1;;;2514:37:6;;2545:4:::1;2514:37;::::0;::::1;1259:51:70::0;4070:47:6;;-1:-1:-1;2499:12:6::1;::::0;2554:13;;-1:-1:-1;;;;;2521:4:6::1;2514:22;::::0;::::1;::::0;1232:18:70;;2514:37:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;2499:68:::0;-1:-1:-1;2582:8:6;;2578:60:::1;;2606:21;2618:2;2622:4;2606:11;:21::i;:::-;2405:239;;2226:1;3748:376:::0;;;;;;:::o;4760:146::-;4854:10;1426:31:9;1452:4;1426:25;:31::i;:::-;1421:83;;1466:38;;-1:-1:-1;;;1466:38:9;;;;;;;;;;;1421:83;-1:-1:-1;;;;;4876:13:6;::::1;;::::0;;;:9:::1;:13;::::0;;;;:23;;4893:6;;4876:13;:23:::1;::::0;4893:6;;4876:23:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;4760:146:6:o;4912:233::-;2261:21:57;:19;:21::i;:::-;-1:-1:-1;;;;;5006:16:6;::::1;4988:15;5006:16:::0;;;:9:::1;:16;::::0;;;;;;;;;5036:11;::::1;5032:107;;;-1:-1:-1::0;;;;;5063:16:6;::::1;;::::0;;;5082:1:::1;5063:16;::::0;;;;;;;:20;;;5097:31:::1;::::0;5073:5;;5116:11:::1;::::0;:7;:11:::1;:::i;:::-;5097;:31::i;:::-;4978:167;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;4912:233:6;:::o;3368:374::-;3540:14;3517:4;2041:22;2058:4;2041:16;:22::i;:::-;2036:65;;2072:29;;-1:-1:-1;;;2072:29:6;;;;;;;;;;;2036:65;2167:4;-1:-1:-1;;;;;2127:44:6;2140:4;-1:-1:-1;;;;;2127:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2127:44:6;;2123:81;;2180:24;;-1:-1:-1;;;2180:24:6;;;;;;;;;;;2123:81;3576:4:::1;-1:-1:-1::0;;;;;3570:19:6::1;;3597:9;3570:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;3620:32;3636:4;3642:9;3620:15;:32::i;:::-;3669:66;::::0;-1:-1:-1;;;3669:66:6;;3701:9:::1;3669:66;::::0;::::1;4449:25:70::0;-1:-1:-1;;;;;4510:32:70;;;4490:18;;;4483:60;4591:6;4579:19;;4559:18;;;4552:47;3669:31:6;::::1;::::0;::::1;::::0;4422:18:70;;3669:66:6::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3662:73:::0;3368:374;-1:-1:-1;;;;;3368:374:6:o;4130:299::-;4331:14;4266:4;2041:22;2058:4;2041:16;:22::i;:::-;2036:65;;2072:29;;-1:-1:-1;;;2072:29:6;;;;;;;;;;;2036:65;2167:4;-1:-1:-1;;;;;2127:44:6;2140:4;-1:-1:-1;;;;;2127:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2127:44:6;;2123:81;;2180:24;;-1:-1:-1;;;2180:24:6;;;;;;;;;;;2123:81;2439:37:::1;::::0;-1:-1:-1;;;2439:37:6;;2470:4:::1;2439:37;::::0;::::1;1259:51:70::0;4304:8:6;;2415:21:::1;::::0;-1:-1:-1;;;;;2446:4:6::1;2439:22;::::0;::::1;::::0;1232:18:70;;2439:37:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4368:54:::2;::::0;-1:-1:-1;;;4368:54:6;;::::2;::::0;::::2;4812:25:70::0;;;4409:4:6::2;4891:18:70::0;;;4884:43;-1:-1:-1;;;;;4963:15:70;;;4943:18;;;4936:43;2415:61:6;;-1:-1:-1;4368:24:6;;::::2;::::0;::::2;::::0;4785:18:70;;4368:54:6::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2514:37:::1;::::0;-1:-1:-1;;;2514:37:6;;2545:4:::1;2514:37;::::0;::::1;1259:51:70::0;4361:61:6;;-1:-1:-1;2499:12:6::1;::::0;2554:13;;-1:-1:-1;;;;;2521:4:6::1;2514:22;::::0;::::1;::::0;1232:18:70;;2514:37:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;2499:68:::0;-1:-1:-1;2582:8:6;;2578:60:::1;;2606:21;2618:2;2622:4;2606:11;:21::i;:::-;2405:239;;2226:1;4130:299:::0;;;;;;;:::o;3039:323::-;3182:14;3159:4;2041:22;2058:4;2041:16;:22::i;:::-;2036:65;;2072:29;;-1:-1:-1;;;2072:29:6;;;;;;;;;;;2036:65;2167:4;-1:-1:-1;;;;;2127:44:6;2140:4;-1:-1:-1;;;;;2127:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2127:44:6;;2123:81;;2180:24;;-1:-1:-1;;;2180:24:6;;;;;;;;;;;2123:81;3218:4:::1;-1:-1:-1::0;;;;;3212:19:6::1;;3239:9;3212:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;3262:32;3278:4;3284:9;3262:15;:32::i;:::-;3311:44;::::0;-1:-1:-1;;;3311:44:6;;3335:9:::1;3311:44;::::0;::::1;3749:25:70::0;-1:-1:-1;;;;;3810:32:70;;;3790:18;;;3783:60;3311:23:6;::::1;::::0;::::1;::::0;3722:18:70;;3311:44:6::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3304:51:::0;3039:323;-1:-1:-1;;;;3039:323:6:o;4435:295::-;4634:14;4569:4;2041:22;2058:4;2041:16;:22::i;:::-;2036:65;;2072:29;;-1:-1:-1;;;2072:29:6;;;;;;;;;;;2036:65;2167:4;-1:-1:-1;;;;;2127:44:6;2140:4;-1:-1:-1;;;;;2127:34:6;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2127:44:6;;2123:81;;2180:24;;-1:-1:-1;;;2180:24:6;;;;;;;;;;;2123:81;2439:37:::1;::::0;-1:-1:-1;;;2439:37:6;;2470:4:::1;2439:37;::::0;::::1;1259:51:70::0;4607:8:6;;2415:21:::1;::::0;-1:-1:-1;;;;;2446:4:6::1;2439:22;::::0;::::1;::::0;1232:18:70;;2439:37:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4671:52:::2;::::0;-1:-1:-1;;;4671:52:6;;::::2;::::0;::::2;4812:25:70::0;;;4710:4:6::2;4891:18:70::0;;;4884:43;-1:-1:-1;;;;;4963:15:70;;;4943:18;;;4936:43;2415:61:6;;-1:-1:-1;4671:22:6;;::::2;::::0;::::2;::::0;4785:18:70;;4671:52:6::2;4610:375:70::0;1054:111:9;1141:17;;-1:-1:-1;;;1141:17:9;;-1:-1:-1;;;;;1277:32:70;;;1141:17:9;;;1259:51:70;1118:4:9;;1141:3;:10;;;;;;1232:18:70;;1141:17:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1134:24;1054:111;-1:-1:-1;;1054:111:9:o;5582:217:6:-;5663:46;;-1:-1:-1;;;5663:46:6;;5694:4;5663:46;;;5484:34:70;-1:-1:-1;;;;;5554:15:70;;;5534:18;;;5527:43;5712:6:6;;5670:4;5663:22;;;;;;5419:18:70;;5663:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;5659:134;;;5734:48;;-1:-1:-1;;;5734:48:6;;-1:-1:-1;;;;;5773:32:70;;;5734:48:6;;;5755:51:70;-1:-1:-1;;5822:18:70;;;5815:34;5741:4:6;5734:20;;;;5728:18:70;;5734:48:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5659:134;5582:217;;:::o;5202:168::-;5270:28;;-1:-1:-1;;;5270:28:6;;;;;757:25:70;;;5276:4:6;-1:-1:-1;;;;;5270:20:6;;;;730:18:70;;5270:28:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5321:29:6;;-1:-1:-1;;;;;;;;5321:21:6;;5343:6;5321:21;:29::i;1171:129:9:-;1267:26;;-1:-1:-1;;;1267:26:9;;-1:-1:-1;;;;;1277:32:70;;;1267:26:9;;;1259:51:70;1244:4:9;;1267:3;:19;;;;;;1232:18:70;;1267:26:9;1113:203:70;2336:287:57;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:57;;6062:2:70;2460:63:57;;;6044:21:70;6101:2;6081:18;;;6074:30;6140:33;6120:18;;;6113:61;6191:18;;2460:63:57;;;;;;;;;1759:1;2598:7;:18;2336:287::o;2412:312:65:-;2526:6;2501:21;:31;;2493:73;;;;-1:-1:-1;;;2493:73:65;;6422:2:70;2493:73:65;;;6404:21:70;6461:2;6441:18;;;6434:30;6500:31;6480:18;;;6473:59;6549:18;;2493:73:65;6220:353:70;2493:73:65;2578:12;2596:9;-1:-1:-1;;;;;2596:14:65;2618:6;2596:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2577:52;;;2647:7;2639:78;;;;-1:-1:-1;;;2639:78:65;;6990:2:70;2639:78:65;;;6972:21:70;7029:2;7009:18;;;7002:30;7068:34;7048:18;;;7041:62;7139:28;7119:18;;;7112:56;7185:19;;2639:78:65;6788:422:70;14:131;-1:-1:-1;;;;;89:31:70;;79:42;;69:70;;135:1;132;125:12;150:456;227:6;235;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;472:2:70;457:18;;444:32;;-1:-1:-1;528:2:70;513:18;;500:32;541:33;500:32;541:33;:::i;:::-;593:7;583:17;;;150:456;;;;;:::o;793:315::-;861:6;869;922:2;910:9;901:7;897:23;893:32;890:52;;;938:1;935;928:12;890:52;977:9;964:23;996:31;1021:5;996:31;:::i;:::-;1046:5;1098:2;1083:18;;;;1070:32;;-1:-1:-1;;;793:315:70:o;1321:247::-;1380:6;1433:2;1421:9;1412:7;1408:23;1404:32;1401:52;;;1449:1;1446;1439:12;1401:52;1488:9;1475:23;1507:31;1532:5;1507:31;:::i;:::-;1557:5;1321:247;-1:-1:-1;;;1321:247:70:o;1573:556::-;1649:6;1657;1665;1718:2;1706:9;1697:7;1693:23;1689:32;1686:52;;;1734:1;1731;1724:12;1686:52;1773:9;1760:23;1792:31;1817:5;1792:31;:::i;:::-;1842:5;-1:-1:-1;1899:2:70;1884:18;;1871:32;1912:33;1871:32;1912:33;:::i;:::-;1964:7;-1:-1:-1;2023:2:70;2008:18;;1995:32;2071:6;2058:20;;2046:33;;2036:61;;2093:1;2090;2083:12;2134:598;2220:6;2228;2236;2244;2297:3;2285:9;2276:7;2272:23;2268:33;2265:53;;;2314:1;2311;2304:12;2265:53;2353:9;2340:23;2372:31;2397:5;2372:31;:::i;:::-;2422:5;-1:-1:-1;2474:2:70;2459:18;;2446:32;;-1:-1:-1;2530:2:70;2515:18;;2502:32;2543:33;2502:32;2543:33;:::i;:::-;2595:7;-1:-1:-1;2654:2:70;2639:18;;2626:32;2667:33;2626:32;2667:33;:::i;:::-;2134:598;;;;-1:-1:-1;2134:598:70;;-1:-1:-1;;2134:598:70:o;2737:388::-;2805:6;2813;2866:2;2854:9;2845:7;2841:23;2837:32;2834:52;;;2882:1;2879;2872:12;2834:52;2921:9;2908:23;2940:31;2965:5;2940:31;:::i;:::-;2990:5;-1:-1:-1;3047:2:70;3032:18;;3019:32;3060:33;3019:32;3060:33;:::i;:::-;3112:7;3102:17;;;2737:388;;;;;:::o;3130:251::-;3200:6;3253:2;3241:9;3232:7;3228:23;3224:32;3221:52;;;3269:1;3266;3259:12;3221:52;3301:9;3295:16;3320:31;3345:5;3320:31;:::i;3386:184::-;3456:6;3509:2;3497:9;3488:7;3484:23;3480:32;3477:52;;;3525:1;3522;3515:12;3477:52;-1:-1:-1;3548:16:70;;3386:184;-1:-1:-1;3386:184:70:o;3854:127::-;3915:10;3910:3;3906:20;3903:1;3896:31;3946:4;3943:1;3936:15;3970:4;3967:1;3960:15;3986:128;4053:9;;;4074:11;;;4071:37;;;4088:18;;:::i;4119:125::-;4184:9;;;4205:10;;;4202:36;;;4218:18;;:::i;4990:277::-;5057:6;5110:2;5098:9;5089:7;5085:23;5081:32;5078:52;;;5126:1;5123;5116:12;5078:52;5158:9;5152:16;5211:5;5204:13;5197:21;5190:5;5187:32;5177:60;;5233:1;5230;5223:12" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1049200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "balanceOf(address)": "2591", - "deposit(address,address)": "infinite", - "depositFor(address,uint256)": "infinite", - "depositReferral(address,address,uint16)": "infinite", - "mint(address,uint256,address)": "infinite", - "redeem(address,uint256,address,address)": "infinite", - "version()": "251", - "weth()": "infinite", - "withdraw(address,uint256,address,address)": "infinite", - "withdrawTo(address)": "infinite" - }, - "internal": { - "_checkAllowance(address,uint256)": "infinite", - "_unwrapWETH(address,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "balanceOf(address)": "70a08231", - "deposit(address,address)": "f9609f08", - "depositFor(address,uint256)": "2f4f21e2", - "depositReferral(address,address,uint16)": "cd604a31", - "mint(address,uint256,address)": "0d4d1513", - "redeem(address,uint256,address,address)": "fea53be1", - "version()": "54fd4d50", - "weth()": "3fc8cef3", - "withdraw(address,uint256,address,address)": "dfcd412e", - "withdrawTo(address)": "72b0d90c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ReceiveIsNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegisteredCreditManagerOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegisteredPoolOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WethPoolsOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositReferral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdrawTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"addressProvider\":\"Address Repository for upgradable contract model\"}}},\"title\":\"WETHGateway\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(address,address)\":{\"notice\":\"FOR POOLS V3\"}},\"notice\":\"Used for converting ETH <> WETH\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol\":\"WETHGateway\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":{\"keccak256\":\"0x15c2053e52a08294a944ae110dd1e0a12e19d9d9745737542e6422a5abbebb38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cbe740138c55fbd331a3ded7d2f4013c7afccbb8fb08dc7125bdd8da3257db8\",\"dweb:/ipfs/QmTetdSAkqsx7vv5u6f6ciRDWfHU1hjn9ojK5YJjfey7PX\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x995f818158c4e1aa59528855a9f3c27a055750f454e4719f3ee3189b4546ca7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02adbbe9097cccb4a83f0d321cbe0c699b1d60d6d784d5dcca14d8fee2afc015\",\"dweb:/ipfs/QmTyHJ3D95dyfMJXjDFyBu6TpiAnmpFT9of1oF8MFdLKku\"]},\"/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol\":{\"keccak256\":\"0x9d500b214e988952c4eaf05eec8170e5cd1c4dd93f104d0be7aa9404fb76c5b2\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://a618da1ff8a67718e0fdb2020873cfb9a18aa17086b15bb7ed7f5f5bb8d4b0cb\",\"dweb:/ipfs/QmZ5fpcj5fCrPuHcfHcdfq58jDjs3g4wmodKdVLUifPNH7\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":{\"keccak256\":\"0xdecb13fa2b9269e64c184276cc62b7c9ecde2bf9427402b6534690572fd2d821\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff9189896a9447a469ad1d12d6fa2694aa8e0ca2a4e858f028752ba57787722a\",\"dweb:/ipfs/QmTy3ADxN8CA4QHVkHe7R24UpHaHmvZW5KQGZb7grBCCGJ\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17197, - "contract": "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol:WETHGateway", - "label": "_status", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 853, - "contract": "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol:WETHGateway", - "label": "balanceOf", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "deposit(address,address)": { - "notice": "FOR POOLS V3" - } - }, - "notice": "Used for converting ETH <> WETH", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol": { - "GenesisFactory": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "wethToken", - "type": "address" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acl", - "outputs": [ - { - "internalType": "contract ACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "internalType": "struct PriceFeedConfig[]", - "name": "priceFeeds", - "type": "tuple[]" - } - ], - "name": "addPriceFeeds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract AddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimACLOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimAddressProviderOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceOracle", - "outputs": [ - { - "internalType": "contract PriceOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1502": { - "entryPoint": null, - "id": 1502, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_16572": { - "entryPoint": null, - "id": 16572, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 1844, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 2036, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address_fromMemory": { - "entryPoint": 2065, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__to_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 2121, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1646:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:70" - }, - "nodeType": "YulIf", - "src": "115:70:70" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:70", - "type": "" - } - ], - "src": "14:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "294:195:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "340:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "352:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "342:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "342:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "315:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "324:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "311:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "311:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "336:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "307:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "307:32:70" - }, - "nodeType": "YulIf", - "src": "304:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "365:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "405:9:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "375:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "375:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "365:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "424:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "434:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "434:49:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "424:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "252:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "263:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "275:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "283:6:70", - "type": "" - } - ], - "src": "196:293:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "595:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "605:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "617:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "628:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "613:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "613:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "605:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "647:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "662:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "678:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "683:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "674:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "674:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "687:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "670:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "670:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "658:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "658:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "640:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "640:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "640:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "564:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "575:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "586:4:70", - "type": "" - } - ], - "src": "494:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "949:695:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "959:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "969:2:70", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "963:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "980:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "998:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1009:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "994:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "994:18:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "984:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1021:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1039:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1035:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1035:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1031:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1031:19:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1025:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1066:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1081:6:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1089:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1077:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1077:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1059:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1059:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1059:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1102:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1112:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1106:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1134:9:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1145:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1130:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1130:18:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1150:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1123:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1123:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1123:30:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1162:17:70", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1173:6:70" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1166:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1188:27:70", - "value": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1208:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1202:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1202:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1192:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1231:6:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1239:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1224:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1224:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1224:22:70" - }, - { - "nodeType": "YulAssignment", - "src": "1255:25:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1266:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1277:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1262:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1262:18:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1255:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1289:29:70", - "value": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1307:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1315:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1303:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1303:15:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1293:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1327:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1336:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1331:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1395:223:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1409:23:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1425:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1419:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1419:13:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1413:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1452:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1467:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1461:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1461:9:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1472:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1457:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1457:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1445:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1445:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1445:31:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1500:3:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1505:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1496:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1496:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1524:2:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1528:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1520:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1520:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1514:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1514:18:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1534:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1510:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1510:27:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1489:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1489:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1489:49:70" - }, - { - "nodeType": "YulAssignment", - "src": "1551:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1562:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1567:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1558:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1558:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1551:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1583:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1597:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1605:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1593:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1593:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1583:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1357:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1360:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1354:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1354:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1368:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1370:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1379:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1382:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1375:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1370:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1350:3:70", - "statements": [] - }, - "src": "1346:272:70" - }, - { - "nodeType": "YulAssignment", - "src": "1627:11:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1635:3:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1627:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__to_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "910:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "921:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "929:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "940:4:70", - "type": "" - } - ], - "src": "702:942:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__to_t_address_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n let _1 := 64\n let tail_1 := add(headStart, _1)\n let _2 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _2))\n let _3 := 32\n mstore(add(headStart, _3), _1)\n let pos := tail_1\n let length := mload(value1)\n mstore(tail_1, length)\n pos := add(headStart, 96)\n let srcPtr := add(value1, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _4 := mload(srcPtr)\n mstore(pos, and(mload(_4), _2))\n mstore(add(pos, _3), and(mload(add(_4, _3)), _2))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _3)\n }\n tail := pos\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b506040516200e3293803806200e329833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6109ea8062000f4083390190565b610728806200192a83390190565b610bd2806200205283390190565b61443b8062002c2483390190565b6116b2806200705f83390190565b612349806200871183390190565b6116c5806200aa5a83390190565b61220a806200c11f83390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61067e80620008c26000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100f7578063abd45ac614610108578063de28735914610110578063f2fde38b14610123578063f9d68c811461013657600080fd5b80632630c12f146100985780632954018c146100c7578063715018a6146100da5780638874ff1f146100e4575b600080fd5b6003546100ab906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546100ab906001600160a01b031681565b6100e261013e565b005b6100e26100f236600461050d565b610152565b6000546001600160a01b03166100ab565b6100e261028f565b6002546100ab906001600160a01b031681565b6100e26101313660046105e9565b610301565b6100e261037f565b6101466103d7565b6101506000610431565b565b61015a6103d7565b60005b815181101561022e5760035482516001600160a01b039091169063e8a97a3e9084908490811061018f5761018f61060b565b6020026020010151600001518484815181106101ad576101ad61060b565b6020026020010151602001516040518363ffffffff1660e01b81526004016101eb9291906001600160a01b0392831681529116602082015260400190565b600060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050508061022790610621565b905061015d565b5060025460405163f2fde38b60e01b81523360048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b5050505050565b6102976103d7565b600260009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50505050565b6103096103d7565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61037c81610431565b50565b6103876103d7565b600160009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b6000546001600160a01b031633146101505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156104ba576104ba610481565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156104e9576104e9610481565b604052919050565b80356001600160a01b038116811461050857600080fd5b919050565b6000602080838503121561052057600080fd5b823567ffffffffffffffff8082111561053857600080fd5b818501915085601f83011261054c57600080fd5b81358181111561055e5761055e610481565b61056c848260051b016104c0565b818152848101925060069190911b83018401908782111561058c57600080fd5b928401925b818410156105de57604084890312156105aa5760008081fd5b6105b2610497565b6105bb856104f1565b81526105c88686016104f1565b8187015283526040939093019291840191610591565b979650505050505050565b6000602082840312156105fb57600080fd5b610604826104f1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161064157634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220b4a1c9a880a352408284487897289c1c30ce6b261117cf6898fd0cc90d1aeda164736f6c63430008110033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61092c806100be6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377532ed9116100f9578063bcaead9811610097578063ce3c4ae411610071578063ce3c4ae414610320578063e30c397814610333578063f2fde38b14610346578063fca513a81461035957600080fd5b8063bcaead98146102f2578063c5120b3914610305578063c513c9bb1461031857600080fd5b80638da5cb5b116100d35780638da5cb5b146102be5780639068a868146102cf578063addc1a76146102d7578063affd9243146102ea57600080fd5b806377532ed9146102905780637b6757ff1461029857806386e09c08146102ab57600080fd5b80634c252f911161016657806354fd4d501161014057806354fd4d5014610236578063699f200f1461024c578063715018a61461027557806376aad6051461027d57600080fd5b80634c252f91146102135780634e71e0c81461021b578063530e784f1461022357600080fd5b8063060678c2146101ae57806308737695146101d35780631ed65110146101db57806321da5837146101f057806326c74fc31461020357806344b885631461020b575b600080fd5b6101b6610361565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b6610383565b6101ee6101e936600461085f565b610394565b005b6101ee6101fe36600461085f565b6103bd565b6101b66103de565b6101b66103fd565b6101b661041c565b6101ee610434565b6101ee61023136600461085f565b6104c9565b61023e600281565b6040519081526020016101ca565b6101b661025a36600461088f565b6002602052600090815260409020546001600160a01b031681565b6101ee6104ea565b6101ee61028b36600461085f565b6104fe565b6101b6610516565b6101ee6102a636600461085f565b610530565b6101ee6102b936600461085f565b610556565b6000546001600160a01b03166101b6565b6101b6610575565b6101ee6102e536600461085f565b610592565b6101b66105b6565b6101ee61030036600461085f565b6105ce565b6101ee61031336600461085f565b6105ed565b6101b6610611565b6101ee61032e36600461085f565b610631565b6001546101b6906001600160a01b031681565b6101ee61035436600461085f565b610658565b6101b66106e9565b600061037e6e2220aa20afa1a7a6a82922a9a9a7a960891b6106ff565b905090565b600061037e621050d360ea1b6106ff565b61039c61075c565b6103ba701514915054d5549657d0d3d395149050d5607a1b826107b6565b50565b6103c561075c565b6103ba6b574554485f4741544557415960a01b826107b6565b600061037e701514915054d5549657d0d3d395149050d5607a1b6106ff565b600061037e704c45564552414745445f414354494f4e5360781b6106ff565b600061037e692ba2aa242faa27a5a2a760b11b6106ff565b6001546001600160a01b031633146104a25760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b6001546104b7906001600160a01b031661080f565b600180546001600160a01b0319169055565b6104d161075c565b6103ba6b50524943455f4f5241434c4560a01b826107b6565b6104f261075c565b6104fc600061080f565b565b61050661075c565b6103ba621050d360ea1b826107b6565b600061037e6b574554485f4741544557415960a01b6106ff565b61053861075c565b6103ba704c45564552414745445f414354494f4e5360781b826107b6565b61055e61075c565b6103ba692ba2aa242faa27a5a2a760b11b826107b6565b600061037e6e4143434f554e545f464143544f525960881b6106ff565b61059a61075c565b6103ba6e4143434f554e545f464143544f525960881b826107b6565b600061037e6923a2a0a92faa27a5a2a760b11b6106ff565b6105d661075c565b6103ba6923a2a0a92faa27a5a2a760b11b826107b6565b6105f561075c565b6103ba6e2220aa20afa1a7a6a82922a9a9a7a960891b826107b6565b600061037e7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b6106ff565b61063961075c565b6103ba7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b826107b6565b61066061075c565b6001600160a01b0381166106c75760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610499565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061037e6b50524943455f4f5241434c4560a01b5b6000818152600260209081526040808320548151808301909252600382526241503160e81b928201929092526001600160a01b0390911690816107555760405162461bcd60e51b815260040161049991906108a8565b5092915050565b6000546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087157600080fd5b81356001600160a01b038116811461088857600080fd5b9392505050565b6000602082840312156108a157600080fd5b5035919050565b600060208083528351808285015260005b818110156108d5578581018301518582016040015282016108b9565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200dac7f71485a8db5aee1d67bb3ff3d39172b102aba5b8428150c0d728e808ea864736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106aa8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637328181911610097578063ba306df111610066578063ba306df114610229578063d4eb5db01461023c578063e30c397814610268578063f2fde38b1461027b57600080fd5b806373281819146101bb578063819ad68e146101de5780638da5cb5b146101f1578063adce758d1461021657600080fd5b80634e71e0c8116100d35780634e71e0c81461017357806354fd4d501461017b5780635f259aba14610191578063715018a6146101b357600080fd5b806335914829146100fa5780633a41ec64146101325780634910832f1461015e575b600080fd5b61011d610108366004610644565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61011d610140366004610644565b6001600160a01b031660009081526002602052604090205460ff1690565b61017161016c366004610644565b61028e565b005b6101716102e2565b610183600181565b604051908152602001610129565b61011d61019f366004610644565b6000546001600160a01b0391821691161490565b610171610377565b61011d6101c9366004610644565b60036020526000908152604090205460ff1681565b6101716101ec366004610644565b61038b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b610171610224366004610644565b6103df565b610171610237366004610644565b610474565b61011d61024a366004610644565b6001600160a01b031660009081526003602052604090205460ff1690565b6001546101fe906001600160a01b031681565b610171610289366004610644565b610509565b61029661059a565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b6001546001600160a01b031633146103505760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610365906001600160a01b03166105f4565b600180546001600160a01b0319169055565b61037f61059a565b61038960006105f4565b565b61039361059a565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b6103e761059a565b6001600160a01b03811660009081526003602052604090205460ff1661042b576040516357f592b760e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b61047c61059a565b6001600160a01b03811660009081526002602052604090205460ff166104c05760405163e116318960e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b61051161059a565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610347565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561065657600080fd5b81356001600160a01b038116811461066d57600080fd5b939250505056fea2646970667358221220835bbaf0cbddf40235bbad8ed20125110b9a758c1c68221f654a0fb5a5226bf064736f6c6343000811003360a060405234801561001057600080fd5b50604051610bd2380380610bd283398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610a9461013e600039600081816101d50152818161027f01528181610390015281816104ad01526106810152610a946000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac68601461020a578063c29277cd14610212578063d914cd4b1461021a578063e26b2f631461022d57600080fd5b80638456cb59146101c057806394144856146101c8578063a50cf2c8146101d0578063ac4afa38146101f757600080fd5b80635b16ebb7116100d35780635b16ebb71461014a5780635c975abb1461017d578063673a2a1f146101885780636fbc6f6b1461019d57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461012a57806354fd4d5014610134575b600080fd5b61010d610108366004610958565b610240565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261026a565b005b61013c600181565b604051908152602001610121565b61016d610158366004610971565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b60005460ff1661016d565b610190610319565b60405161012191906109a1565b61016d6101ab366004610971565b60046020526000908152604090205460ff1681565b61013261037b565b610190610428565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610205366004610958565b610488565b60015461013c565b60035461013c565b610132610228366004610971565b610498565b61013261023b366004610971565b61066c565b6003818154811061025057600080fd5b6000918252602090912001546001600160a01b0316905081565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa1580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f291906109ee565b61030f5760405163081996f760e11b815260040160405180910390fd5b61031761083a565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561037157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610353575b5050505050905090565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906109ee565b6104205760405163d794b1e760e01b815260040160405180910390fd5b61031761088c565b60606003805480602002602001604051908101604052809291908181526020018280548015610371576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610353575050505050905090565b6001818154811061025057600080fd5b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052091906109ee565b61053d576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166105865760405162461bcd60e51b815260040161057d9190610a10565b60405180910390fd5b506001600160a01b038116600090815260026020908152604091829020548251808401909352600383526243523160e81b9183019190915260ff16156105df5760405162461bcd60e51b815260040161057d9190610a10565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038416908117909155600081815260026020526040808220805460ff1916909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906109ee565b610711576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166107515760405162461bcd60e51b815260040161057d9190610a10565b506001600160a01b038116600090815260046020908152604091829020548251808401909352600383526221a91960e91b9183019190915260ff16156107aa5760405162461bcd60e51b815260040161057d9190610a10565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b038416908117909155600081815260046020526040808220805460ff1916909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b6108426108c9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610894610912565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861086f3390565b60005460ff166103175760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057d565b60005460ff16156103175760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057d565b60006020828403121561096a57600080fd5b5035919050565b60006020828403121561098357600080fd5b81356001600160a01b038116811461099a57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156109e25783516001600160a01b0316835292840192918401916001016109bd565b50909695505050505050565b600060208284031215610a0057600080fd5b8151801515811461099a57600080fd5b600060208083528351808285015260005b81811015610a3d57858101830151858201604001528201610a21565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200165d12495f46ea6b90db275dc0ffbe0092ae79649978a2f35c0eaa9ba89b4cd64736f6c6343000811003360e06040523480156200001157600080fd5b506040516200443b3803806200443b833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c05161421e6200021d6000396000818161015b0152818161159e01526120ea0152600081816101c001528181611033015281816118480152818161194301528181611a1001528181611ba401528181611c9f01528181611d4a01528181611df001528181611f02015281816130f4015261319a0152600061011c015261421e6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d5014610190578063663b8fdb146101a65780637a0c7b21146101bb578063a80deda3146101e2578063ae093f3f14610202578063fc9914cb1461022257600080fd5b80630dbd616d146100b957806313d21cdf146100e25780631bcd8fc0146101025780632954018c146101175780634b2f336d146101565780634c472fc91461017d575b600080fd5b6100cc6100c736600461371b565b610245565b6040516100d991906138f5565b60405180910390f35b6100f56100f0366004613908565b61100a565b6040516100d99190613a07565b61010a611842565b6040516100d99190613a16565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d9565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b61013e61018b36600461371b565b6119ec565b610198600281565b6040519081526020016100d9565b6101ae611b9e565b6040516100d99190613cdd565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6101f56101f0366004613908565b611d43565b6040516100d99190613d3f565b610215610210366004613908565b611fc5565b6040516100d99190613d94565b61023561023036600461371b565b6130d0565b60405190151581526020016100d9565b61024d6134d6565b600080600080600061025e8861318e565b509450945094509450945060008560ff166001146102e557604051633a562dc160e21b81526001600160a01b03898116600483015284169063e958b70490602401602060405180830381865afa1580156102bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e09190613db7565b61034f565b604051633a562dc160e21b81526001600160a01b03898116600483015286169063e958b70490602401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190613db7565b60ff871661022089018190526001600160a01b03808b1660208b01528b811660608b01528216895290915060010361071a57846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529085169063c7de38a690602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104569190613dd4565b60e088015260405163dfd5946560e01b81526001600160a01b03828116600483015285169063dfd5946590602401602060405180830381865afa1580156104a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c59190613dd4565b610100880152604051633ce0735560e01b81526001600160a01b03898116600483015260006024830152861690633ce0735590604401602060405180830381865afa925050508015610534575060408051601f3d908101601f1916820190925261053191810190613dd4565b60015b15610540576101608801525b604051633ce0735560e01b81526001600160a01b03898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156105a9575060408051601f3d908101601f191682019092526105a691810190613dd4565b60015b156105b5576101808801525b60e087015160405163132c653f60e31b81526001600160a01b0383811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa92505050801561062c575060408051601f3d908101601f1916820190925261062991810190613ded565b60015b1561063e57505015156101a08a015250505b806001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190613dd4565b6101c0880152604051630c64865760e21b81526001600160a01b038281166004830152851690633192195c90602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613dd4565b60a08801526108df565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529083169063c7de38a6906024016040805180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190613e2d565b5060e088015260405163dfd5946560e01b81526001600160a01b03828116600483015283169063dfd5946590602401602060405180830381865afa15801561083a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085e9190613dd4565b610100880152604051630c64865760e21b81526001600160a01b038281166004830152841690633192195c90602401606060405180830381865afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613e51565b60c08a015260a08901526101c08801525b60008660ff1660011461095357836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190613db7565b6109b5565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613db7565b9050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613dd4565b6101208901526000600160ff891614610a9357846001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190613dd4565b610af5565b856001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613dd4565b90508760ff16600114610b7157604051638991b2f160e01b81526001600160a01b038481166004830152861690638991b2f190602401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613dd4565b610bdb565b604051632d1473b360e21b81526001600160a01b03848116600483015287169063b451cecc90602401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613dd4565b6102408a01528067ffffffffffffffff811115610bfa57610bfa613e7f565b604051908082528060200260200182016040528015610c4c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c185790505b506101408a015260005b81811015610f2657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c169003610d8757604051635785328160e11b81526001600160a01b038781166004830152602482018590528a169063af0a650290604401608060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613e95565b505060208401526001600160a01b0390811680845260405163f9eaee0d60e01b81526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b9190613ee4565b15156040830152610ed8565b60405163172c48c760e01b8152600481018490526001600160a01b0389169063172c48c7906024016040805180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190613f11565b506001600160a01b039081168084526040516370a0823160e01b81529188166004830152906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613dd4565b6020830152815160405163f9eaee0d60e01b81526001600160a01b0391821660048201529088169063f9eaee0d90602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190613ee4565b151560408301525b6102408c0151811615610eec576001610eef565b60005b151560608301526101408c0151805183919085908110610f1157610f11613f46565b60209081029190910101525050600101610c56565b50826001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190613dd4565b896101e0018181525050826001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190613dd4565b6102008a015250969998505050505050505050565b611012613593565b604051635b16ebb760e01b81526001600160a01b03808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613ee4565b6110bd57604051631a70964760e31b815260040160405180910390fd5b6001600160a01b0383168083526040805163fe14112d60e01b8152905185929163fe14112d9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613dd4565b8360c0018181525050806001600160a01b031663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613dd4565b8360e0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613dd4565b8360a0018181525050806001600160a01b0316634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613dd4565b83610100018181525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190613dd4565b83610160018181525050806001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613dd4565b836080018181525050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190613dd4565b83610140018181525050806001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190613db7565b83604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190613db7565b83606001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190613dd4565b83610160018181525050806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190613dd4565b6101808401526040808401516001600160a01b039081167f0000000000000000000000000000000000000000000000000000000000000000821614602080870191909152825163609ae31760e01b815292519184169263609ae31792600480830193928290030181865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190613dd4565b836101c0018181525050806001600160a01b031663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613dd4565b836101a0018181525050600083606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190613dd4565b604051630a84f92760e31b8152600481018290529091506000906001600160a01b03841690635427c93890602401602060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613dd4565b905080156117bd5761018085015181906117ae9061179290612710613f72565b8761010001518861014001516117a89190613f85565b90613402565b6117b89190613fb2565b6117c4565b8461014001515b85610120018181525050826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118309190613dd4565b60ff166101e086015250505050919050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c89190613dd4565b90508067ffffffffffffffff8111156118e3576118e3613e7f565b60405190808252806020026020018201604052801561191c57816020015b611909613593565b8152602001906001900390816119015790505b50915060005b818110156119e7576040516315895f4760e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ac4afa3890602401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613db7565b90506119c18161100a565b8483815181106119d3576119d3613f46565b602090810291909101015250600101611922565b505090565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613ee4565b611a9857604051631679e86f60e11b815260040160405180910390fd5b6000806000611aa68761318e565b5050935093505092508260ff16600114611b295760405163fdd5764560e01b81526001600160a01b03878116600483015282169063fdd5764590602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190613db7565b611b93565b60405163fdd5764560e01b81526001600160a01b03878116600483015283169063fdd5764590602401602060405180830381865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190613db7565b979650505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613dd4565b90508067ffffffffffffffff811115611c3f57611c3f613e7f565b604051908082528060200260200182016040528015611c7857816020015b611c65613630565b815260200190600190039081611c5d5790505b50915060005b818110156119e757604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613db7565b9050611d1d81611fc5565b848381518110611d2f57611d2f613f46565b602090810291909101015250600101611c7e565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca9190613dd4565b905060005b81811015611e8457604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190613db7565b9050611e6f81876130d0565b15611e7b578360010193505b50600101611dcf565b508167ffffffffffffffff811115611e9e57611e9e613e7f565b604051908082528060200260200182016040528015611ed757816020015b611ec46134d6565b815260200190600190039081611ebc5790505b5092506000915060005b81811015611fbd57604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190613db7565b9050611f8181876130d0565b15611fb457611f908187610245565b858581518110611fa257611fa2613f46565b60209081029190910101526001909301925b50600101611ee1565b505050919050565b611fcd613630565b600080600080600080611fdf8861318e565b6001600160a01b038e168d5260ff86166101a08e01819052959b5093995091975095509350915060011461207457826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f9190613db7565b6120d6565b846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613db7565b6001600160a01b03908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460608801526000600160ff88161461218657836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613db7565b6121e8565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190613db7565b6001600160a01b0381811660408b810182905251632e97ca2160e01b8152918c166004830152919250632e97ca2190602401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190613ee4565b15156080890152604080516345d31f9d60e01b815290516001600160a01b038316916345d31f9d9160048083019260209291908290030181865afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190613dd4565b8860a0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190613dd4565b6101208901525060ff861660010361241f57846001600160a01b0316639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190613dd4565b8760c0018181525050846001600160a01b0316635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190613dd4565b60e0880152612497565b816001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190613fdd565b6001600160801b0390811660e08a01521660c08801525b60008660ff1660011461250b57836001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613dd4565b61256d565b846001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190613dd4565b90508067ffffffffffffffff81111561258857612588613e7f565b6040519080825280602002602001820160405280156125b1578160200160208202803683370190505b506101408901528067ffffffffffffffff8111156125d1576125d1613e7f565b6040519080825280602002602001820160405280156125fa578160200160208202803683370190505b5061018089015260005b8181101561280f578760ff1660010361273f57604051632f2f971360e11b8152600481018290526000906001600160a01b03881690635e5f2e2690602401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613db7565b9050808a6101400151838151811061269d5761269d613f46565b6001600160a01b039283166020918202929092010152604051630f064e8760e31b8152828216600482015290881690637832743890602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127169190613dd4565b8a6101800151838151811061272d5761272d613f46565b60200260200101818152505050612807565b60405163172c48c760e01b8152600481018290526001600160a01b0386169063172c48c7906024016040805180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190613f11565b8061ffff1690508a610140015183815181106127c5576127c5613f46565b602002602001018b610180015184815181106127e3576127e3613f46565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505b600101612604565b50508560ff16600103612a1e576000846001600160a01b03166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613dd4565b90508067ffffffffffffffff81111561289b5761289b613e7f565b6040519080825280602002602001820160405280156128e057816020015b60408051808201909152600080825260208201528152602001906001900390816128b95790505b5061016089015260005b81811015612a1757604051635094cb4f60e01b8152600481018290526000906001600160a01b03881690635094cb4f90602401602060405180830381865afa15801561293a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295e9190613db7565b6040805180820182526001600160a01b03808416808352925163fdd5764560e01b81526004810193909352929350916020830191908a169063fdd5764590602401602060405180830381865afa1580156129bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e09190613db7565b6001600160a01b03168152508a61016001518381518110612a0357612a03613f46565b6020908102919091010152506001016128ea565b5050612bea565b6000816001600160a01b031663373c8f626040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a869190810190614007565b80519091508067ffffffffffffffff811115612aa457612aa4613e7f565b604051908082528060200260200182016040528015612ae957816020015b6040805180820190915260008082526020820152815260200190600190039081612ac25790505b506101608a015260005b81811015612be6576000838281518110612b0f57612b0f613f46565b602002602001015190506040518060400160405280826001600160a01b03168152602001886001600160a01b031663fdd57645846040518263ffffffff1660e01b8152600401612b6e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baf9190613db7565b6001600160a01b03168152508b61016001518381518110612bd257612bd2613f46565b602090810291909101015250600101612af3565b5050505b8560ff16600103612dc357846001600160a01b031663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613dd4565b61010088015260ff61028088015260408051635e0b63d360e01b815290516001600160a01b03871691635e0b63d39160048083019260209291908290030181865afa158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190613dd4565b61ffff166102a088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613dd4565b61ffff166102c088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db49190613dd4565b61ffff166102e08801526130c5565b81876101c001906001600160a01b031690816001600160a01b031681525050826001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613db7565b876101e001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190613db7565b8761022001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401608060405180830381865afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906140cc565b505015156102408901525060408051639fd12b7760e01b815290516001600160a01b03851691639fd12b779160048083019260209291908290030181865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190613dd4565b87610260018181525050826001600160a01b0316638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061412c565b60ff1661028088015260408051634d78e9ad60e11b815290516001600160a01b03851691639af1d35a9160048083019260a09291908290030181865afa158015613072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613096919061414f565b61ffff9081166103208d01529081166103008c01529081166102e08b01529081166102c08a0152166102a08801525b505050505050919050565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190613ee4565b61317c57604051631679e86f60e11b815260040160405180910390fd5b6131868484613455565b949350505050565b600080600080600080867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fbc6f6b826040518263ffffffff1660e01b81526004016131f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132349190613ee4565b61325157604051631679e86f60e11b815260040160405180910390fd5b876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190613dd4565b96508660ff1660010361332c57879550856001600160a01b031663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613db7565b94506133f8565b879350836001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561336d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133919190613db7565b9250836001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190613db7565b91505b5091939550919395565b600082158061340f575081155b1561341c5750600061344f565b61271061342a6002826141b4565b61ffff166134388486613f85565b61344291906141d5565b61344c9190613fb2565b90505b92915050565b60405163055ee9b560e01b81526001600160a01b038281166004830152600091829185169063055ee9b590602401602060405180830381865afa1580156134a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c49190613db7565b6001600160a01b031614159392505050565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b60405180610200016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b604080516103408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082018190526101808201526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081019190915290565b6001600160a01b038116811461371857600080fd5b50565b6000806040838503121561372e57600080fd5b823561373981613703565b9150602083013561374981613703565b809150509250929050565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101613768565b509495945050505050565b80516001600160a01b03168252600061026060208301516137e860208601826001600160a01b03169052565b5060408301516137fc604086018215159052565b50606083015161381760608601826001600160a01b03169052565b50608083015161383260808601826001600160a01b03169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261388183870182613754565b925050506101608084015181860152506101808084015181860152506101a0808401516138b18287018215159052565b50506101c083810151908501526101e0808401519085015261020080840151908501526102208084015160ff16908501526102409283015192909301919091525090565b60208152600061344c60208301846137bc565b60006020828403121561391a57600080fd5b813561392581613703565b9392505050565b80516001600160a01b03168252602081015161394c602084018215159052565b50604081015161396760408401826001600160a01b03169052565b50606081015161398260608401826001600160a01b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161344f828461392c565b6020808252825182820181905260009190848201906040850190845b81811015613a5957613a4583855161392c565b928401926102009290920191600101613a32565b50909695505050505050565b600081518084526020808501945080840160005b838110156137b15781516001600160a01b031687529582019590820190600101613a79565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03908116895290840151168388015260409096019590820190600101613ab2565b600081518084526020808501945080840160005b838110156137b157815187529582019590820190600101613afa565b80516001600160a01b0316825260006103406020830151613b4260208601826001600160a01b03169052565b506040830151613b5d60408601826001600160a01b03169052565b506060830151613b71606086018215159052565b506080830151613b85608086018215159052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152613bd483870182613a65565b925050506101608084015185830382870152613bf08382613a9e565b925050506101808084015185830382870152613c0c8382613ae6565b925050506101a080840151613c258287018260ff169052565b50506101c0838101516001600160a01b03908116918601919091526101e0808501518216908601526102008085015115159086015261022080850151909116908501526102408084015115159085015261026080840151908501526102808084015160ff16908501526102a08084015161ffff908116918601919091526102c0808501518216908601526102e08085015182169086015261030080850151821690860152610320938401511692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d20858351613b16565b94509285019290850190600101613d04565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d828583516137bc565b94509285019290850190600101613d66565b60208152600061344c6020830184613b16565b8051613db281613703565b919050565b600060208284031215613dc957600080fd5b815161392581613703565b600060208284031215613de657600080fd5b5051919050565b600080600080600060a08688031215613e0557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008060408385031215613e4057600080fd5b505080516020909101519092909150565b600080600060608486031215613e6657600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215613eab57600080fd5b8451613eb681613703565b60208601516040870151606090970151919890975090945092505050565b80518015158114613db257600080fd5b600060208284031215613ef657600080fd5b61344c82613ed4565b805161ffff81168114613db257600080fd5b60008060408385031215613f2457600080fd5b8251613f2f81613703565b9150613f3d60208401613eff565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561344f5761344f613f5c565b808202811582820484141761344f5761344f613f5c565b634e487b7160e01b600052601260045260246000fd5b600082613fc157613fc1613f9c565b500490565b80516001600160801b0381168114613db257600080fd5b60008060408385031215613ff057600080fd5b613ff983613fc6565b9150613f3d60208401613fc6565b6000602080838503121561401a57600080fd5b825167ffffffffffffffff8082111561403257600080fd5b818501915085601f83011261404657600080fd5b81518181111561405857614058613e7f565b8060051b604051601f19603f8301168101818110858211171561407d5761407d613e7f565b60405291825284820192508381018501918883111561409b57600080fd5b938501935b828510156140c0576140b185613da7565b845293850193928501926140a0565b98975050505050505050565b600080600080608085870312156140e257600080fd5b6140eb85613fc6565b93506140f960208601613ed4565b9250604085015164ffffffffff8116811461411357600080fd5b915061412160608601613eff565b905092959194509250565b60006020828403121561413e57600080fd5b815160ff8116811461392557600080fd5b600080600080600060a0868803121561416757600080fd5b61417086613eff565b945061417e60208701613eff565b935061418c60408701613eff565b925061419a60608701613eff565b91506141a860808701613eff565b90509295509295909350565b600061ffff808416806141c9576141c9613f9c565b92169190910492915050565b8082018082111561344f5761344f613f5c56fea264697066735822122033db04dd6ad85cbb23c61a3c1df229cdee23950afa0e93d191a4e60c173de79664736f6c6343000811003360a06040523480156200001157600080fd5b50604051620016b2380380620016b283398101604081905262000034916200060c565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070e565b6001600160a01b031660805250805160005b8181101562000142576200013983828151811062000100576200010062000733565b60200260200101516000015184838151811062000121576200012162000733565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000827565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004b560201b620005591760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004b560201b620005591760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000749565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076e565b60015b15620003285790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000387575060408051601f3d908101601f19168201909252620003849181019062000749565b60015b620003a55760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003cb5760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042a575060408051601f3d908101601f191682019092526200042791810190620007aa565b60015b62000448576040516367a7cd4360e01b815260040160405180910390fd5b866200045c576200045c85858484620004c4565b50505050506200046f848484846200052a565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b6001600160a01b03163b151590565b60008313620004e6576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000505575081155b15620005245760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200054257600160a11b175b6200055860ff60a21b60a284901b1682620007ff565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200059357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005d357620005d362000598565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000604576200060462000598565b604052919050565b60008060408084860312156200062157600080fd5b6200062c846200057b565b602085810151919450906001600160401b03808211156200064c57600080fd5b818701915087601f8301126200066157600080fd5b81518181111562000676576200067662000598565b62000686848260051b01620005d9565b818152848101925060069190911b830184019089821115620006a757600080fd5b928401925b81841015620006fe5785848b031215620006c65760008081fd5b620006d0620005ae565b620006db856200057b565b8152620006ea8686016200057b565b8187015283529285019291840191620006ac565b8096505050505050509250929050565b6000602082840312156200072157600080fd5b6200072c826200057b565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075c57600080fd5b815160ff811681146200072c57600080fd5b6000602082840312156200078157600080fd5b815180151581146200072c57600080fd5b80516001600160501b03811681146200059357600080fd5b600080600080600060a08688031215620007c357600080fd5b620007ce8662000792565b9450602086015193506040860151925060608601519150620007f36080870162000792565b90509295509295909350565b808201808211156200082157634e487b7160e01b600052601160045260246000fd5b92915050565b608051610e5a62000858600039600081816101950152818161023d01528181610360015261043e0152610e5a6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101b7578063e8a97a3e146101ca578063f190e5fa146101dd578063f9a650301461021557600080fd5b80638456cb591461015d5780639dcb511a14610165578063a50cf2c81461019057600080fd5b80633f4ba83a146100d457806341976e09146100de57806354fd4d50146101045780635c975abb1461010c5780635cecbd0e146101225780637afb01041461014a575b600080fd5b6100dc610228565b005b6100f16100ec366004610b29565b6102d7565b6040519081526020015b60405180910390f35b6100f1600281565b60005460ff1660405190151581526020016100fb565b610135610130366004610b4b565b6102e9565b604080519283526020830191909152016100fb565b6100f1610158366004610b91565b61030d565b6100dc61034b565b610178610173366004610b29565b6103f8565b6040516001600160a01b0390911681526020016100fb565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6100f16101c5366004610bbd565b61040c565b6100dc6101d8366004610bf9565b610429565b6101f06101eb366004610b29565b6104dc565b604080516001600160a01b0390941684529115156020840152908201526060016100fb565b6100f1610223366004610b91565b610531565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610c23565b6102cd5760405163081996f760e11b815260040160405180910390fd5b6102d5610568565b565b60006102e2826105ba565b5092915050565b6000806102f68686610531565b91506103028484610531565b905094509492505050565b600080600061031b846105ba565b90925090508161032c82600a610d3f565b6103369087610d4b565b6103409190610d62565b925050505b92915050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610c23565b6103f05760405163d794b1e760e01b815260040160405180910390fd5b6102d5610665565b6000610403826104dc565b50909392505050565b600061042161041b8585610531565b8361030d565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610c23565b6104ce576040516361081c1560e01b815260040160405180910390fd5b6104d882826106a2565b5050565b6001600160a01b03811660009081526001602052604081205481908190808203610519576040516325dc56c160e11b815260040160405180910390fd5b94600160a11b86161515945060a286901c9350915050565b600080600061053f846105ba565b909250905061054f81600a610d3f565b6103368387610d4b565b6001600160a01b03163b151590565b6105706109c7565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000806000806105c9856104dc565b809550819350829450505050600080600080856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190610d9e565b945094505093509350846106575761065784848484610a10565b829750505050505050915091565b61066d610a79565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861059d3390565b6001600160a01b03821615806106bf57506001600160a01b038116155b156106dd57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0382163b6107155760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b0381163b6107485760405163df4c572d60e01b81526001600160a01b038216600482015260240161070c565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156107a2575060408051601f3d908101601f1916820190925261079f91810190610dee565b60015b6107bf576040516367a7cd4360e01b815260040160405180910390fd5b8060ff166008146107e3576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c23565b60015b156108485790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108a4575060408051601f3d908101601f191682019092526108a191810190610dee565b60015b6108c15760405163528ca31d60e01b815260040160405180910390fd5b60128160ff1611156108e65760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610942575060408051601f3d908101601f1916820190925261093f91810190610d9e565b60015b61095f576040516367a7cd4360e01b815260040160405180910390fd5b866109705761097085858484610a10565b505050505061098184848484610abf565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60005460ff166102d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161070c565b60008313610a31576040516356e05d2b60e01b815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610a55575081155b15610a735760405163b1cf675560e01b815260040160405180910390fd5b50505050565b60005460ff16156102d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161070c565b6001600160a01b0383168215610ad657600160a11b175b610aea60ff60a21b60a284901b1682610e11565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80356001600160a01b0381168114610b2457600080fd5b919050565b600060208284031215610b3b57600080fd5b610b4482610b0d565b9392505050565b60008060008060808587031215610b6157600080fd5b84359350610b7160208601610b0d565b925060408501359150610b8660608601610b0d565b905092959194509250565b60008060408385031215610ba457600080fd5b82359150610bb460208401610b0d565b90509250929050565b600080600060608486031215610bd257600080fd5b83359250610be260208501610b0d565b9150610bf060408501610b0d565b90509250925092565b60008060408385031215610c0c57600080fd5b610c1583610b0d565b9150610bb460208401610b0d565b600060208284031215610c3557600080fd5b81518015158114610b4457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610c96578160001904821115610c7c57610c7c610c45565b80851615610c8957918102915b93841c9390800290610c60565b509250929050565b600082610cad57506001610345565b81610cba57506000610345565b8160018114610cd05760028114610cda57610cf6565b6001915050610345565b60ff841115610ceb57610ceb610c45565b50506001821b610345565b5060208310610133831016604e8410600b8410161715610d19575081810a610345565b610d238383610c5b565b8060001904821115610d3757610d37610c45565b029392505050565b6000610b448383610c9e565b808202811582820484141761034557610345610c45565b600082610d7f57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610b2457600080fd5b600080600080600060a08688031215610db657600080fd5b610dbf86610d84565b9450602086015193506040860151925060608601519150610de260808701610d84565b90509295509295909350565b600060208284031215610e0057600080fd5b815160ff81168114610b4457600080fd5b8082018082111561034557610345610c4556fea264697066735822122069c2fd2db6d7dc1b5845e60541bf11eeb508185a9ae85239b49627abfd6b814564736f6c6343000811003360e06040523480156200001157600080fd5b5060405162002349380380620023498339810160408190526200003491620004af565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004af565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004e1565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004af565b6001600160a01b031660c052604051620001a490620004a1565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000531565b6000620002a460a0516200038c60201b62000d091760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200042f811b62000da317901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166200042a5760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000446836001600160a01b0384166200044f565b90505b92915050565b6000818152600183016020526040812054620004985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000449565b50600062000449565b610b1a806200182f83390190565b600060208284031215620004c257600080fd5b81516001600160a01b0381168114620004da57600080fd5b9392505050565b600060208083528351808285015260005b818110156200051057858101830151858201604001528201620004f2565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05160c05161129d6200059260003960008181610213015281816102eb01526108850152600081816101b80152610c120152600081816102600152818161049501528181610729015281816107d80152610a94015261129d6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806388f64c54116100ad578063b193976311610071578063b193976314610295578063b60e85181461029d578063d82ecc48146102a5578063e3ba9ace146102b8578063f23953ab146102cb57600080fd5b806388f64c541461020e57806389b77b3e146102355780638f7dcfa314610248578063a50cf2c81461025b578063a904aab61461028257600080fd5b806354fd4d50116100f457806354fd4d50146101865780635c975abb1461019c5780635da33c5b146101b3578063765e0159146101da5780638456cb591461020657600080fd5b806313d8c8401461012657806321d18456146101565780632932472f146101695780633f4ba83a1461017e575b600080fd5b600454610139906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101396101643660046110c0565b6102d3565b61017c6101773660046110f9565b610480565b005b61017c610714565b61018e600181565b60405190815260200161014d565b60005460ff165b604051901515815260200161014d565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101396101e836600461113c565b6001600160a01b039081166000908152600260205260409020541690565b61017c6107c3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c61024336600461113c565b610870565b600354610139906001600160a01b031681565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c6102903660046110f9565b610a7f565b61018e610b8c565b61018e610be0565b6101a36102b336600461113c565b610bf1565b6101396102c6366004611157565b610bfe565b61017c610c0b565b604051636fbc6f6b60e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190611170565b60405180604001604052806002815260200161043560f41b815250906103a05760405162461bcd60e51b81526004016103979190611192565b60405180910390fd5b506103a9610dbf565b600380546001600160a01b038082166000818152600260205260409081902080549093166001600160a01b03199485161790945581549092169055905163c75b5a7160e01b81523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50506040513392506001600160a01b03841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105089190611170565b610525576040516361081c1560e01b815260040160405180910390fd5b61052d610dbf565b6003546001600160a01b0380841691160361057e57600380546001600160a01b03808216600090815260026020526040902080549091166001600160a01b0319928316179092558154169055610651565b6001600160a01b03838116600090815260026020908152604091829020548251808401909352600383526241463360e81b9183019190915290918481169116146105db5760405162461bcd60e51b81526004016103979190611192565b506004546001600160a01b039081169083160361060e57600480546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b03199283161790945591905281541690555b60405163c75b5a7160e01b81526001600160a01b038281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506106ce826005610de990919063ffffffff16565b50806001600160a01b0316826001600160a01b03167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611170565b6107b95760405163081996f760e11b815260040160405180910390fd5b6107c1610dfe565b565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611170565b6108685760405163d794b1e760e01b815260040160405180910390fd5b6107c1610e50565b604051636fbc6f6b60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190611170565b60405180604001604052806002815260200161043560f41b815250906109315760405162461bcd60e51b81526004016103979190611192565b5061093d600582610e8d565b6040518060400160405280600381526020016210518d60ea1b815250906109775760405162461bcd60e51b81526004016103979190611192565b5043816001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906111e0565b14156040518060400160405280600381526020016241463160e81b81525090610a175760405162461bcd60e51b81526004016103979190611192565b50600480546001600160a01b0390811660009081526002602052604080822080546001600160a01b03199081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611170565b610b24576040516361081c1560e01b815260040160405180910390fd5b6040516319a1603960e01b81526001600160a01b03838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050505050565b60035460009081906001600160a01b03165b6001600160a01b03811615610bda576001600160a01b039081166000908152600260205260409020541681610bd28161120f565b925050610b9e565b50919050565b6000610bec6005610eaf565b905090565b600061047a600583610e8d565b600061047a600583610eb9565b6000610c367f0000000000000000000000000000000000000000000000000000000000000000610d09565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020526040902080546001600160a01b031990811692871692831790915582541617905550610cd19050600582610da3565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610d9e5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610397565b919050565b6000610db8836001600160a01b038416610ec5565b9392505050565b6003546001600160a01b03908116600090815260026020526040902054166107c1576107c1610c0b565b6000610db8836001600160a01b038416610f14565b610e06611007565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610e58611050565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e333390565b6001600160a01b03811660009081526001830160205260408120541515610db8565b600061047a825490565b6000610db88383611096565b6000818152600183016020526040812054610f0c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047a565b50600061047a565b60008181526001830160205260408120548015610ffd576000610f38600183611228565b8554909150600090610f4c90600190611228565b9050818114610fb1576000866000018281548110610f6c57610f6c61123b565b9060005260206000200154905080876000018481548110610f8f57610f8f61123b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fc257610fc2611251565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047a565b600091505061047a565b60005460ff166107c15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610397565b60005460ff16156107c15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610397565b60008260000182815481106110ad576110ad61123b565b9060005260206000200154905092915050565b600080604083850312156110d357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114610d9e57600080fd5b60008060006060848603121561110e57600080fd5b611117846110e2565b9250611125602085016110e2565b9150611133604085016110e2565b90509250925092565b60006020828403121561114e57600080fd5b610db8826110e2565b60006020828403121561116957600080fd5b5035919050565b60006020828403121561118257600080fd5b81518015158114610db857600080fd5b600060208083528351808285015260005b818110156111bf578581018301518582016040015282016111a3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156111f257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611221576112216111f9565b5060010190565b8181038181111561047a5761047a6111f9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ade996890c56d4b43fb9e4ec0941b92fb2f65af6439db82451fa7e4509c266064736f6c63430008110033608060405234801561001057600080fd5b50610afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c6343000811003360c06040523480156200001157600080fd5b50604051620016c5380380620016c5833981016040819052620000349162000172565b600160005580806001600160a01b0381166200006357604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c8919062000172565b6001600160a01b0390811660805283169150620000fa905057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f919062000172565b6001600160a01b031660a05250620001a4565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b60805160a05161147e620002476000396000818160a5015281816101420152818161027001528181610343015281816103b2015281816104c601528181610649015281816106fc01528181610828015281816108fb01528181610a0901528181610ac701528181610b7a01528181610c9b01528181610d6e01528181610ed501528181610f6f0152610ff8015260008181610e3a0152611092015261147e6000f3fe6080604052600436106100955760003560e01c806372b0d90c1161005957806372b0d90c146101bf578063cd604a31146101df578063dfcd412e146101f2578063f9609f0814610212578063fea53be11461022557600080fd5b80630d4d1513146100ea5780632f4f21e2146101105780633fc8cef31461013057806354fd4d501461017c57806370a082311461019257600080fd5b366100e557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e3576040516377ead08760e11b815260040160405180910390fd5b005b600080fd5b6100fd6100f836600461124f565b610245565b6040519081526020015b60405180910390f35b34801561011c57600080fd5b506100e361012b366004611291565b610558565b34801561013c57600080fd5b506101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610107565b34801561018857600080fd5b506100fd61012c81565b34801561019e57600080fd5b506100fd6101ad3660046112bd565b60016020526000908152604090205481565b3480156101cb57600080fd5b506100e36101da3660046112bd565b6105b1565b6100fd6101ed3660046112e1565b61061e565b3480156101fe57600080fd5b506100fd61020d366004611328565b6107fd565b6100fd61022036600461137b565b610a9c565b34801561023157600080fd5b506100fd610240366004611328565b610c70565b60008361025181610e18565b61026e57604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa91906113b4565b6001600160a01b03161461032157604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015233906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906113d1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505061042e8734610eae565b6040516394bf804d60e01b8152600481018790526001600160a01b0386811660248301528816906394bf804d906044016020604051808303816000875af115801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a191906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906113d1565b61053b9190611400565b9050801561054d5761054d8382610fe2565b505050509392505050565b3361056281611070565b61057f57604051635e35244560e11b815260040160405180910390fd5b6001600160a01b038316600090815260016020526040812080548492906105a7908490611413565b9091555050505050565b6105b96110c3565b6001600160a01b03811660009081526001602081905260409091205490811115610610576001600160a01b038216600090815260016020819052604090912081905561061090839061060b9084611400565b610fe2565b5061061b6001600055565b50565b60008361062a81610e18565b61064757604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906113b4565b6001600160a01b0316146106fa57604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b50505050506107788534610eae565b60405163d598971360e01b81523460048201526001600160a01b03858116602483015261ffff8516604483015286169063d5989713906064016020604051808303816000875af11580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f491906113d1565b95945050505050565b60008461080981610e18565b61082657604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906113b4565b6001600160a01b0316146108d957604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906113d1565b604051632d182be560e21b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063b460af94906064015b6020604051808303816000875af11580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e491906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906113d1565b610a7e9190611400565b90508015610a9057610a908382610fe2565b50505050949350505050565b600082610aa881610e18565b610ac557604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5191906113b4565b6001600160a01b031614610b7857604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b5050505050610bf68434610eae565b604051636e553f6560e01b81523460048201526001600160a01b038481166024830152851690636e553f65906044016020604051808303816000875af1158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6891906113d1565b949350505050565b600084610c7c81610e18565b610c9957604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906113b4565b6001600160a01b031614610d4c57604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906113d1565b604051635d043b2960e11b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063ba087652906064016109a1565b604051635b16ebb760e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb7906024015b602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611426565b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4291906113d1565b1015610fde5760405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611426565b505b5050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b50610fde925050506001600160a01b03831682611121565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401610e67565b60026000540361111a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b804710156111715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611111565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b5050905080610fdc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611111565b6001600160a01b038116811461061b57600080fd5b60008060006060848603121561126457600080fd5b833561126f8161123a565b92506020840135915060408401356112868161123a565b809150509250925092565b600080604083850312156112a457600080fd5b82356112af8161123a565b946020939093013593505050565b6000602082840312156112cf57600080fd5b81356112da8161123a565b9392505050565b6000806000606084860312156112f657600080fd5b83356113018161123a565b925060208401356113118161123a565b9150604084013561ffff8116811461128657600080fd5b6000806000806080858703121561133e57600080fd5b84356113498161123a565b93506020850135925060408501356113608161123a565b915060608501356113708161123a565b939692955090935050565b6000806040838503121561138e57600080fd5b82356113998161123a565b915060208301356113a98161123a565b809150509250929050565b6000602082840312156113c657600080fd5b81516112da8161123a565b6000602082840312156113e357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ea857610ea86113ea565b80820180821115610ea857610ea86113ea565b60006020828403121561143857600080fd5b815180151581146112da57600080fdfea2646970667358221220cb4af6bfdb718634b9264c949899ac22d1c5f59bf3c6f8047430621a5ee8d16664736f6c6343000811003360806040523480156200001157600080fd5b506040516200220a3803806200220a833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b6120a680620001646000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104b9578063f1127ed8146104e0578063f2fde38b1461054757600080fd5b8063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b806395d89b41116100d357806395d89b41146103ea5780639742ca461461040d578063a9059cbb14610420578063b0660c3d1461043357600080fd5b806370a082311461036d578063782d6fe11461039f5780637ecebe00146103ca57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a75146102de578063587cde1e146102f65780635c19a95c1461031f5780636fcfff451461033257600080fd5b806330adf81f14610272578063313ce56714610299578063349dc329146102b357600080fd5b806306fdde03146101ae578063095ea7b3146101ea57806318160ddd1461020d57806320606b701461022e5780632185810b1461025557806323b872dd1461025f575b600080fd5b6101d46040518060400160405280600781526020016608ecac2e4c4def60cb1b81525081565b6040516101e19190611b92565b60405180910390f35b6101fd6101f8366004611bfc565b61055a565b60405190151581526020016101e1565b6102206b204fce5e3e2502611000000081565b6040519081526020016101e1565b6102207f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61025d610618565b005b6101fd61026d366004611c26565b610688565b6102207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102a1601281565b60405160ff90911681526020016101e1565b6007546102c6906001600160a01b031681565b6040516001600160a01b0390911681526020016101e1565b6006546102c69061010090046001600160a01b031681565b6102c6610304366004611c62565b6002602052600090815260409020546001600160a01b031681565b61025d61032d366004611c62565b6107c9565b610358610340366004611c62565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e1565b61022061037b366004611c62565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b6103b26103ad366004611bfc565b6107d6565b6040516001600160601b0390911681526020016101e1565b6102206103d8366004611c62565b60056020526000908152604090205481565b6101d46040518060400160405280600481526020016323a2a0a960e11b81525081565b61025d61041b366004611c62565b610a60565b6101fd61042e366004611bfc565b610b2f565b6006546101fd9060ff1681565b6103b261044e366004611c62565b610b6b565b61025d610461366004611c8e565b610be9565b61025d610474366004611ce6565b610ed4565b610220610487366004611d50565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b6102207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105236104ee366004611d83565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016101e1565b61025d610555366004611c62565b6112c1565b600080600019830361057457506001600160601b03610599565b61059683604051806060016040528060258152602001611edc602591396113ad565b90505b336000818152602081815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60065461010090046001600160a01b031633146106505760405162461bcd60e51b815260040161064790611dc3565b60405180910390fd5b6006805460ff191660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b6001600160a01b0383166000908152602081815260408083203380855290835281842054825160608101909352602580845291936001600160601b039091169285926106de9288929190611edc908301396113ad565b9050866001600160a01b0316836001600160a01b03161415801561070b57506001600160601b0382811614155b156107b157600061073583836040518060600160405280603d8152602001611ffe603d91396113dc565b6001600160a01b03898116600081815260208181526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6107bc878783611426565b5060019695505050505050565b6107d333826116f8565b50565b60004382106108375760405162461bcd60e51b815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610647565b6001600160a01b03831660009081526004602052604081205463ffffffff1690819003610868576000915050610612565b6001600160a01b0384166000908152600360205260408120849161088d600185611e10565b63ffffffff90811682526020820192909252604001600020541611610900576001600160a01b0384166000908152600360205260408120906108d0600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b031691506106129050565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff1683101561093b576000915050610612565b600080610949600184611e10565b90505b8163ffffffff168163ffffffff161115610a1b576000600261096e8484611e10565b6109789190611e34565b6109829083611e10565b6001600160a01b038816600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529192508790036109ef576020015194506106129350505050565b805163ffffffff16871115610a0657819350610a14565b610a11600183611e10565b92505b505061094c565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60065461010090046001600160a01b03163314610a8f5760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610b5483604051806060016040528060268152602001611f31602691396113ad565b9050610b61338583611426565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610b96576000610be2565b6001600160a01b038316600090815260036020526040812090610bba600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d6b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610647565b6001600160a01b0381166000908152600560205260408120805491610e0183611e65565b919050558914610e5e5760405162461bcd60e51b815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610647565b87421115610ebd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610647565b610ec7818b6116f8565b505050505b505050505050565b60006000198603610eed57506001600160601b03610f12565b610f0f86604051806060016040528060248152602001611fa6602491396113ad565b90505b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086610fef83611e65565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161106e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661113c5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e6174757265006044820152606401610647565b8b6001600160a01b0316816001600160a01b03161461119d5760405162461bcd60e51b815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a65640000000000006044820152606401610647565b884211156111ed5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e61747572652065787069726564006044820152606401610647565b846000808e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ab91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b60065461010090046001600160a01b031633146112f05760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b0381166113465760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b6006546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081600160601b84106113d45760405162461bcd60e51b81526004016106479190611b92565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114135760405162461bcd60e51b81526004016106479190611b92565b5061141e8385611e7e565b949350505050565b60065460ff1680611446575060065461010090046001600160a01b031633145b8061145b57506007546001600160a01b031633145b6114a75760405162461bcd60e51b815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e0000006044820152606401610647565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610647565b6001600160a01b03821661159f5760405162461bcd60e51b815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610647565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526115ea936001600160601b03909216928592919061203b908301396113dc565b6001600160a01b03848116600090815260016020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482516060810190935260308084526116529491909116928592909190611f0190830139611782565b6001600160a01b0383811660008181526001602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038084166000908152600260205260408082205485841683529120546116f3929182169116836117cf565b505050565b6001600160a01b03808316600081815260026020818152604080842080546001845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461177c8284836117cf565b50505050565b60008061178f8486611e9e565b9050846001600160601b0316816001600160601b0316101583906117c65760405162461bcd60e51b81526004016106479190611b92565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156117fa57506000816001600160601b0316115b156116f3576001600160a01b038316156118bf576001600160a01b03831660009081526004602052604081205463ffffffff16908161183a576000611886565b6001600160a01b03851660009081526003602052604081209061185e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b905060006118ad8285604051806060016040528060288152602001611f57602891396113dc565b90506118bb86848484611977565b5050505b6001600160a01b038216156116f3576001600160a01b03821660009081526004602052604081205463ffffffff1690816118fa576000611946565b6001600160a01b03841660009081526003602052604081209061191e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061196d8285604051806060016040528060278152602001611f7f60279139611782565b9050610ecc858484845b600061199b43604051806060016040528060348152602001611fca60349139611b6f565b905060008463ffffffff161180156119f557506001600160a01b038516600090815260036020526040812063ffffffff8316916119d9600188611e10565b63ffffffff908116825260208201929092526040016000205416145b15611a69576001600160a01b03851660009081526003602052604081208391611a1f600188611e10565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611b1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600382528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611ae9846001611ebe565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d45760405162461bcd60e51b815260040161064791905b600060208083528351808285015260005b81811015611bbf57858101830151858201604001528201611ba3565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bf757600080fd5b919050565b60008060408385031215611c0f57600080fd5b611c1883611be0565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b611c4484611be0565b9250611c5260208501611be0565b9150604084013590509250925092565b600060208284031215611c7457600080fd5b610be282611be0565b803560ff81168114611bf757600080fd5b60008060008060008060c08789031215611ca757600080fd5b611cb087611be0565b95506020870135945060408701359350611ccc60608801611c7d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611d0157600080fd5b611d0a88611be0565b9650611d1860208901611be0565b95506040880135945060608801359350611d3460808901611c7d565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d6357600080fd5b611d6c83611be0565b9150611d7a60208401611be0565b90509250929050565b60008060408385031215611d9657600080fd5b611d9f83611be0565b9150602083013563ffffffff81168114611db857600080fd5b809150509250929050565b6020808252601f908201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604082015260600190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611e2d57611e2d611dfa565b5092915050565b600063ffffffff80841680611e5957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611e7757611e77611dfa565b5060010190565b6001600160601b03828116828216039080821115611e2d57611e2d611dfa565b6001600160601b03818116838216019080821115611e2d57611e2d611dfa565b63ffffffff818116838216019080821115611e2d57611e2d611dfa56fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212205c356fbd26a2927ad0969afd2d786175a49452b6df0cc597ce2d0edbb24a252964736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xE329 CODESIZE SUB DUP1 PUSH3 0xE329 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x811 JUMP JUMPDEST PUSH3 0x3F CALLER PUSH3 0x734 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x4D SWAP1 PUSH3 0x784 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH4 0x10DC1381 PUSH1 0xE3 SHL DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x86E09C08 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0xD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1ED6511 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP3 POP PUSH4 0x1ED65110 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x13A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD PUSH3 0x14C SWAP1 PUSH3 0x792 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x169 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x76AAD605 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x76AAD605 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x1DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH3 0x202 SWAP1 PUSH3 0x7A0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x338F12B9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xCE3C4AE4 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x28F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH3 0x2B3 SWAP1 PUSH3 0x7AE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x2E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xC5120B39 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xC5120B39 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x32B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x60 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP3 SWAP1 PUSH3 0x366 SWAP1 PUSH3 0x7BC JUMP JUMPDEST PUSH3 0x373 SWAP3 SWAP2 SWAP1 PUSH3 0x849 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x390 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x530E784F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x530E784F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x405 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH3 0x429 SWAP1 PUSH3 0x7CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x456 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x56EE0D3B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xADDC1A76 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x4B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP PUSH3 0x4DA SWAP1 PUSH3 0x7D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x507 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x21DA5837 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x21DA5837 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x552 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x567 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 ADDRESS PUSH1 0x40 MLOAD PUSH3 0x57C SWAP1 PUSH3 0x7E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x5A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0x1795D5B3 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0xBCAEAD98 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x609 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xF2FDE38B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP3 POP PUSH4 0xF2FDE38B SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x664 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF2FDE38B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xF2FDE38B SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x6AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x6C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF2FDE38B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP PUSH4 0xF2FDE38B SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x722 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x8B2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x9EA DUP1 PUSH3 0xF40 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x728 DUP1 PUSH3 0x192A DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0xBD2 DUP1 PUSH3 0x2052 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x443B DUP1 PUSH3 0x2C24 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x16B2 DUP1 PUSH3 0x705F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x2349 DUP1 PUSH3 0x8711 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x16C5 DUP1 PUSH3 0xAA5A DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x220A DUP1 PUSH3 0xC11F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x830 DUP4 PUSH3 0x7F4 JUMP JUMPDEST SWAP2 POP PUSH3 0x840 PUSH1 0x20 DUP5 ADD PUSH3 0x7F4 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP5 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP4 DUP7 DUP4 ADD SWAP3 SWAP1 SWAP2 PUSH1 0x60 DUP8 ADD SWAP1 DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x8A3 JUMPI DUP6 MLOAD DUP1 MLOAD DUP7 AND DUP5 MSTORE DUP5 ADD MLOAD DUP6 AND DUP5 DUP5 ADD MSTORE SWAP5 DUP4 ADD SWAP5 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x878 JUMP JUMPDEST POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x67E DUP1 PUSH3 0x8C2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF7 JUMPI DUP1 PUSH4 0xABD45AC6 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xDE287359 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xF9D68C81 EQ PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2630C12F EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x2954018C EQ PUSH2 0xC7 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8874FF1F EQ PUSH2 0xE4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x13E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE2 PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0x50D JUMP JUMPDEST PUSH2 0x152 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAB JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x28F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x5E9 JUMP JUMPDEST PUSH2 0x301 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x37F JUMP JUMPDEST PUSH2 0x146 PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x150 PUSH1 0x0 PUSH2 0x431 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x15A PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x3 SLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE8A97A3E SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x18F JUMPI PUSH2 0x18F PUSH2 0x60B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x60B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1EB SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x219 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x227 SWAP1 PUSH2 0x621 JUMP JUMPDEST SWAP1 POP PUSH2 0x15D JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF2FDE38B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xF2FDE38B SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x288 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x297 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4E71E0C8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x309 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x373 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x37C DUP2 PUSH2 0x431 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x387 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4E71E0C8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x150 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x36A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4BA JUMPI PUSH2 0x4BA PUSH2 0x481 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E9 JUMPI PUSH2 0x4E9 PUSH2 0x481 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x538 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x55E JUMPI PUSH2 0x55E PUSH2 0x481 JUMP JUMPDEST PUSH2 0x56C DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x4C0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP8 DUP3 GT ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH2 0x5DE JUMPI PUSH1 0x40 DUP5 DUP10 SUB SLT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5B2 PUSH2 0x497 JUMP JUMPDEST PUSH2 0x5BB DUP6 PUSH2 0x4F1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5C8 DUP7 DUP7 ADD PUSH2 0x4F1 JUMP JUMPDEST DUP2 DUP8 ADD MSTORE DUP4 MSTORE PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH2 0x591 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x604 DUP3 PUSH2 0x4F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x641 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB4 LOG1 0xC9 0xA8 DUP1 LOG3 MSTORE BLOCKHASH DUP3 DUP5 BASEFEE PUSH25 0x97289C1C30CE6B261117CF6898FD0CC90D1AEDA164736F6C63 NUMBER STOP ADDMOD GT STOP CALLER PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x5F JUMP JUMPDEST PUSH1 0x40 MLOAD ADDRESS SWAP1 PUSH16 0x20A2222922A9A9AFA82927AB24A222A9 PUSH1 0x81 SHL SWAP1 PUSH32 0xB37614C7D254EA8D16EB81FA11DDDAEB266AA8BA4917980859C7740AFF30C691 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xAF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x92C DUP1 PUSH2 0xBE PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x77532ED9 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xBCAEAD98 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xCE3C4AE4 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCE3C4AE4 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCAEAD98 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xC5120B39 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0xC513C9BB EQ PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x9068A868 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xADDC1A76 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAFFD9243 EQ PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x77532ED9 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x7B6757FF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x86E09C08 EQ PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x699F200F EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x76AAD605 EQ PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60678C2 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x8737695 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x1ED65110 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x21DA5837 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0x26C74FC3 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x44B88563 EQ PUSH2 0x20B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B6 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B6 PUSH2 0x383 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x394 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1EE PUSH2 0x1FE CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x3BD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3FD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x41C JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x434 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4C9 JUMP JUMPDEST PUSH2 0x23E PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x25A CALLDATASIZE PUSH1 0x4 PUSH2 0x88F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x28B CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x516 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x530 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x556 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x575 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x592 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x5B6 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5CE JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x611 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x631 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x658 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x6E9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL PUSH2 0x6FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH3 0x1050D3 PUSH1 0xEA SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x39C PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x3C5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x4B7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x80F JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x4D1 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x4FC PUSH1 0x0 PUSH2 0x80F JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x506 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH3 0x1050D3 PUSH1 0xEA SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x538 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x55E PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x59A PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x5D6 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x5F5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x639 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x660 PUSH2 0x75C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH3 0x415031 PUSH1 0xE8 SHL SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP2 PUSH2 0x755 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x8A8 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP5 SWAP2 PUSH32 0xB37614C7D254EA8D16EB81FA11DDDAEB266AA8BA4917980859C7740AFF30C691 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8D5 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x8B9 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD 0xAC PUSH32 0x71485A8DB5AEE1D67BB3FF3D39172B102ABA5B8428150C0D728E808EA864736F PUSH13 0x63430008110033608060405234 DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x6AA DUP1 PUSH2 0x7E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x73281819 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xBA306DF1 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBA306DF1 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xD4EB5DB0 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x73281819 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x819AD68E EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xADCE758D EQ PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E71E0C8 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x5F259ABA EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x35914829 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3A41EC64 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x4910832F EQ PUSH2 0x15E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x28E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x171 PUSH2 0x2E2 JUMP JUMPDEST PUSH2 0x183 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x377 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x224 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x3DF JUMP JUMPDEST PUSH2 0x171 PUSH2 0x237 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x474 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x24A CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1FE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x509 JUMP JUMPDEST PUSH2 0x296 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xAE26B1CFE9454BA87274A4E8330B6654684362D0F3D7BBD17F7449A1D38387C6 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x365 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x59A JUMP JUMPDEST PUSH2 0x389 PUSH1 0x0 PUSH2 0x5F4 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x393 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xD400DA6C0C0A894DACC0981730B88AF0545D00272EE8FFF1437BF560FF245FC4 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x3E7 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42B JUMPI PUSH1 0x40 MLOAD PUSH4 0x57F592B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x1998397E7203F7BACA9D6F41B9E4DA6E768DAAC5CAAD4234FB9BF5869D271545 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x47C PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1163189 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x28B01395B7E25D20552A0C8DC8ECD3B1D4ABC986F14DAD7885FD45B6FD73C8D9 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x511 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x389 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x656 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 JUMPDEST 0xBA CREATE 0xCB 0xDD DELEGATECALL MUL CALLDATALOAD 0xBB 0xAD DUP15 0xD2 ADD 0x25 GT SIGNEXTEND SWAP11 PUSH22 0x8C1C68221F654A0FB5A5226BF064736F6C6343000811 STOP CALLER PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xBD2 CODESIZE SUB DUP1 PUSH2 0xBD2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE POP PUSH2 0x107 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0xA94 PUSH2 0x13E PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x1D5 ADD MSTORE DUP2 DUP2 PUSH2 0x27F ADD MSTORE DUP2 DUP2 PUSH2 0x390 ADD MSTORE DUP2 DUP2 PUSH2 0x4AD ADD MSTORE PUSH2 0x681 ADD MSTORE PUSH2 0xA94 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xB4AC6860 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB4AC6860 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xC29277CD EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xD914CD4B EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xE26B2F63 EQ PUSH2 0x22D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x94144856 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0xAC4AFA38 EQ PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5B16EBB7 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x5B16EBB7 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x6FBC6F6B EQ PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E16E4FC EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x240 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH2 0x26A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x16D JUMP JUMPDEST PUSH2 0x190 PUSH2 0x319 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x121 SWAP2 SWAP1 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x1AB CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x37B JUMP JUMPDEST PUSH2 0x190 PUSH2 0x428 JUMP JUMPDEST PUSH2 0x10D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x10D PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH2 0x132 PUSH2 0x228 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x498 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x23B CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x66C JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F2 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x30F JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x83A JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x403 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x88C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x520 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x53D JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x586 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x435231 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x5DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xF816B5143086C89D103A0683286BE86C2B741E83EBFA75135AAE606E2F5C6E53 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F4 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x711 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x751 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x21A919 PUSH1 0xE9 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x7AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x58AD3CFC4B6552A53C8C4128AE9B080E14B4378A159280643A62C6F709CEE24F SWAP2 LOG2 POP JUMP JUMPDEST PUSH2 0x842 PUSH2 0x8C9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x894 PUSH2 0x912 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x86F CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E2 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x9BD JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA3D JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA21 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD PUSH6 0xD12495F46EA6 0xB9 0xD 0xB2 PUSH22 0xDC0FFBE0092AE79649978A2F35C0EAA9BA89B4CD6473 PUSH16 0x6C6343000811003360E0604052348015 PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x443B CODESIZE SUB DUP1 PUSH3 0x443B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xC513C9BB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0xC513C9BB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCD SWAP2 SWAP1 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C252F91 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x127 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x14D SWAP2 SWAP1 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x192 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x421E PUSH3 0x21D PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x15B ADD MSTORE DUP2 DUP2 PUSH2 0x159E ADD MSTORE PUSH2 0x20EA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C0 ADD MSTORE DUP2 DUP2 PUSH2 0x1033 ADD MSTORE DUP2 DUP2 PUSH2 0x1848 ADD MSTORE DUP2 DUP2 PUSH2 0x1943 ADD MSTORE DUP2 DUP2 PUSH2 0x1A10 ADD MSTORE DUP2 DUP2 PUSH2 0x1BA4 ADD MSTORE DUP2 DUP2 PUSH2 0x1C9F ADD MSTORE DUP2 DUP2 PUSH2 0x1D4A ADD MSTORE DUP2 DUP2 PUSH2 0x1DF0 ADD MSTORE DUP2 DUP2 PUSH2 0x1F02 ADD MSTORE DUP2 DUP2 PUSH2 0x30F4 ADD MSTORE PUSH2 0x319A ADD MSTORE PUSH1 0x0 PUSH2 0x11C ADD MSTORE PUSH2 0x421E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x663B8FDB EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x7A0C7B21 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0xA80DEDA3 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0xAE093F3F EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0xFC9914CB EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDBD616D EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x1BCD8FC0 EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x2954018C EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x4B2F336D EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x4C472FC9 EQ PUSH2 0x17D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x38F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x100A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A07 JUMP JUMPDEST PUSH2 0x10A PUSH2 0x1842 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A16 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x13E PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x19EC JUMP JUMPDEST PUSH2 0x198 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x1AE PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3CDD JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1F5 PUSH2 0x1F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1D43 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D3F JUMP JUMPDEST PUSH2 0x215 PUSH2 0x210 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D94 JUMP JUMPDEST PUSH2 0x235 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x30D0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x24D PUSH2 0x34D6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x25E DUP9 PUSH2 0x318E JUMP JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH1 0x0 DUP6 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x2E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0xFF DUP8 AND PUSH2 0x220 DUP10 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x20 DUP12 ADD MSTORE DUP12 DUP2 AND PUSH1 0x60 DUP12 ADD MSTORE DUP3 AND DUP10 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 SUB PUSH2 0x71A JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E3 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x456 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x534 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x531 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x540 JUMPI PUSH2 0x160 DUP9 ADD MSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x5A9 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x5A6 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x5B5 JUMPI PUSH2 0x180 DUP9 ADD MSTORE JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x132C653F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x996329F8 SWAP1 PUSH1 0x64 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x62C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x629 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DED JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x63E JUMPI POP POP ISZERO ISZERO PUSH2 0x1A0 DUP11 ADD MSTORE POP POP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1AFBB7A4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x67C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6A0 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x710 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x8DF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x758 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x77C SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7EE SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST POP PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x83A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x85E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8CE SWAP2 SWAP1 PUSH2 0x3E51 JUMP JUMPDEST PUSH1 0xC0 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x953 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x9B5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9B5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA19 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP10 AND EQ PUSH2 0xA93 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA8E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xAF5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0xB71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB6C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xBDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D1473B3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB451CECC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x240 DUP11 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBFA JUMPI PUSH2 0xBFA PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC4C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0xC18 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF26 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP1 DUP4 SHL SWAP1 PUSH1 0xFF DUP13 AND SWAP1 SUB PUSH2 0xD87 JUMPI PUSH1 0x40 MLOAD PUSH4 0x57853281 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE DUP11 AND SWAP1 PUSH4 0xAF0A6502 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCDF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD03 SWAP2 SWAP1 PUSH2 0x3E95 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xED8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDEF SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE JUMPDEST PUSH2 0x240 DUP13 ADD MLOAD DUP2 AND ISZERO PUSH2 0xEEC JUMPI PUSH1 0x1 PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 JUMPDEST ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x140 DUP13 ADD MLOAD DUP1 MLOAD DUP4 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0xF11 JUMPI PUSH2 0xF11 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xC56 JUMP JUMPDEST POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D11A15 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF89 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP10 PUSH2 0x1E0 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x200 DUP11 ADD MSTORE POP SWAP7 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1012 PUSH2 0x3593 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x107C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10A0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x10BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A709647 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 DUP4 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFE14112D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP6 SWAP3 SWAP2 PUSH4 0xFE14112D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1107 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x112B SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEF8D9603 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xE0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C19386C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1248 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x126C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x100 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12D8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1320 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1344 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0x80 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x138B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13AF SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x140 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x141B SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x36DDA7D5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1476 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149A SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1519 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE941FA78 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1561 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1585 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH32 0x0 DUP3 AND EQ PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH4 0x609AE317 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 MLOAD SWAP2 DUP5 AND SWAP3 PUSH4 0x609AE317 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1601 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1625 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1C0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDBCB313B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x166D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1691 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1A0 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1703 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA84F927 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x5427C938 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x174E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1772 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x17BD JUMPI PUSH2 0x180 DUP6 ADD MLOAD DUP2 SWAP1 PUSH2 0x17AE SWAP1 PUSH2 0x1792 SWAP1 PUSH2 0x2710 PUSH2 0x3F72 JUMP JUMPDEST DUP8 PUSH2 0x100 ADD MLOAD DUP9 PUSH2 0x140 ADD MLOAD PUSH2 0x17A8 SWAP2 SWAP1 PUSH2 0x3F85 JUMP JUMPDEST SWAP1 PUSH2 0x3402 JUMP JUMPDEST PUSH2 0x17B8 SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD JUMPDEST DUP6 PUSH2 0x120 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x180C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1830 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x1E0 DUP7 ADD MSTORE POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB4AC6860 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18C8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18E3 JUMPI PUSH2 0x18E3 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x191C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1909 PUSH2 0x3593 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1901 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x15895F47 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xAC4AFA38 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1992 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19B6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x19C1 DUP2 PUSH2 0x100A JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x19D3 JUMPI PUSH2 0x19D3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1922 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x1A98 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1AA6 DUP8 PUSH2 0x318E JUMP JUMPDEST POP POP SWAP4 POP SWAP4 POP POP SWAP3 POP DUP3 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x1B29 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B24 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B93 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C24 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C3F JUMPI PUSH2 0x1C3F PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C78 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1C65 PUSH2 0x3630 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1C5D JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D12 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D1D DUP2 PUSH2 0x1FC5 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1D2F JUMPI PUSH2 0x1D2F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1C7E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DCA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E84 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E63 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E6F DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1E7B JUMPI DUP4 PUSH1 0x1 ADD SWAP4 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1DCF JUMP JUMPDEST POP DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1E9E JUMPI PUSH2 0x1E9E PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1ED7 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1EC4 PUSH2 0x34D6 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1EBC JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F75 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F81 DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1FB4 JUMPI PUSH2 0x1F90 DUP2 DUP8 PUSH2 0x245 JUMP JUMPDEST DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1FA2 JUMPI PUSH2 0x1FA2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1EE1 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FCD PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1FDF DUP9 PUSH2 0x318E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 AND DUP14 MSTORE PUSH1 0xFF DUP7 AND PUSH2 0x1A0 DUP15 ADD DUP2 SWAP1 MSTORE SWAP6 SWAP12 POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH1 0x1 EQ PUSH2 0x2074 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x206F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x20D6 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20D6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP10 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 SWAP1 SWAP2 AND EQ PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP9 AND EQ PUSH2 0x2186 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x215D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2181 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x21E8 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21E8 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x40 DUP12 DUP2 ADD DUP3 SWAP1 MSTORE MLOAD PUSH4 0x2E97CA21 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH4 0x2E97CA21 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x45D31F9D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x45D31F9D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22CB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP9 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2312 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2336 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE POP PUSH1 0xFF DUP7 AND PUSH1 0x1 SUB PUSH2 0x241F JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9B2CB5D8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2386 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23AA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5F48F393 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2415 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH2 0x2497 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x860AEFCF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2480 SWAP2 SWAP1 PUSH2 0x3FDD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0xE0 DUP11 ADD MSTORE AND PUSH1 0xC0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x250B JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2506 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x256D JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2549 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x256D SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2588 JUMPI PUSH2 0x2588 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP10 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25D1 JUMPI PUSH2 0x25D1 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25FA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x180 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x280F JUMPI DUP8 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x273F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F2F9713 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5E5F2E26 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x265F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2683 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x269D JUMPI PUSH2 0x269D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF064E87 PUSH1 0xE3 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0x78327438 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2716 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP11 PUSH2 0x180 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x272D JUMPI PUSH2 0x272D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP PUSH2 0x2807 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2783 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A7 SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST DUP1 PUSH2 0xFFFF AND SWAP1 POP DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x27C5 JUMPI PUSH2 0x27C5 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH2 0x180 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27E3 JUMPI PUSH2 0x27E3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2604 JUMP JUMPDEST POP POP DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2A1E JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x50E036FF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x285C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2880 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x289B JUMPI PUSH2 0x289B PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x28E0 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x28B9 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A17 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5094CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5094CB4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x293A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x295E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 DUP4 MSTORE SWAP3 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 DUP11 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP11 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A03 JUMPI PUSH2 0x2A03 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x28EA JUMP JUMPDEST POP POP PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x373C8F62 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2A86 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AA4 JUMPI PUSH2 0x2AA4 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2AE9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2AC2 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2BE6 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B0F JUMPI PUSH2 0x2B0F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFDD57645 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B6E SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BAF SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP12 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BD2 JUMPI PUSH2 0x2BD2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2AF3 JUMP JUMPDEST POP POP POP JUMPDEST DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2DC3 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB2C53A6C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C57 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0xFF PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5E0B63D3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x5E0B63D3 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CCE SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2A0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D41 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2C0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DB4 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2E0 DUP9 ADD MSTORE PUSH2 0x30C5 JUMP JUMPDEST DUP2 DUP8 PUSH2 0x1C0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E44 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x1E0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9408B63F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EC4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x220 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCFF0AB96 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F44 SWAP2 SWAP1 PUSH2 0x40CC JUMP JUMPDEST POP POP ISZERO ISZERO PUSH2 0x240 DUP10 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x9FD12B77 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9FD12B77 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FB8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH2 0x260 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8345F26E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3000 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3024 SWAP2 SWAP1 PUSH2 0x412C JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x4D78E9AD PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9AF1D35A SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3096 SWAP2 SWAP1 PUSH2 0x414F JUMP JUMPDEST PUSH2 0xFFFF SWAP1 DUP2 AND PUSH2 0x320 DUP14 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x300 DUP13 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2E0 DUP12 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2C0 DUP11 ADD MSTORE AND PUSH2 0x2A0 DUP9 ADD MSTORE JUMPDEST POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x313B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x315F SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x317C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3186 DUP5 DUP5 PUSH2 0x3455 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FBC6F6B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x31F3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3210 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3234 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x3251 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x328F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32B3 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP7 POP DUP7 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x332C JUMPI DUP8 SWAP6 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF93F515B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3301 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3325 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP5 POP PUSH2 0x33F8 JUMP JUMPDEST DUP8 SWAP4 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F7A1881 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x336D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3391 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP3 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33F5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x340F JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x341C JUMPI POP PUSH1 0x0 PUSH2 0x344F JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x342A PUSH1 0x2 DUP3 PUSH2 0x41B4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x3438 DUP5 DUP7 PUSH2 0x3F85 JUMP JUMPDEST PUSH2 0x3442 SWAP2 SWAP1 PUSH2 0x41D5 JUMP JUMPDEST PUSH2 0x344C SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x55EE9B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP6 AND SWAP1 PUSH4 0x55EE9B5 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34C4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x200 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x340 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x220 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x240 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x260 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x280 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x300 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x320 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x372E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3739 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3749 DUP2 PUSH2 0x3703 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 MSTORE DUP4 DUP2 ADD MLOAD DUP5 DUP10 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP9 ADD MSTORE PUSH1 0x80 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3768 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x260 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x37E8 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x37FC PUSH1 0x40 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3817 PUSH1 0x60 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3832 PUSH1 0x80 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3881 DUP4 DUP8 ADD DUP3 PUSH2 0x3754 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x38B1 DUP3 DUP8 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1E0 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x200 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x220 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 SWAP3 DUP4 ADD MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x37BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x391A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x394C PUSH1 0x20 DUP5 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x3967 PUSH1 0x40 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x3982 PUSH1 0x60 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP2 DUP2 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1C0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1E0 SWAP1 DUP2 ADD MLOAD PUSH1 0xFF AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x200 DUP2 ADD PUSH2 0x344F DUP3 DUP5 PUSH2 0x392C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A59 JUMPI PUSH2 0x3A45 DUP4 DUP6 MLOAD PUSH2 0x392C JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 PUSH2 0x200 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3A32 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP10 MSTORE SWAP1 DUP5 ADD MLOAD AND DUP4 DUP9 ADD MSTORE PUSH1 0x40 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AFA JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x340 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3B42 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3B5D PUSH1 0x40 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3B71 PUSH1 0x60 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3B85 PUSH1 0x80 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3BD4 DUP4 DUP8 ADD DUP3 PUSH2 0x3A65 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3BF0 DUP4 DUP3 PUSH2 0x3A9E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3C0C DUP4 DUP3 PUSH2 0x3AE6 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x3C25 DUP3 DUP8 ADD DUP3 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x200 DUP1 DUP6 ADD MLOAD ISZERO ISZERO SWAP1 DUP7 ADD MSTORE PUSH2 0x220 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 DUP1 DUP5 ADD MLOAD ISZERO ISZERO SWAP1 DUP6 ADD MSTORE PUSH2 0x260 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x280 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x2A0 DUP1 DUP5 ADD MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x2E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x300 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x320 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D20 DUP6 DUP4 MLOAD PUSH2 0x3B16 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D04 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D82 DUP6 DUP4 MLOAD PUSH2 0x37BC JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D66 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3B16 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3DB2 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3E05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP4 MLOAD PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x80 SWAP1 SWAP8 ADD MLOAD SWAP3 SWAP9 SWAP2 SWAP8 POP SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3EAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x3EB6 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x60 SWAP1 SWAP8 ADD MLOAD SWAP2 SWAP9 SWAP1 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x344C DUP3 PUSH2 0x3ED4 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x3F2F DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3FC1 JUMPI PUSH2 0x3FC1 PUSH2 0x3F9C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FF9 DUP4 PUSH2 0x3FC6 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3FC6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x401A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4046 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x4058 JUMPI PUSH2 0x4058 PUSH2 0x3E7F JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR ISZERO PUSH2 0x407D JUMPI PUSH2 0x407D PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 DUP3 MSTORE DUP5 DUP3 ADD SWAP3 POP DUP4 DUP2 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x409B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x40C0 JUMPI PUSH2 0x40B1 DUP6 PUSH2 0x3DA7 JUMP JUMPDEST DUP5 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x40A0 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x40E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40EB DUP6 PUSH2 0x3FC6 JUMP JUMPDEST SWAP4 POP PUSH2 0x40F9 PUSH1 0x20 DUP7 ADD PUSH2 0x3ED4 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x4121 PUSH1 0x60 DUP7 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x413E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4170 DUP7 PUSH2 0x3EFF JUMP JUMPDEST SWAP5 POP PUSH2 0x417E PUSH1 0x20 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP4 POP PUSH2 0x418C PUSH1 0x40 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP3 POP PUSH2 0x419A PUSH1 0x60 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP2 POP PUSH2 0x41A8 PUSH1 0x80 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 AND DUP1 PUSH2 0x41C9 JUMPI PUSH2 0x41C9 PUSH2 0x3F9C JUMP JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0xDB DIV 0xDD PUSH11 0xD85CBB23C61A3C1DF229CD 0xEE 0x23 SWAP6 EXP STATICCALL 0xE SWAP4 0xD1 SWAP2 LOG4 0xE6 0xC OR RETURNDATASIZE 0xE7 SWAP7 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16B2 CODESIZE SUB DUP1 PUSH3 0x16B2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x60C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCC SWAP2 SWAP1 PUSH3 0x70E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE POP DUP1 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x142 JUMPI PUSH3 0x139 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x100 JUMPI PUSH3 0x100 PUSH3 0x733 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x121 JUMPI PUSH3 0x121 PUSH3 0x733 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH3 0x14C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 ADD PUSH3 0xDE JUMP JUMPDEST POP POP POP POP PUSH3 0x827 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH3 0x16A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH3 0x189 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x1A8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0x4B5 PUSH1 0x20 SHL PUSH3 0x559 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x1F5 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0x4B5 PUSH1 0x20 SHL PUSH3 0x559 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x21F JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH3 0x1CD JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x27C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x279 SWAP2 DUP2 ADD SWAP1 PUSH3 0x749 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x29A JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x8 EQ PUSH3 0x2BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD62ADA11 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x31F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x31C SWAP2 DUP2 ADD SWAP1 PUSH3 0x76E JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH3 0x328 JUMPI SWAP1 POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x387 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x384 SWAP2 DUP2 ADD SWAP1 PUSH3 0x749 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x3A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 DUP2 PUSH1 0xFF AND GT ISZERO PUSH3 0x3CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x42A JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x427 SWAP2 DUP2 ADD SWAP1 PUSH3 0x7AA JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x448 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH3 0x45C JUMPI PUSH3 0x45C DUP6 DUP6 DUP5 DUP5 PUSH3 0x4C4 JUMP JUMPDEST POP POP POP POP POP PUSH3 0x46F DUP5 DUP5 DUP5 DUP5 PUSH3 0x52A JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE263805B03657AB13064915D0723C5CE14981547E7CBA5283F66B9E5D81F6E6E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT PUSH3 0x4E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56E05D2B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB AND LT DUP1 PUSH3 0x505 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x524 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB1CF6755 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 ISZERO PUSH3 0x542 JUMPI PUSH1 0x1 PUSH1 0xA1 SHL OR JUMPDEST PUSH3 0x558 PUSH1 0xFF PUSH1 0xA2 SHL PUSH1 0xA2 DUP5 SWAP1 SHL AND DUP3 PUSH3 0x7FF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x593 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x5D3 JUMPI PUSH3 0x5D3 PUSH3 0x598 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x604 JUMPI PUSH3 0x604 PUSH3 0x598 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP1 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x62C DUP5 PUSH3 0x57B JUMP JUMPDEST PUSH1 0x20 DUP6 DUP2 ADD MLOAD SWAP2 SWAP5 POP SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x676 JUMPI PUSH3 0x676 PUSH3 0x598 JUMP JUMPDEST PUSH3 0x686 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH3 0x5D9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP10 DUP3 GT ISZERO PUSH3 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH3 0x6FE JUMPI DUP6 DUP5 DUP12 SUB SLT ISZERO PUSH3 0x6C6 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH3 0x6D0 PUSH3 0x5AE JUMP JUMPDEST PUSH3 0x6DB DUP6 PUSH3 0x57B JUMP JUMPDEST DUP2 MSTORE PUSH3 0x6EA DUP7 DUP7 ADD PUSH3 0x57B JUMP JUMPDEST DUP2 DUP8 ADD MSTORE DUP4 MSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH3 0x6AC JUMP JUMPDEST DUP1 SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x72C DUP3 PUSH3 0x57B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x593 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x7C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x7CE DUP7 PUSH3 0x792 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH3 0x7F3 PUSH1 0x80 DUP8 ADD PUSH3 0x792 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH3 0x821 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0xE5A PUSH3 0x858 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x195 ADD MSTORE DUP2 DUP2 PUSH2 0x23D ADD MSTORE DUP2 DUP2 PUSH2 0x360 ADD MSTORE PUSH2 0x43E ADD MSTORE PUSH2 0xE5A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xB66102DF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB66102DF EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0xE8A97A3E EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0xF190E5FA EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0xF9A65030 EQ PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x9DCB511A EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x5CECBD0E EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x7AFB0104 EQ PUSH2 0x14A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x228 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x2D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x2E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH2 0xDC PUSH2 0x34B JUMP JUMPDEST PUSH2 0x178 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x178 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x1C5 CALLDATASIZE PUSH1 0x4 PUSH2 0xBBD JUMP JUMPDEST PUSH2 0x40C JUMP JUMPDEST PUSH2 0xDC PUSH2 0x1D8 CALLDATASIZE PUSH1 0x4 PUSH2 0xBF9 JUMP JUMPDEST PUSH2 0x429 JUMP JUMPDEST PUSH2 0x1F0 PUSH2 0x1EB CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x4DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP5 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x223 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x531 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B0 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x568 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E2 DUP3 PUSH2 0x5BA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2F6 DUP7 DUP7 PUSH2 0x531 JUMP JUMPDEST SWAP2 POP PUSH2 0x302 DUP5 DUP5 PUSH2 0x531 JUMP JUMPDEST SWAP1 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31B DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP2 PUSH2 0x32C DUP3 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 SWAP1 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x340 SWAP2 SWAP1 PUSH2 0xD62 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D3 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x3F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x665 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x403 DUP3 PUSH2 0x4DC JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x421 PUSH2 0x41B DUP6 DUP6 PUSH2 0x531 JUMP JUMPDEST DUP4 PUSH2 0x30D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B1 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x4CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D8 DUP3 DUP3 PUSH2 0x6A2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 DUP2 SWAP1 DUP1 DUP3 SUB PUSH2 0x519 JUMPI PUSH1 0x40 MLOAD PUSH4 0x25DC56C1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0xA1 SHL DUP7 AND ISZERO ISZERO SWAP5 POP PUSH1 0xA2 DUP7 SWAP1 SHR SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x53F DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x54F DUP2 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 DUP4 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x570 PUSH2 0x9C7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5C9 DUP6 PUSH2 0x4DC JUMP JUMPDEST DUP1 SWAP6 POP DUP2 SWAP4 POP DUP3 SWAP5 POP POP POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x619 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x63D SWAP2 SWAP1 PUSH2 0xD9E JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP5 PUSH2 0x657 JUMPI PUSH2 0x657 DUP5 DUP5 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST DUP3 SWAP8 POP POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x66D PUSH2 0xA79 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x59D CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0x6BF JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x6DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x748 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x70C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x7A2 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x79F SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x7BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x8 EQ PUSH2 0x7E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD62ADA11 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x840 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x83D SWAP2 DUP2 ADD SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x848 JUMPI SWAP1 POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x8A4 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x8A1 SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x8C1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x942 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x93F SWAP2 DUP2 ADD SWAP1 PUSH2 0xD9E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH2 0x970 JUMPI PUSH2 0x970 DUP6 DUP6 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST POP POP POP POP POP PUSH2 0x981 DUP5 DUP5 DUP5 DUP5 PUSH2 0xABF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE263805B03657AB13064915D0723C5CE14981547E7CBA5283F66B9E5D81F6E6E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 DUP4 SGT PUSH2 0xA31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56E05D2B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND LT DUP1 PUSH2 0xA55 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA73 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB1CF6755 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x1 PUSH1 0xA1 SHL OR JUMPDEST PUSH2 0xAEA PUSH1 0xFF PUSH1 0xA2 SHL PUSH1 0xA2 DUP5 SWAP1 SHL AND DUP3 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0xB71 PUSH1 0x20 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0xB86 PUSH1 0x60 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0xBE2 PUSH1 0x20 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBF0 PUSH1 0x40 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC15 DUP4 PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xC96 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xC7C JUMPI PUSH2 0xC7C PUSH2 0xC45 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xC89 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xC60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xCAD JUMPI POP PUSH1 0x1 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH2 0xCBA JUMPI POP PUSH1 0x0 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xCD0 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xCDA JUMPI PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x345 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xCEB JUMPI PUSH2 0xCEB PUSH2 0xC45 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x345 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xD19 JUMPI POP DUP2 DUP2 EXP PUSH2 0x345 JUMP JUMPDEST PUSH2 0xD23 DUP4 DUP4 PUSH2 0xC5B JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xD37 JUMPI PUSH2 0xD37 PUSH2 0xC45 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB44 DUP4 DUP4 PUSH2 0xC9E JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xD7F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xDB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDBF DUP7 PUSH2 0xD84 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0xDE2 PUSH1 0x80 DUP8 ADD PUSH2 0xD84 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xC2FD2DB6D7DC1B5845E6 SDIV COINBASE 0xBF GT 0xEE 0xB5 ADDMOD XOR GAS SWAP11 0xE8 MSTORE CODECOPY 0xB4 SWAP7 0x27 0xAB REVERT PUSH12 0x814564736F6C634300081100 CALLER PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2349 CODESIZE SUB DUP1 PUSH3 0x2349 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCC SWAP2 SWAP1 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 MSTORE PUSH1 0x1 DUP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP DUP3 AND PUSH3 0x124 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x11B SWAP2 SWAP1 PUSH3 0x4E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC513C9BB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x164 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x18A SWAP2 SWAP1 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH3 0x1A4 SWAP1 PUSH3 0x4A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x1C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x204A7F07 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x8129FC1C SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x21D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH3 0x231 PUSH3 0x28A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x0 DUP1 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xAC33FF75C19E70FE83507DB0D683FD3465C996598DC972688B7ACE676C89077B DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH3 0x531 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A4 PUSH1 0xA0 MLOAD PUSH3 0x38C PUSH1 0x20 SHL PUSH3 0xD09 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8129FC1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x2F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP4 DUP9 AND SWAP4 DUP5 OR SWAP1 SWAP2 SSTORE DUP4 SLOAD AND SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH3 0x354 SWAP3 POP PUSH1 0x5 SWAP2 POP DUP4 SWAP1 PUSH3 0x42F DUP2 SHL PUSH3 0xDA3 OR SWAP1 SHR JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0x9F69B6C10F6810213E055B0BA6BC0A4E2603F73C221AAD77EA35DA819CDA7DC3 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x42A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x11B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x446 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0x44F JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH3 0x498 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH3 0x449 JUMP JUMPDEST POP PUSH1 0x0 PUSH3 0x449 JUMP JUMPDEST PUSH2 0xB1A DUP1 PUSH3 0x182F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x510 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x4F2 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x129D PUSH3 0x592 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x213 ADD MSTORE DUP2 DUP2 PUSH2 0x2EB ADD MSTORE PUSH2 0x885 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1B8 ADD MSTORE PUSH2 0xC12 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x260 ADD MSTORE DUP2 DUP2 PUSH2 0x495 ADD MSTORE DUP2 DUP2 PUSH2 0x729 ADD MSTORE DUP2 DUP2 PUSH2 0x7D8 ADD MSTORE PUSH2 0xA94 ADD MSTORE PUSH2 0x129D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x121 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x88F64C54 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB1939763 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB1939763 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xB60E8518 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xD82ECC48 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xE3BA9ACE EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xF23953AB EQ PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x88F64C54 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x89B77B3E EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x8F7DCFA3 EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA904AAB6 EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x5DA33C5B EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x765E0159 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13D8C840 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x21D18456 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x2932472F EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x17E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH2 0x164 CALLDATASIZE PUSH1 0x4 PUSH2 0x10C0 JUMP JUMPDEST PUSH2 0x2D3 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x177 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0x480 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17C PUSH2 0x714 JUMP JUMPDEST PUSH2 0x18E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0xA7F JUMP JUMPDEST PUSH2 0x18E PUSH2 0xB8C JUMP JUMPDEST PUSH2 0x18E PUSH2 0xBE0 JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0xBF1 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1157 JUMP JUMPDEST PUSH2 0xBFE JUMP JUMPDEST PUSH2 0x17C PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35E SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x3A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x3A9 PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP5 DUP6 AND OR SWAP1 SWAP5 SSTORE DUP2 SLOAD SWAP1 SWAP3 AND SWAP1 SSTORE SWAP1 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD CALLER SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 POP PUSH32 0xF3EDE7039176503A8AD1FE7CFAA29475A9DBE0CDCAF04ECF9A5C10570C47B103 SWAP1 PUSH1 0x0 SWAP1 LOG3 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x508 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x52D PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP2 AND SUB PUSH2 0x57E JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE DUP2 SLOAD AND SWAP1 SSTORE PUSH2 0x651 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x414633 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x5DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP4 AND SUB PUSH2 0x60E JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP9 DUP7 AND DUP5 MSTORE SWAP2 DUP4 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP5 SSTORE SWAP2 SWAP1 MSTORE DUP2 SLOAD AND SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x6CE DUP3 PUSH1 0x5 PUSH2 0xDE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x25E267469BA2AE82515BE7B3D45DF60BF8308343F0809E8CF7319058E2255CE6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x778 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x79C SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xDFE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x827 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84B SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x868 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F8 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH2 0x93D PUSH1 0x5 DUP3 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x10518D PUSH1 0xEA SHL DUP2 MSTORE POP SWAP1 PUSH2 0x977 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP NUMBER DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9DB SWAP2 SWAP1 PUSH2 0x11E0 JUMP JUMPDEST EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414631 PUSH1 0xE8 SHL DUP2 MSTORE POP SWAP1 PUSH2 0xA17 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP5 DUP8 AND SWAP5 DUP6 OR SWAP1 SWAP2 SSTORE DUP5 SLOAD AND DUP4 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xCED6AB9AFC868B3A088366F6631AE20752993B5CCE5D5F0534EA5A59FCC57D56 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB07 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0xB24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x19A16039 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x19A16039 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xBDA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP2 PUSH2 0xBD2 DUP2 PUSH2 0x120F JUMP JUMPDEST SWAP3 POP POP PUSH2 0xB9E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBEC PUSH1 0x5 PUSH2 0xEAF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xEB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC36 PUSH32 0x0 PUSH2 0xD09 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8129FC1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP3 DUP8 AND SWAP3 DUP4 OR SWAP1 SWAP2 SSTORE DUP3 SLOAD AND OR SWAP1 SSTORE POP PUSH2 0xCD1 SWAP1 POP PUSH1 0x5 DUP3 PUSH2 0xDA3 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0x9F69B6C10F6810213E055B0BA6BC0A4E2603F73C221AAD77EA35DA819CDA7DC3 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEC5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0x7C1 JUMPI PUSH2 0x7C1 PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xF14 JUMP JUMPDEST PUSH2 0xE06 PUSH2 0x1007 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0xE58 PUSH2 0x1050 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0xE33 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0xDB8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 DUP4 PUSH2 0x1096 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xF0C JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x47A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xFFD JUMPI PUSH1 0x0 PUSH2 0xF38 PUSH1 0x1 DUP4 PUSH2 0x1228 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xF4C SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1228 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xFB1 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xF6C JUMPI PUSH2 0xF6C PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xF8F JUMPI PUSH2 0xF8F PUSH2 0x123B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0xFC2 JUMPI PUSH2 0xFC2 PUSH2 0x1251 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x10AD JUMPI PUSH2 0x10AD PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1117 DUP5 PUSH2 0x10E2 JUMP JUMPDEST SWAP3 POP PUSH2 0x1125 PUSH1 0x20 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP2 POP PUSH2 0x1133 PUSH1 0x40 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x114E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDB8 DUP3 PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11BF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x11A3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1221 JUMPI PUSH2 0x1221 PUSH2 0x11F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x47A JUMPI PUSH2 0x47A PUSH2 0x11F9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 0xDE SWAP10 PUSH9 0x90C56D4B43FB9E4EC0 SWAP5 SHL SWAP3 0xFB 0x2F PUSH6 0xAF6439DB8245 0x1F 0xA7 0xE4 POP SWAP13 0x26 PUSH1 0x64 PUSH20 0x6F6C634300081100336080604052348015610010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAFA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x8129FC1C EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xC75B5A71 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16128211 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x17D11A15 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x19A16039 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x1AFBB7A4 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x3DC54B40 EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD7 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCC PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x890 JUMP JUMPDEST PUSH2 0x1DF JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D9 JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x271 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x152 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x152 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x398 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA31 JUMP JUMPDEST PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x210 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x225 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH1 0x0 PUSH2 0x43A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x257 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x291 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x2AB JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x313 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND CALLER PUSH3 0x10000 MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SSTORE NUMBER PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x435 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x5C6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4B4 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B2 SWAP2 SWAP1 PUSH2 0xA6D JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x64B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x435 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x435 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x745 SWAP2 SWAP1 PUSH2 0xAA8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x787 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x798 DUP8 DUP4 DUP4 DUP8 PUSH2 0x7B4 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x823 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x81C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30A JUMP JUMPDEST POP DUP2 PUSH2 0x79D JUMP JUMPDEST PUSH2 0x79D DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x838 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30A SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AC DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH2 0x8BA PUSH1 0x20 DUP5 ADD PUSH2 0x874 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F5 DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x938 JUMPI PUSH2 0x938 PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x960 JUMPI PUSH2 0x960 PUSH2 0x8C3 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x99E JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9D7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x26A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA1C DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA4F DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP3 POP PUSH2 0xA5D PUSH1 0x20 DUP6 ADD PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xABA DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x99B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xE0 ORIGIN 0xB4 0xD4 SLOAD REVERT 0xE8 SWAP14 SELFBALANCE 0xC1 RETURN 0xE3 0xD2 DUP9 DUP4 0xF9 0xDD PUSH27 0x1D4A9F2897AD07A0CE3EB716D364736F6C6343000811003360C060 BLOCKHASH MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16C5 CODESIZE SUB DUP1 PUSH3 0x16C5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x63 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC513C9BB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xC8 SWAP2 SWAP1 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 MSTORE DUP4 AND SWAP2 POP PUSH3 0xFA SWAP1 POP JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C252F91 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x139 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x15F SWAP2 SWAP1 PUSH3 0x172 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH3 0x1A4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x147E PUSH3 0x247 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0xA5 ADD MSTORE DUP2 DUP2 PUSH2 0x142 ADD MSTORE DUP2 DUP2 PUSH2 0x270 ADD MSTORE DUP2 DUP2 PUSH2 0x343 ADD MSTORE DUP2 DUP2 PUSH2 0x3B2 ADD MSTORE DUP2 DUP2 PUSH2 0x4C6 ADD MSTORE DUP2 DUP2 PUSH2 0x649 ADD MSTORE DUP2 DUP2 PUSH2 0x6FC ADD MSTORE DUP2 DUP2 PUSH2 0x828 ADD MSTORE DUP2 DUP2 PUSH2 0x8FB ADD MSTORE DUP2 DUP2 PUSH2 0xA09 ADD MSTORE DUP2 DUP2 PUSH2 0xAC7 ADD MSTORE DUP2 DUP2 PUSH2 0xB7A ADD MSTORE DUP2 DUP2 PUSH2 0xC9B ADD MSTORE DUP2 DUP2 PUSH2 0xD6E ADD MSTORE DUP2 DUP2 PUSH2 0xED5 ADD MSTORE DUP2 DUP2 PUSH2 0xF6F ADD MSTORE PUSH2 0xFF8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0xE3A ADD MSTORE PUSH2 0x1092 ADD MSTORE PUSH2 0x147E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x95 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72B0D90C GT PUSH2 0x59 JUMPI DUP1 PUSH4 0x72B0D90C EQ PUSH2 0x1BF JUMPI DUP1 PUSH4 0xCD604A31 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xDFCD412E EQ PUSH2 0x1F2 JUMPI DUP1 PUSH4 0xF9609F08 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xFEA53BE1 EQ PUSH2 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD4D1513 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x2F4F21E2 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x3FC8CEF3 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x77EAD087 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFD PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x124F JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x12B CALLDATASIZE PUSH1 0x4 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x558 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x107 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x12C DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x1AD CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x1DA CALLDATASIZE PUSH1 0x4 PUSH2 0x12BD JUMP JUMPDEST PUSH2 0x5B1 JUMP JUMPDEST PUSH2 0xFD PUSH2 0x1ED CALLDATASIZE PUSH1 0x4 PUSH2 0x12E1 JUMP JUMPDEST PUSH2 0x61E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x20D CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0x7FD JUMP JUMPDEST PUSH2 0xFD PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0x137B JUMP JUMPDEST PUSH2 0xA9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFD PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1328 JUMP JUMPDEST PUSH2 0xC70 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x251 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x26E JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FA SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x321 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3AE SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP1 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x40B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x41F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x42E DUP8 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x94BF804D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 AND SWAP1 PUSH4 0x94BF804D SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x47D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4A1 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x50D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x531 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0x53B SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x54D JUMPI PUSH2 0x54D DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH2 0x562 DUP2 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x57F JUMPI PUSH1 0x40 MLOAD PUSH4 0x5E352445 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5A7 SWAP1 DUP5 SWAP1 PUSH2 0x1413 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5B9 PUSH2 0x10C3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 DUP2 GT ISZERO PUSH2 0x610 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x610 SWAP1 DUP4 SWAP1 PUSH2 0x60B SWAP1 DUP5 PUSH2 0x1400 JUMP JUMPDEST PUSH2 0xFE2 JUMP JUMPDEST POP PUSH2 0x61B PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x62A DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x647 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6D3 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x755 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x769 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x778 DUP6 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD5989713 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH2 0xFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xD5989713 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7F4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0x809 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x826 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B2 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x942 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x966 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D182BE5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xB460AF94 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9E4 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP5 POP PUSH1 0x0 SWAP1 DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA74 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH2 0xA7E SWAP2 SWAP1 PUSH2 0x1400 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xA90 JUMPI PUSH2 0xA90 DUP4 DUP3 PUSH2 0xFE2 JUMP JUMPDEST POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xAA8 DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xAC5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB51 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xB78 JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xBF6 DUP5 CALLVALUE PUSH2 0xEAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6E553F65 PUSH1 0xE0 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x6E553F65 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC44 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC68 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH2 0xC7C DUP2 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0xC99 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4D0A5931 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD25 SWAP2 SWAP1 PUSH2 0x13B4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xD4C JUMPI PUSH1 0x40 MLOAD PUSH4 0xC8319D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDB5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDD9 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5D043B29 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xBA087652 SWAP1 PUSH1 0x64 ADD PUSH2 0x9A1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF42 SWAP2 SWAP1 PUSH2 0x13D1 JUMP JUMPDEST LT ISZERO PUSH2 0xFDE JUMPI PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 NOT PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFDC SWAP2 SWAP1 PUSH2 0x1426 JUMP JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2E1A7D4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1044 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1058 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xFDE SWAP3 POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH2 0x1121 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH2 0xE67 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x111A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x1171 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11BE JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11C3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xFDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1111 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x126F DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1286 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x12AF DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x12F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1301 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1311 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x133E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1349 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x1360 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x1370 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x138E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1399 DUP2 PUSH2 0x123A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x13A9 DUP2 PUSH2 0x123A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12DA DUP2 PUSH2 0x123A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0xEA8 JUMPI PUSH2 0xEA8 PUSH2 0x13EA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x12DA JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0x4A 0xF6 0xBF 0xDB PUSH18 0x8634B9264C949899AC22D1C5F59BF3C6F804 PUSH21 0x30621A5EE8D16664736F6C63430008110033608060 BLOCKHASH MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x220A CODESIZE SUB DUP1 PUSH3 0x220A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x122 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH12 0x204FCE5E3E25026110000000 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 PUSH3 0xF9 SWAP2 SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND CALLER PUSH2 0x100 MUL PUSH1 0xFF NOT AND OR SWAP1 SSTORE PUSH3 0x154 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x20A6 DUP1 PUSH3 0x164 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xB4B5EA57 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xE7A324DC EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xF1127ED8 EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB4B5EA57 EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0xC3CDA520 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0x9742CA46 EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xB0660C3D EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36D JUMPI DUP1 PUSH4 0x782D6FE1 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x481C6A75 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x481C6A75 EQ PUSH2 0x2DE JUMPI DUP1 PUSH4 0x587CDE1E EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x6FCFFF45 EQ PUSH2 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0x349DC329 EQ PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x20606B70 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0x2185810B EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x55A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH12 0x204FCE5E3E25026110000000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x618 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1FD PUSH2 0x26D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C26 JUMP JUMPDEST PUSH2 0x688 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH2 0x2A1 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x2C6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x2C6 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2C6 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x32D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0x358 PUSH2 0x340 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x37B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x3AD CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x3D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x23A2A0A9 PUSH1 0xE1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1FD SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xB6B JUMP JUMPDEST PUSH2 0x25D PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8E JUMP JUMPDEST PUSH2 0xBE9 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE6 JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF DUP2 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D83 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x555 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x12C1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 NOT DUP4 SUB PUSH2 0x574 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0x599 JUMP JUMPDEST PUSH2 0x596 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDC PUSH1 0x25 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x795B0E16C8DA9807B0A215F3749BD6DBCC49FC0472183F4E446ABB7DCBD9D007 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x25 DUP1 DUP5 MSTORE SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 PUSH2 0x6DE SWAP3 DUP9 SWAP3 SWAP2 SWAP1 PUSH2 0x1EDC SWAP1 DUP4 ADD CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 PUSH2 0x735 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FFE PUSH1 0x3D SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP11 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x7BC DUP8 DUP8 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7D3 CALLER DUP3 PUSH2 0x16F8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A6765745072696F72566F7465733A206E6F742079657420646574 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x195C9B5A5B9959 PUSH1 0xCA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x868 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 SWAP2 PUSH2 0x88D PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND GT PUSH2 0x900 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x8D0 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 POP PUSH2 0x612 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP4 LT ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP2 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 PUSH1 0x2 PUSH2 0x96E DUP5 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH2 0x978 SWAP2 SWAP1 PUSH2 0x1E34 JUMP JUMPDEST PUSH2 0x982 SWAP1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF DUP6 DUP2 AND DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE SLOAD SWAP3 DUP4 AND DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP4 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP3 POP DUP8 SWAP1 SUB PUSH2 0x9EF JUMPI PUSH1 0x20 ADD MLOAD SWAP5 POP PUSH2 0x612 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP8 GT ISZERO PUSH2 0xA06 JUMPI DUP2 SWAP4 POP PUSH2 0xA14 JUMP JUMPDEST PUSH2 0xA11 PUSH1 0x1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST SWAP3 POP JUMPDEST POP POP PUSH2 0x94C JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2F834D1C8C4B956018FFF5FACA4D99868AE635487424D9C265C257CCBC698C6A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB54 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F31 PUSH1 0x26 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP PUSH2 0xB61 CALLER DUP6 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP1 PUSH2 0xB96 JUMPI PUSH1 0x0 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xBBA PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD DUP10 SWAP1 MSTORE PUSH2 0x120 DUP1 DUP4 ADD DUP10 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x140 DUP4 ADD SWAP1 SWAP5 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x160 DUP5 ADD MSTORE PUSH2 0x162 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x182 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP1 PUSH2 0x1A2 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP11 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP8 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C696420736967 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x6E6174757265 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0xE01 DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE DUP10 EQ PUSH2 0xE5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C6964206E6F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST DUP8 TIMESTAMP GT ISZERO PUSH2 0xEBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A207369676E61747572652065 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1E1C1A5C9959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH2 0xEC7 DUP2 DUP12 PUSH2 0x16F8 JUMP JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP7 SUB PUSH2 0xEED JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0xF12 JUMP JUMPDEST PUSH2 0xF0F DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FA6 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD DUP4 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE SWAP2 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 SWAP2 DUP13 SWAP2 DUP13 SWAP2 DUP13 SWAP2 SWAP1 DUP7 PUSH2 0xFEF DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x106E SWAP3 SWAP2 SWAP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP12 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x113C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20696E76616C6964207369676E617475726500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x119D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20756E617574686F72697A6564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP9 TIMESTAMP GT ISZERO PUSH2 0x11ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A207369676E6174757265206578706972656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP5 PUSH1 0x0 DUP1 DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP8 PUSH1 0x40 MLOAD PUSH2 0x12AB SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x60 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT ISZERO DUP3 SWAP1 PUSH2 0x1413 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP PUSH2 0x141E DUP4 DUP6 PUSH2 0x1E7E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1446 JUMPI POP PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST DUP1 PUSH2 0x145B JUMPI POP PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST PUSH2 0x14A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7472616E73666572732061726520666F7262696464656E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E736665722066726F6D20746865207A65726F206164647265737300000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E7366657220746F20746865207A65726F2061646472657373000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x36 DUP1 DUP5 MSTORE PUSH2 0x15EA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP3 DUP6 SWAP3 SWAP2 SWAP1 PUSH2 0x203B SWAP1 DUP4 ADD CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE SWAP1 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x30 DUP1 DUP5 MSTORE PUSH2 0x1652 SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x1F01 SWAP1 DUP4 ADD CODECOPY PUSH2 0x1782 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP1 MLOAD SWAP4 DUP6 AND DUP5 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD DUP6 DUP5 AND DUP4 MSTORE SWAP2 KECCAK256 SLOAD PUSH2 0x16F3 SWAP3 SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP5 MSTORE DUP3 DUP7 KECCAK256 SLOAD SWAP5 SWAP1 SWAP4 MSTORE DUP8 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP5 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP6 AND SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP4 SWAP2 SWAP3 DUP6 SWAP3 SWAP2 PUSH32 0x3134E8A2E6D97E929A7E54011EA5485D7D196DD5F0BA4D4EF95803E8E3FC257F SWAP2 SWAP1 LOG4 PUSH2 0x177C DUP3 DUP5 DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x178F DUP5 DUP7 PUSH2 0x1E9E JUMP JUMPDEST SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT ISZERO DUP4 SWAP1 PUSH2 0x17C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x17FA JUMPI POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH2 0x18BF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x183A JUMPI PUSH1 0x0 PUSH2 0x1886 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x185E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x18AD DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F57 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST SWAP1 POP PUSH2 0x18BB DUP7 DUP5 DUP5 DUP5 PUSH2 0x1977 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x18FA JUMPI PUSH1 0x0 PUSH2 0x1946 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x191E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x196D DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F7F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1782 JUMP JUMPDEST SWAP1 POP PUSH2 0xECC DUP6 DUP5 DUP5 DUP5 JUMPDEST PUSH1 0x0 PUSH2 0x199B NUMBER PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FCA PUSH1 0x34 SWAP2 CODECOPY PUSH2 0x1B6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH4 0xFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x19F5 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH4 0xFFFFFFFF DUP4 AND SWAP2 PUSH2 0x19D9 PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ JUMPDEST ISZERO PUSH2 0x1A69 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 SWAP2 PUSH2 0x1A1F PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1B1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 MSTORE DUP7 DUP2 KECCAK256 DUP12 DUP7 AND DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP5 SWAP1 SWAP5 KECCAK256 SWAP3 MLOAD DUP4 SLOAD SWAP5 MLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP5 AND SWAP2 AND OR SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AE9 DUP5 PUSH1 0x1 PUSH2 0x1EBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x20 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1BBF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1BA3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C18 DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C44 DUP5 PUSH2 0x1BE0 JUMP JUMPDEST SWAP3 POP PUSH2 0x1C52 PUSH1 0x20 DUP6 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE2 DUP3 PUSH2 0x1BE0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x1CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CB0 DUP8 PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1CCC PUSH1 0x60 DUP9 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D0A DUP9 PUSH2 0x1BE0 JUMP JUMPDEST SWAP7 POP PUSH2 0x1D18 PUSH1 0x20 DUP10 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1D34 PUSH1 0x80 DUP10 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D6C DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH2 0x1D7A PUSH1 0x20 DUP5 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D9F DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1DB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x476561723A3A63616C6C6572206973206E6F7420746865206D616E6167657200 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP1 PUSH2 0x1E59 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1E77 JUMPI PUSH2 0x1E77 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP INVALID SELFBALANCE PUSH6 0x61723A3A6170 PUSH17 0x726F76653A20616D6F756E742065786365 PUSH6 0x647320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F74 PUSH19 0x616E73666572546F6B656E733A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206F766572666C6F777347656172 GASPRICE GASPRICE PUSH21 0x72616E736665723A20616D6F756E74206578636565 PUSH5 0x7320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F6D PUSH16 0x7665566F7465733A20766F746520616D PUSH16 0x756E7420756E646572666C6F77734765 PUSH2 0x723A GASPRICE 0x5F PUSH14 0x6F7665566F7465733A20766F7465 KECCAK256 PUSH2 0x6D6F PUSH22 0x6E74206F766572666C6F7773476561723A3A7065726D PUSH10 0x743A20616D6F756E7420 PUSH6 0x786365656473 KECCAK256 CODECOPY CALLDATASIZE KECCAK256 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F77 PUSH19 0x697465436865636B706F696E743A20626C6F63 PUSH12 0x206E756D6265722065786365 PUSH6 0x647320333220 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A7472 PUSH2 0x6E73 PUSH7 0x657246726F6D3A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x207370656E64657220616C6C6F77616E63654765 PUSH2 0x723A GASPRICE 0x5F PUSH21 0x72616E73666572546F6B656E733A207472616E7366 PUSH6 0x7220616D6F75 PUSH15 0x7420657863656564732062616C616E PUSH4 0x65A26469 PUSH17 0x6673582212205C356FBD26A2927AD0969A REVERT 0x2D PUSH25 0x6175A49452B6DF0CC597CE2D0EDBB24A252964736F6C634300 ADDMOD GT STOP CALLER ", - "sourceMap": "1393:2344:7:-:0;;;1535:1650;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:52;719:10:66;936:18:52;:32::i;:::-;1612:21:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1594:15:7;:39;;-1:-1:-1;;;;;;1594:39:7;-1:-1:-1;;;;;1594:39:7;;;;;;;;;1655;;-1:-1:-1;;;1655:39:7;;658:32:70;;;1655:39:7;;;640:51:70;1594:39:7;1655:28;;613:18:70;;1655:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1716:15:7;;:45;;-1:-1:-1;;;1716:45:7;;-1:-1:-1;;;;;658:32:70;;;1716:45:7;;;640:51:70;1716:15:7;;;;-1:-1:-1;1716:35:7;;-1:-1:-1;613:18:70;;1716:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1790:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1784:3:7;:15;;-1:-1:-1;;;;;;1784:15:7;-1:-1:-1;;;;;1784:15:7;;;;;;;;;-1:-1:-1;1821:15:7;:36;;-1:-1:-1;;;1821:36:7;;;;;640:51:70;;;;1821:15:7;;;;:22;;613:18:70;;1821:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1961:15:7;;1918:69;;1880:35;;-1:-1:-1;;;;;;1961:15:7;;;;-1:-1:-1;1918:69:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;1918:69:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2009:15:7;;:64;;-1:-1:-1;;;2009:64:7;;-1:-1:-1;;;;;658:32:70;;;2009:64:7;;;640:51:70;1880:107:7;;-1:-1:-1;2009:15:7;;;:36;;613:18:70;;2009:64:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2168:15:7;;2128:66;;2096:29;;-1:-1:-1;;;;;;2168:15:7;;;;-1:-1:-1;2128:66:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2128:66:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2216:15:7;;:58;;-1:-1:-1;;;2216:58:7;;-1:-1:-1;;;;;658:32:70;;;2216:58:7;;;640:51:70;2096:98:7;;-1:-1:-1;2216:15:7;;;:33;;613:18:70;;2216:58:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2376:15:7;;2352:49;;2297:31;;-1:-1:-1;;;;;;2376:15:7;;;;-1:-1:-1;2297:31:7;;2352:49;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2338:11:7;:63;;-1:-1:-1;;;;;;2338:63:7;-1:-1:-1;;;;;2338:63:7;;;;;;;;;-1:-1:-1;2423:15:7;:52;;-1:-1:-1;;;2423:52:7;;;;;640:51:70;;;;2423:15:7;;;;:30;;613:18:70;;2423:52:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2570:15:7;;2530:66;;2498:29;;-1:-1:-1;;;;;;2570:15:7;;;;-1:-1:-1;2530:66:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2530:66:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2618:15:7;;:58;;-1:-1:-1;;;2618:58:7;;-1:-1:-1;;;;;658:32:70;;;2618:58:7;;;640:51:70;2498:98:7;;-1:-1:-1;2618:15:7;;;:33;;613:18:70;;2618:58:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2749:15:7;;2725:41;;2699:23;;-1:-1:-1;;;;;;2749:15:7;;;;-1:-1:-1;2725:41:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2725:41:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2788:15:7;;:52;;-1:-1:-1;;;2788:52:7;;-1:-1:-1;;;;;658:32:70;;;2788:52:7;;;640:51:70;2699:67:7;;-1:-1:-1;2788:15:7;;;:30;;613:18:70;;2788:52:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2863:19;2907:4;2885:28;;;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2885:28:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2935:15:7;;:48;;-1:-1:-1;;;2935:48:7;;-1:-1:-1;;;;;658:32:70;;;2935:48:7;;;640:51:70;2863:50:7;;-1:-1:-1;2935:15:7;;;:28;;613:18:70;;2935:48:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3005:39:7;;-1:-1:-1;;;3005:39:7;;3033:10;3005:39;;;640:51:70;-1:-1:-1;;;;;3005:27:7;;;-1:-1:-1;3005:27:7;;-1:-1:-1;613:18:70;;3005:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3066:15:7;;:45;;-1:-1:-1;;;3066:45:7;;3100:10;3066:45;;;640:51:70;-1:-1:-1;;;;;3066:15:7;;;;-1:-1:-1;3066:33:7;;-1:-1:-1;613:18:70;;3066:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3133:3:7;;:33;;-1:-1:-1;;;3133:33:7;;3155:10;3133:33;;;640:51:70;-1:-1:-1;;;;;3133:3:7;;;;-1:-1:-1;3133:21:7;;-1:-1:-1;613:18:70;;3133:33:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1584:1601;;;;;;1535:1650;;1393:2344;;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1393:2344:7:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:177:70:-;93:13;;-1:-1:-1;;;;;135:31:70;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;702:942::-;-1:-1:-1;;;;;1077:15:70;;;1059:34;;969:2;1112;1130:18;;;1123:30;;;1202:13;;994:18;;;1224:22;;;940:4;;1303:15;;;;1031:19;;1277:2;1262:18;;;940:4;1346:272;1360:6;1357:1;1354:13;1346:272;;;1419:13;;1461:9;;1457:18;;1445:31;;1520:11;;1514:18;1510:27;;1496:12;;;1489:49;1593:15;;;;1558:12;;;;1382:1;1375:9;1346:272;;;-1:-1:-1;1635:3:70;;702:942;-1:-1:-1;;;;;;;;;702:942:70:o;:::-;1393:2344:7;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_checkOwner_16603": { - "entryPoint": 983, - "id": 16603, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 1073, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@acl_1303": { - "entryPoint": null, - "id": 1303, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addPriceFeeds_1545": { - "entryPoint": 338, - "id": 1545, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addressProvider_1300": { - "entryPoint": null, - "id": 1300, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@claimACLOwnership_1556": { - "entryPoint": 655, - "id": 1556, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@claimAddressProviderOwnership_1567": { - "entryPoint": 895, - "id": 1567, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@owner_16589": { - "entryPoint": null, - "id": 16589, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@priceOracle_1306": { - "entryPoint": null, - "id": 1306, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@renounceOwnership_16617": { - "entryPoint": 318, - "id": 16617, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_16640": { - "entryPoint": 769, - "id": 16640, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 1265, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1513, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 1293, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ACL_$1959__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_PriceOracle_$15267__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 1216, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_727": { - "entryPoint": 1175, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 1569, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1547, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1153, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4648:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "136:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "146:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "158:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "154:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "154:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "146:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "188:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "203:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "219:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "224:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "215:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "215:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "228:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "211:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "211:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "199:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "199:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "181:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "181:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "181:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_PriceOracle_$15267__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "105:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "116:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "127:4:70", - "type": "" - } - ], - "src": "14:224:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "368:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "378:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "390:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "401:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "386:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "386:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "378:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "420:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "435:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "451:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "456:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "447:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "447:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "460:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "443:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "431:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "431:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "413:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "413:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "413:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "337:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "348:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "359:4:70", - "type": "" - } - ], - "src": "243:227:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "507:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "524:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "531:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "536:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "527:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "527:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "517:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "517:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "517:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "564:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "567:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "557:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "557:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "557:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "588:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "591:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "581:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "581:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "581:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "475:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "652:211:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "662:21:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "678:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "672:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "672:11:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "662:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "692:35:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "714:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "722:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "710:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "710:17:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "696:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "802:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "804:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "804:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "804:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "745:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "742:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "742:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "781:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "793:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "778:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "778:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "739:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "739:62:70" - }, - "nodeType": "YulIf", - "src": "736:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "840:4:70", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "846:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "833:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "833:24:70" - }, - "nodeType": "YulExpressionStatement", - "src": "833:24:70" - } - ] - }, - "name": "allocate_memory_727", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "641:6:70", - "type": "" - } - ], - "src": "607:256:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "913:230:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "923:19:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "939:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "933:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "933:9:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "923:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "951:58:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "973:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "989:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "995:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "985:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "985:13:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1004:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1000:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1000:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "981:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "981:27:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "969:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "969:40:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "955:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1084:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1086:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1086:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1086:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1027:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1039:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1024:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1024:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1063:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1075:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1060:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1060:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1021:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1021:62:70" - }, - "nodeType": "YulIf", - "src": "1018:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1122:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1126:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1115:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1115:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1115:22:70" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "893:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "902:6:70", - "type": "" - } - ], - "src": "868:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1197:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1207:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1229:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1216:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1216:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1207:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1299:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1311:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1301:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1301:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1301:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1258:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1269:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1284:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1289:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1280:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1280:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1293:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1276:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1276:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1265:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1265:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1255:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1255:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1248:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1248:50:70" - }, - "nodeType": "YulIf", - "src": "1245:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1176:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1187:5:70", - "type": "" - } - ], - "src": "1148:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1455:1126:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1465:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1475:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1469:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1522:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1531:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1534:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1524:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1524:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1524:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1497:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1506:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1493:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1493:23:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1518:2:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1489:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1489:32:70" - }, - "nodeType": "YulIf", - "src": "1486:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1547:37:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1574:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1561:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1561:23:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1551:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1593:28:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1603:18:70", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1597:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1648:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1657:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1660:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1650:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1650:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1650:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1636:6:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1644:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1633:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1633:14:70" - }, - "nodeType": "YulIf", - "src": "1630:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1673:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1687:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1698:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1683:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1683:22:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1677:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1753:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1762:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1765:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1755:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1755:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1755:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1732:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1736:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1728:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1728:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1743:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1724:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1724:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1717:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1717:35:70" - }, - "nodeType": "YulIf", - "src": "1714:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1778:26:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1801:2:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1788:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1788:16:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1782:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1827:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1829:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1829:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1829:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1819:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1823:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1816:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1816:10:70" - }, - "nodeType": "YulIf", - "src": "1813:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1858:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1893:1:70", - "type": "", - "value": "5" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1896:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1889:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1889:10:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1901:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1885:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1885:19:70" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "1869:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "1869:36:70" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1862:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1914:16:70", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1927:3:70" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "1918:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1946:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1951:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1939:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1939:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1939:15:70" - }, - { - "nodeType": "YulAssignment", - "src": "1963:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1974:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1979:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1970:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1970:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1963:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1991:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2013:2:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2021:1:70", - "type": "", - "value": "6" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2024:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2017:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2017:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2009:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2009:19:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2030:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2005:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2005:28:70" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "1995:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2065:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2074:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2077:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2067:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2067:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2067:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2048:6:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2056:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2045:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2045:19:70" - }, - "nodeType": "YulIf", - "src": "2042:39:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2090:22:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2105:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2109:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2101:11:70" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2094:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2179:372:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2237:74:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2255:11:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2265:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "2259:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2290:2:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2294:2:70" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2283:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2283:14:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2283:14:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2204:7:70" - }, - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2213:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2200:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2200:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2219:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2196:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2196:28:70" - }, - "nodeType": "YulIf", - "src": "2193:118:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2324:34:70", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_727", - "nodeType": "YulIdentifier", - "src": "2337:19:70" - }, - "nodeType": "YulFunctionCall", - "src": "2337:21:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2328:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2378:5:70" - }, - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2404:3:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2385:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2385:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2371:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2371:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2371:38:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2433:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2440:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2429:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2468:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2473:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2464:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2464:12:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2445:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2445:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2422:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2422:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2422:56:70" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2498:3:70" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2503:5:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2491:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2491:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2491:18:70" - }, - { - "nodeType": "YulAssignment", - "src": "2522:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2533:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2538:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2529:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2529:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2522:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2132:3:70" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2137:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2129:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2129:15:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2145:25:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2147:21:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2158:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2163:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2154:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2154:14:70" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2147:3:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2125:3:70", - "statements": [] - }, - "src": "2121:430:70" - }, - { - "nodeType": "YulAssignment", - "src": "2560:15:70", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "2570:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2560:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1421:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1432:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1444:6:70", - "type": "" - } - ], - "src": "1326:1255:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2687:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2697:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2709:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2720:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2705:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2705:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2697:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2739:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2754:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2770:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2775:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2766:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2766:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2779:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2762:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2762:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2750:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2750:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2732:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2732:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2732:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2656:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2667:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2678:4:70", - "type": "" - } - ], - "src": "2586:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2907:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2917:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2929:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2940:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2925:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2925:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2917:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2959:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2974:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2990:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2995:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2986:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2986:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2999:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2982:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2982:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2970:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2970:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2952:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2952:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2952:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ACL_$1959__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2876:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2887:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2898:4:70", - "type": "" - } - ], - "src": "2794:215:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3084:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3130:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3139:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3142:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3132:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3132:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3132:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3105:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3114:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3101:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3126:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3097:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3097:32:70" - }, - "nodeType": "YulIf", - "src": "3094:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "3155:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3184:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3165:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3165:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3155:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3050:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3061:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3073:6:70", - "type": "" - } - ], - "src": "3014:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3237:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3254:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3261:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3266:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3257:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3257:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3247:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3247:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3247:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3294:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3297:4:70", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3287:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3287:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3287:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3318:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3321:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3311:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3311:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3311:15:70" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "3205:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3466:175:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3476:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3488:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3499:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3484:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3484:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3476:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3511:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3529:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3534:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3525:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3538:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3521:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3521:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "3515:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3556:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3571:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3579:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3567:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3567:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3549:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3549:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3549:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3603:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3614:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3599:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3599:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3623:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3631:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3619:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3592:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3592:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3592:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3427:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3438:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3446:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3457:4:70", - "type": "" - } - ], - "src": "3337:304:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3693:185:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3732:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3753:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3760:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3765:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3756:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3756:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3746:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3746:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3746:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3797:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3800:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3790:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3790:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3790:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3825:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3828:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3818:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3818:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3818:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3709:5:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3720:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3716:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3716:6:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3706:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3706:17:70" - }, - "nodeType": "YulIf", - "src": "3703:140:70" - }, - { - "nodeType": "YulAssignment", - "src": "3852:20:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3863:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3870:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3859:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3859:13:70" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "3852:3:70" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3675:5:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "3685:3:70", - "type": "" - } - ], - "src": "3646:232:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4057:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4074:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4085:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4067:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4067:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4067:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4108:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4119:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4104:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4124:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4097:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4097:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4097:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4147:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4158:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4143:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4143:18:70" - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4163:34:70", - "type": "", - "value": "Ownable: new owner is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4136:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4136:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4136:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4218:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4229:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4214:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4214:18:70" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4234:8:70", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4207:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4207:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "4252:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4264:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4275:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4260:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4260:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4252:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4034:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4048:4:70", - "type": "" - } - ], - "src": "3883:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4464:182:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4481:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4492:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4474:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4474:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4474:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4515:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4526:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4511:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4511:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4531:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4504:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4504:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4504:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4554:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4565:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4550:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4550:18:70" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4570:34:70", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4543:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4543:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4543:62:70" - }, - { - "nodeType": "YulAssignment", - "src": "4614:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4626:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4637:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4622:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4622:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4614:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4441:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4455:4:70", - "type": "" - } - ], - "src": "4290:356:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_contract$_PriceOracle_$15267__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_727() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(0, 0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := calldataload(_3)\n if gt(_4, _2) { panic_error_0x41() }\n let dst := allocate_memory(add(shl(5, _4), _1))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let srcEnd := add(add(_3, shl(6, _4)), _1)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_3, _1)\n for { } lt(src, srcEnd) { src := add(src, 0x40) }\n {\n if slt(sub(dataEnd, src), 0x40)\n {\n let _5 := 0\n revert(_5, _5)\n }\n let value := allocate_memory_727()\n mstore(value, abi_decode_address(src))\n mstore(add(value, _1), abi_decode_address(add(src, _1)))\n mstore(dst, value)\n dst := add(dst, _1)\n }\n value0 := dst_1\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_ACL_$1959__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100f7578063abd45ac614610108578063de28735914610110578063f2fde38b14610123578063f9d68c811461013657600080fd5b80632630c12f146100985780632954018c146100c7578063715018a6146100da5780638874ff1f146100e4575b600080fd5b6003546100ab906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546100ab906001600160a01b031681565b6100e261013e565b005b6100e26100f236600461050d565b610152565b6000546001600160a01b03166100ab565b6100e261028f565b6002546100ab906001600160a01b031681565b6100e26101313660046105e9565b610301565b6100e261037f565b6101466103d7565b6101506000610431565b565b61015a6103d7565b60005b815181101561022e5760035482516001600160a01b039091169063e8a97a3e9084908490811061018f5761018f61060b565b6020026020010151600001518484815181106101ad576101ad61060b565b6020026020010151602001516040518363ffffffff1660e01b81526004016101eb9291906001600160a01b0392831681529116602082015260400190565b600060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050508061022790610621565b905061015d565b5060025460405163f2fde38b60e01b81523360048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b5050505050565b6102976103d7565b600260009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50505050565b6103096103d7565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61037c81610431565b50565b6103876103d7565b600160009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b6000546001600160a01b031633146101505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156104ba576104ba610481565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156104e9576104e9610481565b604052919050565b80356001600160a01b038116811461050857600080fd5b919050565b6000602080838503121561052057600080fd5b823567ffffffffffffffff8082111561053857600080fd5b818501915085601f83011261054c57600080fd5b81358181111561055e5761055e610481565b61056c848260051b016104c0565b818152848101925060069190911b83018401908782111561058c57600080fd5b928401925b818410156105de57604084890312156105aa5760008081fd5b6105b2610497565b6105bb856104f1565b81526105c88686016104f1565b8187015283526040939093019291840191610591565b979650505050505050565b6000602082840312156105fb57600080fd5b610604826104f1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161064157634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220b4a1c9a880a352408284487897289c1c30ce6b261117cf6898fd0cc90d1aeda164736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xF7 JUMPI DUP1 PUSH4 0xABD45AC6 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xDE287359 EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xF9D68C81 EQ PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2630C12F EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x2954018C EQ PUSH2 0xC7 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xDA JUMPI DUP1 PUSH4 0x8874FF1F EQ PUSH2 0xE4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x13E JUMP JUMPDEST STOP JUMPDEST PUSH2 0xE2 PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0x50D JUMP JUMPDEST PUSH2 0x152 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xAB JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x28F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xAB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x5E9 JUMP JUMPDEST PUSH2 0x301 JUMP JUMPDEST PUSH2 0xE2 PUSH2 0x37F JUMP JUMPDEST PUSH2 0x146 PUSH2 0x3D7 JUMP JUMPDEST PUSH2 0x150 PUSH1 0x0 PUSH2 0x431 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x15A PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x22E JUMPI PUSH1 0x3 SLOAD DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xE8A97A3E SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x18F JUMPI PUSH2 0x18F PUSH2 0x60B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x60B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1EB SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x205 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x219 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x227 SWAP1 PUSH2 0x621 JUMP JUMPDEST SWAP1 POP PUSH2 0x15D JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0xF2FDE38B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0xF2FDE38B SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x288 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x297 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4E71E0C8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x309 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x373 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x37C DUP2 PUSH2 0x431 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x387 PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4E71E0C8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x150 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x36A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4BA JUMPI PUSH2 0x4BA PUSH2 0x481 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4E9 JUMPI PUSH2 0x4E9 PUSH2 0x481 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x538 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x55E JUMPI PUSH2 0x55E PUSH2 0x481 JUMP JUMPDEST PUSH2 0x56C DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x4C0 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP8 DUP3 GT ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH2 0x5DE JUMPI PUSH1 0x40 DUP5 DUP10 SUB SLT ISZERO PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5B2 PUSH2 0x497 JUMP JUMPDEST PUSH2 0x5BB DUP6 PUSH2 0x4F1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5C8 DUP7 DUP7 ADD PUSH2 0x4F1 JUMP JUMPDEST DUP2 DUP8 ADD MSTORE DUP4 MSTORE PUSH1 0x40 SWAP4 SWAP1 SWAP4 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH2 0x591 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x604 DUP3 PUSH2 0x4F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x641 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB4 LOG1 0xC9 0xA8 DUP1 LOG3 MSTORE BLOCKHASH DUP3 DUP5 BASEFEE PUSH25 0x97289C1C30CE6B261117CF6898FD0CC90D1AEDA164736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ", - "sourceMap": "1393:2344:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:30;;;;;-1:-1:-1;;;;;1498:30:7;;;;;;-1:-1:-1;;;;;199:32:70;;;181:51;;169:2;154:18;1498:30:7;;;;;;;1434:38;;;;;-1:-1:-1;;;;;1434:38:7;;;1831:101:52;;;:::i;:::-;;3191:338:7;;;;;;:::i;:::-;;:::i;1201:85:52:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;1201:85;;3535::7;;;:::i;1478:14::-;;;;;-1:-1:-1;;;;;1478:14:7;;;2081:198:52;;;;;;:::i;:::-;;:::i;3626:109:7:-;;;:::i;1831:101:52:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;3191:338:7:-;1094:13:52;:11;:13::i;:::-;3317:9:7::1;3312:155;3336:10;:17;3332:1;:21;3312:155;;;3374:11;::::0;3399:13;;-1:-1:-1;;;;;3374:11:7;;::::1;::::0;:24:::1;::::0;3399:10;;3410:1;;3399:13;::::1;;;;;:::i;:::-;;;;;;;:19;;;3420:10;3431:1;3420:13;;;;;;;;:::i;:::-;;;;;;;:23;;;3374:70;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3567:15:70;;;3549:34;;3619:15;;3614:2;3599:18;;3592:43;3499:2;3484:18;;3337:304;3374:70:7::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3355:3;;;;:::i;:::-;;;3312:155;;;-1:-1:-1::0;3477:3:7::1;::::0;:33:::1;::::0;-1:-1:-1;;;3477:33:7;;3499:10:::1;3477:33;::::0;::::1;181:51:70::0;-1:-1:-1;;;;;3477:3:7;;::::1;::::0;:21:::1;::::0;154:18:70;;3477:33:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3191:338:::0;:::o;3535:85::-;1094:13:52;:11;:13::i;:::-;3593:3:7::1;;;;;;;;;-1:-1:-1::0;;;;;3593:3:7::1;-1:-1:-1::0;;;;;3593:18:7::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3535:85::o:0;2081:198:52:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:52;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:52;;4085:2:70;2161:73:52::1;::::0;::::1;4067:21:70::0;4124:2;4104:18;;;4097:30;4163:34;4143:18;;;4136:62;-1:-1:-1;;;4214:18:70;;;4207:36;4260:19;;2161:73:52::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;3626:109:7:-;1094:13:52;:11;:13::i;:::-;3696:15:7::1;;;;;;;;;-1:-1:-1::0;;;;;3696:15:7::1;-1:-1:-1::0;;;;;3696:30:7::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;1359:130:52::0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;719:10:66;1422:23:52;1414:68;;;;-1:-1:-1;;;1414:68:52;;4492:2:70;1414:68:52;;;4474:21:70;;;4511:18;;;4504:30;4570:34;4550:18;;;4543:62;4622:18;;1414:68:52;4290:356:70;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;475:127:70:-;536:10;531:3;527:20;524:1;517:31;567:4;564:1;557:15;591:4;588:1;581:15;607:256;678:4;672:11;;;710:17;;757:18;742:34;;778:22;;;739:62;736:88;;;804:18;;:::i;:::-;840:4;833:24;607:256;:::o;868:275::-;939:2;933:9;1004:2;985:13;;-1:-1:-1;;981:27:70;969:40;;1039:18;1024:34;;1060:22;;;1021:62;1018:88;;;1086:18;;:::i;:::-;1122:2;1115:22;868:275;;-1:-1:-1;868:275:70:o;1148:173::-;1216:20;;-1:-1:-1;;;;;1265:31:70;;1255:42;;1245:70;;1311:1;1308;1301:12;1245:70;1148:173;;;:::o;1326:1255::-;1444:6;1475:2;1518;1506:9;1497:7;1493:23;1489:32;1486:52;;;1534:1;1531;1524:12;1486:52;1574:9;1561:23;1603:18;1644:2;1636:6;1633:14;1630:34;;;1660:1;1657;1650:12;1630:34;1698:6;1687:9;1683:22;1673:32;;1743:7;1736:4;1732:2;1728:13;1724:27;1714:55;;1765:1;1762;1755:12;1714:55;1801:2;1788:16;1823:2;1819;1816:10;1813:36;;;1829:18;;:::i;:::-;1869:36;1901:2;1896;1893:1;1889:10;1885:19;1869:36;:::i;:::-;1939:15;;;1970:12;;;;-1:-1:-1;2021:1:70;2017:10;;;;2009:19;;2005:28;;;2045:19;;;2042:39;;;2077:1;2074;2067:12;2042:39;2101:11;;;;2121:430;2137:6;2132:3;2129:15;2121:430;;;2219:4;2213:3;2204:7;2200:17;2196:28;2193:118;;;2265:1;2294:2;2290;2283:14;2193:118;2337:21;;:::i;:::-;2385:23;2404:3;2385:23;:::i;:::-;2378:5;2371:38;2445:32;2473:2;2468:3;2464:12;2445:32;:::i;:::-;2429:14;;;2422:56;2491:18;;2163:4;2154:14;;;;;2529:12;;;;2121:430;;;2570:5;1326:1255;-1:-1:-1;;;;;;;1326:1255:70:o;3014:186::-;3073:6;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3165:29;3184:9;3165:29;:::i;:::-;3155:39;3014:186;-1:-1:-1;;;3014:186:70:o;3205:127::-;3266:10;3261:3;3257:20;3254:1;3247:31;3297:4;3294:1;3287:15;3321:4;3318:1;3311:15;3646:232;3685:3;3706:17;;;3703:140;;3765:10;3760:3;3756:20;3753:1;3746:31;3800:4;3797:1;3790:15;3828:4;3825:1;3818:15;3703:140;-1:-1:-1;3870:1:70;3859:13;;3646:232::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "332400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "acl()": "2369", - "addPriceFeeds((address,address)[])": "infinite", - "addressProvider()": "2348", - "claimACLOwnership()": "infinite", - "claimAddressProviderOwnership()": "infinite", - "owner()": "2319", - "priceOracle()": "2326", - "renounceOwnership()": "infinite", - "transferOwnership(address)": "28399" - } - }, - "methodIdentifiers": { - "acl()": "de287359", - "addPriceFeeds((address,address)[])": "8874ff1f", - "addressProvider()": "2954018c", - "claimACLOwnership()": "abd45ac6", - "claimAddressProviderOwnership()": "f9d68c81", - "owner()": "8da5cb5b", - "priceOracle()": "2630c12f", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wethToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acl\",\"outputs\":[{\"internalType\":\"contract ACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"internalType\":\"struct PriceFeedConfig[]\",\"name\":\"priceFeeds\",\"type\":\"tuple[]\"}],\"name\":\"addPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract AddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimACLOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimAddressProviderOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol\":\"GenesisFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x8195b1103c4a784b1645ff8485d5fbf6994eeb8d033f34953fb76987c9aa7f74\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://995e2a8c9ee5befe9493b15e7991cd3d575ef11d6f4024aee9cda00af27686d0\",\"dweb:/ipfs/QmeHkzcHNwoPcC4i2G3G6LDF9oChusiztyGTYsq5fotHgb\"]},\"/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0xf28a6b6e4e5da385ddfc95ae6e0719484a14a240687ad7a514435eede83c9efc\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c5a5189a274068c60f5e73fd5f3d32a262042b05c368a8aa140b3913a3104c71\",\"dweb:/ipfs/QmcT2U2H77TvKcbzyHp5XAZXiXrAGK1CbTzWZbPX7nhLC2\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0x7ec541ae052e1b6f45932028f4dcef0c05dbdb07f377cf244016b17bf026c092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c812d20108a644e7c069e425659ef400a6e1cddf945f0cca0e3c28140f900353\",\"dweb:/ipfs/QmZ2GKfgTEw8ESBcTcpg19SvxnaqxK5rjEyzBRhJHBENZm\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":{\"keccak256\":\"0x15c2053e52a08294a944ae110dd1e0a12e19d9d9745737542e6422a5abbebb38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cbe740138c55fbd331a3ded7d2f4013c7afccbb8fb08dc7125bdd8da3257db8\",\"dweb:/ipfs/QmTetdSAkqsx7vv5u6f6ciRDWfHU1hjn9ojK5YJjfey7PX\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x995f818158c4e1aa59528855a9f3c27a055750f454e4719f3ee3189b4546ca7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02adbbe9097cccb4a83f0d321cbe0c699b1d60d6d784d5dcca14d8fee2afc015\",\"dweb:/ipfs/QmTyHJ3D95dyfMJXjDFyBu6TpiAnmpFT9of1oF8MFdLKku\"]},\"/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol\":{\"keccak256\":\"0x9d500b214e988952c4eaf05eec8170e5cd1c4dd93f104d0be7aa9404fb76c5b2\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://a618da1ff8a67718e0fdb2020873cfb9a18aa17086b15bb7ed7f5f5bb8d4b0cb\",\"dweb:/ipfs/QmZ5fpcj5fCrPuHcfHcdfq58jDjs3g4wmodKdVLUifPNH7\"]},\"/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol\":{\"keccak256\":\"0x048f035496e2d45ca35e1e4629c2313dc591afae67c20c5577ccd5ec26a206c8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3a1f792f5c50b0c034f147b1a00373da038a70e73d9c9202b15a2c08ad851094\",\"dweb:/ipfs/QmQPSCC8k65NFZzKNv4JzSsQVzaC54aM7Q555iCkJtwCNj\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol\":{\"keccak256\":\"0x8c1ac20b391ec15c994d89b77d297edff4d99a9cef63f1a16b10c8a64aefa6f3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://50308df8f32fcba6dbadbc3d720b24351d80c89e432d3915e00f24a7262c508a\",\"dweb:/ipfs/QmVmecTuUqKdbT56vPJBuCQLTVSgKbQU5KSuUWTH6rJLca\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":{\"keccak256\":\"0xdecb13fa2b9269e64c184276cc62b7c9ecde2bf9427402b6534690572fd2d821\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff9189896a9447a469ad1d12d6fa2694aa8e0ca2a4e858f028752ba57787722a\",\"dweb:/ipfs/QmTy3ADxN8CA4QHVkHe7R24UpHaHmvZW5KQGZb7grBCCGJ\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol\":{\"keccak256\":\"0x8c8608d5e5a99250c4888cf036b5af4c4adcb7d7a6ee65aa1bd3d26d59a0ea57\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4f68cde5dc3fb75497df4cebd071ecdb53ab6bcedb609935a604dbe9ff81d5a7\",\"dweb:/ipfs/QmQQUwxcVdQo7BSoyXkd7z9aHm9qcNsmeacqksmQGDD3ph\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x33f124bfc1b3a1e5621e65b647a386e1f937ca2290f4d975ee64372a7c935208\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://40073d2122802645ec2d52f5ccbb98986481730e862180e6894da7d3b2017f58\",\"dweb:/ipfs/QmURnsN6Q6HrTAJZBpU28xtg39s2UGH84Kg8VdgbaV5WYG\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol\":{\"keccak256\":\"0x65282248dfed37353288ecef1fbe29ca1795dd2be8e41bcc82c89959f3e1891f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9cbab66f5bf30f9b04e28d877c83013a211d786395fe35f43079c7b2ad1e16ff\",\"dweb:/ipfs/QmQXEwb1PsYQMt3mZCQJBjx7Qfwur6rdKCTFJ5nk8qJzRR\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0x03dff98ec94968396354b8f2063b2954297a4e13fbb43bf94d5e14e8e883f8ed\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://74180382ecc18d692902e2b67c561682a25a3faf227bf6a13e99ca56e339a497\",\"dweb:/ipfs/QmfV9TDgz33PwmixtBE1Rqp3eAZBoyoLoMVaDC5yzFTy3Q\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":{\"keccak256\":\"0xe1410055319adc7ecf394fb8544d529db28b529b1d1294d6dcfeeb99f4321a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1eae0a83069a64c7ebd3af145566e31693a0d902dfcc4412cd6c49f48e653b83\",\"dweb:/ipfs/QmaAHy5YqbSLdWSXfGRHiVZxwMuVs5ZgMeZ1qkTKSSd5fr\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol\":{\"keccak256\":\"0x59e6767df59b43511a7b1d37115b67bef0cc3d4fa044855add4b632df75b38b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e3d489de1808b3f7c963bb0f96877efc4735edfe051f334847a0ea8fbb43b0d\",\"dweb:/ipfs/QmaLifTCHF2TfHKReXBviLKnp846oEPChxWSpZuxY1s5kq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":{\"keccak256\":\"0x33021aa2cf8a70971bc33cee83d1efc8f8054579b419c7beb26653be92bb1a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad3e94c28e83e55a70eaaa2dd683242a8be7319024f7149b657044189116dd93\",\"dweb:/ipfs/QmVsXMF7qoEMZ3wYB4TVWJwvsxUZjUDYC2JdxTPPNbssDM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol\":{\"keccak256\":\"0x22db3491682fd72c4b261ce500ccb2e9c3742ac18830d4e10d40f49014bafa5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b192f1ec27283cab14d04466ec19a4d5b765e0ba3c951108d147d1fe6c5948f0\",\"dweb:/ipfs/QmY7oMStzT9JqbpCVAbaXSPhLqdeQKN1eXwEaEuTxNcLz6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol\":{\"keccak256\":\"0x1c6c6e6078da902a7551eaaf696cd91295559959966b5a9ccd790266128f86e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c26ab3e22c4acd8d91d546a4a5c0f7b3da268f328da93ca33d6b92f453d0d846\",\"dweb:/ipfs/QmQsQhx3bp3pzwkTqdYQ8th2XaYhxk7xSRFaqY2iij1ViP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol\":{\"keccak256\":\"0x78bd925e7883e63dda90f615a808dd0ffc7ebbdba1933044ea560dcf527c4360\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3fa61016c62a4a39096e07bd8362aa410b1a62d8de8bf1a8e25653b8098a01a8\",\"dweb:/ipfs/Qme6m47fXLd9xjgiz652ghwS12Q7zzhWYjdzRhJ5M48UJE\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol\":{\"keccak256\":\"0x0d8a848ee309dc12b4422793bacb572b273aa4074cbd28b7322b3a0e6c15ea7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://405281dbf2a2b2d88fbb6168f2e831301e3e03912f280435a75f1a573d5bcea3\",\"dweb:/ipfs/QmP13xDAXyz7MqZd7jnNY6Mjwefq3Y1SJFMtYQu7qnWM8H\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol\":{\"keccak256\":\"0x99030b3930a07eccf12d3d4880db02563f84b60dad10003ed829467fc701dd8c\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://1be7a72c75732fa48bd8351f7a82475602b45492caf4a1dc8646c9115914e0c2\",\"dweb:/ipfs/QmSKMk53jJrtgWSG5U5nuZP9eRhrMLCStwpxT7gmZPX2pP\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4da0f451fe5aefdb95204dbec4a9448a8a2b00a444864bb5dbf7162da842a0f7\",\"dweb:/ipfs/QmYciAwNiJzgGMAqSTUANwMjy5HykNUvmkQ5PQhNTRqrB5\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16556, - "contract": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol:GenesisFactory", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1300, - "contract": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol:GenesisFactory", - "label": "addressProvider", - "offset": 0, - "slot": "1", - "type": "t_contract(AddressProvider)2931" - }, - { - "astId": 1303, - "contract": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol:GenesisFactory", - "label": "acl", - "offset": 0, - "slot": "2", - "type": "t_contract(ACL)1959" - }, - { - "astId": 1306, - "contract": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol:GenesisFactory", - "label": "priceOracle", - "offset": 0, - "slot": "3", - "type": "t_contract(PriceOracle)15267" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(ACL)1959": { - "encoding": "inplace", - "label": "contract ACL", - "numberOfBytes": "20" - }, - "t_contract(AddressProvider)2931": { - "encoding": "inplace", - "label": "contract AddressProvider", - "numberOfBytes": "20" - }, - "t_contract(PriceOracle)15267": { - "encoding": "inplace", - "label": "contract PriceOracle", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol": { - "ACLTrait": { - "abi": [ - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "constructor", - "params": { - "addressProvider": "Address of address repository" - } - } - }, - "title": "ACL Trait", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "_acl()": "a50cf2c8" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"constructor\",\"params\":{\"addressProvider\":\"Address of address repository\"}}},\"title\":\"ACL Trait\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Utility class for ACL consumers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol\":\"ACLTrait\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol\":{\"keccak256\":\"0x8c1ac20b391ec15c994d89b77d297edff4d99a9cef63f1a16b10c8a64aefa6f3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://50308df8f32fcba6dbadbc3d720b24351d80c89e432d3915e00f24a7262c508a\",\"dweb:/ipfs/QmVmecTuUqKdbT56vPJBuCQLTVSgKbQU5KSuUWTH6rJLca\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Utility class for ACL consumers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol": { - "ContractsRegisterTrait": { - "abi": [ - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": {}, - "title": "ContractsRegister Trait", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"ContractsRegister Trait\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Trait enables checks for registered pools & creditManagers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":\"ContractsRegisterTrait\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":{\"keccak256\":\"0xdecb13fa2b9269e64c184276cc62b7c9ecde2bf9427402b6534690572fd2d821\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff9189896a9447a469ad1d12d6fa2694aa8e0ca2a4e858f028752ba57787722a\",\"dweb:/ipfs/QmTy3ADxN8CA4QHVkHe7R24UpHaHmvZW5KQGZb7grBCCGJ\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Trait enables checks for registered pools & creditManagers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol": { - "SanityCheckTrait": { - "abi": [], - "devdoc": { - "kind": "dev", - "methods": {}, - "title": "ACL Trait", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"ACL Trait\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Utility class for ACL consumers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":\"SanityCheckTrait\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Utility class for ACL consumers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol": { - "AggregatorV3Interface": { - "abi": [ - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "description", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint80", - "name": "_roundId", - "type": "uint80" - } - ], - "name": "getRoundData", - "outputs": [ - { - "internalType": "uint80", - "name": "roundId", - "type": "uint80" - }, - { - "internalType": "int256", - "name": "answer", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - }, - { - "internalType": "uint80", - "name": "answeredInRound", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRoundData", - "outputs": [ - { - "internalType": "uint80", - "name": "roundId", - "type": "uint80" - }, - { - "internalType": "int256", - "name": "answer", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "startedAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "updatedAt", - "type": "uint256" - }, - { - "internalType": "uint80", - "name": "answeredInRound", - "type": "uint80" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "decimals()": "313ce567", - "description()": "7284e416", - "getRoundData(uint80)": "9a6fc8f5", - "latestRoundData()": "feaf968c", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":\"AggregatorV3Interface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol": { - "ACL": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotPausableAdminException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotUnpausableAdminException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "PausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "PausableAdminRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "UnpausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "UnpausableAdminRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "addPausableAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "addUnpausableAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isConfigurator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isPausableAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isUnpausableAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "pausableAdminSet", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "removePausableAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "removeUnpausableAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "unpausableAdminSet", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AddressNotPausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a pausable admin" - } - ], - "AddressNotUnpausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a unpausable admin" - } - ] - }, - "kind": "dev", - "methods": { - "addPausableAdmin(address)": { - "details": "Adds an address to the set of admins that can pause contracts", - "params": { - "newAdmin": "Address of a new pausable admin" - } - }, - "addUnpausableAdmin(address)": { - "details": "Adds unpausable admin address to the list", - "params": { - "newAdmin": "Address of new unpausable admin" - } - }, - "claimOwnership()": { - "details": "Used by the pending owner to claim ownership after transferOwnership" - }, - "isConfigurator(address)": { - "details": "Returns true if an address has configurator rights", - "params": { - "account": "Address to check" - } - }, - "isPausableAdmin(address)": { - "details": "Returns true if the address is a pausable admin and false if not", - "params": { - "addr": "Address to check" - } - }, - "isUnpausableAdmin(address)": { - "details": "Returns true if the address is unpausable admin and false if not", - "params": { - "addr": "Address to check" - } - }, - "removePausableAdmin(address)": { - "details": "Removes an address from the set of admins that can pause contracts", - "params": { - "admin": "Address of admin to be removed" - } - }, - "removeUnpausableAdmin(address)": { - "details": "Adds an address to the set of admins that can unpause contracts", - "params": { - "admin": "Address of admin to be removed" - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Sets pending owner to the new owner, but does not transfer ownership yet", - "params": { - "newOwner": "The address to become the future owner" - } - } - }, - "stateVariables": { - "version": { - "details": "Returns contract version" - } - }, - "title": "ACL contract that stores admin addresses More info: https://dev.gearbox.fi/security/roles", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_16572": { - "entryPoint": null, - "id": 16572, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 31, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106aa8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637328181911610097578063ba306df111610066578063ba306df114610229578063d4eb5db01461023c578063e30c397814610268578063f2fde38b1461027b57600080fd5b806373281819146101bb578063819ad68e146101de5780638da5cb5b146101f1578063adce758d1461021657600080fd5b80634e71e0c8116100d35780634e71e0c81461017357806354fd4d501461017b5780635f259aba14610191578063715018a6146101b357600080fd5b806335914829146100fa5780633a41ec64146101325780634910832f1461015e575b600080fd5b61011d610108366004610644565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61011d610140366004610644565b6001600160a01b031660009081526002602052604090205460ff1690565b61017161016c366004610644565b61028e565b005b6101716102e2565b610183600181565b604051908152602001610129565b61011d61019f366004610644565b6000546001600160a01b0391821691161490565b610171610377565b61011d6101c9366004610644565b60036020526000908152604090205460ff1681565b6101716101ec366004610644565b61038b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b610171610224366004610644565b6103df565b610171610237366004610644565b610474565b61011d61024a366004610644565b6001600160a01b031660009081526003602052604090205460ff1690565b6001546101fe906001600160a01b031681565b610171610289366004610644565b610509565b61029661059a565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b6001546001600160a01b031633146103505760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610365906001600160a01b03166105f4565b600180546001600160a01b0319169055565b61037f61059a565b61038960006105f4565b565b61039361059a565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b6103e761059a565b6001600160a01b03811660009081526003602052604090205460ff1661042b576040516357f592b760e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b61047c61059a565b6001600160a01b03811660009081526002602052604090205460ff166104c05760405163e116318960e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b61051161059a565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610347565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561065657600080fd5b81356001600160a01b038116811461066d57600080fd5b939250505056fea2646970667358221220835bbaf0cbddf40235bbad8ed20125110b9a758c1c68221f654a0fb5a5226bf064736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x6AA DUP1 PUSH2 0x7E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x73281819 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xBA306DF1 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBA306DF1 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xD4EB5DB0 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x73281819 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x819AD68E EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xADCE758D EQ PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E71E0C8 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x5F259ABA EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x35914829 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3A41EC64 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x4910832F EQ PUSH2 0x15E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x28E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x171 PUSH2 0x2E2 JUMP JUMPDEST PUSH2 0x183 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x377 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x224 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x3DF JUMP JUMPDEST PUSH2 0x171 PUSH2 0x237 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x474 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x24A CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1FE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x509 JUMP JUMPDEST PUSH2 0x296 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xAE26B1CFE9454BA87274A4E8330B6654684362D0F3D7BBD17F7449A1D38387C6 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x365 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x59A JUMP JUMPDEST PUSH2 0x389 PUSH1 0x0 PUSH2 0x5F4 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x393 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xD400DA6C0C0A894DACC0981730B88AF0545D00272EE8FFF1437BF560FF245FC4 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x3E7 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42B JUMPI PUSH1 0x40 MLOAD PUSH4 0x57F592B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x1998397E7203F7BACA9D6F41B9E4DA6E768DAAC5CAAD4234FB9BF5869D271545 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x47C PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1163189 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x28B01395B7E25D20552A0C8DC8ECD3B1D4ABC986F14DAD7885FD45B6FD73C8D9 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x511 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x389 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x656 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 JUMPDEST 0xBA CREATE 0xCB 0xDD DELEGATECALL MUL CALLDATALOAD 0xBB 0xAD DUP15 0xD2 ADD 0x25 GT SIGNEXTEND SWAP11 PUSH22 0x8C1C68221F654A0FB5A5226BF064736F6C6343000811 STOP CALLER ", - "sourceMap": "469:2818:12:-:0;;;;;;;;;;;;-1:-1:-1;936:32:52;719:10:66;936:18:52;:32::i;:::-;469:2818:12;;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;469:2818:12:-;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_checkOwner_16603": { - "entryPoint": 1434, - "id": 16603, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 1524, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addPausableAdmin_1825": { - "entryPoint": 654, - "id": 1825, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addUnpausableAdmin_1887": { - "entryPoint": 907, - "id": 1887, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@claimOwnership_4790": { - "entryPoint": 738, - "id": 4790, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isConfigurator_1945": { - "entryPoint": null, - "id": 1945, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isPausableAdmin_1868": { - "entryPoint": null, - "id": 1868, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isUnpausableAdmin_1930": { - "entryPoint": null, - "id": 1930, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@owner_16589": { - "entryPoint": null, - "id": 16589, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@owner_1958": { - "entryPoint": null, - "id": 1958, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@pausableAdminSet_1799": { - "entryPoint": null, - "id": 1799, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pendingOwner_4733": { - "entryPoint": null, - "id": 4733, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@removePausableAdmin_1854": { - "entryPoint": 1140, - "id": 1854, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@removeUnpausableAdmin_1916": { - "entryPoint": 991, - "id": 1916, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@renounceOwnership_16617": { - "entryPoint": 887, - "id": 16617, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_4772": { - "entryPoint": 1289, - "id": 4772, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@unpausableAdminSet_1803": { - "entryPoint": null, - "id": 1803, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@version_1806": { - "entryPoint": null, - "id": 1806, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1604, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2061:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "84:216:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "130:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "139:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "132:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "132:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "132:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "105:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "114:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "101:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "126:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "97:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "97:32:70" - }, - "nodeType": "YulIf", - "src": "94:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "155:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "181:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "168:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "168:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "159:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "254:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "263:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "266:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "256:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "256:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "256:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "213:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "224:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "244:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "231:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "231:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "220:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "220:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "210:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "210:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "203:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "203:50:70" - }, - "nodeType": "YulIf", - "src": "200:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "279:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "289:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "279:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "50:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "61:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "73:6:70", - "type": "" - } - ], - "src": "14:286:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "400:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "410:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "422:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "433:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "418:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "418:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "410:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "452:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "477:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "470:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "470:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "463:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "463:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "445:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "445:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "445:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "369:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "380:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "391:4:70", - "type": "" - } - ], - "src": "305:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "598:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "608:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "620:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "631:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "616:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "616:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "608:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "650:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "661:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "643:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "643:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "643:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "567:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "578:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "589:4:70", - "type": "" - } - ], - "src": "497:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "780:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "790:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "802:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "813:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "798:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "798:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "790:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "832:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "847:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "863:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "868:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "859:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "859:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "872:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "855:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "855:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "843:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "843:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "825:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "825:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "825:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "749:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "760:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "771:4:70", - "type": "" - } - ], - "src": "679:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1061:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1078:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1071:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1071:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1071:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1112:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1123:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1108:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1128:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1101:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1101:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1101:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1151:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1162:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1147:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1147:18:70" - }, - { - "hexValue": "436c61696d61626c653a2053656e646572206973206e6f742070656e64696e67", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1167:34:70", - "type": "", - "value": "Claimable: Sender is not pending" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1140:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1140:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1140:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1222:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1233:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1218:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1218:18:70" - }, - { - "hexValue": "206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1238:8:70", - "type": "", - "value": " owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1211:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1211:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1211:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "1256:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1268:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1279:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1264:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1264:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1256:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1038:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1052:4:70", - "type": "" - } - ], - "src": "887:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1468:230:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1485:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1496:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1478:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1478:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1478:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1519:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1530:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1515:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1515:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1535:2:70", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1508:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1508:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1508:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1558:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1569:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1554:18:70" - }, - { - "hexValue": "436c61696d61626c653a206e6577206f776e657220697320746865207a65726f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1574:34:70", - "type": "", - "value": "Claimable: new owner is the zero" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1547:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1547:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1547:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1629:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1640:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1625:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1625:18:70" - }, - { - "hexValue": "2061646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1645:10:70", - "type": "", - "value": " address" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1618:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1618:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1618:38:70" - }, - { - "nodeType": "YulAssignment", - "src": "1665:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1677:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1688:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1673:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1673:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1665:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1445:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1459:4:70", - "type": "" - } - ], - "src": "1294:404:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1877:182:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1894:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1905:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1887:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1887:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1887:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1928:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1939:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1924:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1924:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1944:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1917:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1917:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1917:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1967:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1978:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1963:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1963:18:70" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1983:34:70", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1956:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1956:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1956:62:70" - }, - { - "nodeType": "YulAssignment", - "src": "2027:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2039:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2050:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2035:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2035:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2027:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1854:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1868:4:70", - "type": "" - } - ], - "src": "1703:356:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Claimable: Sender is not pending\")\n mstore(add(headStart, 96), \" owner\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 40)\n mstore(add(headStart, 64), \"Claimable: new owner is the zero\")\n mstore(add(headStart, 96), \" address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100f55760003560e01c80637328181911610097578063ba306df111610066578063ba306df114610229578063d4eb5db01461023c578063e30c397814610268578063f2fde38b1461027b57600080fd5b806373281819146101bb578063819ad68e146101de5780638da5cb5b146101f1578063adce758d1461021657600080fd5b80634e71e0c8116100d35780634e71e0c81461017357806354fd4d501461017b5780635f259aba14610191578063715018a6146101b357600080fd5b806335914829146100fa5780633a41ec64146101325780634910832f1461015e575b600080fd5b61011d610108366004610644565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61011d610140366004610644565b6001600160a01b031660009081526002602052604090205460ff1690565b61017161016c366004610644565b61028e565b005b6101716102e2565b610183600181565b604051908152602001610129565b61011d61019f366004610644565b6000546001600160a01b0391821691161490565b610171610377565b61011d6101c9366004610644565b60036020526000908152604090205460ff1681565b6101716101ec366004610644565b61038b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b610171610224366004610644565b6103df565b610171610237366004610644565b610474565b61011d61024a366004610644565b6001600160a01b031660009081526003602052604090205460ff1690565b6001546101fe906001600160a01b031681565b610171610289366004610644565b610509565b61029661059a565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b6001546001600160a01b031633146103505760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610365906001600160a01b03166105f4565b600180546001600160a01b0319169055565b61037f61059a565b61038960006105f4565b565b61039361059a565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b6103e761059a565b6001600160a01b03811660009081526003602052604090205460ff1661042b576040516357f592b760e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b61047c61059a565b6001600160a01b03811660009081526002602052604090205460ff166104c05760405163e116318960e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b61051161059a565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610347565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561065657600080fd5b81356001600160a01b038116811461066d57600080fd5b939250505056fea2646970667358221220835bbaf0cbddf40235bbad8ed20125110b9a758c1c68221f654a0fb5a5226bf064736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x73281819 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xBA306DF1 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBA306DF1 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xD4EB5DB0 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x73281819 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x819AD68E EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xADCE758D EQ PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E71E0C8 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x173 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x17B JUMPI DUP1 PUSH4 0x5F259ABA EQ PUSH2 0x191 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x35914829 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3A41EC64 EQ PUSH2 0x132 JUMPI DUP1 PUSH4 0x4910832F EQ PUSH2 0x15E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0x140 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x28E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x171 PUSH2 0x2E2 JUMP JUMPDEST PUSH2 0x183 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x19F CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x377 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x1EC CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x38B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x129 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x224 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x3DF JUMP JUMPDEST PUSH2 0x171 PUSH2 0x237 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x474 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x24A CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1FE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x171 PUSH2 0x289 CALLDATASIZE PUSH1 0x4 PUSH2 0x644 JUMP JUMPDEST PUSH2 0x509 JUMP JUMPDEST PUSH2 0x296 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xAE26B1CFE9454BA87274A4E8330B6654684362D0F3D7BBD17F7449A1D38387C6 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x350 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x365 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x37F PUSH2 0x59A JUMP JUMPDEST PUSH2 0x389 PUSH1 0x0 PUSH2 0x5F4 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x393 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD PUSH32 0xD400DA6C0C0A894DACC0981730B88AF0545D00272EE8FFF1437BF560FF245FC4 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x3E7 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x42B JUMPI PUSH1 0x40 MLOAD PUSH4 0x57F592B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x1998397E7203F7BACA9D6F41B9E4DA6E768DAAC5CAAD4234FB9BF5869D271545 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x47C PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x4C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1163189 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD PUSH32 0x28B01395B7E25D20552A0C8DC8ECD3B1D4ABC986F14DAD7885FD45B6FD73C8D9 SWAP2 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x511 PUSH2 0x59A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x578 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x389 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x347 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x656 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP4 JUMPDEST 0xBA CREATE 0xCB 0xDD DELEGATECALL MUL CALLDATALOAD 0xBB 0xAD DUP15 0xD2 ADD 0x25 GT SIGNEXTEND SWAP11 PUSH22 0x8C1C68221F654A0FB5A5226BF064736F6C6343000811 STOP CALLER ", - "sourceMap": "469:2818:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;507:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;470:14:70;;463:22;445:41;;433:2;418:18;507:48:12;;;;;;;;1611:174;;;;;;:::i;:::-;-1:-1:-1;;;;;1741:22:12;1714:4;1741:22;;;:16;:22;;;;;;;;;1611:174;815:215;;;;;;:::i;:::-;;:::i;:::-;;1215:136:18;;;:::i;642:35:12:-;;676:1;642:35;;;;;643:25:70;;;631:2;616:18;642:35:12;497:177:70;2999:170:12;;;;;;:::i;:::-;3104:4;1273:6:52;-1:-1:-1;;;;;3131:18:12;;;1273:6:52;;3131:18:12;;2999:170;1831:101:52;;;:::i;561:50:12:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1902:221;;;;;;:::i;:::-;;:::i;3175:110::-;3237:7;1273:6:52;-1:-1:-1;;;;;1273:6:52;3175:110:12;;;-1:-1:-1;;;;;843:32:70;;;825:51;;813:2;798:18;3175:110:12;679:203:70;2258:332:12;;;;;;:::i;:::-;;:::i;1168:322::-;;;;;;:::i;:::-;;:::i;2711:178::-;;;;;;:::i;:::-;-1:-1:-1;;;;;2843:24:12;2816:4;2843:24;;;:18;:24;;;;;;;;;2711:178;462:27:18;;;;;-1:-1:-1;;;;;462:27:18;;;897:230;;;;;;:::i;:::-;;:::i;815:215:12:-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;921:26:12;::::1;;::::0;;;:16:::1;:26;::::0;;;;;:33;;-1:-1:-1;;921:33:12::1;950:4;921:33;::::0;;982:28;::::1;::::0;921:26;982:28:::1;815:215:::0;:::o;1215:136:18:-;630:12;;-1:-1:-1;;;;;630:12:18;616:10;:26;612:105;;658:48;;-1:-1:-1;;;658:48:18;;1089:2:70;658:48:18;;;1071:21:70;1128:2;1108:18;;;1101:30;1167:34;1147:18;;;1140:62;-1:-1:-1;;;1218:18:70;;;1211:36;1264:19;;658:48:18;;;;;;;;612:105;1296:12:::1;::::0;1277:32:::1;::::0;-1:-1:-1;;;;;1296:12:18::1;1277:18;:32::i;:::-;1319:12;:25:::0;;-1:-1:-1;;;;;;1319:25:18::1;::::0;;1215:136::o;1831:101:52:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1902:221:12:-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;2010:28:12;::::1;;::::0;;;:18:::1;:28;::::0;;;;;:35;;-1:-1:-1;;2010:35:12::1;2041:4;2010:35;::::0;;2073:30;::::1;::::0;2010:28;2073:30:::1;1902:221:::0;:::o;2258:332::-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;2371:25:12;::::1;;::::0;;;:18:::1;:25;::::0;;;;;::::1;;2366:105;;2419:41;::::0;-1:-1:-1;;;2419:41:12;;-1:-1:-1;;;;;843:32:70;;2419:41:12::1;::::0;::::1;825:51:70::0;798:18;;2419:41:12::1;679:203:70::0;2366:105:12::1;-1:-1:-1::0;;;;;2480:25:12;::::1;2508:5;2480:25:::0;;;:18:::1;:25;::::0;;;;;:33;;-1:-1:-1;;2480:33:12::1;::::0;;2541:29;::::1;::::0;2508:5;2541:29:::1;2258:332:::0;:::o;1168:322::-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;1279:23:12;::::1;;::::0;;;:16:::1;:23;::::0;;;;;::::1;;1274:101;;1325:39;::::0;-1:-1:-1;;;1325:39:12;;-1:-1:-1;;;;;843:32:70;;1325:39:12::1;::::0;::::1;825:51:70::0;798:18;;1325:39:12::1;679:203:70::0;1274:101:12::1;-1:-1:-1::0;;;;;1384:23:12;::::1;1410:5;1384:23:::0;;;:16:::1;:23;::::0;;;;;:31;;-1:-1:-1;;1384:31:12::1;::::0;;1443:27;::::1;::::0;1410:5;1443:27:::1;1168:322:::0;:::o;897:230:18:-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;999:22:18;::::1;978:109;;;::::0;-1:-1:-1;;;978:109:18;;1496:2:70;978:109:18::1;::::0;::::1;1478:21:70::0;1535:2;1515:18;;;1508:30;1574:34;1554:18;;;1547:62;-1:-1:-1;;;1625:18:70;;;1618:38;1673:19;;978:109:18::1;1294:404:70::0;978:109:18::1;1097:12;:23:::0;;-1:-1:-1;;;;;;1097:23:18::1;-1:-1:-1::0;;;;;1097:23:18;;;::::1;::::0;;;::::1;::::0;;897:230::o;1359:130:52:-;3237:7:12;1273:6:52;-1:-1:-1;;;;;1273:6:52;719:10:66;1422:23:52;1414:68;;;;-1:-1:-1;;;1414:68:52;;1905:2:70;1414:68:52;;;1887:21:70;;;1924:18;;;1917:30;1983:34;1963:18;;;1956:62;2035:18;;1414:68:52;1703:356:70;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:286:70:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:70;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:70:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "341200", - "executionCost": "26221", - "totalCost": "367421" - }, - "external": { - "addPausableAdmin(address)": "27952", - "addUnpausableAdmin(address)": "27929", - "claimOwnership()": "54488", - "isConfigurator(address)": "2513", - "isPausableAdmin(address)": "2549", - "isUnpausableAdmin(address)": "2547", - "owner()": "2387", - "pausableAdminSet(address)": "2509", - "pendingOwner()": "2403", - "removePausableAdmin(address)": "30110", - "removeUnpausableAdmin(address)": "30177", - "renounceOwnership()": "infinite", - "transferOwnership(address)": "26823", - "unpausableAdminSet(address)": "2508", - "version()": "240" - } - }, - "methodIdentifiers": { - "addPausableAdmin(address)": "4910832f", - "addUnpausableAdmin(address)": "819ad68e", - "claimOwnership()": "4e71e0c8", - "isConfigurator(address)": "5f259aba", - "isPausableAdmin(address)": "3a41ec64", - "isUnpausableAdmin(address)": "d4eb5db0", - "owner()": "8da5cb5b", - "pausableAdminSet(address)": "35914829", - "pendingOwner()": "e30c3978", - "removePausableAdmin(address)": "ba306df1", - "removeUnpausableAdmin(address)": "adce758d", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "unpausableAdminSet(address)": "73281819", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotUnpausableAdminException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"PausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"PausableAdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"addPausableAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"addUnpausableAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isConfigurator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isPausableAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isUnpausableAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"pausableAdminSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removePausableAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeUnpausableAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"unpausableAdminSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressNotPausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a pausable admin\"}],\"AddressNotUnpausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a unpausable admin\"}]},\"kind\":\"dev\",\"methods\":{\"addPausableAdmin(address)\":{\"details\":\"Adds an address to the set of admins that can pause contracts\",\"params\":{\"newAdmin\":\"Address of a new pausable admin\"}},\"addUnpausableAdmin(address)\":{\"details\":\"Adds unpausable admin address to the list\",\"params\":{\"newAdmin\":\"Address of new unpausable admin\"}},\"claimOwnership()\":{\"details\":\"Used by the pending owner to claim ownership after transferOwnership\"},\"isConfigurator(address)\":{\"details\":\"Returns true if an address has configurator rights\",\"params\":{\"account\":\"Address to check\"}},\"isPausableAdmin(address)\":{\"details\":\"Returns true if the address is a pausable admin and false if not\",\"params\":{\"addr\":\"Address to check\"}},\"isUnpausableAdmin(address)\":{\"details\":\"Returns true if the address is unpausable admin and false if not\",\"params\":{\"addr\":\"Address to check\"}},\"removePausableAdmin(address)\":{\"details\":\"Removes an address from the set of admins that can pause contracts\",\"params\":{\"admin\":\"Address of admin to be removed\"}},\"removeUnpausableAdmin(address)\":{\"details\":\"Adds an address to the set of admins that can unpause contracts\",\"params\":{\"admin\":\"Address of admin to be removed\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Sets pending owner to the new owner, but does not transfer ownership yet\",\"params\":{\"newOwner\":\"The address to become the future owner\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns contract version\"}},\"title\":\"ACL contract that stores admin addresses More info: https://dev.gearbox.fi/security/roles\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol\":\"ACL\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol\":{\"keccak256\":\"0x8c8608d5e5a99250c4888cf036b5af4c4adcb7d7a6ee65aa1bd3d26d59a0ea57\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4f68cde5dc3fb75497df4cebd071ecdb53ab6bcedb609935a604dbe9ff81d5a7\",\"dweb:/ipfs/QmQQUwxcVdQo7BSoyXkd7z9aHm9qcNsmeacqksmQGDD3ph\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16556, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol:ACL", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 4733, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol:ACL", - "label": "pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 1799, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol:ACL", - "label": "pausableAdminSet", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 1803, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol:ACL", - "label": "unpausableAdminSet", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol": { - "ACLTrait": { - "abi": [ - { - "inputs": [], - "name": "CallerNotPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotUnPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Pausable admin" - } - ], - "CallerNotUnPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Unpausable admin" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "constructor", - "params": { - "addressProvider": "Address of address repository" - } - }, - "pause()": { - "details": "Pause contract" - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "unpause()": { - "details": "Unpause contract" - } - }, - "title": "ACL Trait", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "_acl()": "a50cf2c8", - "pause()": "8456cb59", - "paused()": "5c975abb", - "unpause()": "3f4ba83a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotUnPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Pausable admin\"}],\"CallerNotUnPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Unpausable admin\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"constructor\",\"params\":{\"addressProvider\":\"Address of address repository\"}},\"pause()\":{\"details\":\"Pause contract\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"unpause()\":{\"details\":\"Unpause contract\"}},\"title\":\"ACL Trait\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Utility class for ACL consumers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":\"ACLTrait\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol:ACLTrait", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Utility class for ACL consumers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol": { - "AccountFactory": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addressProvider", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CallerNotConfiguratorException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotUnPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "miner", - "type": "address" - } - ], - "name": "AccountMinerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "InitializeCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "ReturnCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "TakeForever", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_contractsRegister", - "outputs": [ - { - "internalType": "contract ContractsRegister", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "cancelAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "countCreditAccounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "countCreditAccountsInStock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "getNext", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "head", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "masterCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "usedAccount", - "type": "address" - } - ], - "name": "returnCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tail", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "takeCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "prev", - "type": "address" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "takeOut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotConfiguratorException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-Configurator" - } - ], - "CallerNotPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Pausable admin" - } - ], - "CallerNotUnPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Unpausable admin" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "addCreditAccount()": { - "details": "Deploys a new Credit Account and sets it as a list's tail Before: --------- head ⬇ ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- ⬆ tail After: --------- head ⬇ ------- ------- ------- ------- -------------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | newAccount | -> address(0) ------- ------- ------- ------- -------------- ⬆ tail" - }, - "cancelAllowance(address,address,address)": { - "details": "Cancels token allowance from a Credit Acocunt to a target contract", - "params": { - "account": "Address of credit account to be cancelled allowance", - "targetContract": "Address of contract to cancel allowance", - "token": "Address of token for allowance" - } - }, - "constructor": { - "details": "constructor After the constructor is executed, the list should look as follows head ⬇ ------- | CA1 | -> address(0) ------- ⬆ tail", - "params": { - "addressProvider": "Address of address repository" - } - }, - "countCreditAccounts()": { - "details": "Returns the number of deployed credit accounts" - }, - "countCreditAccountsInStock()": { - "details": "Returns the number of unused credit accounts in stock" - }, - "creditAccounts(uint256)": { - "details": "Returns the credit account address under the passed id", - "params": { - "id": "The index of the requested CA" - } - }, - "getNext(address)": { - "details": "Gets the next available credit account after the passed one, or address(0) if the passed account is the tail", - "params": { - "creditAccount": "Credit Account previous to the one to retrieve" - } - }, - "isCreditAccount(address)": { - "details": "Returns whether the Credit Account is registered with this factory", - "params": { - "addr": "Address of the Credit Account to check" - } - }, - "pause()": { - "details": "Pause contract" - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "returnCreditAccount(address)": { - "details": "Retrieves the Credit Account from the Credit Manager and adds it to the stock Before: --------- head ⬇ ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- ⬆ tail After: --------- head ⬇ ------- ------- ------- ------- --------------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | usedAccount | -> address(0) ------- ------- ------- ------- --------------- ⬆ tail", - "params": { - "usedAccount": "Address of returned credit account" - } - }, - "takeCreditAccount(uint256,uint256)": { - "details": "Provides a new credit account to a Credit Manager Before: --------- head ⬇ ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- ⬆ tail After: --------- head ⬇ ------- ------- ------- | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ⬆ tail ------- | CA1 | -> address(0) ------- If the taken Credit Account is the last one, creates a new one head ⬇ ------- | CA2 | -> address(0) => _addNewCreditAccount() ------- ⬆ tail", - "returns": { - "_0": "Address of credit account" - } - }, - "takeOut(address,address,address)": { - "details": "Removes an unused Credit Account from the list forever and connects it to the \"to\" parameter", - "params": { - "creditAccount": "Credit Account to take", - "prev": "Credit Account before the taken one in the linked list", - "to": "Address to connect the taken Credit Account to" - } - }, - "unpause()": { - "details": "Unpause contract" - } - }, - "stateVariables": { - "_contractsRegister": { - "details": "Contracts register" - }, - "_nextCreditAccount": { - "details": "Credit account linked list" - }, - "creditAccountsSet": { - "details": "Set of all Credit Accounts" - }, - "head": { - "details": "Head of linked list" - }, - "masterCreditAccount": { - "details": "Address of master credit account for cloning" - }, - "tail": { - "details": "Tail of linked list" - }, - "version": { - "details": "Contract version" - } - }, - "title": "Abstract reusable credit accounts factory", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_17105": { - "entryPoint": null, - "id": 17105, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_17205": { - "entryPoint": null, - "id": 17205, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2005": { - "entryPoint": null, - "id": 2005, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_2200": { - "entryPoint": null, - "id": 2200, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_add_20348": { - "entryPoint": 1103, - "id": 20348, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_contains_20451": { - "entryPoint": null, - "id": 20451, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@addCreditAccount_2352": { - "entryPoint": 650, - "id": 2352, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@add_20648": { - "entryPoint": 1071, - "id": 20648, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@clone_16852": { - "entryPoint": 908, - "id": 16852, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1199, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1249, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1210:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "430:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "440:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "450:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "444:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "479:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "461:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "461:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "461:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "491:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "511:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "505:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "505:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "495:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "538:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "549:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "534:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "534:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "554:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "527:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "527:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "527:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "570:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "579:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "574:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "639:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "668:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "679:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "664:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "664:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "683:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "660:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "702:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "710:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "698:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "698:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "714:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "694:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "694:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "688:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "688:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "653:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "653:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "653:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "600:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "603:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "597:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "597:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "611:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "613:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "622:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "625:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "618:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "618:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "613:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "593:3:70", - "statements": [] - }, - "src": "589:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "753:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "764:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "749:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "749:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "773:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "745:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "745:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "778:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "738:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "738:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "738:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "789:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "805:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "824:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "832:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "820:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "820:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "841:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "837:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "837:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "816:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "816:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "801:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "801:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "848:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "797:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "797:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "789:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "399:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "410:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "421:4:70", - "type": "" - } - ], - "src": "309:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1036:172:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1053:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1064:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1046:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1046:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1046:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1087:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1098:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1083:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1083:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1103:2:70", - "type": "", - "value": "22" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1076:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1076:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1076:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1126:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1137:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1122:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1122:18:70" - }, - { - "hexValue": "455243313136373a20637265617465206661696c6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1142:24:70", - "type": "", - "value": "ERC1167: create failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1115:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1115:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1115:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1176:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1188:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1199:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1184:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1184:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1176:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1013:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1027:4:70", - "type": "" - } - ], - "src": "862:346:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 22)\n mstore(add(headStart, 64), \"ERC1167: create failed\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60e06040523480156200001157600080fd5b5060405162002349380380620023498339810160408190526200003491620004af565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004af565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004e1565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004af565b6001600160a01b031660c052604051620001a490620004a1565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000531565b6000620002a460a0516200038c60201b62000d091760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200042f811b62000da317901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166200042a5760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000446836001600160a01b0384166200044f565b90505b92915050565b6000818152600183016020526040812054620004985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000449565b50600062000449565b610b1a806200182f83390190565b600060208284031215620004c257600080fd5b81516001600160a01b0381168114620004da57600080fd5b9392505050565b600060208083528351808285015260005b818110156200051057858101830151858201604001528201620004f2565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05160c05161129d6200059260003960008181610213015281816102eb01526108850152600081816101b80152610c120152600081816102600152818161049501528181610729015281816107d80152610a94015261129d6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806388f64c54116100ad578063b193976311610071578063b193976314610295578063b60e85181461029d578063d82ecc48146102a5578063e3ba9ace146102b8578063f23953ab146102cb57600080fd5b806388f64c541461020e57806389b77b3e146102355780638f7dcfa314610248578063a50cf2c81461025b578063a904aab61461028257600080fd5b806354fd4d50116100f457806354fd4d50146101865780635c975abb1461019c5780635da33c5b146101b3578063765e0159146101da5780638456cb591461020657600080fd5b806313d8c8401461012657806321d18456146101565780632932472f146101695780633f4ba83a1461017e575b600080fd5b600454610139906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101396101643660046110c0565b6102d3565b61017c6101773660046110f9565b610480565b005b61017c610714565b61018e600181565b60405190815260200161014d565b60005460ff165b604051901515815260200161014d565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101396101e836600461113c565b6001600160a01b039081166000908152600260205260409020541690565b61017c6107c3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c61024336600461113c565b610870565b600354610139906001600160a01b031681565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c6102903660046110f9565b610a7f565b61018e610b8c565b61018e610be0565b6101a36102b336600461113c565b610bf1565b6101396102c6366004611157565b610bfe565b61017c610c0b565b604051636fbc6f6b60e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190611170565b60405180604001604052806002815260200161043560f41b815250906103a05760405162461bcd60e51b81526004016103979190611192565b60405180910390fd5b506103a9610dbf565b600380546001600160a01b038082166000818152600260205260409081902080549093166001600160a01b03199485161790945581549092169055905163c75b5a7160e01b81523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50506040513392506001600160a01b03841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105089190611170565b610525576040516361081c1560e01b815260040160405180910390fd5b61052d610dbf565b6003546001600160a01b0380841691160361057e57600380546001600160a01b03808216600090815260026020526040902080549091166001600160a01b0319928316179092558154169055610651565b6001600160a01b03838116600090815260026020908152604091829020548251808401909352600383526241463360e81b9183019190915290918481169116146105db5760405162461bcd60e51b81526004016103979190611192565b506004546001600160a01b039081169083160361060e57600480546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b03199283161790945591905281541690555b60405163c75b5a7160e01b81526001600160a01b038281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506106ce826005610de990919063ffffffff16565b50806001600160a01b0316826001600160a01b03167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611170565b6107b95760405163081996f760e11b815260040160405180910390fd5b6107c1610dfe565b565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611170565b6108685760405163d794b1e760e01b815260040160405180910390fd5b6107c1610e50565b604051636fbc6f6b60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190611170565b60405180604001604052806002815260200161043560f41b815250906109315760405162461bcd60e51b81526004016103979190611192565b5061093d600582610e8d565b6040518060400160405280600381526020016210518d60ea1b815250906109775760405162461bcd60e51b81526004016103979190611192565b5043816001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906111e0565b14156040518060400160405280600381526020016241463160e81b81525090610a175760405162461bcd60e51b81526004016103979190611192565b50600480546001600160a01b0390811660009081526002602052604080822080546001600160a01b03199081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611170565b610b24576040516361081c1560e01b815260040160405180910390fd5b6040516319a1603960e01b81526001600160a01b03838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050505050565b60035460009081906001600160a01b03165b6001600160a01b03811615610bda576001600160a01b039081166000908152600260205260409020541681610bd28161120f565b925050610b9e565b50919050565b6000610bec6005610eaf565b905090565b600061047a600583610e8d565b600061047a600583610eb9565b6000610c367f0000000000000000000000000000000000000000000000000000000000000000610d09565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020526040902080546001600160a01b031990811692871692831790915582541617905550610cd19050600582610da3565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610d9e5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610397565b919050565b6000610db8836001600160a01b038416610ec5565b9392505050565b6003546001600160a01b03908116600090815260026020526040902054166107c1576107c1610c0b565b6000610db8836001600160a01b038416610f14565b610e06611007565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610e58611050565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e333390565b6001600160a01b03811660009081526001830160205260408120541515610db8565b600061047a825490565b6000610db88383611096565b6000818152600183016020526040812054610f0c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047a565b50600061047a565b60008181526001830160205260408120548015610ffd576000610f38600183611228565b8554909150600090610f4c90600190611228565b9050818114610fb1576000866000018281548110610f6c57610f6c61123b565b9060005260206000200154905080876000018481548110610f8f57610f8f61123b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fc257610fc2611251565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047a565b600091505061047a565b60005460ff166107c15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610397565b60005460ff16156107c15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610397565b60008260000182815481106110ad576110ad61123b565b9060005260206000200154905092915050565b600080604083850312156110d357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114610d9e57600080fd5b60008060006060848603121561110e57600080fd5b611117846110e2565b9250611125602085016110e2565b9150611133604085016110e2565b90509250925092565b60006020828403121561114e57600080fd5b610db8826110e2565b60006020828403121561116957600080fd5b5035919050565b60006020828403121561118257600080fd5b81518015158114610db857600080fd5b600060208083528351808285015260005b818110156111bf578581018301518582016040015282016111a3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156111f257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611221576112216111f9565b5060010190565b8181038181111561047a5761047a6111f9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ade996890c56d4b43fb9e4ec0941b92fb2f65af6439db82451fa7e4509c266064736f6c63430008110033608060405234801561001057600080fd5b50610afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c63430008110033", - "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2349 CODESIZE SUB DUP1 PUSH3 0x2349 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCC SWAP2 SWAP1 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 MSTORE PUSH1 0x1 DUP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP2 POP DUP3 AND PUSH3 0x124 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x11B SWAP2 SWAP1 PUSH3 0x4E1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC513C9BB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x164 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x18A SWAP2 SWAP1 PUSH3 0x4AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH3 0x1A4 SWAP1 PUSH3 0x4A1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x1C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x204A7F07 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x8129FC1C SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x208 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x21D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH3 0x231 PUSH3 0x28A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x0 DUP1 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xAC33FF75C19E70FE83507DB0D683FD3465C996598DC972688B7ACE676C89077B DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH3 0x531 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2A4 PUSH1 0xA0 MLOAD PUSH3 0x38C PUSH1 0x20 SHL PUSH3 0xD09 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8129FC1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x2F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP4 DUP9 AND SWAP4 DUP5 OR SWAP1 SWAP2 SSTORE DUP4 SLOAD AND SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH3 0x354 SWAP3 POP PUSH1 0x5 SWAP2 POP DUP4 SWAP1 PUSH3 0x42F DUP2 SHL PUSH3 0xDA3 OR SWAP1 SHR JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0x9F69B6C10F6810213E055B0BA6BC0A4E2603F73C221AAD77EA35DA819CDA7DC3 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x42A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313136373A20637265617465206661696C656400000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x11B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x446 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0x44F JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH3 0x498 JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH3 0x449 JUMP JUMPDEST POP PUSH1 0x0 PUSH3 0x449 JUMP JUMPDEST PUSH2 0xB1A DUP1 PUSH3 0x182F DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x4C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x510 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x4F2 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x129D PUSH3 0x592 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x213 ADD MSTORE DUP2 DUP2 PUSH2 0x2EB ADD MSTORE PUSH2 0x885 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1B8 ADD MSTORE PUSH2 0xC12 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x260 ADD MSTORE DUP2 DUP2 PUSH2 0x495 ADD MSTORE DUP2 DUP2 PUSH2 0x729 ADD MSTORE DUP2 DUP2 PUSH2 0x7D8 ADD MSTORE PUSH2 0xA94 ADD MSTORE PUSH2 0x129D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x121 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x88F64C54 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB1939763 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB1939763 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xB60E8518 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xD82ECC48 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xE3BA9ACE EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xF23953AB EQ PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x88F64C54 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x89B77B3E EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x8F7DCFA3 EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA904AAB6 EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x5DA33C5B EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x765E0159 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13D8C840 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x21D18456 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x2932472F EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x17E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH2 0x164 CALLDATASIZE PUSH1 0x4 PUSH2 0x10C0 JUMP JUMPDEST PUSH2 0x2D3 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x177 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0x480 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17C PUSH2 0x714 JUMP JUMPDEST PUSH2 0x18E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0xA7F JUMP JUMPDEST PUSH2 0x18E PUSH2 0xB8C JUMP JUMPDEST PUSH2 0x18E PUSH2 0xBE0 JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0xBF1 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1157 JUMP JUMPDEST PUSH2 0xBFE JUMP JUMPDEST PUSH2 0x17C PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35E SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x3A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x3A9 PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP5 DUP6 AND OR SWAP1 SWAP5 SSTORE DUP2 SLOAD SWAP1 SWAP3 AND SWAP1 SSTORE SWAP1 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD CALLER SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 POP PUSH32 0xF3EDE7039176503A8AD1FE7CFAA29475A9DBE0CDCAF04ECF9A5C10570C47B103 SWAP1 PUSH1 0x0 SWAP1 LOG3 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x508 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x52D PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP2 AND SUB PUSH2 0x57E JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE DUP2 SLOAD AND SWAP1 SSTORE PUSH2 0x651 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x414633 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x5DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP4 AND SUB PUSH2 0x60E JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP9 DUP7 AND DUP5 MSTORE SWAP2 DUP4 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP5 SSTORE SWAP2 SWAP1 MSTORE DUP2 SLOAD AND SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x6CE DUP3 PUSH1 0x5 PUSH2 0xDE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x25E267469BA2AE82515BE7B3D45DF60BF8308343F0809E8CF7319058E2255CE6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x778 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x79C SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xDFE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x827 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84B SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x868 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F8 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH2 0x93D PUSH1 0x5 DUP3 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x10518D PUSH1 0xEA SHL DUP2 MSTORE POP SWAP1 PUSH2 0x977 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP NUMBER DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9DB SWAP2 SWAP1 PUSH2 0x11E0 JUMP JUMPDEST EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414631 PUSH1 0xE8 SHL DUP2 MSTORE POP SWAP1 PUSH2 0xA17 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP5 DUP8 AND SWAP5 DUP6 OR SWAP1 SWAP2 SSTORE DUP5 SLOAD AND DUP4 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xCED6AB9AFC868B3A088366F6631AE20752993B5CCE5D5F0534EA5A59FCC57D56 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB07 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0xB24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x19A16039 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x19A16039 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xBDA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP2 PUSH2 0xBD2 DUP2 PUSH2 0x120F JUMP JUMPDEST SWAP3 POP POP PUSH2 0xB9E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBEC PUSH1 0x5 PUSH2 0xEAF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xEB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC36 PUSH32 0x0 PUSH2 0xD09 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8129FC1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP3 DUP8 AND SWAP3 DUP4 OR SWAP1 SWAP2 SSTORE DUP3 SLOAD AND OR SWAP1 SSTORE POP PUSH2 0xCD1 SWAP1 POP PUSH1 0x5 DUP3 PUSH2 0xDA3 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0x9F69B6C10F6810213E055B0BA6BC0A4E2603F73C221AAD77EA35DA819CDA7DC3 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEC5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0x7C1 JUMPI PUSH2 0x7C1 PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xF14 JUMP JUMPDEST PUSH2 0xE06 PUSH2 0x1007 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0xE58 PUSH2 0x1050 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0xE33 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0xDB8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 DUP4 PUSH2 0x1096 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xF0C JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x47A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xFFD JUMPI PUSH1 0x0 PUSH2 0xF38 PUSH1 0x1 DUP4 PUSH2 0x1228 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xF4C SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1228 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xFB1 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xF6C JUMPI PUSH2 0xF6C PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xF8F JUMPI PUSH2 0xF8F PUSH2 0x123B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0xFC2 JUMPI PUSH2 0xFC2 PUSH2 0x1251 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x10AD JUMPI PUSH2 0x10AD PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1117 DUP5 PUSH2 0x10E2 JUMP JUMPDEST SWAP3 POP PUSH2 0x1125 PUSH1 0x20 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP2 POP PUSH2 0x1133 PUSH1 0x40 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x114E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDB8 DUP3 PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11BF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x11A3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1221 JUMPI PUSH2 0x1221 PUSH2 0x11F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x47A JUMPI PUSH2 0x47A PUSH2 0x11F9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 0xDE SWAP10 PUSH9 0x90C56D4B43FB9E4EC0 SWAP5 SHL SWAP3 0xFB 0x2F PUSH6 0xAF6439DB8245 0x1F 0xA7 0xE4 POP SWAP13 0x26 PUSH1 0x64 PUSH20 0x6F6C634300081100336080604052348015610010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAFA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x8129FC1C EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xC75B5A71 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16128211 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x17D11A15 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x19A16039 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x1AFBB7A4 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x3DC54B40 EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD7 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCC PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x890 JUMP JUMPDEST PUSH2 0x1DF JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D9 JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x271 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x152 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x152 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x398 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA31 JUMP JUMPDEST PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x210 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x225 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH1 0x0 PUSH2 0x43A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x257 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x291 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x2AB JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x313 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND CALLER PUSH3 0x10000 MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SSTORE NUMBER PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x435 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x5C6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4B4 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B2 SWAP2 SWAP1 PUSH2 0xA6D JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x64B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x435 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x435 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x745 SWAP2 SWAP1 PUSH2 0xAA8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x787 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x798 DUP8 DUP4 DUP4 DUP8 PUSH2 0x7B4 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x823 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x81C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30A JUMP JUMPDEST POP DUP2 PUSH2 0x79D JUMP JUMPDEST PUSH2 0x79D DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x838 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30A SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AC DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH2 0x8BA PUSH1 0x20 DUP5 ADD PUSH2 0x874 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F5 DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x938 JUMPI PUSH2 0x938 PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x960 JUMPI PUSH2 0x960 PUSH2 0x8C3 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x99E JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9D7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x26A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA1C DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA4F DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP3 POP PUSH2 0xA5D PUSH1 0x20 DUP6 ADD PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xABA DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x99B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xE0 ORIGIN 0xB4 0xD4 SLOAD REVERT 0xE8 SWAP14 SELFBALANCE 0xC1 RETURN 0xE3 0xD2 DUP9 DUP4 0xF9 0xDD PUSH27 0x1D4A9F2897AD07A0CE3EB716D364736F6C63430008110033000000 ", - "sourceMap": "1072:11699:14:-:0;;;2790:609;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1006:5:56;996:15;;-1:-1:-1;;996:15:56;;;2836::14;-1:-1:-1;;;;;855:29:13;;851:64;;893:22;;-1:-1:-1;;;893:22:13;;;;;;;;;;;851:64;966:15;-1:-1:-1;;;;;950:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;938:54:13;;;;;1716:1:57;1821:22;;2927:34:14::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;2927:34:14::1;::::0;::::1;::::0;;-1:-1:-1;2884:29:14;::::1;2863:108;;;;-1:-1:-1::0;;;2863:108:14::1;;;;;;;;:::i;:::-;;;;;;;;;;3050:15;-1:-1:-1::0;;;;;3034:53:14::1;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2982:117:14::1;;::::0;3152:19:::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;3122:50:14::1;;::::0;;;3194:47:::1;::::0;;-1:-1:-1;;;3194:47:14;;;;:45:::1;::::0;:47:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;3122:50;3194:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3264:18;:16;;;:18;;:::i;:::-;-1:-1:-1::0;3311:4:14::1;::::0;3304::::1;:11:::0;;-1:-1:-1;;;;;3311:4:14;;::::1;-1:-1:-1::0;;;;;;3304:11:14;;::::1;;::::0;;-1:-1:-1;3337:30:14;;:18:::1;:30;::::0;;:43;;;;::::1;::::0;;1072:11699;;8467:386;8512:21;8536:33;8549:19;;8536:12;;;;;:33;;:::i;:::-;8512:57;;8606:13;-1:-1:-1;;;;;8591:40:14;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8662:4:14;;;-1:-1:-1;;;;;8662:4:14;;;8643:24;;;;:18;:24;;;;;;;;:40;;-1:-1:-1;;;;;;8643:40:14;;;;;;;;;;;;8705:20;;;;;;;;;8747:36;;-1:-1:-1;8747:17:14;;-1:-1:-1;8643:40:14;;8747:21;;;;;:36;;:::i;:::-;-1:-1:-1;8815:31:14;;-1:-1:-1;;;;;8815:31:14;;;;;;;;8502:351;8467:386::o;973:759:54:-;1030:16;1362:48;1344:14;1338:4;1334:25;1328:4;1324:36;1321:90;1315:4;1308:104;1569:32;1552:14;1546:4;1542:25;1539:63;1533:4;1526:77;1644:4;1638;1635:1;1628:21;1616:33;-1:-1:-1;;;;;;1676:22:54;;1668:57;;;;-1:-1:-1;;;1668:57:54;;1064:2:70;1668:57:54;;;1046:21:70;1103:2;1083:18;;;1076:30;1142:24;1122:18;;;1115:52;1184:18;;1668:57:54;862:346:70;1668:57:54;973:759;;;:::o;8297:150:69:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:69;;8390:4;:50::i;:::-;8383:57;;8297:150;;;;;:::o;2206:404::-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:69;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:69;2581:12;;1072:11699:14;;;;;;;;:::o;14:290:70:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;309:548::-;421:4;450:2;479;468:9;461:21;511:6;505:13;554:6;549:2;538:9;534:18;527:34;579:1;589:140;603:6;600:1;597:13;589:140;;;698:14;;;694:23;;688:30;664:17;;;683:2;660:26;653:66;618:10;;589:140;;;593:3;778:1;773:2;764:6;753:9;749:22;745:31;738:42;848:2;841;837:7;832:2;824:6;820:15;816:29;805:9;801:45;797:54;789:62;;;;309:548;;;;:::o;862:346::-;1072:11699:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_acl_1978": { - "entryPoint": null, - "id": 1978, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_add_20348": { - "entryPoint": 3781, - "id": 20348, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_at_20482": { - "entryPoint": 4246, - "id": 20482, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_checkStock_2467": { - "entryPoint": 3519, - "id": 2467, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_contains_20451": { - "entryPoint": null, - "id": 20451, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_contractsRegister_2115": { - "entryPoint": null, - "id": 2115, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_length_20465": { - "entryPoint": null, - "id": 20465, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_pause_17169": { - "entryPoint": 3664, - "id": 17169, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_remove_20432": { - "entryPoint": 3860, - "id": 20432, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_requireNotPaused_17142": { - "entryPoint": 4176, - "id": 17142, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requirePaused_17153": { - "entryPoint": 4103, - "id": 17153, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_unpause_17185": { - "entryPoint": 3582, - "id": 17185, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addCreditAccount_2352": { - "entryPoint": 3083, - "id": 2352, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@add_20648": { - "entryPoint": 3491, - "id": 20648, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@at_20744": { - "entryPoint": 3769, - "id": 20744, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@cancelAllowance_2488": { - "entryPoint": 2687, - "id": 2488, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@clone_16852": { - "entryPoint": 3337, - "id": 16852, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@contains_20702": { - "entryPoint": 3725, - "id": 20702, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@countCreditAccountsInStock_2523": { - "entryPoint": 2956, - "id": 2523, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@countCreditAccounts_2535": { - "entryPoint": 3040, - "id": 2535, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@creditAccounts_2550": { - "entryPoint": 3070, - "id": 2550, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getNext_2314": { - "entryPoint": null, - "id": 2314, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@head_2100": { - "entryPoint": null, - "id": 2100, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isCreditAccount_2564": { - "entryPoint": 3057, - "id": 2564, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@length_20717": { - "entryPoint": 3759, - "id": 20717, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@masterCreditAccount_2107": { - "entryPoint": null, - "id": 2107, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pause_2038": { - "entryPoint": 1987, - "id": 2038, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@paused_17130": { - "entryPoint": null, - "id": 17130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@remove_20675": { - "entryPoint": 3561, - "id": 20675, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@returnCreditAccount_2300": { - "entryPoint": 2160, - "id": 2300, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@tail_2104": { - "entryPoint": null, - "id": 2104, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@takeCreditAccount_2254": { - "entryPoint": 723, - "id": 2254, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@takeOut_2449": { - "entryPoint": 1152, - "id": 2449, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@unpause_2056": { - "entryPoint": 1812, - "id": 2056, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@version_2119": { - "entryPoint": null, - "id": 2119, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 4322, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 4412, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_address": { - "entryPoint": 4345, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 4464, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": 4439, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 4576, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_uint256": { - "entryPoint": 4288, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_rational_0_by_1_t_rational_0_by_1__to_t_address_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 4498, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 4648, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 4623, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 4601, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 4689, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 4667, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:5958:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "198:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "203:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "194:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "194:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "207:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "190:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "178:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "160:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "160:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:70", - "type": "" - } - ], - "src": "14:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "309:161:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "355:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "364:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "367:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "357:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "357:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "357:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "330:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "339:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "326:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "351:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "322:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "322:32:70" - }, - "nodeType": "YulIf", - "src": "319:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "380:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "403:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "390:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "390:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "380:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "422:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "449:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "460:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "445:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "445:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "432:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "432:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "422:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "267:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "278:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "290:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "298:6:70", - "type": "" - } - ], - "src": "222:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "524:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "534:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "556:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "543:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "543:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "534:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "626:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "635:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "638:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "628:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "628:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "628:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "585:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "596:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "611:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "616:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "607:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "607:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "620:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "603:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "603:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "592:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "592:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "582:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "582:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "575:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "575:50:70" - }, - "nodeType": "YulIf", - "src": "572:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "503:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "514:5:70", - "type": "" - } - ], - "src": "475:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "757:230:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "803:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "812:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "815:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "805:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "805:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "805:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "778:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "787:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "774:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "774:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "799:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "770:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "770:32:70" - }, - "nodeType": "YulIf", - "src": "767:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "828:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "857:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "838:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "838:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "828:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "876:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "909:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "920:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "905:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "905:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "886:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "886:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "876:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "933:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "966:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "977:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "962:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "962:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "943:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "943:38:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "933:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "707:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "718:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "730:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "738:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "746:6:70", - "type": "" - } - ], - "src": "653:334:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1093:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1103:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1115:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1126:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1111:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1111:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1103:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1145:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1156:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1138:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1138:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1138:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1062:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1073:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1084:4:70", - "type": "" - } - ], - "src": "992:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1269:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1279:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1291:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1302:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1287:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1287:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1279:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1321:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1346:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1339:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1339:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1332:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1332:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1314:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1314:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1314:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1238:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1249:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1260:4:70", - "type": "" - } - ], - "src": "1174:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1436:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1482:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1491:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1494:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1484:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1484:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1484:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1457:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1466:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1453:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1453:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1478:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1449:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1449:32:70" - }, - "nodeType": "YulIf", - "src": "1446:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1507:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1536:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1517:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1517:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1507:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1402:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1413:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1425:6:70", - "type": "" - } - ], - "src": "1366:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1684:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1694:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1706:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1717:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1702:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1702:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1694:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1736:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1751:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1767:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1772:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1763:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1763:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1776:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1759:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1759:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1747:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1747:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1729:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1729:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1729:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1653:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1664:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1675:4:70", - "type": "" - } - ], - "src": "1557:229:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1906:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1916:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1928:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1939:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1924:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1924:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1916:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1958:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1973:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1989:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1994:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1985:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1985:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1998:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1981:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1981:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1969:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1969:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1951:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1951:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1951:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1875:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1886:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1897:4:70", - "type": "" - } - ], - "src": "1791:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2083:110:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2129:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2138:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2141:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2131:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2131:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2131:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2104:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2113:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2100:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2125:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2096:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2096:32:70" - }, - "nodeType": "YulIf", - "src": "2093:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2154:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2177:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2164:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2164:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2154:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2049:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2060:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2072:6:70", - "type": "" - } - ], - "src": "2013:180:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2276:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2322:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2331:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2334:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2324:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2324:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2324:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2297:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2306:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2293:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2293:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2318:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2289:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2289:32:70" - }, - "nodeType": "YulIf", - "src": "2286:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2347:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2366:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2360:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2360:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2351:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2429:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2438:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2441:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2431:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2431:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2431:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2398:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2419:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2412:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2412:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2405:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2405:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2395:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2395:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2388:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2388:40:70" - }, - "nodeType": "YulIf", - "src": "2385:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "2454:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2464:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2454:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2242:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2253:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2265:6:70", - "type": "" - } - ], - "src": "2198:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2601:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2611:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2621:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2615:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2639:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2650:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2632:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2632:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2632:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2662:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2682:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2676:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2676:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2666:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2709:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2720:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2705:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2705:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2725:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2698:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2698:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2698:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2741:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2750:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2745:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2810:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2839:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2850:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2835:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2835:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2854:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2831:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2831:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2873:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2881:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2869:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2869:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2885:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2865:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2865:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2859:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2859:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2824:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2824:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2824:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2771:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2774:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2768:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2768:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2782:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2784:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2793:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2796:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2789:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2789:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2784:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2764:3:70", - "statements": [] - }, - "src": "2760:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2924:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2935:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2920:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2920:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2944:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2916:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2916:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2949:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2909:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2909:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2909:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "2960:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2976:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2995:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3003:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2991:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2991:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3012:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3008:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3008:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2987:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2987:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2972:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2972:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3019:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2968:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2968:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2960:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2570:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2581:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2592:4:70", - "type": "" - } - ], - "src": "2480:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3190:188:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3200:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3212:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3223:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3208:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3208:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3200:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3242:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3257:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3273:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3278:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3269:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3269:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3282:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3265:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3265:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3253:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3253:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3235:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3235:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3235:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3306:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3317:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3302:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3302:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3322:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3295:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3295:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3295:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3349:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3360:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3345:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3345:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3365:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3338:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3338:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3338:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3143:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3154:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3162:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3170:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3181:4:70", - "type": "" - } - ], - "src": "3033:345:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3556:188:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3566:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3578:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3589:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3574:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3574:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3566:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3608:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3623:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3639:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3644:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3635:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3635:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3648:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3631:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3631:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3619:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3601:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3601:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3601:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3672:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3683:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3668:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3668:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3688:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3661:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3661:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3661:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3715:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3726:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3711:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3711:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3731:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3704:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3704:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3704:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_rational_0_by_1_t_rational_0_by_1__to_t_address_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3509:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3520:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3528:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3536:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3547:4:70", - "type": "" - } - ], - "src": "3383:361:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3830:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3876:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3885:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3888:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3878:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3878:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3878:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3851:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3860:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3847:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3847:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3872:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3843:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3843:32:70" - }, - "nodeType": "YulIf", - "src": "3840:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "3901:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3917:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3911:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3911:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3901:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3796:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3807:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3819:6:70", - "type": "" - } - ], - "src": "3749:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4067:175:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4077:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4089:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4100:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4085:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4085:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4077:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4112:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4130:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4135:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4126:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4126:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4139:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4122:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4122:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4116:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4157:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4172:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4180:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4168:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4168:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4150:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4150:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4150:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4204:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4215:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4200:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4200:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4224:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4232:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4220:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4220:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4193:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4193:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4193:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4028:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4039:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4047:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4058:4:70", - "type": "" - } - ], - "src": "3938:304:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4279:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4296:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4303:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4308:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4299:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4299:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4289:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4289:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4289:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4336:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4339:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4329:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4329:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4329:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4360:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4363:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4353:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4353:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4353:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "4247:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4426:88:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4457:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4459:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4459:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4459:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4442:5:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4453:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4449:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4449:6:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4439:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4439:17:70" - }, - "nodeType": "YulIf", - "src": "4436:43:70" - }, - { - "nodeType": "YulAssignment", - "src": "4488:20:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4499:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4506:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4495:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4495:13:70" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "4488:3:70" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4408:5:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "4418:3:70", - "type": "" - } - ], - "src": "4379:135:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4693:172:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4710:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4721:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4703:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4703:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4703:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4744:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4755:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4740:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4740:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4760:2:70", - "type": "", - "value": "22" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4733:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4733:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4733:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4783:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4794:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4779:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4779:18:70" - }, - { - "hexValue": "455243313136373a20637265617465206661696c6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4799:24:70", - "type": "", - "value": "ERC1167: create failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4772:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4772:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4772:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "4833:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4845:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4856:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4841:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4841:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4833:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4670:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4684:4:70", - "type": "" - } - ], - "src": "4519:346:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4919:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4929:17:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4941:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4944:1:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4937:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4937:9:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "4929:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4970:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4972:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4972:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4972:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "4961:4:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4967:1:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4958:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4958:11:70" - }, - "nodeType": "YulIf", - "src": "4955:37:70" - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "4901:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "4904:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "4910:4:70", - "type": "" - } - ], - "src": "4870:128:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5035:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5052:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5059:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5064:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5055:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5055:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5045:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5045:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5045:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5092:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5095:4:70", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5085:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5085:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5085:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5116:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5119:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5109:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5109:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5109:15:70" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "5003:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5167:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5184:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5191:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5196:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5187:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5187:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5177:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5177:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5177:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5224:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5227:4:70", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5217:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5217:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5217:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5248:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5251:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5241:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5241:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5241:15:70" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "5135:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5441:170:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5458:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5469:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5451:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5451:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5451:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5492:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5503:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5488:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5488:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5508:2:70", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5481:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5481:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5481:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5531:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5542:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5527:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5527:18:70" - }, - { - "hexValue": "5061757361626c653a206e6f7420706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5547:22:70", - "type": "", - "value": "Pausable: not paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5520:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5520:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5520:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "5579:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5591:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5602:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5587:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5587:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5579:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5418:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5432:4:70", - "type": "" - } - ], - "src": "5267:344:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5790:166:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5807:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5818:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5800:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5800:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5800:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5841:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5852:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5837:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5837:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5857:2:70", - "type": "", - "value": "16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5830:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5830:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5830:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5880:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5891:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5876:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5876:18:70" - }, - { - "hexValue": "5061757361626c653a20706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5896:18:70", - "type": "", - "value": "Pausable: paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5869:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5869:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5869:46:70" - }, - { - "nodeType": "YulAssignment", - "src": "5924:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5936:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5947:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5932:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5932:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5924:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5767:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5781:4:70", - "type": "" - } - ], - "src": "5616:340:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := abi_decode_address(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address_t_rational_0_by_1_t_rational_0_by_1__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 22)\n mstore(add(headStart, 64), \"ERC1167: create failed\")\n tail := add(headStart, 96)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x31()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Pausable: not paused\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Pausable: paused\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1978": [ - { - "length": 32, - "start": 608 - }, - { - "length": 32, - "start": 1173 - }, - { - "length": 32, - "start": 1833 - }, - { - "length": 32, - "start": 2008 - }, - { - "length": 32, - "start": 2708 - } - ], - "2107": [ - { - "length": 32, - "start": 440 - }, - { - "length": 32, - "start": 3090 - } - ], - "2115": [ - { - "length": 32, - "start": 531 - }, - { - "length": 32, - "start": 747 - }, - { - "length": 32, - "start": 2181 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101215760003560e01c806388f64c54116100ad578063b193976311610071578063b193976314610295578063b60e85181461029d578063d82ecc48146102a5578063e3ba9ace146102b8578063f23953ab146102cb57600080fd5b806388f64c541461020e57806389b77b3e146102355780638f7dcfa314610248578063a50cf2c81461025b578063a904aab61461028257600080fd5b806354fd4d50116100f457806354fd4d50146101865780635c975abb1461019c5780635da33c5b146101b3578063765e0159146101da5780638456cb591461020657600080fd5b806313d8c8401461012657806321d18456146101565780632932472f146101695780633f4ba83a1461017e575b600080fd5b600454610139906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101396101643660046110c0565b6102d3565b61017c6101773660046110f9565b610480565b005b61017c610714565b61018e600181565b60405190815260200161014d565b60005460ff165b604051901515815260200161014d565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101396101e836600461113c565b6001600160a01b039081166000908152600260205260409020541690565b61017c6107c3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c61024336600461113c565b610870565b600354610139906001600160a01b031681565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c6102903660046110f9565b610a7f565b61018e610b8c565b61018e610be0565b6101a36102b336600461113c565b610bf1565b6101396102c6366004611157565b610bfe565b61017c610c0b565b604051636fbc6f6b60e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190611170565b60405180604001604052806002815260200161043560f41b815250906103a05760405162461bcd60e51b81526004016103979190611192565b60405180910390fd5b506103a9610dbf565b600380546001600160a01b038082166000818152600260205260409081902080549093166001600160a01b03199485161790945581549092169055905163c75b5a7160e01b81523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50506040513392506001600160a01b03841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105089190611170565b610525576040516361081c1560e01b815260040160405180910390fd5b61052d610dbf565b6003546001600160a01b0380841691160361057e57600380546001600160a01b03808216600090815260026020526040902080549091166001600160a01b0319928316179092558154169055610651565b6001600160a01b03838116600090815260026020908152604091829020548251808401909352600383526241463360e81b9183019190915290918481169116146105db5760405162461bcd60e51b81526004016103979190611192565b506004546001600160a01b039081169083160361060e57600480546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b03199283161790945591905281541690555b60405163c75b5a7160e01b81526001600160a01b038281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506106ce826005610de990919063ffffffff16565b50806001600160a01b0316826001600160a01b03167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611170565b6107b95760405163081996f760e11b815260040160405180910390fd5b6107c1610dfe565b565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611170565b6108685760405163d794b1e760e01b815260040160405180910390fd5b6107c1610e50565b604051636fbc6f6b60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190611170565b60405180604001604052806002815260200161043560f41b815250906109315760405162461bcd60e51b81526004016103979190611192565b5061093d600582610e8d565b6040518060400160405280600381526020016210518d60ea1b815250906109775760405162461bcd60e51b81526004016103979190611192565b5043816001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906111e0565b14156040518060400160405280600381526020016241463160e81b81525090610a175760405162461bcd60e51b81526004016103979190611192565b50600480546001600160a01b0390811660009081526002602052604080822080546001600160a01b03199081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611170565b610b24576040516361081c1560e01b815260040160405180910390fd5b6040516319a1603960e01b81526001600160a01b03838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050505050565b60035460009081906001600160a01b03165b6001600160a01b03811615610bda576001600160a01b039081166000908152600260205260409020541681610bd28161120f565b925050610b9e565b50919050565b6000610bec6005610eaf565b905090565b600061047a600583610e8d565b600061047a600583610eb9565b6000610c367f0000000000000000000000000000000000000000000000000000000000000000610d09565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020526040902080546001600160a01b031990811692871692831790915582541617905550610cd19050600582610da3565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610d9e5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610397565b919050565b6000610db8836001600160a01b038416610ec5565b9392505050565b6003546001600160a01b03908116600090815260026020526040902054166107c1576107c1610c0b565b6000610db8836001600160a01b038416610f14565b610e06611007565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610e58611050565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e333390565b6001600160a01b03811660009081526001830160205260408120541515610db8565b600061047a825490565b6000610db88383611096565b6000818152600183016020526040812054610f0c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047a565b50600061047a565b60008181526001830160205260408120548015610ffd576000610f38600183611228565b8554909150600090610f4c90600190611228565b9050818114610fb1576000866000018281548110610f6c57610f6c61123b565b9060005260206000200154905080876000018481548110610f8f57610f8f61123b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fc257610fc2611251565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047a565b600091505061047a565b60005460ff166107c15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610397565b60005460ff16156107c15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610397565b60008260000182815481106110ad576110ad61123b565b9060005260206000200154905092915050565b600080604083850312156110d357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114610d9e57600080fd5b60008060006060848603121561110e57600080fd5b611117846110e2565b9250611125602085016110e2565b9150611133604085016110e2565b90509250925092565b60006020828403121561114e57600080fd5b610db8826110e2565b60006020828403121561116957600080fd5b5035919050565b60006020828403121561118257600080fd5b81518015158114610db857600080fd5b600060208083528351808285015260005b818110156111bf578581018301518582016040015282016111a3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156111f257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611221576112216111f9565b5060010190565b8181038181111561047a5761047a6111f9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ade996890c56d4b43fb9e4ec0941b92fb2f65af6439db82451fa7e4509c266064736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x121 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x88F64C54 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xB1939763 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB1939763 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xB60E8518 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xD82ECC48 EQ PUSH2 0x2A5 JUMPI DUP1 PUSH4 0xE3BA9ACE EQ PUSH2 0x2B8 JUMPI DUP1 PUSH4 0xF23953AB EQ PUSH2 0x2CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x88F64C54 EQ PUSH2 0x20E JUMPI DUP1 PUSH4 0x89B77B3E EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x8F7DCFA3 EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xA904AAB6 EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0x5DA33C5B EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0x765E0159 EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x13D8C840 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x21D18456 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x2932472F EQ PUSH2 0x169 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x17E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH2 0x164 CALLDATASIZE PUSH1 0x4 PUSH2 0x10C0 JUMP JUMPDEST PUSH2 0x2D3 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x177 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0x480 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17C PUSH2 0x714 JUMP JUMPDEST PUSH2 0x18E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x14D JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x139 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x139 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x17C PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x10F9 JUMP JUMPDEST PUSH2 0xA7F JUMP JUMPDEST PUSH2 0x18E PUSH2 0xB8C JUMP JUMPDEST PUSH2 0x18E PUSH2 0xBE0 JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x113C JUMP JUMPDEST PUSH2 0xBF1 JUMP JUMPDEST PUSH2 0x139 PUSH2 0x2C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1157 JUMP JUMPDEST PUSH2 0xBFE JUMP JUMPDEST PUSH2 0x17C PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35E SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x3A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x3A9 PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP5 DUP6 AND OR SWAP1 SWAP5 SSTORE DUP2 SLOAD SWAP1 SWAP3 AND SWAP1 SSTORE SWAP1 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD CALLER SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP2 POP PUSH32 0xF3EDE7039176503A8AD1FE7CFAA29475A9DBE0CDCAF04ECF9A5C10570C47B103 SWAP1 PUSH1 0x0 SWAP1 LOG3 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x508 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x52D PUSH2 0xDBF JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP2 AND SUB PUSH2 0x57E JUMPI PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE DUP2 SLOAD AND SWAP1 SSTORE PUSH2 0x651 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x414633 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 DUP5 DUP2 AND SWAP2 AND EQ PUSH2 0x5DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP4 AND SUB PUSH2 0x60E JUMPI PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP9 DUP7 AND DUP5 MSTORE SWAP2 DUP4 KECCAK256 DUP1 SLOAD SWAP3 SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP5 SSTORE SWAP2 SWAP1 MSTORE DUP2 SLOAD AND SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC75B5A71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xC75B5A71 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x6CE DUP3 PUSH1 0x5 PUSH2 0xDE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x25E267469BA2AE82515BE7B3D45DF60BF8308343F0809E8CF7319058E2255CE6 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x778 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x79C SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x7B9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xDFE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x827 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84B SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x868 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7C1 PUSH2 0xE50 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8F8 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH2 0x93D PUSH1 0x5 DUP3 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x10518D PUSH1 0xEA SHL DUP2 MSTORE POP SWAP1 PUSH2 0x977 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP NUMBER DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9DB SWAP2 SWAP1 PUSH2 0x11E0 JUMP JUMPDEST EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414631 PUSH1 0xE8 SHL DUP2 MSTORE POP SWAP1 PUSH2 0xA17 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x397 SWAP2 SWAP1 PUSH2 0x1192 JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP5 DUP8 AND SWAP5 DUP6 OR SWAP1 SWAP2 SSTORE DUP5 SLOAD AND DUP4 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xCED6AB9AFC868B3A088366F6631AE20752993B5CCE5D5F0534EA5A59FCC57D56 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB07 SWAP2 SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH2 0xB24 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x19A16039 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x19A16039 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB83 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0xBDA JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP2 PUSH2 0xBD2 DUP2 PUSH2 0x120F JUMP JUMPDEST SWAP3 POP POP PUSH2 0xB9E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBEC PUSH1 0x5 PUSH2 0xEAF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xE8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A PUSH1 0x5 DUP4 PUSH2 0xEB9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC36 PUSH32 0x0 PUSH2 0xD09 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8129FC1C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP3 DUP8 AND SWAP3 DUP4 OR SWAP1 SWAP2 SSTORE DUP3 SLOAD AND OR SWAP1 SSTORE POP PUSH2 0xCD1 SWAP1 POP PUSH1 0x5 DUP3 PUSH2 0xDA3 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0x9F69B6C10F6810213E055B0BA6BC0A4E2603F73C221AAD77EA35DA819CDA7DC3 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 PUSH23 0x3D602D80600A3D3981F3363D3D373D3D3D363D73000000 DUP3 PUSH1 0x60 SHL PUSH1 0xE8 SHR OR PUSH1 0x0 MSTORE PUSH15 0x5AF43D82803E903D91602B57FD5BF3 DUP3 PUSH1 0x78 SHL OR PUSH1 0x20 MSTORE PUSH1 0x37 PUSH1 0x9 PUSH1 0x0 CREATE SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xD9E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x115490CC4C4D8DCE8818DC99585D194819985A5B1959 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEC5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND PUSH2 0x7C1 JUMPI PUSH2 0x7C1 PUSH2 0xC0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xF14 JUMP JUMPDEST PUSH2 0xE06 PUSH2 0x1007 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0xE58 PUSH2 0x1050 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0xE33 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD ISZERO ISZERO PUSH2 0xDB8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47A DUP3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDB8 DUP4 DUP4 PUSH2 0x1096 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xF0C JUMPI POP DUP2 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP5 SSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 SWAP1 SWAP4 ADD DUP5 SWAP1 SSTORE DUP5 SLOAD DUP5 DUP3 MSTORE DUP3 DUP7 ADD SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x47A JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 DUP4 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xFFD JUMPI PUSH1 0x0 PUSH2 0xF38 PUSH1 0x1 DUP4 PUSH2 0x1228 JUMP JUMPDEST DUP6 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0xF4C SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1228 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xFB1 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xF6C JUMPI PUSH2 0xF6C PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xF8F JUMPI PUSH2 0xF8F PUSH2 0x123B JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 SSTORE SWAP2 DUP3 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP4 SWAP1 SSTORE JUMPDEST DUP6 SLOAD DUP7 SWAP1 DUP1 PUSH2 0xFC2 JUMPI PUSH2 0xFC2 PUSH2 0x1251 JUMP JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP PUSH2 0x47A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x7C1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x397 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x10AD JUMPI PUSH2 0x10AD PUSH2 0x123B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1117 DUP5 PUSH2 0x10E2 JUMP JUMPDEST SWAP3 POP PUSH2 0x1125 PUSH1 0x20 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP2 POP PUSH2 0x1133 PUSH1 0x40 DUP6 ADD PUSH2 0x10E2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x114E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDB8 DUP3 PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1169 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xDB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11BF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x11A3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1221 JUMPI PUSH2 0x1221 PUSH2 0x11F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x47A JUMPI PUSH2 0x47A PUSH2 0x11F9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 0xDE SWAP10 PUSH9 0x90C56D4B43FB9E4EC0 SWAP5 SHL SWAP3 0xFB 0x2F PUSH6 0xAF6439DB8245 0x1F 0xA7 0xE4 POP SWAP13 0x26 PUSH1 0x64 PUSH20 0x6F6C634300081100330000000000000000000000 ", - "sourceMap": "1072:11699:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1777:28;;;;;-1:-1:-1;;;;;1777:28:14;;;;;;-1:-1:-1;;;;;178:32:70;;;160:51;;148:2;133:18;1777:28:14;;;;;;;;4594:780;;;;;;:::i;:::-;;:::i;9157:1130::-;;;;;;:::i;:::-;;:::i;:::-;;1427:161:13;;;:::i;2140:35:14:-;;2174:1;2140:35;;;;;1138:25:70;;;1126:2;1111:18;2140:35:14;992:177:70;1615:84:56;1662:4;1685:7;;;1615:84;;;1339:14:70;;1332:22;1314:41;;1302:2;1287:18;1615:84:56;1174:187:70;1870:44:14;;;;;7279:174;;;;;;:::i;:::-;-1:-1:-1;;;;;7413:33:14;;;7383:7;7413:33;;;:18;:33;;;;;;;;7279:174;1239:152:13;;;:::i;2050:53:14:-;;;;;6474:601;;;;;;:::i;:::-;;:::i;1709:28::-;;;;;-1:-1:-1;;;;;1709:28:14;;;685:26:13;;;;;11313:262:14;;;;;;:::i;:::-;;:::i;11678:325::-;;;:::i;12069:135::-;;;:::i;12632:137::-;;;;;;:::i;:::-;;:::i;12326:161::-;;;;;;:::i;:::-;;:::i;8467:386::-;;;:::i;4594:780::-;2327:46;;-1:-1:-1;;;2327:46:14;;2362:10;2327:46;;;160:51:70;4790:7:14;;2327:18;-1:-1:-1;;;;;2327:34:14;;;;133:18:70;;2327:46:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2387;;;;;;;;;;;;;-1:-1:-1;;;2387:46:14;;;2306:137;;;;;-1:-1:-1;;;2306:137:14;;;;;;;;:::i;:::-;;;;;;;;;;4879:13:::1;:11;:13::i;:::-;4932:4;::::0;;-1:-1:-1;;;;;4932:4:14;;::::1;4915:14;4953:24:::0;;;:18:::1;:24;::::0;;;;;;;;;;::::1;-1:-1:-1::0;;;;;;4946:31:14;;::::1;;::::0;;;4999:39;;;;::::1;::::0;;5112:131;;-1:-1:-1;;;5112:131:14;;5158:10:::1;5112:131;::::0;::::1;3235:51:70::0;3302:18;;;3295:34;;;3345:18;;;3338:34;;;4932:4:14;;5112:32:::1;::::0;3208:18:70;;5112:131:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5276:43:14::1;::::0;5308:10:::1;::::0;-1:-1:-1;;;;;;5276:43:14;::::1;::::0;-1:-1:-1;5276:43:14::1;::::0;;;::::1;5348:6:::0;-1:-1:-1;2453:1:14::1;4594:780:::0;;;;:::o;9157:1130::-;1104:31:13;;-1:-1:-1;;;1104:31:13;;1124:10;1104:31;;;160:51:70;1104:4:13;-1:-1:-1;;;;;1104:19:13;;;;133:18:70;;1104:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1099:89;;1156:32;;-1:-1:-1;;;1156:32:13;;;;;;;;;;;1099:89;9322:13:14::1;:11;:13::i;:::-;9350:4;::::0;-1:-1:-1;;;;;9350:21:14;;::::1;:4:::0;::::1;:21:::0;9346:735:::1;;9406:4;::::0;;-1:-1:-1;;;;;9406:4:14;;::::1;9387:16;9431:24:::0;;;:18:::1;:24;::::0;;;;;;;;::::1;-1:-1:-1::0;;;;;;9424:31:14;;::::1;;::::0;;;9526:41;;::::1;::::0;;9346:735:::1;;;-1:-1:-1::0;;;;;9636:24:14;;::::1;;::::0;;;:18:::1;:24;::::0;;;;;;;;;9695:37;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;9695:37:14;;::::1;::::0;;;;;;9636:41;;::::1;:24:::0;::::1;:41;9611:135;;;;-1:-1:-1::0;;;9611:135:14::1;;;;;;;;:::i;:::-;-1:-1:-1::0;9847:4:14::1;::::0;-1:-1:-1;;;;;9847:4:14;;::::1;9830:21:::0;;::::1;::::0;9826:84:::1;;9871:4;:11:::0;;-1:-1:-1;;;;;;9871:11:14::1;-1:-1:-1::0;;;;;9871:11:14;::::1;;::::0;;9826:84:::1;-1:-1:-1::0;;;;;9951:33:14;;::::1;;::::0;;;:18:::1;:33;::::0;;;;;;;9924:24;;::::1;::::0;;;;;:60;;9951:33;;;::::1;-1:-1:-1::0;;;;;;9924:60:14;;::::1;;::::0;;;10011:33;;;:46;;::::1;::::0;;9346:735:::1;10090:49;::::0;-1:-1:-1;;;10090:49:14;;-1:-1:-1;;;;;3253:32:70;;;10090:49:14::1;::::0;::::1;3235:51:70::0;10134:1:14::1;3302:18:70::0;;;3295:34;;;3345:18;;;3338:34;10090:39:14;::::1;::::0;::::1;::::0;3208:18:70;;10090:49:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10166:39;10191:13;10166:17;:24;;:39;;;;:::i;:::-;;10260:2;-1:-1:-1::0;;;;;10233:30:14::1;10245:13;-1:-1:-1::0;;;;;10233:30:14::1;;;;;;;;;;;9157:1130:::0;;;:::o;1427:161:13:-;1470:34;;-1:-1:-1;;;1470:34:13;;1493:10;1470:34;;;160:51:70;1470:4:13;-1:-1:-1;;;;;1470:22:13;;;;133:18:70;;1470:34:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1465:95;;1525:35;;-1:-1:-1;;;1525:35:13;;;;;;;;;;;1465:95;1571:10;:8;:10::i;:::-;1427:161::o;1239:152::-;1280:32;;-1:-1:-1;;;1280:32:13;;1301:10;1280:32;;;160:51:70;1280:4:13;-1:-1:-1;;;;;1280:20:13;;;;133:18:70;;1280:32:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1275:91;;1333:33;;-1:-1:-1;;;1333:33:13;;;;;;;;;;;1275:91;1376:8;:6;:8::i;6474:601:14:-;2327:46;;-1:-1:-1;;;2327:46:14;;2362:10;2327:46;;;160:51:70;2327:18:14;-1:-1:-1;;;;;2327:34:14;;;;133:18:70;;2327:46:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2387;;;;;;;;;;;;;-1:-1:-1;;;2387:46:14;;;2306:137;;;;;-1:-1:-1;;;2306:137:14;;;;;;;;:::i;:::-;-1:-1:-1;6632:39:14::1;:17;6659:11:::0;6632:26:::1;:39::i;:::-;6685:41;;;;;;;;;;;;;-1:-1:-1::0;;;6685:41:14::1;;::::0;6611:125:::1;;;;;-1:-1:-1::0;;;6611:125:14::1;;;;;;;;:::i;:::-;;6806:12;6782:11;-1:-1:-1::0;;;;;6767:33:14::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;6832:53;;;;;;;;;;;;;-1:-1:-1::0;;;6832:53:14::1;;::::0;6746:149:::1;;;;;-1:-1:-1::0;;;6746:149:14::1;;;;;;;;:::i;:::-;-1:-1:-1::0;6938:4:14::1;::::0;;-1:-1:-1;;;;;6938:4:14;;::::1;6919:24;::::0;;;:18:::1;:24;::::0;;;;;:38;;-1:-1:-1;;;;;;6919:38:14;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;6979:18;;::::1;::::0;::::1;::::0;;;7024:32;;6919:38;;7024:32:::1;::::0;::::1;6474:601:::0;:::o;11313:262::-;1104:31:13;;-1:-1:-1;;;1104:31:13;;1124:10;1104:31;;;160:51:70;1104:4:13;-1:-1:-1;;;;;1104:19:13;;;;133:18:70;;1104:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1099:89;;1156:32;;-1:-1:-1;;;1156:32:13;;;;;;;;;;;1099:89;11493:62:14::1;::::0;-1:-1:-1;;;11493:62:14;;-1:-1:-1;;;;;4168:15:70;;;11493:62:14::1;::::0;::::1;4150:34:70::0;4220:15;;;4200:18;;;4193:43;11493:39:14;::::1;::::0;::::1;::::0;4085:18:70;;11493:62:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11313:262:::0;;;:::o;11678:325::-;11848:4;;11780:7;;;;-1:-1:-1;;;;;11848:4:14;11862:113;-1:-1:-1;;;;;11869:21:14;;;11862:113;;-1:-1:-1;;;;;11916:27:14;;;;;;;:18;:27;;;;;;;11957:7;;;;:::i;:::-;;;;11862:113;;;-1:-1:-1;11991:5:14;11678:325;-1:-1:-1;11678:325:14:o;12069:135::-;12132:7;12158:26;:17;:24;:26::i;:::-;12151:33;;12069:135;:::o;12632:137::-;12694:4;12717:32;:17;12744:4;12717:26;:32::i;12326:161::-;12426:7;12456:24;:17;12477:2;12456:20;:24::i;8467:386::-;8512:21;8536:33;8549:19;8536:12;:33::i;:::-;8512:57;;8606:13;-1:-1:-1;;;;;8591:40:14;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8662:4:14;;;-1:-1:-1;;;;;8662:4:14;;;8643:24;;;;:18;:24;;;;;:40;;-1:-1:-1;;;;;;8643:40:14;;;;;;;;;;;;8705:20;;;;;;-1:-1:-1;8747:36:14;;-1:-1:-1;8747:17:14;8643:40;8747:21;:36::i;:::-;-1:-1:-1;8815:31:14;;-1:-1:-1;;;;;8815:31:14;;;;;;;;8502:351;8467:386::o;973:759:54:-;1030:16;1362:48;1344:14;1338:4;1334:25;1328:4;1324:36;1321:90;1315:4;1308:104;1569:32;1552:14;1546:4;1542:25;1539:63;1533:4;1526:77;1644:4;1638;1635:1;1628:21;1616:33;-1:-1:-1;;;;;;1676:22:54;;1668:57;;;;-1:-1:-1;;;1668:57:54;;4721:2:70;1668:57:54;;;4703:21:70;4760:2;4740:18;;;4733:30;-1:-1:-1;;;4779:18:70;;;4772:52;4841:18;;1668:57:54;4519:346:70;1668:57:54;973:759;;;:::o;8297:150:69:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:69;;8390:4;:50::i;:::-;8383:57;8297:150;-1:-1:-1;;;8297:150:69:o;10863:167:14:-;10948:4;;-1:-1:-1;;;;;10948:4:14;;;10965:1;10929:24;;;:18;:24;;;;;;;10925:99;;10983:18;:16;:18::i;8615:156:69:-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:69;;8711:7;:53::i;2433:117:56:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:15:::0;;-1:-1:-1;;2491:15:56::1;::::0;;2521:22:::1;719:10:66::0;2530:12:56::1;2521:22;::::0;-1:-1:-1;;;;;178:32:70;;;160:51;;148:2;133:18;2521:22:56::1;;;;;;;2433:117::o:0;2186:115::-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:56::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:66::0;;640:96;8852:165:69;-1:-1:-1;;;;;8985:23:69;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;4247:127;9098:115;9161:7;9187:19;9195:3;4537:18;;4455:107;9555:156;9629:7;9679:22;9683:3;9695:5;9679:3;:22::i;2206:404::-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:69;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:69;2581:12;;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:69;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;1945:106:56;1662:4;1685:7;;;2003:41;;;;-1:-1:-1;;;2003:41:56;;5469:2:70;2003:41:56;;;5451:21:70;5508:2;5488:18;;;5481:30;-1:-1:-1;;;5527:18:70;;;5520:50;5587:18;;2003:41:56;5267:344:70;1767:106:56;1662:4;1685:7;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:56;;5818:2:70;1828:38:56;;;5800:21:70;5857:2;5837:18;;;5830:30;-1:-1:-1;;;5876:18:70;;;5869:46;5932:18;;1828:38:56;5616:340:70;4904:118:69;4971:7;4997:3;:11;;5009:5;4997:18;;;;;;;;:::i;:::-;;;;;;;;;4990:25;;4904:118;;;;:::o;222:248:70:-;290:6;298;351:2;339:9;330:7;326:23;322:32;319:52;;;367:1;364;357:12;319:52;-1:-1:-1;;390:23:70;;;460:2;445:18;;;432:32;;-1:-1:-1;222:248:70:o;475:173::-;543:20;;-1:-1:-1;;;;;592:31:70;;582:42;;572:70;;638:1;635;628:12;653:334;730:6;738;746;799:2;787:9;778:7;774:23;770:32;767:52;;;815:1;812;805:12;767:52;838:29;857:9;838:29;:::i;:::-;828:39;;886:38;920:2;909:9;905:18;886:38;:::i;:::-;876:48;;943:38;977:2;966:9;962:18;943:38;:::i;:::-;933:48;;653:334;;;;;:::o;1366:186::-;1425:6;1478:2;1466:9;1457:7;1453:23;1449:32;1446:52;;;1494:1;1491;1484:12;1446:52;1517:29;1536:9;1517:29;:::i;2013:180::-;2072:6;2125:2;2113:9;2104:7;2100:23;2096:32;2093:52;;;2141:1;2138;2131:12;2093:52;-1:-1:-1;2164:23:70;;2013:180;-1:-1:-1;2013:180:70:o;2198:277::-;2265:6;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2366:9;2360:16;2419:5;2412:13;2405:21;2398:5;2395:32;2385:60;;2441:1;2438;2431:12;2480:548;2592:4;2621:2;2650;2639:9;2632:21;2682:6;2676:13;2725:6;2720:2;2709:9;2705:18;2698:34;2750:1;2760:140;2774:6;2771:1;2768:13;2760:140;;;2869:14;;;2865:23;;2859:30;2835:17;;;2854:2;2831:26;2824:66;2789:10;;2760:140;;;2764:3;2949:1;2944:2;2935:6;2924:9;2920:22;2916:31;2909:42;3019:2;3012;3008:7;3003:2;2995:6;2991:15;2987:29;2976:9;2972:45;2968:54;2960:62;;;;2480:548;;;;:::o;3749:184::-;3819:6;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;-1:-1:-1;3911:16:70;;3749:184;-1:-1:-1;3749:184:70:o;4247:127::-;4308:10;4303:3;4299:20;4296:1;4289:31;4339:4;4336:1;4329:15;4363:4;4360:1;4353:15;4379:135;4418:3;4439:17;;;4436:43;;4459:18;;:::i;:::-;-1:-1:-1;4506:1:70;4495:13;;4379:135::o;4870:128::-;4937:9;;;4958:11;;;4955:37;;;4972:18;;:::i;5003:127::-;5064:10;5059:3;5055:20;5052:1;5045:31;5095:4;5092:1;5085:15;5119:4;5116:1;5109:15;5135:127;5196:10;5191:3;5187:20;5184:1;5177:31;5227:4;5224:1;5217:15;5251:4;5248:1;5241:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "953000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "_acl()": "infinite", - "_contractsRegister()": "infinite", - "addCreditAccount()": "infinite", - "cancelAllowance(address,address,address)": "infinite", - "countCreditAccounts()": "2414", - "countCreditAccountsInStock()": "infinite", - "creditAccounts(uint256)": "4771", - "getNext(address)": "2645", - "head()": "2393", - "isCreditAccount(address)": "infinite", - "masterCreditAccount()": "infinite", - "pause()": "infinite", - "paused()": "2338", - "returnCreditAccount(address)": "infinite", - "tail()": "2350", - "takeCreditAccount(uint256,uint256)": "infinite", - "takeOut(address,address,address)": "infinite", - "unpause()": "infinite", - "version()": "218" - }, - "internal": { - "_checkStock()": "infinite" - } - }, - "methodIdentifiers": { - "_acl()": "a50cf2c8", - "_contractsRegister()": "88f64c54", - "addCreditAccount()": "f23953ab", - "cancelAllowance(address,address,address)": "a904aab6", - "countCreditAccounts()": "b60e8518", - "countCreditAccountsInStock()": "b1939763", - "creditAccounts(uint256)": "e3ba9ace", - "getNext(address)": "765e0159", - "head()": "8f7dcfa3", - "isCreditAccount(address)": "d82ecc48", - "masterCreditAccount()": "5da33c5b", - "pause()": "8456cb59", - "paused()": "5c975abb", - "returnCreditAccount(address)": "89b77b3e", - "tail()": "13d8c840", - "takeCreditAccount(uint256,uint256)": "21d18456", - "takeOut(address,address,address)": "2932472f", - "unpause()": "3f4ba83a", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotConfiguratorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotUnPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"miner\",\"type\":\"address\"}],\"name\":\"AccountMinerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"InitializeCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ReturnCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"TakeForever\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_contractsRegister\",\"outputs\":[{\"internalType\":\"contract ContractsRegister\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"cancelAllowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"countCreditAccounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"countCreditAccountsInStock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"getNext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"head\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"masterCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"usedAccount\",\"type\":\"address\"}],\"name\":\"returnCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tail\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"takeCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"prev\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"takeOut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotConfiguratorException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-Configurator\"}],\"CallerNotPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Pausable admin\"}],\"CallerNotUnPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Unpausable admin\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"addCreditAccount()\":{\"details\":\"Deploys a new Credit Account and sets it as a list's tail Before: --------- head \\u2b07 ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- \\u2b06 tail After: --------- head \\u2b07 ------- ------- ------- ------- -------------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | newAccount | -> address(0) ------- ------- ------- ------- -------------- \\u2b06 tail\"},\"cancelAllowance(address,address,address)\":{\"details\":\"Cancels token allowance from a Credit Acocunt to a target contract\",\"params\":{\"account\":\"Address of credit account to be cancelled allowance\",\"targetContract\":\"Address of contract to cancel allowance\",\"token\":\"Address of token for allowance\"}},\"constructor\":{\"details\":\"constructor After the constructor is executed, the list should look as follows head \\u2b07 ------- | CA1 | -> address(0) ------- \\u2b06 tail\",\"params\":{\"addressProvider\":\"Address of address repository\"}},\"countCreditAccounts()\":{\"details\":\"Returns the number of deployed credit accounts\"},\"countCreditAccountsInStock()\":{\"details\":\"Returns the number of unused credit accounts in stock\"},\"creditAccounts(uint256)\":{\"details\":\"Returns the credit account address under the passed id\",\"params\":{\"id\":\"The index of the requested CA\"}},\"getNext(address)\":{\"details\":\"Gets the next available credit account after the passed one, or address(0) if the passed account is the tail\",\"params\":{\"creditAccount\":\"Credit Account previous to the one to retrieve\"}},\"isCreditAccount(address)\":{\"details\":\"Returns whether the Credit Account is registered with this factory\",\"params\":{\"addr\":\"Address of the Credit Account to check\"}},\"pause()\":{\"details\":\"Pause contract\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"returnCreditAccount(address)\":{\"details\":\"Retrieves the Credit Account from the Credit Manager and adds it to the stock Before: --------- head \\u2b07 ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- \\u2b06 tail After: --------- head \\u2b07 ------- ------- ------- ------- --------------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | usedAccount | -> address(0) ------- ------- ------- ------- --------------- \\u2b06 tail\",\"params\":{\"usedAccount\":\"Address of returned credit account\"}},\"takeCreditAccount(uint256,uint256)\":{\"details\":\"Provides a new credit account to a Credit Manager Before: --------- head \\u2b07 ------- ------- ------- ------- | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- ------- \\u2b06 tail After: --------- head \\u2b07 ------- ------- ------- | CA2 | -> | CA3 | -> | CA4 | -> address(0) ------- ------- ------- \\u2b06 tail ------- | CA1 | -> address(0) ------- If the taken Credit Account is the last one, creates a new one head \\u2b07 ------- | CA2 | -> address(0) => _addNewCreditAccount() ------- \\u2b06 tail\",\"returns\":{\"_0\":\"Address of credit account\"}},\"takeOut(address,address,address)\":{\"details\":\"Removes an unused Credit Account from the list forever and connects it to the \\\"to\\\" parameter\",\"params\":{\"creditAccount\":\"Credit Account to take\",\"prev\":\"Credit Account before the taken one in the linked list\",\"to\":\"Address to connect the taken Credit Account to\"}},\"unpause()\":{\"details\":\"Unpause contract\"}},\"stateVariables\":{\"_contractsRegister\":{\"details\":\"Contracts register\"},\"_nextCreditAccount\":{\"details\":\"Credit account linked list\"},\"creditAccountsSet\":{\"details\":\"Set of all Credit Accounts\"},\"head\":{\"details\":\"Head of linked list\"},\"masterCreditAccount\":{\"details\":\"Address of master credit account for cloning\"},\"tail\":{\"details\":\"Tail of linked list\"},\"version\":{\"details\":\"Contract version\"}},\"title\":\"Abstract reusable credit accounts factory\",\"version\":1},\"userdoc\":{\"events\":{\"AccountMinerChanged(address)\":{\"notice\":\"Not applicable to factories deployed after V2\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Creates, holds & lends credit accounts to Credit Managers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol\":\"AccountFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x33f124bfc1b3a1e5621e65b647a386e1f937ca2290f4d975ee64372a7c935208\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://40073d2122802645ec2d52f5ccbb98986481730e862180e6894da7d3b2017f58\",\"dweb:/ipfs/QmURnsN6Q6HrTAJZBpU28xtg39s2UGH84Kg8VdgbaV5WYG\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0x03dff98ec94968396354b8f2063b2954297a4e13fbb43bf94d5e14e8e883f8ed\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://74180382ecc18d692902e2b67c561682a25a3faf227bf6a13e99ca56e339a497\",\"dweb:/ipfs/QmfV9TDgz33PwmixtBE1Rqp3eAZBoyoLoMVaDC5yzFTy3Q\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4da0f451fe5aefdb95204dbec4a9448a8a2b00a444864bb5dbf7162da842a0f7\",\"dweb:/ipfs/QmYciAwNiJzgGMAqSTUANwMjy5HykNUvmkQ5PQhNTRqrB5\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 17197, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_status", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 2096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_nextCreditAccount", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 2100, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "head", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 2104, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "tail", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 2111, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "creditAccountsSet", - "offset": 0, - "slot": "5", - "type": "t_struct(AddressSet)20621_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_bytes32)dyn_storage": { - "base": "t_bytes32", - "encoding": "dynamic_array", - "label": "bytes32[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(AddressSet)20621_storage": { - "encoding": "inplace", - "label": "struct EnumerableSet.AddressSet", - "members": [ - { - "astId": 20620, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_inner", - "offset": 0, - "slot": "0", - "type": "t_struct(Set)20306_storage" - } - ], - "numberOfBytes": "64" - }, - "t_struct(Set)20306_storage": { - "encoding": "inplace", - "label": "struct EnumerableSet.Set", - "members": [ - { - "astId": 20301, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_values", - "offset": 0, - "slot": "0", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "astId": 20305, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol:AccountFactory", - "label": "_indexes", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ], - "numberOfBytes": "64" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { - "events": { - "AccountMinerChanged(address)": { - "notice": "Not applicable to factories deployed after V2" - } - }, - "kind": "user", - "methods": {}, - "notice": "Creates, holds & lends credit accounts to Credit Managers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol": { - "AddressProvider": { - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "service", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "AddressSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "addresses", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getACL", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAccountFactory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractsRegister", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDataCompressor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGearToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLeveragedActions", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPriceOracle", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTreasuryContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWETHGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWethToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setACL", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setAccountFactory", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setContractsRegister", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setDataCompressor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setGearToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setLeveragedActions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setPriceOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setTreasuryContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setWETHGateway", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "setWethToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "claimOwnership()": { - "details": "Used by the pending owner to claim ownership after transferOwnership" - }, - "getACL()": { - "returns": { - "_0": "Address of ACL contract" - } - }, - "getAccountFactory()": { - "returns": { - "_0": "Address of AccountFactory" - } - }, - "getContractsRegister()": { - "returns": { - "_0": "Address of ContractsRegister" - } - }, - "getDataCompressor()": { - "returns": { - "_0": "Address of DataCompressor" - } - }, - "getGearToken()": { - "returns": { - "_0": "Address of GEAR token" - } - }, - "getLeveragedActions()": { - "returns": { - "_0": "Address of PathFinder" - } - }, - "getPriceOracle()": { - "returns": { - "_0": "Address of PriceOracle" - } - }, - "getTreasuryContract()": { - "returns": { - "_0": "Address of Treasury contract" - } - }, - "getWETHGateway()": { - "returns": { - "_0": "Address of WETH token" - } - }, - "getWethToken()": { - "returns": { - "_0": "Address of WETH token" - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "setACL(address)": { - "details": "Sets address of ACL contract", - "params": { - "_address": "Address of ACL contract" - } - }, - "setAccountFactory(address)": { - "details": "Sets address of AccountFactory", - "params": { - "_address": "Address of AccountFactory" - } - }, - "setContractsRegister(address)": { - "details": "Sets address of ContractsRegister", - "params": { - "_address": "Address of ContractsRegister" - } - }, - "setDataCompressor(address)": { - "details": "Sets address of AccountFactory", - "params": { - "_address": "Address of AccountFactory" - } - }, - "setGearToken(address)": { - "details": "Sets address of GEAR token", - "params": { - "_address": "Address of GEAR token" - } - }, - "setLeveragedActions(address)": { - "details": "Sets address of PathFinder", - "params": { - "_address": "Address of PathFinder" - } - }, - "setPriceOracle(address)": { - "details": "Sets address of PriceOracle", - "params": { - "_address": "Address of PriceOracle" - } - }, - "setTreasuryContract(address)": { - "details": "Sets address of Treasury Contract", - "params": { - "_address": "Address of Treasury Contract" - } - }, - "setWETHGateway(address)": { - "details": "Sets address of WETH token", - "params": { - "_address": "Address of WETH token" - } - }, - "setWethToken(address)": { - "details": "Sets address of WETH token", - "params": { - "_address": "Address of WETH token" - } - }, - "transferOwnership(address)": { - "details": "Sets pending owner to the new owner, but does not transfer ownership yet", - "params": { - "newOwner": "The address to become the future owner" - } - } - }, - "stateVariables": { - "version": { - "details": "Returns contract version" - } - }, - "title": "AddressRepository", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_16572": { - "entryPoint": null, - "id": 16572, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2627": { - "entryPoint": null, - "id": 2627, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 95, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61092c806100be6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377532ed9116100f9578063bcaead9811610097578063ce3c4ae411610071578063ce3c4ae414610320578063e30c397814610333578063f2fde38b14610346578063fca513a81461035957600080fd5b8063bcaead98146102f2578063c5120b3914610305578063c513c9bb1461031857600080fd5b80638da5cb5b116100d35780638da5cb5b146102be5780639068a868146102cf578063addc1a76146102d7578063affd9243146102ea57600080fd5b806377532ed9146102905780637b6757ff1461029857806386e09c08146102ab57600080fd5b80634c252f911161016657806354fd4d501161014057806354fd4d5014610236578063699f200f1461024c578063715018a61461027557806376aad6051461027d57600080fd5b80634c252f91146102135780634e71e0c81461021b578063530e784f1461022357600080fd5b8063060678c2146101ae57806308737695146101d35780631ed65110146101db57806321da5837146101f057806326c74fc31461020357806344b885631461020b575b600080fd5b6101b6610361565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b6610383565b6101ee6101e936600461085f565b610394565b005b6101ee6101fe36600461085f565b6103bd565b6101b66103de565b6101b66103fd565b6101b661041c565b6101ee610434565b6101ee61023136600461085f565b6104c9565b61023e600281565b6040519081526020016101ca565b6101b661025a36600461088f565b6002602052600090815260409020546001600160a01b031681565b6101ee6104ea565b6101ee61028b36600461085f565b6104fe565b6101b6610516565b6101ee6102a636600461085f565b610530565b6101ee6102b936600461085f565b610556565b6000546001600160a01b03166101b6565b6101b6610575565b6101ee6102e536600461085f565b610592565b6101b66105b6565b6101ee61030036600461085f565b6105ce565b6101ee61031336600461085f565b6105ed565b6101b6610611565b6101ee61032e36600461085f565b610631565b6001546101b6906001600160a01b031681565b6101ee61035436600461085f565b610658565b6101b66106e9565b600061037e6e2220aa20afa1a7a6a82922a9a9a7a960891b6106ff565b905090565b600061037e621050d360ea1b6106ff565b61039c61075c565b6103ba701514915054d5549657d0d3d395149050d5607a1b826107b6565b50565b6103c561075c565b6103ba6b574554485f4741544557415960a01b826107b6565b600061037e701514915054d5549657d0d3d395149050d5607a1b6106ff565b600061037e704c45564552414745445f414354494f4e5360781b6106ff565b600061037e692ba2aa242faa27a5a2a760b11b6106ff565b6001546001600160a01b031633146104a25760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b6001546104b7906001600160a01b031661080f565b600180546001600160a01b0319169055565b6104d161075c565b6103ba6b50524943455f4f5241434c4560a01b826107b6565b6104f261075c565b6104fc600061080f565b565b61050661075c565b6103ba621050d360ea1b826107b6565b600061037e6b574554485f4741544557415960a01b6106ff565b61053861075c565b6103ba704c45564552414745445f414354494f4e5360781b826107b6565b61055e61075c565b6103ba692ba2aa242faa27a5a2a760b11b826107b6565b600061037e6e4143434f554e545f464143544f525960881b6106ff565b61059a61075c565b6103ba6e4143434f554e545f464143544f525960881b826107b6565b600061037e6923a2a0a92faa27a5a2a760b11b6106ff565b6105d661075c565b6103ba6923a2a0a92faa27a5a2a760b11b826107b6565b6105f561075c565b6103ba6e2220aa20afa1a7a6a82922a9a9a7a960891b826107b6565b600061037e7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b6106ff565b61063961075c565b6103ba7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b826107b6565b61066061075c565b6001600160a01b0381166106c75760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610499565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061037e6b50524943455f4f5241434c4560a01b5b6000818152600260209081526040808320548151808301909252600382526241503160e81b928201929092526001600160a01b0390911690816107555760405162461bcd60e51b815260040161049991906108a8565b5092915050565b6000546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087157600080fd5b81356001600160a01b038116811461088857600080fd5b9392505050565b6000602082840312156108a157600080fd5b5035919050565b600060208083528351808285015260005b818110156108d5578581018301518582016040015282016108b9565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200dac7f71485a8db5aee1d67bb3ff3d39172b102aba5b8428150c0d728e808ea864736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x5F JUMP JUMPDEST PUSH1 0x40 MLOAD ADDRESS SWAP1 PUSH16 0x20A2222922A9A9AFA82927AB24A222A9 PUSH1 0x81 SHL SWAP1 PUSH32 0xB37614C7D254EA8D16EB81FA11DDDAEB266AA8BA4917980859C7740AFF30C691 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xAF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x92C DUP1 PUSH2 0xBE PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x77532ED9 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xBCAEAD98 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xCE3C4AE4 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCE3C4AE4 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCAEAD98 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xC5120B39 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0xC513C9BB EQ PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x9068A868 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xADDC1A76 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAFFD9243 EQ PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x77532ED9 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x7B6757FF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x86E09C08 EQ PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x699F200F EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x76AAD605 EQ PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60678C2 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x8737695 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x1ED65110 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x21DA5837 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0x26C74FC3 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x44B88563 EQ PUSH2 0x20B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B6 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B6 PUSH2 0x383 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x394 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1EE PUSH2 0x1FE CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x3BD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3FD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x41C JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x434 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4C9 JUMP JUMPDEST PUSH2 0x23E PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x25A CALLDATASIZE PUSH1 0x4 PUSH2 0x88F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x28B CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x516 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x530 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x556 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x575 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x592 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x5B6 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5CE JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x611 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x631 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x658 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x6E9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL PUSH2 0x6FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH3 0x1050D3 PUSH1 0xEA SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x39C PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x3C5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x4B7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x80F JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x4D1 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x4FC PUSH1 0x0 PUSH2 0x80F JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x506 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH3 0x1050D3 PUSH1 0xEA SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x538 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x55E PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x59A PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x5D6 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x5F5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x639 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x660 PUSH2 0x75C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH3 0x415031 PUSH1 0xE8 SHL SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP2 PUSH2 0x755 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x8A8 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP5 SWAP2 PUSH32 0xB37614C7D254EA8D16EB81FA11DDDAEB266AA8BA4917980859C7740AFF30C691 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8D5 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x8B9 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD 0xAC PUSH32 0x71485A8DB5AEE1D67BB3FF3D39172B102ABA5B8428150C0D728E808EA864736F PUSH13 0x63430008110033000000000000 ", - "sourceMap": "934:5300:15:-:0;;;1171:138;;;;;;;;;-1:-1:-1;936:32:52;719:10:66;936:18:52;:32::i;:::-;1257:45:15;;1296:4;;-1:-1:-1;;;1257:45:15;;;;;;934:5300;;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;934:5300:15:-;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_checkOwner_16603": { - "entryPoint": 1884, - "id": 16603, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getAddress_2910": { - "entryPoint": 1791, - "id": 2910, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setAddress_2930": { - "entryPoint": 1974, - "id": 2930, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_transferOwnership_16660": { - "entryPoint": 2063, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addresses_2612": { - "entryPoint": null, - "id": 2612, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@claimOwnership_4790": { - "entryPoint": 1076, - "id": 4790, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@getACL_2638": { - "entryPoint": 899, - "id": 2638, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getAccountFactory_2714": { - "entryPoint": 1397, - "id": 2714, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getContractsRegister_2663": { - "entryPoint": 1553, - "id": 2663, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getDataCompressor_2740": { - "entryPoint": 865, - "id": 2740, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getGearToken_2791": { - "entryPoint": 1462, - "id": 2791, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getLeveragedActions_2868": { - "entryPoint": 1021, - "id": 2868, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getPriceOracle_2689": { - "entryPoint": 1769, - "id": 2689, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getTreasuryContract_2765": { - "entryPoint": 990, - "id": 2765, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getWETHGateway_2843": { - "entryPoint": 1302, - "id": 2843, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getWethToken_2817": { - "entryPoint": 1052, - "id": 2817, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@owner_16589": { - "entryPoint": null, - "id": 16589, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@pendingOwner_4733": { - "entryPoint": null, - "id": 4733, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@renounceOwnership_16617": { - "entryPoint": 1258, - "id": 16617, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@setACL_2652": { - "entryPoint": 1278, - "id": 2652, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setAccountFactory_2728": { - "entryPoint": 1426, - "id": 2728, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setContractsRegister_2677": { - "entryPoint": 1585, - "id": 2677, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setDataCompressor_2754": { - "entryPoint": 1517, - "id": 2754, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setGearToken_2805": { - "entryPoint": 1486, - "id": 2805, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setLeveragedActions_2882": { - "entryPoint": 1328, - "id": 2882, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setPriceOracle_2703": { - "entryPoint": 1225, - "id": 2703, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setTreasuryContract_2779": { - "entryPoint": 916, - "id": 2779, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setWETHGateway_2857": { - "entryPoint": 957, - "id": 2857, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setWethToken_2831": { - "entryPoint": 1366, - "id": 2831, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transferOwnership_4772": { - "entryPoint": 1624, - "id": 4772, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@version_2615": { - "entryPoint": null, - "id": 2615, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2143, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes32": { - "entryPoint": 2191, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2216, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2607:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "198:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "203:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "194:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "194:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "207:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "190:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "178:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "160:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "160:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:70", - "type": "" - } - ], - "src": "14:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "292:216:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "338:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "347:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "350:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "340:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "340:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "340:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "313:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "322:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "309:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "309:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "334:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "305:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "305:32:70" - }, - "nodeType": "YulIf", - "src": "302:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "363:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "389:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "376:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "376:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "367:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "462:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "471:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "474:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "464:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "464:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "464:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "421:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "432:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "447:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "452:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "443:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "456:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "439:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "439:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "428:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "418:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "418:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "411:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "411:50:70" - }, - "nodeType": "YulIf", - "src": "408:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "487:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "497:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "487:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "258:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "269:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "281:6:70", - "type": "" - } - ], - "src": "222:286:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "614:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "624:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "636:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "647:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "632:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "632:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "624:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "666:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "677:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "659:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "659:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "659:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "583:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "594:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "605:4:70", - "type": "" - } - ], - "src": "513:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "765:110:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "811:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "820:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "823:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "813:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "813:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "813:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "786:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "795:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "782:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "782:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "807:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "778:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "778:32:70" - }, - "nodeType": "YulIf", - "src": "775:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "836:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "859:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "846:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "846:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "836:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "731:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "742:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "754:6:70", - "type": "" - } - ], - "src": "695:180:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1054:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1071:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1082:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1064:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1064:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1064:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1105:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1116:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1101:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1121:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1094:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1094:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1094:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1144:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1155:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1140:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1140:18:70" - }, - { - "hexValue": "436c61696d61626c653a2053656e646572206973206e6f742070656e64696e67", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1160:34:70", - "type": "", - "value": "Claimable: Sender is not pending" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1133:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1133:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1133:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1215:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1226:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1211:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1211:18:70" - }, - { - "hexValue": "206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1231:8:70", - "type": "", - "value": " owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1204:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1204:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1204:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "1249:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1261:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1272:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1257:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1257:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1249:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1031:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1045:4:70", - "type": "" - } - ], - "src": "880:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1461:230:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1478:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1489:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1471:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1471:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1471:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1512:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1523:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1508:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1508:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1528:2:70", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1501:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1501:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1501:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1551:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1562:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1547:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1547:18:70" - }, - { - "hexValue": "436c61696d61626c653a206e6577206f776e657220697320746865207a65726f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1567:34:70", - "type": "", - "value": "Claimable: new owner is the zero" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1540:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1540:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1540:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1622:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1633:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1618:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1618:18:70" - }, - { - "hexValue": "2061646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1638:10:70", - "type": "", - "value": " address" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1611:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1611:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1611:38:70" - }, - { - "nodeType": "YulAssignment", - "src": "1658:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1670:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1681:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1666:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1666:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1658:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1438:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1452:4:70", - "type": "" - } - ], - "src": "1287:404:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1817:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1827:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1837:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1831:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1855:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1866:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1848:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1848:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1848:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1878:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1898:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1892:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1892:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1882:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1925:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1936:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1921:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1921:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1941:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1914:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1914:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1914:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1957:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1966:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1961:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2026:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2055:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2066:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2051:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2051:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2070:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2047:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2089:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2097:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2085:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2085:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2101:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2081:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2081:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2075:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2075:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2040:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2040:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2040:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1987:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1990:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1984:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1984:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1998:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2000:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2009:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2012:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2005:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2005:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2000:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1980:3:70", - "statements": [] - }, - "src": "1976:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2140:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2151:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2136:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2136:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2160:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2132:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2132:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2165:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2125:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2125:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "2176:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2192:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2211:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2219:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2207:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2207:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2228:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2224:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2203:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2203:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2188:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2188:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2235:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2184:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2184:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2176:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1786:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1797:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1808:4:70", - "type": "" - } - ], - "src": "1696:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2423:182:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2440:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2451:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2433:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2433:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2433:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2474:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2485:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2470:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2470:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2490:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2463:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2463:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2463:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2513:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2524:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2509:18:70" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2529:34:70", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2502:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2502:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2502:62:70" - }, - { - "nodeType": "YulAssignment", - "src": "2573:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2585:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2596:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2581:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2581:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2573:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2400:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2414:4:70", - "type": "" - } - ], - "src": "2249:356:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Claimable: Sender is not pending\")\n mstore(add(headStart, 96), \" owner\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 40)\n mstore(add(headStart, 64), \"Claimable: new owner is the zero\")\n mstore(add(headStart, 96), \" address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c806377532ed9116100f9578063bcaead9811610097578063ce3c4ae411610071578063ce3c4ae414610320578063e30c397814610333578063f2fde38b14610346578063fca513a81461035957600080fd5b8063bcaead98146102f2578063c5120b3914610305578063c513c9bb1461031857600080fd5b80638da5cb5b116100d35780638da5cb5b146102be5780639068a868146102cf578063addc1a76146102d7578063affd9243146102ea57600080fd5b806377532ed9146102905780637b6757ff1461029857806386e09c08146102ab57600080fd5b80634c252f911161016657806354fd4d501161014057806354fd4d5014610236578063699f200f1461024c578063715018a61461027557806376aad6051461027d57600080fd5b80634c252f91146102135780634e71e0c81461021b578063530e784f1461022357600080fd5b8063060678c2146101ae57806308737695146101d35780631ed65110146101db57806321da5837146101f057806326c74fc31461020357806344b885631461020b575b600080fd5b6101b6610361565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b6610383565b6101ee6101e936600461085f565b610394565b005b6101ee6101fe36600461085f565b6103bd565b6101b66103de565b6101b66103fd565b6101b661041c565b6101ee610434565b6101ee61023136600461085f565b6104c9565b61023e600281565b6040519081526020016101ca565b6101b661025a36600461088f565b6002602052600090815260409020546001600160a01b031681565b6101ee6104ea565b6101ee61028b36600461085f565b6104fe565b6101b6610516565b6101ee6102a636600461085f565b610530565b6101ee6102b936600461085f565b610556565b6000546001600160a01b03166101b6565b6101b6610575565b6101ee6102e536600461085f565b610592565b6101b66105b6565b6101ee61030036600461085f565b6105ce565b6101ee61031336600461085f565b6105ed565b6101b6610611565b6101ee61032e36600461085f565b610631565b6001546101b6906001600160a01b031681565b6101ee61035436600461085f565b610658565b6101b66106e9565b600061037e6e2220aa20afa1a7a6a82922a9a9a7a960891b6106ff565b905090565b600061037e621050d360ea1b6106ff565b61039c61075c565b6103ba701514915054d5549657d0d3d395149050d5607a1b826107b6565b50565b6103c561075c565b6103ba6b574554485f4741544557415960a01b826107b6565b600061037e701514915054d5549657d0d3d395149050d5607a1b6106ff565b600061037e704c45564552414745445f414354494f4e5360781b6106ff565b600061037e692ba2aa242faa27a5a2a760b11b6106ff565b6001546001600160a01b031633146104a25760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b6001546104b7906001600160a01b031661080f565b600180546001600160a01b0319169055565b6104d161075c565b6103ba6b50524943455f4f5241434c4560a01b826107b6565b6104f261075c565b6104fc600061080f565b565b61050661075c565b6103ba621050d360ea1b826107b6565b600061037e6b574554485f4741544557415960a01b6106ff565b61053861075c565b6103ba704c45564552414745445f414354494f4e5360781b826107b6565b61055e61075c565b6103ba692ba2aa242faa27a5a2a760b11b826107b6565b600061037e6e4143434f554e545f464143544f525960881b6106ff565b61059a61075c565b6103ba6e4143434f554e545f464143544f525960881b826107b6565b600061037e6923a2a0a92faa27a5a2a760b11b6106ff565b6105d661075c565b6103ba6923a2a0a92faa27a5a2a760b11b826107b6565b6105f561075c565b6103ba6e2220aa20afa1a7a6a82922a9a9a7a960891b826107b6565b600061037e7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b6106ff565b61063961075c565b6103ba7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b826107b6565b61066061075c565b6001600160a01b0381166106c75760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610499565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061037e6b50524943455f4f5241434c4560a01b5b6000818152600260209081526040808320548151808301909252600382526241503160e81b928201929092526001600160a01b0390911690816107555760405162461bcd60e51b815260040161049991906108a8565b5092915050565b6000546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087157600080fd5b81356001600160a01b038116811461088857600080fd5b9392505050565b6000602082840312156108a157600080fd5b5035919050565b600060208083528351808285015260005b818110156108d5578581018301518582016040015282016108b9565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200dac7f71485a8db5aee1d67bb3ff3d39172b102aba5b8428150c0d728e808ea864736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x77532ED9 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xBCAEAD98 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xCE3C4AE4 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xCE3C4AE4 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCAEAD98 EQ PUSH2 0x2F2 JUMPI DUP1 PUSH4 0xC5120B39 EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0xC513C9BB EQ PUSH2 0x318 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BE JUMPI DUP1 PUSH4 0x9068A868 EQ PUSH2 0x2CF JUMPI DUP1 PUSH4 0xADDC1A76 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAFFD9243 EQ PUSH2 0x2EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x77532ED9 EQ PUSH2 0x290 JUMPI DUP1 PUSH4 0x7B6757FF EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x86E09C08 EQ PUSH2 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x236 JUMPI DUP1 PUSH4 0x699F200F EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x76AAD605 EQ PUSH2 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4C252F91 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x223 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x60678C2 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x8737695 EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x1ED65110 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x21DA5837 EQ PUSH2 0x1F0 JUMPI DUP1 PUSH4 0x26C74FC3 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x44B88563 EQ PUSH2 0x20B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B6 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B6 PUSH2 0x383 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x394 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1EE PUSH2 0x1FE CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x3BD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x3FD JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x41C JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x434 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4C9 JUMP JUMPDEST PUSH2 0x23E PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CA JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x25A CALLDATASIZE PUSH1 0x4 PUSH2 0x88F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x28B CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x4FE JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x516 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x530 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x556 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B6 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x575 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x2E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x592 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x5B6 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5CE JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x611 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x631 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1B6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1EE PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x85F JUMP JUMPDEST PUSH2 0x658 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x6E9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL PUSH2 0x6FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH3 0x1050D3 PUSH1 0xEA SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x39C PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x3C5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x1514915054D5549657D0D3D395149050D5 PUSH1 0x7A SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x4B7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x80F JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x4D1 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x4F2 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x4FC PUSH1 0x0 PUSH2 0x80F JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x506 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH3 0x1050D3 PUSH1 0xEA SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x574554485F47415445574159 PUSH1 0xA0 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x538 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH17 0x4C45564552414745445F414354494F4E53 PUSH1 0x78 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x55E PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x2BA2AA242FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x59A PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x4143434F554E545F464143544F5259 PUSH1 0x88 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x5D6 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH10 0x23A2A0A92FAA27A5A2A7 PUSH1 0xB1 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x5F5 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH15 0x2220AA20AFA1A7A6A82922A9A9A7A9 PUSH1 0x89 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL PUSH2 0x6FF JUMP JUMPDEST PUSH2 0x639 PUSH2 0x75C JUMP JUMPDEST PUSH2 0x3BA PUSH18 0x21A7A72A2920A1AA29AFA922A3A4A9AA22A9 PUSH1 0x71 SHL DUP3 PUSH2 0x7B6 JUMP JUMPDEST PUSH2 0x660 PUSH2 0x75C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x6C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37E PUSH12 0x50524943455F4F5241434C45 PUSH1 0xA0 SHL JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH3 0x415031 PUSH1 0xE8 SHL SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP2 PUSH2 0x755 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x8A8 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x499 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP5 SWAP2 PUSH32 0xB37614C7D254EA8D16EB81FA11DDDAEB266AA8BA4917980859C7740AFF30C691 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x871 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x888 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8D5 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x8B9 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD 0xAC PUSH32 0x71485A8DB5AEE1D67BB3FF3D39172B102ABA5B8428150C0D728E808EA864736F PUSH13 0x63430008110033000000000000 ", - "sourceMap": "934:5300:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3062:134;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:70;;;160:51;;148:2;133:18;3062:134:15;;;;;;;;1355:102;;;:::i;3746:168::-;;;;;;:::i;:::-;;:::i;:::-;;5009:159;;;;;;:::i;:::-;;:::i;3511:129::-;;;:::i;5212:::-;;;:::i;4372:125::-;;;:::i;1215:136:18:-;;;:::i;2419:158:15:-;;;;;;:::i;:::-;;:::i;1129:35::-;;1163:1;1129:35;;;;;659:25:70;;;647:2;632:18;1129:35:15;513:177:70;1054:44:15;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1054:44:15;;;1831:101:52;;;:::i;1553:141:15:-;;;;;;:::i;:::-;;:::i;4788:129::-;;;:::i;5435:168::-;;;;;;:::i;:::-;;:::i;4589:155::-;;;;;;:::i;:::-;;:::i;1201:85:52:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;1201:85;;2625:125:15;;;:::i;2850:164::-;;;;;;:::i;:::-;;:::i;3958:124::-;;;:::i;4174:154::-;;;;;;:::i;:::-;;:::i;3296:164::-;;;;;;:::i;:::-;;:::i;1745:131::-;;;:::i;1982:170::-;;;;;;:::i;:::-;;:::i;462:27:18:-;;;;;-1:-1:-1;;;;;462:27:18;;;897:230;;;;;;:::i;:::-;;:::i;2197:128:15:-;;;:::i;3062:134::-;3123:7;3149:28;-1:-1:-1;;;3149:11:15;:28::i;:::-;3142:35;;3062:134;:::o;1355:102::-;1396:7;1422:16;-1:-1:-1;;;1422:11:15;:16::i;3746:168::-;1094:13:52;:11;:13::i;:::-;3855:40:15::1;-1:-1:-1::0;;;3886:8:15::1;3855:11;:40::i;:::-;3746:168:::0;:::o;5009:159::-;1094:13:52;:11;:13::i;:::-;5113:35:15::1;-1:-1:-1::0;;;5139:8:15::1;5113:11;:35::i;3511:129::-:0;3565:7;3591:30;-1:-1:-1;;;3591:11:15;:30::i;5212:129::-;5266:7;5292:30;-1:-1:-1;;;5292:11:15;:30::i;4372:125::-;4428:7;4454:23;-1:-1:-1;;;4454:11:15;:23::i;1215:136:18:-;630:12;;-1:-1:-1;;;;;630:12:18;616:10;:26;612:105;;658:48;;-1:-1:-1;;;658:48:18;;1082:2:70;658:48:18;;;1064:21:70;1121:2;1101:18;;;1094:30;1160:34;1140:18;;;1133:62;-1:-1:-1;;;1211:18:70;;;1204:36;1257:19;;658:48:18;;;;;;;;612:105;1296:12:::1;::::0;1277:32:::1;::::0;-1:-1:-1;;;;;1296:12:18::1;1277:18;:32::i;:::-;1319:12;:25:::0;;-1:-1:-1;;;;;;1319:25:18::1;::::0;;1215:136::o;2419:158:15:-;1094:13:52;:11;:13::i;:::-;2523:35:15::1;-1:-1:-1::0;;;2549:8:15::1;2523:11;:35::i;1831:101:52:-:0;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1553:141:15:-;1094:13:52;:11;:13::i;:::-;1649:26:15::1;-1:-1:-1::0;;;1666:8:15::1;1649:11;:26::i;4788:129::-:0;4846:7;4872:25;-1:-1:-1;;;4872:11:15;:25::i;5435:168::-;1094:13:52;:11;:13::i;:::-;5544:40:15::1;-1:-1:-1::0;;;5575:8:15::1;5544:11;:40::i;4589:155::-:0;1094:13:52;:11;:13::i;:::-;4691:33:15::1;-1:-1:-1::0;;;4715:8:15::1;4691:11;:33::i;2625:125::-:0;2677:7;2703:28;-1:-1:-1;;;2703:11:15;:28::i;2850:164::-;1094:13:52;:11;:13::i;:::-;2957:38:15::1;-1:-1:-1::0;;;2986:8:15::1;2957:11;:38::i;3958:124::-:0;4014:7;4040:23;-1:-1:-1;;;4040:11:15;:23::i;4174:154::-;1094:13:52;:11;:13::i;:::-;4276:33:15::1;-1:-1:-1::0;;;4300:8:15::1;4276:11;:33::i;3296:164::-:0;1094:13:52;:11;:13::i;:::-;3403:38:15::1;-1:-1:-1::0;;;3432:8:15::1;3403:11;:38::i;1745:131::-:0;1800:7;1826:31;-1:-1:-1;;;1826:11:15;:31::i;1982:170::-;1094:13:52;:11;:13::i;:::-;2092:41:15::1;-1:-1:-1::0;;;2124:8:15::1;2092:11;:41::i;897:230:18:-:0;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;999:22:18;::::1;978:109;;;::::0;-1:-1:-1;;;978:109:18;;1489:2:70;978:109:18::1;::::0;::::1;1471:21:70::0;1528:2;1508:18;;;1501:30;1567:34;1547:18;;;1540:62;-1:-1:-1;;;1618:18:70;;;1611:38;1666:19;;978:109:18::1;1287:404:70::0;978:109:18::1;1097:12;:23:::0;;-1:-1:-1;;;;;;1097:23:18::1;-1:-1:-1::0;;;;;1097:23:18;;;::::1;::::0;;;::::1;::::0;;897:230::o;2197:128:15:-;2255:7;2281:25;-1:-1:-1;;;5674:255:15;5731:7;5767:14;;;:9;:14;;;;;;;;;5821:27;;;;;;;;;;;-1:-1:-1;;;5821:27:15;;;;;;;-1:-1:-1;;;;;5767:14:15;;;;5799:20;5791:58;;;;-1:-1:-1;;;5791:58:15;;;;;;;;:::i;:::-;-1:-1:-1;5878:6:15;5674:255;-1:-1:-1;;5674:255:15:o;1359:130:52:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;719:10:66;1422:23:52;1414:68;;;;-1:-1:-1;;;1414:68:52;;2451:2:70;1414:68:52;;;2433:21:70;;;2470:18;;;2463:30;2529:34;2509:18;;;2502:62;2581:18;;1414:68:52;2249:356:70;6048:184:15;6116:14;;;;:9;:14;;;;;;:22;;-1:-1:-1;;;;;;6116:22:15;-1:-1:-1;;;;;6116:22:15;;;;;;;;6191;;6116;;:14;;6191:22;;6116:14;6191:22;6048:184;;:::o;2433:187:52:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;222:286:70:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;376:23;;-1:-1:-1;;;;;428:31:70;;418:42;;408:70;;474:1;471;464:12;408:70;497:5;222:286;-1:-1:-1;;;222:286:70:o;695:180::-;754:6;807:2;795:9;786:7;782:23;778:32;775:52;;;823:1;820;813:12;775:52;-1:-1:-1;846:23:70;;695:180;-1:-1:-1;695:180:70:o;1696:548::-;1808:4;1837:2;1866;1855:9;1848:21;1898:6;1892:13;1941:6;1936:2;1925:9;1921:18;1914:34;1966:1;1976:140;1990:6;1987:1;1984:13;1976:140;;;2085:14;;;2081:23;;2075:30;2051:17;;;2070:2;2047:26;2040:66;2005:10;;1976:140;;;1980:3;2165:1;2160:2;2151:6;2140:9;2136:22;2132:31;2125:42;2235:2;2228;2224:7;2219:2;2211:6;2207:15;2203:29;2192:9;2188:45;2184:54;2176:62;;;;1696:548;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "469600", - "executionCost": "27881", - "totalCost": "497481" - }, - "external": { - "addresses(bytes32)": "2533", - "claimOwnership()": "54533", - "getACL()": "infinite", - "getAccountFactory()": "infinite", - "getContractsRegister()": "infinite", - "getDataCompressor()": "infinite", - "getGearToken()": "infinite", - "getLeveragedActions()": "infinite", - "getPriceOracle()": "infinite", - "getTreasuryContract()": "infinite", - "getWETHGateway()": "infinite", - "getWethToken()": "infinite", - "owner()": "2365", - "pendingOwner()": "2392", - "renounceOwnership()": "infinite", - "setACL(address)": "28443", - "setAccountFactory(address)": "28421", - "setContractsRegister(address)": "28376", - "setDataCompressor(address)": "28399", - "setGearToken(address)": "28377", - "setLeveragedActions(address)": "28400", - "setPriceOracle(address)": "28422", - "setTreasuryContract(address)": "28400", - "setWETHGateway(address)": "28422", - "setWethToken(address)": "28422", - "transferOwnership(address)": "26823", - "version()": "240" - }, - "internal": { - "_getAddress(bytes32)": "infinite", - "_setAddress(bytes32,address)": "25881" - } - }, - "methodIdentifiers": { - "addresses(bytes32)": "699f200f", - "claimOwnership()": "4e71e0c8", - "getACL()": "08737695", - "getAccountFactory()": "9068a868", - "getContractsRegister()": "c513c9bb", - "getDataCompressor()": "060678c2", - "getGearToken()": "affd9243", - "getLeveragedActions()": "44b88563", - "getPriceOracle()": "fca513a8", - "getTreasuryContract()": "26c74fc3", - "getWETHGateway()": "77532ed9", - "getWethToken()": "4c252f91", - "owner()": "8da5cb5b", - "pendingOwner()": "e30c3978", - "renounceOwnership()": "715018a6", - "setACL(address)": "76aad605", - "setAccountFactory(address)": "addc1a76", - "setContractsRegister(address)": "ce3c4ae4", - "setDataCompressor(address)": "c5120b39", - "setGearToken(address)": "bcaead98", - "setLeveragedActions(address)": "7b6757ff", - "setPriceOracle(address)": "530e784f", - "setTreasuryContract(address)": "1ed65110", - "setWETHGateway(address)": "21da5837", - "setWethToken(address)": "86e09c08", - "transferOwnership(address)": "f2fde38b", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"service\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"addresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getACL\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccountFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractsRegister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataCompressor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGearToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLeveragedActions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETHGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWethToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setACL\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setAccountFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setContractsRegister\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setDataCompressor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setGearToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setLeveragedActions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setTreasuryContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setWETHGateway\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setWethToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"claimOwnership()\":{\"details\":\"Used by the pending owner to claim ownership after transferOwnership\"},\"getACL()\":{\"returns\":{\"_0\":\"Address of ACL contract\"}},\"getAccountFactory()\":{\"returns\":{\"_0\":\"Address of AccountFactory\"}},\"getContractsRegister()\":{\"returns\":{\"_0\":\"Address of ContractsRegister\"}},\"getDataCompressor()\":{\"returns\":{\"_0\":\"Address of DataCompressor\"}},\"getGearToken()\":{\"returns\":{\"_0\":\"Address of GEAR token\"}},\"getLeveragedActions()\":{\"returns\":{\"_0\":\"Address of PathFinder\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"Address of PriceOracle\"}},\"getTreasuryContract()\":{\"returns\":{\"_0\":\"Address of Treasury contract\"}},\"getWETHGateway()\":{\"returns\":{\"_0\":\"Address of WETH token\"}},\"getWethToken()\":{\"returns\":{\"_0\":\"Address of WETH token\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setACL(address)\":{\"details\":\"Sets address of ACL contract\",\"params\":{\"_address\":\"Address of ACL contract\"}},\"setAccountFactory(address)\":{\"details\":\"Sets address of AccountFactory\",\"params\":{\"_address\":\"Address of AccountFactory\"}},\"setContractsRegister(address)\":{\"details\":\"Sets address of ContractsRegister\",\"params\":{\"_address\":\"Address of ContractsRegister\"}},\"setDataCompressor(address)\":{\"details\":\"Sets address of AccountFactory\",\"params\":{\"_address\":\"Address of AccountFactory\"}},\"setGearToken(address)\":{\"details\":\"Sets address of GEAR token\",\"params\":{\"_address\":\"Address of GEAR token\"}},\"setLeveragedActions(address)\":{\"details\":\"Sets address of PathFinder\",\"params\":{\"_address\":\"Address of PathFinder\"}},\"setPriceOracle(address)\":{\"details\":\"Sets address of PriceOracle\",\"params\":{\"_address\":\"Address of PriceOracle\"}},\"setTreasuryContract(address)\":{\"details\":\"Sets address of Treasury Contract\",\"params\":{\"_address\":\"Address of Treasury Contract\"}},\"setWETHGateway(address)\":{\"details\":\"Sets address of WETH token\",\"params\":{\"_address\":\"Address of WETH token\"}},\"setWethToken(address)\":{\"details\":\"Sets address of WETH token\",\"params\":{\"_address\":\"Address of WETH token\"}},\"transferOwnership(address)\":{\"details\":\"Sets pending owner to the new owner, but does not transfer ownership yet\",\"params\":{\"newOwner\":\"The address to become the future owner\"}}},\"stateVariables\":{\"version\":{\"details\":\"Returns contract version\"}},\"title\":\"AddressRepository\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Stores addresses of deployed contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":\"AddressProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16556, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol:AddressProvider", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 4733, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol:AddressProvider", - "label": "pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 2612, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol:AddressProvider", - "label": "addresses", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_bytes32,t_address)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_address)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => address)", - "numberOfBytes": "32", - "value": "t_address" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Stores addresses of deployed contracts", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol": { - "ContractsRegister": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addressProvider", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CallerNotConfiguratorException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotUnPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "NewCreditManagerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "NewPoolAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newCreditManager", - "type": "address" - } - ], - "name": "addCreditManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newPoolAddress", - "type": "address" - } - ], - "name": "addPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "creditManagers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagersCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPools", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPoolsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isCreditManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isPool", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "pools", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotConfiguratorException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-Configurator" - } - ], - "CallerNotPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Pausable admin" - } - ], - "CallerNotUnPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Unpausable admin" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "addCreditManager(address)": { - "details": "Adds credit accounts manager address to the registry", - "params": { - "newCreditManager": "Address of the new Credit Manager" - } - }, - "addPool(address)": { - "details": "Adds a pool to the list", - "params": { - "newPoolAddress": "Address of the new pool" - } - }, - "getCreditManagers()": { - "details": "Returns the array of registered credit manager addresses" - }, - "getCreditManagersCount()": { - "returns": { - "_0": "Returns the number of registered credit managers" - } - }, - "getPools()": { - "details": "Returns the array of registered pool addresses" - }, - "getPoolsCount()": { - "returns": { - "_0": "Returns the number of registered pools" - } - }, - "pause()": { - "details": "Pause contract" - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "unpause()": { - "details": "Unpause contract" - } - }, - "stateVariables": { - "creditManagers": { - "details": "List of all registered Credit Managers" - }, - "isCreditManager": { - "details": "Mapping storing whether an address is a Credit Manager" - }, - "isPool": { - "details": "Mapping storing whether an address is a pool" - }, - "pools": { - "details": "List of all registered pools" - }, - "version": { - "details": "Contract version" - } - }, - "title": "Pool & Credit Manager registry", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_17105": { - "entryPoint": null, - "id": 17105, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2005": { - "entryPoint": null, - "id": 2005, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_2979": { - "entryPoint": null, - "id": 2979, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 215, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60a060405234801561001057600080fd5b50604051610bd2380380610bd283398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610a9461013e600039600081816101d50152818161027f01528181610390015281816104ad01526106810152610a946000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac68601461020a578063c29277cd14610212578063d914cd4b1461021a578063e26b2f631461022d57600080fd5b80638456cb59146101c057806394144856146101c8578063a50cf2c8146101d0578063ac4afa38146101f757600080fd5b80635b16ebb7116100d35780635b16ebb71461014a5780635c975abb1461017d578063673a2a1f146101885780636fbc6f6b1461019d57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461012a57806354fd4d5014610134575b600080fd5b61010d610108366004610958565b610240565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261026a565b005b61013c600181565b604051908152602001610121565b61016d610158366004610971565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b60005460ff1661016d565b610190610319565b60405161012191906109a1565b61016d6101ab366004610971565b60046020526000908152604090205460ff1681565b61013261037b565b610190610428565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610205366004610958565b610488565b60015461013c565b60035461013c565b610132610228366004610971565b610498565b61013261023b366004610971565b61066c565b6003818154811061025057600080fd5b6000918252602090912001546001600160a01b0316905081565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa1580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f291906109ee565b61030f5760405163081996f760e11b815260040160405180910390fd5b61031761083a565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561037157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610353575b5050505050905090565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906109ee565b6104205760405163d794b1e760e01b815260040160405180910390fd5b61031761088c565b60606003805480602002602001604051908101604052809291908181526020018280548015610371576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610353575050505050905090565b6001818154811061025057600080fd5b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052091906109ee565b61053d576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166105865760405162461bcd60e51b815260040161057d9190610a10565b60405180910390fd5b506001600160a01b038116600090815260026020908152604091829020548251808401909352600383526243523160e81b9183019190915260ff16156105df5760405162461bcd60e51b815260040161057d9190610a10565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038416908117909155600081815260026020526040808220805460ff1916909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906109ee565b610711576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166107515760405162461bcd60e51b815260040161057d9190610a10565b506001600160a01b038116600090815260046020908152604091829020548251808401909352600383526221a91960e91b9183019190915260ff16156107aa5760405162461bcd60e51b815260040161057d9190610a10565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b038416908117909155600081815260046020526040808220805460ff1916909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b6108426108c9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610894610912565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861086f3390565b60005460ff166103175760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057d565b60005460ff16156103175760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057d565b60006020828403121561096a57600080fd5b5035919050565b60006020828403121561098357600080fd5b81356001600160a01b038116811461099a57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156109e25783516001600160a01b0316835292840192918401916001016109bd565b50909695505050505050565b600060208284031215610a0057600080fd5b8151801515811461099a57600080fd5b600060208083528351808285015260005b81811015610a3d57858101830151858201604001528201610a21565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200165d12495f46ea6b90db275dc0ffbe0092ae79649978a2f35c0eaa9ba89b4cd64736f6c63430008110033", - "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xBD2 CODESIZE SUB DUP1 PUSH2 0xBD2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x61 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE POP PUSH2 0x107 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x100 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0xA94 PUSH2 0x13E PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x1D5 ADD MSTORE DUP2 DUP2 PUSH2 0x27F ADD MSTORE DUP2 DUP2 PUSH2 0x390 ADD MSTORE DUP2 DUP2 PUSH2 0x4AD ADD MSTORE PUSH2 0x681 ADD MSTORE PUSH2 0xA94 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xB4AC6860 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB4AC6860 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xC29277CD EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xD914CD4B EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xE26B2F63 EQ PUSH2 0x22D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x94144856 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0xAC4AFA38 EQ PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5B16EBB7 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x5B16EBB7 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x6FBC6F6B EQ PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E16E4FC EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x240 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH2 0x26A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x16D JUMP JUMPDEST PUSH2 0x190 PUSH2 0x319 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x121 SWAP2 SWAP1 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x1AB CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x37B JUMP JUMPDEST PUSH2 0x190 PUSH2 0x428 JUMP JUMPDEST PUSH2 0x10D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x10D PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH2 0x132 PUSH2 0x228 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x498 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x23B CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x66C JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F2 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x30F JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x83A JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x403 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x88C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x520 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x53D JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x586 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x435231 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x5DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xF816B5143086C89D103A0683286BE86C2B741E83EBFA75135AAE606E2F5C6E53 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F4 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x711 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x751 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x21A919 PUSH1 0xE9 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x7AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x58AD3CFC4B6552A53C8C4128AE9B080E14B4378A159280643A62C6F709CEE24F SWAP2 LOG2 POP JUMP JUMPDEST PUSH2 0x842 PUSH2 0x8C9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x894 PUSH2 0x912 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x86F CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E2 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x9BD JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA3D JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA21 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD PUSH6 0xD12495F46EA6 0xB9 0xD 0xB2 PUSH22 0xDC0FFBE0092AE79649978A2F35C0EAA9BA89B4CD6473 PUSH16 0x6C634300081100330000000000000000 ", - "sourceMap": "423:2659:16:-:0;;;982:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1006:5:56;996:15;;-1:-1:-1;;996:15:56;;;1028::16;-1:-1:-1;;;;;855:29:13;;851:64;;893:22;;-1:-1:-1;;;893:22:13;;;;;;;;;;;851:64;966:15;-1:-1:-1;;;;;950:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;938:54:13;;;-1:-1:-1;423:2659:16;;-1:-1:-1;423:2659:16;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;:::-;423:2659:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_acl_1978": { - "entryPoint": null, - "id": 1978, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_pause_17169": { - "entryPoint": 2188, - "id": 17169, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requireNotPaused_17142": { - "entryPoint": 2322, - "id": 17142, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requirePaused_17153": { - "entryPoint": 2249, - "id": 17153, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_unpause_17185": { - "entryPoint": 2106, - "id": 17185, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addCreditManager_3091": { - "entryPoint": 1644, - "id": 3091, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addPool_3024": { - "entryPoint": 1176, - "id": 3024, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@creditManagers_2960": { - "entryPoint": 576, - "id": 2960, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@getCreditManagersCount_3113": { - "entryPoint": null, - "id": 3113, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getCreditManagers_3102": { - "entryPoint": 1064, - "id": 3102, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getPoolsCount_3046": { - "entryPoint": null, - "id": 3046, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getPools_3035": { - "entryPoint": 793, - "id": 3035, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isCreditManager_2966": { - "entryPoint": null, - "id": 2966, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isPool_2955": { - "entryPoint": null, - "id": 2955, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pause_2038": { - "entryPoint": 891, - "id": 2038, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@paused_17130": { - "entryPoint": null, - "id": 17130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@pools_2949": { - "entryPoint": 1160, - "id": 2949, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@unpause_2056": { - "entryPoint": 618, - "id": 2056, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@version_2970": { - "entryPoint": null, - "id": 2970, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2417, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2542, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": 2392, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 2465, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2576, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3483:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "84:110:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "130:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "139:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "132:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "132:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "132:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "105:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "114:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "101:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "126:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "97:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "97:32:70" - }, - "nodeType": "YulIf", - "src": "94:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "155:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "178:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "165:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "165:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "155:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "50:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "61:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "73:6:70", - "type": "" - } - ], - "src": "14:180:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "310:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "322:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "333:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "318:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "318:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "310:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "352:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "367:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "383:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "388:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "379:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "379:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "392:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "375:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "363:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "363:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "345:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "345:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "345:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "269:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "280:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "291:4:70", - "type": "" - } - ], - "src": "199:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "508:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "518:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "530:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "541:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "526:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "526:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "518:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "560:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "571:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "553:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "553:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "553:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "477:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "488:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "499:4:70", - "type": "" - } - ], - "src": "407:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "659:216:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "705:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "714:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "717:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "707:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "707:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "707:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "680:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "689:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "676:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "676:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "701:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "672:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "672:32:70" - }, - "nodeType": "YulIf", - "src": "669:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "730:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "756:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "743:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "743:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "734:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "829:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "838:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "841:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "831:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "831:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "831:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "788:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "799:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "814:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "819:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "810:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "823:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "806:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "795:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "795:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "785:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "785:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "778:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "778:50:70" - }, - "nodeType": "YulIf", - "src": "775:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "854:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "864:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "854:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "625:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "636:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "648:6:70", - "type": "" - } - ], - "src": "589:286:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "975:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "985:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "997:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1008:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "993:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "993:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "985:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1027:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1052:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1045:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1045:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1038:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1038:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1020:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1020:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1020:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "944:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "955:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "966:4:70", - "type": "" - } - ], - "src": "880:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1223:507:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1233:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1243:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1237:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1254:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1272:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1283:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1268:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1268:18:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "1258:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1302:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1313:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1295:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1295:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1295:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1325:17:70", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1336:6:70" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1329:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1351:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1371:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1365:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1365:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1355:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1394:6:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1402:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1387:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1387:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1387:22:70" - }, - { - "nodeType": "YulAssignment", - "src": "1418:25:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1429:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1440:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1425:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1425:18:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1418:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1452:29:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1470:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1478:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1466:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1466:15:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1456:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1490:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1499:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1494:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1558:146:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1579:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1594:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1588:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1588:13:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1611:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1616:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1607:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1607:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1620:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1603:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1603:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1584:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1584:39:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1572:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1572:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1572:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1637:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1648:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1653:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1644:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1644:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1637:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1669:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1683:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1691:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1679:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1679:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1669:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1520:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1523:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1517:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1517:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1531:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1533:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1542:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1538:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1538:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1533:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1513:3:70", - "statements": [] - }, - "src": "1509:195:70" - }, - { - "nodeType": "YulAssignment", - "src": "1713:11:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1721:3:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1713:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1192:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1203:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1214:4:70", - "type": "" - } - ], - "src": "1072:658:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1850:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1860:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1872:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1883:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1868:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1868:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1860:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1902:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1917:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1933:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1938:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1929:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1929:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1942:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1925:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1925:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1913:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1913:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1895:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1895:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1895:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1819:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1830:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1841:4:70", - "type": "" - } - ], - "src": "1735:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2035:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2081:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2090:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2093:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2083:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2083:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2083:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2056:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2065:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2052:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2052:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2077:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2048:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2048:32:70" - }, - "nodeType": "YulIf", - "src": "2045:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2106:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2125:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2119:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2119:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2110:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2188:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2197:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2200:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2190:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2190:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2190:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2157:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2178:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2171:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2171:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2164:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2164:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2154:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2154:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2147:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2147:40:70" - }, - "nodeType": "YulIf", - "src": "2144:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "2213:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2223:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2213:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2001:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2012:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2024:6:70", - "type": "" - } - ], - "src": "1957:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2360:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2370:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2380:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2374:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2398:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2409:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2391:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2391:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2391:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2421:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2441:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2435:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2435:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2425:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2468:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2479:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2464:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2464:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2484:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2457:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2457:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2457:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2500:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2509:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2504:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2569:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2598:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2609:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2594:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2594:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2613:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2590:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2590:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2632:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2640:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2628:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2628:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2644:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2624:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2624:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2618:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2618:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2583:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2583:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2583:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2530:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2533:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2527:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2527:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2541:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2543:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2552:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2555:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2548:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2548:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2543:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2523:3:70", - "statements": [] - }, - "src": "2519:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2683:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2694:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2679:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2679:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2703:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2675:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2675:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2708:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2668:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2668:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2668:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "2719:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2735:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2754:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2762:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2750:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2750:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2771:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2767:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2767:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2746:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2746:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2731:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2731:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2778:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2727:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2727:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2719:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2329:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2340:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2351:4:70", - "type": "" - } - ], - "src": "2239:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2966:170:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2983:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2994:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2976:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2976:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2976:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3017:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3028:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3013:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3013:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3033:2:70", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3006:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3006:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3006:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3056:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3067:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3052:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3052:18:70" - }, - { - "hexValue": "5061757361626c653a206e6f7420706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3072:22:70", - "type": "", - "value": "Pausable: not paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3045:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3045:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3045:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "3104:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3116:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3127:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3112:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3104:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2943:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2957:4:70", - "type": "" - } - ], - "src": "2792:344:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3315:166:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3332:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3343:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3325:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3325:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3325:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3366:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3377:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3362:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3362:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3382:2:70", - "type": "", - "value": "16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3355:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3355:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3355:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3405:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3416:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3401:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3401:18:70" - }, - { - "hexValue": "5061757361626c653a20706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3421:18:70", - "type": "", - "value": "Pausable: paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3394:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3394:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3394:46:70" - }, - { - "nodeType": "YulAssignment", - "src": "3449:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3461:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3472:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3457:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3457:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3449:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3292:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3306:4:70", - "type": "" - } - ], - "src": "3141:340:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Pausable: not paused\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Pausable: paused\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1978": [ - { - "length": 32, - "start": 469 - }, - { - "length": 32, - "start": 639 - }, - { - "length": 32, - "start": 912 - }, - { - "length": 32, - "start": 1197 - }, - { - "length": 32, - "start": 1665 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac68601461020a578063c29277cd14610212578063d914cd4b1461021a578063e26b2f631461022d57600080fd5b80638456cb59146101c057806394144856146101c8578063a50cf2c8146101d0578063ac4afa38146101f757600080fd5b80635b16ebb7116100d35780635b16ebb71461014a5780635c975abb1461017d578063673a2a1f146101885780636fbc6f6b1461019d57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461012a57806354fd4d5014610134575b600080fd5b61010d610108366004610958565b610240565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261026a565b005b61013c600181565b604051908152602001610121565b61016d610158366004610971565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b60005460ff1661016d565b610190610319565b60405161012191906109a1565b61016d6101ab366004610971565b60046020526000908152604090205460ff1681565b61013261037b565b610190610428565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610205366004610958565b610488565b60015461013c565b60035461013c565b610132610228366004610971565b610498565b61013261023b366004610971565b61066c565b6003818154811061025057600080fd5b6000918252602090912001546001600160a01b0316905081565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa1580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f291906109ee565b61030f5760405163081996f760e11b815260040160405180910390fd5b61031761083a565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561037157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610353575b5050505050905090565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906109ee565b6104205760405163d794b1e760e01b815260040160405180910390fd5b61031761088c565b60606003805480602002602001604051908101604052809291908181526020018280548015610371576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610353575050505050905090565b6001818154811061025057600080fd5b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052091906109ee565b61053d576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166105865760405162461bcd60e51b815260040161057d9190610a10565b60405180910390fd5b506001600160a01b038116600090815260026020908152604091829020548251808401909352600383526243523160e81b9183019190915260ff16156105df5760405162461bcd60e51b815260040161057d9190610a10565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038416908117909155600081815260026020526040808220805460ff1916909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906109ee565b610711576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166107515760405162461bcd60e51b815260040161057d9190610a10565b506001600160a01b038116600090815260046020908152604091829020548251808401909352600383526221a91960e91b9183019190915260ff16156107aa5760405162461bcd60e51b815260040161057d9190610a10565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b038416908117909155600081815260046020526040808220805460ff1916909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b6108426108c9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610894610912565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861086f3390565b60005460ff166103175760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057d565b60005460ff16156103175760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057d565b60006020828403121561096a57600080fd5b5035919050565b60006020828403121561098357600080fd5b81356001600160a01b038116811461099a57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156109e25783516001600160a01b0316835292840192918401916001016109bd565b50909695505050505050565b600060208284031215610a0057600080fd5b8151801515811461099a57600080fd5b600060208083528351808285015260005b81811015610a3d57858101830151858201604001528201610a21565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200165d12495f46ea6b90db275dc0ffbe0092ae79649978a2f35c0eaa9ba89b4cd64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xF5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xB4AC6860 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB4AC6860 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xC29277CD EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xD914CD4B EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xE26B2F63 EQ PUSH2 0x22D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1C0 JUMPI DUP1 PUSH4 0x94144856 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x1D0 JUMPI DUP1 PUSH4 0xAC4AFA38 EQ PUSH2 0x1F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5B16EBB7 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x5B16EBB7 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x17D JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x6FBC6F6B EQ PUSH2 0x19D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E16E4FC EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D PUSH2 0x108 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x240 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH2 0x26A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x121 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x16D JUMP JUMPDEST PUSH2 0x190 PUSH2 0x319 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x121 SWAP2 SWAP1 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x16D PUSH2 0x1AB CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x37B JUMP JUMPDEST PUSH2 0x190 PUSH2 0x428 JUMP JUMPDEST PUSH2 0x10D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x10D PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x958 JUMP JUMPDEST PUSH2 0x488 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x13C JUMP JUMPDEST PUSH2 0x132 PUSH2 0x228 CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x498 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x23B CALLDATASIZE PUSH1 0x4 PUSH2 0x971 JUMP JUMPDEST PUSH2 0x66C JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F2 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x30F JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x83A JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x403 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x317 PUSH2 0x88C JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x371 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x353 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x520 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x53D JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x586 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x435231 PUSH1 0xE8 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x5DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 DUP1 SLOAD DUP1 DUP3 ADD DUP3 SSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0xF816B5143086C89D103A0683286BE86C2B741E83EBFA75135AAE606E2F5C6E53 SWAP2 LOG2 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F4 SWAP2 SWAP1 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x711 JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x5A3 PUSH1 0xF4 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x751 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x3 DUP4 MSTORE PUSH3 0x21A919 PUSH1 0xE9 SHL SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND ISZERO PUSH2 0x7AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57D SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST POP PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP1 DUP3 ADD SWAP1 SWAP3 SSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x58AD3CFC4B6552A53C8C4128AE9B080E14B4378A159280643A62C6F709CEE24F SWAP2 LOG2 POP JUMP JUMPDEST PUSH2 0x842 PUSH2 0x8C9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x894 PUSH2 0x912 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x86F CALLER SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x317 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x57D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9E2 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x9BD JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x99A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA3D JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA21 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD PUSH6 0xD12495F46EA6 0xB9 0xD 0xB2 PUSH22 0xDC0FFBE0092AE79649978A2F35C0EAA9BA89B4CD6473 PUSH16 0x6C634300081100330000000000000000 ", - "sourceMap": "423:2659:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;732:40;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:70;;;345:51;;333:2;318:18;732:40:16;;;;;;;;1427:161:13;;;:::i;:::-;;940:35:16;;974:1;940:35;;;;;553:25:70;;;541:2;526:18;940:35:16;407:177:70;626:47:16;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1045:14:70;;1038:22;1020:41;;1008:2;993:18;626:47:16;880:187:70;1615:84:56;1662:4;1685:7;;;1615:84;;1672:99:16;;;:::i;:::-;;;;;;;:::i;847:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1239:152:13;;;:::i;2724:153:16:-;;;:::i;685:26:13:-;;;;;530:31:16;;;;;;:::i;:::-;;:::i;1832:114::-;1915:5;:12;1832:114;;2948:132;3040:14;:21;2948:132;;1144:462;;;;;;:::i;:::-;;:::i;2084:564::-;;;;;;:::i;:::-;;:::i;732:40::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;732:40:16;;-1:-1:-1;732:40:16;:::o;1427:161:13:-;1470:34;;-1:-1:-1;;;1470:34:13;;1493:10;1470:34;;;345:51:70;1470:4:13;-1:-1:-1;;;;;1470:22:13;;;;318:18:70;;1470:34:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1465:95;;1525:35;;-1:-1:-1;;;1525:35:13;;;;;;;;;;;1465:95;1571:10;:8;:10::i;:::-;1427:161::o;1672:99:16:-;1724:16;1759:5;1752:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1752:12:16;;;;;;;;;;;;;;;;;;;;;;;1672:99;:::o;1239:152:13:-;1280:32;;-1:-1:-1;;;1280:32:13;;1301:10;1280:32;;;345:51:70;1280:4:13;-1:-1:-1;;;;;1280:20:13;;;;318:18:70;;1280:32:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1275:91;;1333:33;;-1:-1:-1;;;1333:33:13;;;;;;;;;;;1275:91;1376:8;:6;:8::i;2724:153:16:-;2817:16;2856:14;2849:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2849:21:16;;;;;;;;;;;;;;;;;;;;;;2724:153;:::o;530:31::-;;;;;;;;;;;;1144:462;1104:31:13;;-1:-1:-1;;;1104:31:13;;1124:10;1104:31;;;345:51:70;1104:4:13;-1:-1:-1;;;;;1104:19:13;;;;318:18:70;;1104:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1099:89;;1156:32;;-1:-1:-1;;;1156:32:13;;;;;;;;;;;1099:89;1316:34:16::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1316:34:16::1;::::0;::::1;::::0;-1:-1:-1;;;;;1274:28:16;::::1;1253:107;;;;-1:-1:-1::0;;;1253:107:16::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;;1379:22:16;::::1;;::::0;;;:6:::1;:22;::::0;;;;;;;;;1403:28;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1403:28:16;;::::1;::::0;;;;1379:22:::1;;1378:23;1370:62;;;;-1:-1:-1::0;;;1370:62:16::1;;;;;;;;:::i;:::-;-1:-1:-1::0;1454:5:16::1;:26:::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;1454:26:16::1;-1:-1:-1::0;;;;;1454:26:16;::::1;::::0;;::::1;::::0;;;-1:-1:-1;1502:22:16;;;:6:::1;1454:26;1502:22:::0;;;;;:29;;-1:-1:-1;;1502:29:16::1;::::0;;::::1;::::0;;;1559:28;;1454:26;;1559:28:::1;::::0;::::1;1144:462:::0;:::o;2084:564::-;1104:31:13;;-1:-1:-1;;;1104:31:13;;1124:10;1104:31;;;345:51:70;1104:4:13;-1:-1:-1;;;;;1104:19:13;;;;318:18:70;;1104:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1099:89;;1156:32;;-1:-1:-1;;;1156:32:13;;;;;;;;;;;1099:89;2269:34:16::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;2269:34:16::1;::::0;::::1;::::0;-1:-1:-1;;;;;2225:30:16;::::1;2204:109;;;;-1:-1:-1::0;;;2204:109:16::1;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;2346:33:16;::::1;;::::0;;;:15:::1;:33;::::0;;;;;;;;;2393:38;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;2393:38:16;;::::1;::::0;;;;2346:33:::1;;2345:34;2324:117;;;;-1:-1:-1::0;;;2324:117:16::1;;;;;;;;:::i;:::-;-1:-1:-1::0;2463:14:16::1;:37:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;2463:37:16::1;-1:-1:-1::0;;;;;2463:37:16;::::1;::::0;;::::1;::::0;;;-1:-1:-1;2522:33:16;;;:15:::1;2463:37;2522:33:::0;;;;;:40;;-1:-1:-1;;2522:40:16::1;::::0;;::::1;::::0;;;2590:39;;2463:37;;2590:39:::1;::::0;::::1;2084:564:::0;:::o;2433:117:56:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:15:::0;;-1:-1:-1;;2491:15:56::1;::::0;;2521:22:::1;719:10:66::0;2530:12:56::1;2521:22;::::0;-1:-1:-1;;;;;363:32:70;;;345:51;;333:2;318:18;2521:22:56::1;;;;;;;2433:117::o:0;2186:115::-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:56::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:66::0;;640:96;1945:106:56;1662:4;1685:7;;;2003:41;;;;-1:-1:-1;;;2003:41:56;;2994:2:70;2003:41:56;;;2976:21:70;3033:2;3013:18;;;3006:30;-1:-1:-1;;;3052:18:70;;;3045:50;3112:18;;2003:41:56;2792:344:70;1767:106:56;1662:4;1685:7;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:56;;3343:2:70;1828:38:56;;;3325:21:70;3382:2;3362:18;;;3355:30;-1:-1:-1;;;3401:18:70;;;3394:46;3457:18;;1828:38:56;3141:340:70;14:180;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:70;;14:180;-1:-1:-1;14:180:70:o;589:286::-;648:6;701:2;689:9;680:7;676:23;672:32;669:52;;;717:1;714;707:12;669:52;743:23;;-1:-1:-1;;;;;795:31:70;;785:42;;775:70;;841:1;838;831:12;775:70;864:5;589:286;-1:-1:-1;;;589:286:70:o;1072:658::-;1243:2;1295:21;;;1365:13;;1268:18;;;1387:22;;;1214:4;;1243:2;1466:15;;;;1440:2;1425:18;;;1214:4;1509:195;1523:6;1520:1;1517:13;1509:195;;;1588:13;;-1:-1:-1;;;;;1584:39:70;1572:52;;1679:15;;;;1644:12;;;;1620:1;1538:9;1509:195;;;-1:-1:-1;1721:3:70;;1072:658;-1:-1:-1;;;;;;1072:658:70:o;1957:277::-;2024:6;2077:2;2065:9;2056:7;2052:23;2048:32;2045:52;;;2093:1;2090;2083:12;2045:52;2125:9;2119:16;2178:5;2171:13;2164:21;2157:5;2154:32;2144:60;;2200:1;2197;2190:12;2239:548;2351:4;2380:2;2409;2398:9;2391:21;2441:6;2435:13;2484:6;2479:2;2468:9;2464:18;2457:34;2509:1;2519:140;2533:6;2530:1;2527:13;2519:140;;;2628:14;;;2624:23;;2618:30;2594:17;;;2613:2;2590:26;2583:66;2548:10;;2519:140;;;2523:3;2708:1;2703:2;2694:6;2683:9;2679:22;2675:31;2668:42;2778:2;2771;2767:7;2762:2;2754:6;2750:15;2746:29;2735:9;2731:45;2727:54;2719:62;;;;2239:548;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "541600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "_acl()": "infinite", - "addCreditManager(address)": "infinite", - "addPool(address)": "infinite", - "creditManagers(uint256)": "4627", - "getCreditManagers()": "infinite", - "getCreditManagersCount()": "2336", - "getPools()": "infinite", - "getPoolsCount()": "2314", - "isCreditManager(address)": "2585", - "isPool(address)": "2519", - "pause()": "infinite", - "paused()": "2349", - "pools(uint256)": "4692", - "unpause()": "infinite", - "version()": "263" - } - }, - "methodIdentifiers": { - "_acl()": "a50cf2c8", - "addCreditManager(address)": "e26b2f63", - "addPool(address)": "d914cd4b", - "creditManagers(uint256)": "1e16e4fc", - "getCreditManagers()": "94144856", - "getCreditManagersCount()": "c29277cd", - "getPools()": "673a2a1f", - "getPoolsCount()": "b4ac6860", - "isCreditManager(address)": "6fbc6f6b", - "isPool(address)": "5b16ebb7", - "pause()": "8456cb59", - "paused()": "5c975abb", - "pools(uint256)": "ac4afa38", - "unpause()": "3f4ba83a", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotConfiguratorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotUnPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"NewCreditManagerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"NewPoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCreditManager\",\"type\":\"address\"}],\"name\":\"addCreditManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolAddress\",\"type\":\"address\"}],\"name\":\"addPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"creditManagers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagersCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isCreditManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pools\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotConfiguratorException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-Configurator\"}],\"CallerNotPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Pausable admin\"}],\"CallerNotUnPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Unpausable admin\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"addCreditManager(address)\":{\"details\":\"Adds credit accounts manager address to the registry\",\"params\":{\"newCreditManager\":\"Address of the new Credit Manager\"}},\"addPool(address)\":{\"details\":\"Adds a pool to the list\",\"params\":{\"newPoolAddress\":\"Address of the new pool\"}},\"getCreditManagers()\":{\"details\":\"Returns the array of registered credit manager addresses\"},\"getCreditManagersCount()\":{\"returns\":{\"_0\":\"Returns the number of registered credit managers\"}},\"getPools()\":{\"details\":\"Returns the array of registered pool addresses\"},\"getPoolsCount()\":{\"returns\":{\"_0\":\"Returns the number of registered pools\"}},\"pause()\":{\"details\":\"Pause contract\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"unpause()\":{\"details\":\"Unpause contract\"}},\"stateVariables\":{\"creditManagers\":{\"details\":\"List of all registered Credit Managers\"},\"isCreditManager\":{\"details\":\"Mapping storing whether an address is a Credit Manager\"},\"isPool\":{\"details\":\"Mapping storing whether an address is a pool\"},\"pools\":{\"details\":\"List of all registered pools\"},\"version\":{\"details\":\"Contract version\"}},\"title\":\"Pool & Credit Manager registry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Stores addresses of Pools and Credit Managers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":\"ContractsRegister\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol:ContractsRegister", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 2949, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol:ContractsRegister", - "label": "pools", - "offset": 0, - "slot": "1", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 2955, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol:ContractsRegister", - "label": "isPool", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 2960, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol:ContractsRegister", - "label": "creditManagers", - "offset": 0, - "slot": "3", - "type": "t_array(t_address)dyn_storage" - }, - { - "astId": 2966, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol:ContractsRegister", - "label": "isCreditManager", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "base": "t_address", - "encoding": "dynamic_array", - "label": "address[]", - "numberOfBytes": "32" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Stores addresses of Pools and Credit Managers", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol": { - "DataCompressor": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_addressProvider", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "NotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "NotPoolException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "WETHToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract AddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractsRegister", - "outputs": [ - { - "internalType": "contract ContractsRegister", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_allowedContract", - "type": "address" - } - ], - "name": "getAdapter", - "outputs": [ - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "bool", - "name": "inUse", - "type": "bool" - }, - { - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterestAndFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "healthFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isAllowed", - "type": "bool" - }, - { - "internalType": "bool", - "name": "isEnabled", - "type": "bool" - } - ], - "internalType": "struct TokenBalance[]", - "name": "balances", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "liquidationAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "canBeClosed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndexAtOpen", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "since", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "enabledTokenMask", - "type": "uint256" - } - ], - "internalType": "struct CreditAccountData", - "name": "result", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "bool", - "name": "inUse", - "type": "bool" - }, - { - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterestAndFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "healthFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isAllowed", - "type": "bool" - }, - { - "internalType": "bool", - "name": "isEnabled", - "type": "bool" - } - ], - "internalType": "struct TokenBalance[]", - "name": "balances", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "liquidationAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "canBeClosed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndexAtOpen", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "since", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "enabledTokenMask", - "type": "uint256" - } - ], - "internalType": "struct CreditAccountData[]", - "name": "result", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - } - ], - "name": "getCreditManagerData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "bool", - "name": "canBorrow", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxLeverageFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "collateralTokens", - "type": "address[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "allowedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "internalType": "struct ContractAdapter[]", - "name": "adapters", - "type": "tuple[]" - }, - { - "internalType": "uint256[]", - "name": "liquidationThresholds", - "type": "uint256[]" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "address", - "name": "creditFacade", - "type": "address" - }, - { - "internalType": "address", - "name": "creditConfigurator", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDegenMode", - "type": "bool" - }, - { - "internalType": "address", - "name": "degenNFT", - "type": "address" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "forbiddenTokenMask", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "maxEnabledTokensLength", - "type": "uint8" - }, - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "internalType": "struct CreditManagerData", - "name": "result", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagersList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "bool", - "name": "canBorrow", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxLeverageFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "collateralTokens", - "type": "address[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "allowedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "internalType": "struct ContractAdapter[]", - "name": "adapters", - "type": "tuple[]" - }, - { - "internalType": "uint256[]", - "name": "liquidationThresholds", - "type": "uint256[]" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "address", - "name": "creditFacade", - "type": "address" - }, - { - "internalType": "address", - "name": "creditConfigurator", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDegenMode", - "type": "bool" - }, - { - "internalType": "address", - "name": "degenNFT", - "type": "address" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "forbiddenTokenMask", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "maxEnabledTokensLength", - "type": "uint8" - }, - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "internalType": "struct CreditManagerData[]", - "name": "result", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_pool", - "type": "address" - } - ], - "name": "getPoolData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "dieselToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "linearCumulativeIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidityLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalBorrowed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "dieselRate_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndex_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestampLU", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "internalType": "struct PoolData", - "name": "result", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPoolsList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "dieselToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "linearCumulativeIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidityLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalBorrowed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "dieselRate_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndex_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestampLU", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "internalType": "struct PoolData[]", - "name": "result", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "hasOpenedCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "NotCreditManagerException()": [ - { - "details": "Thrown if attempting to get data on a contract that is not a registered Credit Manager" - } - ], - "NotPoolException()": [ - { - "details": "Thrown if attempting the get data on a contract that is not a registered pool" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ] - }, - "kind": "dev", - "methods": { - "getAdapter(address,address)": { - "details": "Returns the adapter address for a particular creditManager and targetContract" - }, - "getCreditAccountData(address,address)": { - "details": "Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower", - "params": { - "_creditManager": "Credit manager address", - "borrower": "Borrower address" - } - }, - "getCreditAccountList(address)": { - "details": "Returns CreditAccountData for all opened accounts for particular borrower", - "params": { - "borrower": "Borrower address" - } - }, - "getCreditManagerData(address)": { - "details": "Returns CreditManagerData for a particular _creditManager", - "params": { - "_creditManager": "CreditManager address" - } - }, - "getCreditManagersList()": { - "details": "Returns CreditManagerData for all Credit Managers" - }, - "getPoolData(address)": { - "details": "Returns PoolData for a particular pool", - "params": { - "_pool": "Pool address" - } - }, - "getPoolsList()": { - "details": "Returns PoolData for all registered pools" - }, - "hasOpenedCreditAccount(address,address)": { - "details": "Returns whether the borrower has an open credit account with the credit manager", - "params": { - "_creditManager": "Credit manager to check", - "borrower": "Borrower to check" - } - } - }, - "stateVariables": { - "WETHToken": { - "details": "Address of WETH" - }, - "addressProvider": { - "details": "Address of the AddressProvider" - }, - "contractsRegister": { - "details": "Address of the ContractsRegister" - }, - "version": { - "details": "Returns contract version" - } - }, - "title": "Data compressor", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_3241": { - "entryPoint": null, - "id": 3241, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 352, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60e06040523480156200001157600080fd5b506040516200443b3803806200443b833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c05161421e6200021d6000396000818161015b0152818161159e01526120ea0152600081816101c001528181611033015281816118480152818161194301528181611a1001528181611ba401528181611c9f01528181611d4a01528181611df001528181611f02015281816130f4015261319a0152600061011c015261421e6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d5014610190578063663b8fdb146101a65780637a0c7b21146101bb578063a80deda3146101e2578063ae093f3f14610202578063fc9914cb1461022257600080fd5b80630dbd616d146100b957806313d21cdf146100e25780631bcd8fc0146101025780632954018c146101175780634b2f336d146101565780634c472fc91461017d575b600080fd5b6100cc6100c736600461371b565b610245565b6040516100d991906138f5565b60405180910390f35b6100f56100f0366004613908565b61100a565b6040516100d99190613a07565b61010a611842565b6040516100d99190613a16565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d9565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b61013e61018b36600461371b565b6119ec565b610198600281565b6040519081526020016100d9565b6101ae611b9e565b6040516100d99190613cdd565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6101f56101f0366004613908565b611d43565b6040516100d99190613d3f565b610215610210366004613908565b611fc5565b6040516100d99190613d94565b61023561023036600461371b565b6130d0565b60405190151581526020016100d9565b61024d6134d6565b600080600080600061025e8861318e565b509450945094509450945060008560ff166001146102e557604051633a562dc160e21b81526001600160a01b03898116600483015284169063e958b70490602401602060405180830381865afa1580156102bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e09190613db7565b61034f565b604051633a562dc160e21b81526001600160a01b03898116600483015286169063e958b70490602401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190613db7565b60ff871661022089018190526001600160a01b03808b1660208b01528b811660608b01528216895290915060010361071a57846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529085169063c7de38a690602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104569190613dd4565b60e088015260405163dfd5946560e01b81526001600160a01b03828116600483015285169063dfd5946590602401602060405180830381865afa1580156104a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c59190613dd4565b610100880152604051633ce0735560e01b81526001600160a01b03898116600483015260006024830152861690633ce0735590604401602060405180830381865afa925050508015610534575060408051601f3d908101601f1916820190925261053191810190613dd4565b60015b15610540576101608801525b604051633ce0735560e01b81526001600160a01b03898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156105a9575060408051601f3d908101601f191682019092526105a691810190613dd4565b60015b156105b5576101808801525b60e087015160405163132c653f60e31b81526001600160a01b0383811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa92505050801561062c575060408051601f3d908101601f1916820190925261062991810190613ded565b60015b1561063e57505015156101a08a015250505b806001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190613dd4565b6101c0880152604051630c64865760e21b81526001600160a01b038281166004830152851690633192195c90602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613dd4565b60a08801526108df565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529083169063c7de38a6906024016040805180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190613e2d565b5060e088015260405163dfd5946560e01b81526001600160a01b03828116600483015283169063dfd5946590602401602060405180830381865afa15801561083a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085e9190613dd4565b610100880152604051630c64865760e21b81526001600160a01b038281166004830152841690633192195c90602401606060405180830381865afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613e51565b60c08a015260a08901526101c08801525b60008660ff1660011461095357836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190613db7565b6109b5565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613db7565b9050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613dd4565b6101208901526000600160ff891614610a9357846001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190613dd4565b610af5565b856001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613dd4565b90508760ff16600114610b7157604051638991b2f160e01b81526001600160a01b038481166004830152861690638991b2f190602401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613dd4565b610bdb565b604051632d1473b360e21b81526001600160a01b03848116600483015287169063b451cecc90602401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613dd4565b6102408a01528067ffffffffffffffff811115610bfa57610bfa613e7f565b604051908082528060200260200182016040528015610c4c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c185790505b506101408a015260005b81811015610f2657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c169003610d8757604051635785328160e11b81526001600160a01b038781166004830152602482018590528a169063af0a650290604401608060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613e95565b505060208401526001600160a01b0390811680845260405163f9eaee0d60e01b81526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b9190613ee4565b15156040830152610ed8565b60405163172c48c760e01b8152600481018490526001600160a01b0389169063172c48c7906024016040805180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190613f11565b506001600160a01b039081168084526040516370a0823160e01b81529188166004830152906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613dd4565b6020830152815160405163f9eaee0d60e01b81526001600160a01b0391821660048201529088169063f9eaee0d90602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190613ee4565b151560408301525b6102408c0151811615610eec576001610eef565b60005b151560608301526101408c0151805183919085908110610f1157610f11613f46565b60209081029190910101525050600101610c56565b50826001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190613dd4565b896101e0018181525050826001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190613dd4565b6102008a015250969998505050505050505050565b611012613593565b604051635b16ebb760e01b81526001600160a01b03808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613ee4565b6110bd57604051631a70964760e31b815260040160405180910390fd5b6001600160a01b0383168083526040805163fe14112d60e01b8152905185929163fe14112d9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613dd4565b8360c0018181525050806001600160a01b031663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613dd4565b8360e0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613dd4565b8360a0018181525050806001600160a01b0316634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613dd4565b83610100018181525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190613dd4565b83610160018181525050806001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613dd4565b836080018181525050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190613dd4565b83610140018181525050806001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190613db7565b83604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190613db7565b83606001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190613dd4565b83610160018181525050806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190613dd4565b6101808401526040808401516001600160a01b039081167f0000000000000000000000000000000000000000000000000000000000000000821614602080870191909152825163609ae31760e01b815292519184169263609ae31792600480830193928290030181865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190613dd4565b836101c0018181525050806001600160a01b031663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613dd4565b836101a0018181525050600083606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190613dd4565b604051630a84f92760e31b8152600481018290529091506000906001600160a01b03841690635427c93890602401602060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613dd4565b905080156117bd5761018085015181906117ae9061179290612710613f72565b8761010001518861014001516117a89190613f85565b90613402565b6117b89190613fb2565b6117c4565b8461014001515b85610120018181525050826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118309190613dd4565b60ff166101e086015250505050919050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c89190613dd4565b90508067ffffffffffffffff8111156118e3576118e3613e7f565b60405190808252806020026020018201604052801561191c57816020015b611909613593565b8152602001906001900390816119015790505b50915060005b818110156119e7576040516315895f4760e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ac4afa3890602401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613db7565b90506119c18161100a565b8483815181106119d3576119d3613f46565b602090810291909101015250600101611922565b505090565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613ee4565b611a9857604051631679e86f60e11b815260040160405180910390fd5b6000806000611aa68761318e565b5050935093505092508260ff16600114611b295760405163fdd5764560e01b81526001600160a01b03878116600483015282169063fdd5764590602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190613db7565b611b93565b60405163fdd5764560e01b81526001600160a01b03878116600483015283169063fdd5764590602401602060405180830381865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190613db7565b979650505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613dd4565b90508067ffffffffffffffff811115611c3f57611c3f613e7f565b604051908082528060200260200182016040528015611c7857816020015b611c65613630565b815260200190600190039081611c5d5790505b50915060005b818110156119e757604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613db7565b9050611d1d81611fc5565b848381518110611d2f57611d2f613f46565b602090810291909101015250600101611c7e565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca9190613dd4565b905060005b81811015611e8457604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190613db7565b9050611e6f81876130d0565b15611e7b578360010193505b50600101611dcf565b508167ffffffffffffffff811115611e9e57611e9e613e7f565b604051908082528060200260200182016040528015611ed757816020015b611ec46134d6565b815260200190600190039081611ebc5790505b5092506000915060005b81811015611fbd57604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190613db7565b9050611f8181876130d0565b15611fb457611f908187610245565b858581518110611fa257611fa2613f46565b60209081029190910101526001909301925b50600101611ee1565b505050919050565b611fcd613630565b600080600080600080611fdf8861318e565b6001600160a01b038e168d5260ff86166101a08e01819052959b5093995091975095509350915060011461207457826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f9190613db7565b6120d6565b846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613db7565b6001600160a01b03908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460608801526000600160ff88161461218657836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613db7565b6121e8565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190613db7565b6001600160a01b0381811660408b810182905251632e97ca2160e01b8152918c166004830152919250632e97ca2190602401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190613ee4565b15156080890152604080516345d31f9d60e01b815290516001600160a01b038316916345d31f9d9160048083019260209291908290030181865afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190613dd4565b8860a0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190613dd4565b6101208901525060ff861660010361241f57846001600160a01b0316639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190613dd4565b8760c0018181525050846001600160a01b0316635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190613dd4565b60e0880152612497565b816001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190613fdd565b6001600160801b0390811660e08a01521660c08801525b60008660ff1660011461250b57836001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613dd4565b61256d565b846001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190613dd4565b90508067ffffffffffffffff81111561258857612588613e7f565b6040519080825280602002602001820160405280156125b1578160200160208202803683370190505b506101408901528067ffffffffffffffff8111156125d1576125d1613e7f565b6040519080825280602002602001820160405280156125fa578160200160208202803683370190505b5061018089015260005b8181101561280f578760ff1660010361273f57604051632f2f971360e11b8152600481018290526000906001600160a01b03881690635e5f2e2690602401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613db7565b9050808a6101400151838151811061269d5761269d613f46565b6001600160a01b039283166020918202929092010152604051630f064e8760e31b8152828216600482015290881690637832743890602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127169190613dd4565b8a6101800151838151811061272d5761272d613f46565b60200260200101818152505050612807565b60405163172c48c760e01b8152600481018290526001600160a01b0386169063172c48c7906024016040805180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190613f11565b8061ffff1690508a610140015183815181106127c5576127c5613f46565b602002602001018b610180015184815181106127e3576127e3613f46565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505b600101612604565b50508560ff16600103612a1e576000846001600160a01b03166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613dd4565b90508067ffffffffffffffff81111561289b5761289b613e7f565b6040519080825280602002602001820160405280156128e057816020015b60408051808201909152600080825260208201528152602001906001900390816128b95790505b5061016089015260005b81811015612a1757604051635094cb4f60e01b8152600481018290526000906001600160a01b03881690635094cb4f90602401602060405180830381865afa15801561293a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295e9190613db7565b6040805180820182526001600160a01b03808416808352925163fdd5764560e01b81526004810193909352929350916020830191908a169063fdd5764590602401602060405180830381865afa1580156129bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e09190613db7565b6001600160a01b03168152508a61016001518381518110612a0357612a03613f46565b6020908102919091010152506001016128ea565b5050612bea565b6000816001600160a01b031663373c8f626040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a869190810190614007565b80519091508067ffffffffffffffff811115612aa457612aa4613e7f565b604051908082528060200260200182016040528015612ae957816020015b6040805180820190915260008082526020820152815260200190600190039081612ac25790505b506101608a015260005b81811015612be6576000838281518110612b0f57612b0f613f46565b602002602001015190506040518060400160405280826001600160a01b03168152602001886001600160a01b031663fdd57645846040518263ffffffff1660e01b8152600401612b6e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baf9190613db7565b6001600160a01b03168152508b61016001518381518110612bd257612bd2613f46565b602090810291909101015250600101612af3565b5050505b8560ff16600103612dc357846001600160a01b031663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613dd4565b61010088015260ff61028088015260408051635e0b63d360e01b815290516001600160a01b03871691635e0b63d39160048083019260209291908290030181865afa158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190613dd4565b61ffff166102a088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613dd4565b61ffff166102c088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db49190613dd4565b61ffff166102e08801526130c5565b81876101c001906001600160a01b031690816001600160a01b031681525050826001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613db7565b876101e001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190613db7565b8761022001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401608060405180830381865afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906140cc565b505015156102408901525060408051639fd12b7760e01b815290516001600160a01b03851691639fd12b779160048083019260209291908290030181865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190613dd4565b87610260018181525050826001600160a01b0316638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061412c565b60ff1661028088015260408051634d78e9ad60e11b815290516001600160a01b03851691639af1d35a9160048083019260a09291908290030181865afa158015613072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613096919061414f565b61ffff9081166103208d01529081166103008c01529081166102e08b01529081166102c08a0152166102a08801525b505050505050919050565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190613ee4565b61317c57604051631679e86f60e11b815260040160405180910390fd5b6131868484613455565b949350505050565b600080600080600080867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fbc6f6b826040518263ffffffff1660e01b81526004016131f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132349190613ee4565b61325157604051631679e86f60e11b815260040160405180910390fd5b876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190613dd4565b96508660ff1660010361332c57879550856001600160a01b031663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613db7565b94506133f8565b879350836001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561336d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133919190613db7565b9250836001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190613db7565b91505b5091939550919395565b600082158061340f575081155b1561341c5750600061344f565b61271061342a6002826141b4565b61ffff166134388486613f85565b61344291906141d5565b61344c9190613fb2565b90505b92915050565b60405163055ee9b560e01b81526001600160a01b038281166004830152600091829185169063055ee9b590602401602060405180830381865afa1580156134a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c49190613db7565b6001600160a01b031614159392505050565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b60405180610200016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b604080516103408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082018190526101808201526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081019190915290565b6001600160a01b038116811461371857600080fd5b50565b6000806040838503121561372e57600080fd5b823561373981613703565b9150602083013561374981613703565b809150509250929050565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101613768565b509495945050505050565b80516001600160a01b03168252600061026060208301516137e860208601826001600160a01b03169052565b5060408301516137fc604086018215159052565b50606083015161381760608601826001600160a01b03169052565b50608083015161383260808601826001600160a01b03169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261388183870182613754565b925050506101608084015181860152506101808084015181860152506101a0808401516138b18287018215159052565b50506101c083810151908501526101e0808401519085015261020080840151908501526102208084015160ff16908501526102409283015192909301919091525090565b60208152600061344c60208301846137bc565b60006020828403121561391a57600080fd5b813561392581613703565b9392505050565b80516001600160a01b03168252602081015161394c602084018215159052565b50604081015161396760408401826001600160a01b03169052565b50606081015161398260608401826001600160a01b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161344f828461392c565b6020808252825182820181905260009190848201906040850190845b81811015613a5957613a4583855161392c565b928401926102009290920191600101613a32565b50909695505050505050565b600081518084526020808501945080840160005b838110156137b15781516001600160a01b031687529582019590820190600101613a79565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03908116895290840151168388015260409096019590820190600101613ab2565b600081518084526020808501945080840160005b838110156137b157815187529582019590820190600101613afa565b80516001600160a01b0316825260006103406020830151613b4260208601826001600160a01b03169052565b506040830151613b5d60408601826001600160a01b03169052565b506060830151613b71606086018215159052565b506080830151613b85608086018215159052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152613bd483870182613a65565b925050506101608084015185830382870152613bf08382613a9e565b925050506101808084015185830382870152613c0c8382613ae6565b925050506101a080840151613c258287018260ff169052565b50506101c0838101516001600160a01b03908116918601919091526101e0808501518216908601526102008085015115159086015261022080850151909116908501526102408084015115159085015261026080840151908501526102808084015160ff16908501526102a08084015161ffff908116918601919091526102c0808501518216908601526102e08085015182169086015261030080850151821690860152610320938401511692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d20858351613b16565b94509285019290850190600101613d04565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d828583516137bc565b94509285019290850190600101613d66565b60208152600061344c6020830184613b16565b8051613db281613703565b919050565b600060208284031215613dc957600080fd5b815161392581613703565b600060208284031215613de657600080fd5b5051919050565b600080600080600060a08688031215613e0557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008060408385031215613e4057600080fd5b505080516020909101519092909150565b600080600060608486031215613e6657600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215613eab57600080fd5b8451613eb681613703565b60208601516040870151606090970151919890975090945092505050565b80518015158114613db257600080fd5b600060208284031215613ef657600080fd5b61344c82613ed4565b805161ffff81168114613db257600080fd5b60008060408385031215613f2457600080fd5b8251613f2f81613703565b9150613f3d60208401613eff565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561344f5761344f613f5c565b808202811582820484141761344f5761344f613f5c565b634e487b7160e01b600052601260045260246000fd5b600082613fc157613fc1613f9c565b500490565b80516001600160801b0381168114613db257600080fd5b60008060408385031215613ff057600080fd5b613ff983613fc6565b9150613f3d60208401613fc6565b6000602080838503121561401a57600080fd5b825167ffffffffffffffff8082111561403257600080fd5b818501915085601f83011261404657600080fd5b81518181111561405857614058613e7f565b8060051b604051601f19603f8301168101818110858211171561407d5761407d613e7f565b60405291825284820192508381018501918883111561409b57600080fd5b938501935b828510156140c0576140b185613da7565b845293850193928501926140a0565b98975050505050505050565b600080600080608085870312156140e257600080fd5b6140eb85613fc6565b93506140f960208601613ed4565b9250604085015164ffffffffff8116811461411357600080fd5b915061412160608601613eff565b905092959194509250565b60006020828403121561413e57600080fd5b815160ff8116811461392557600080fd5b600080600080600060a0868803121561416757600080fd5b61417086613eff565b945061417e60208701613eff565b935061418c60408701613eff565b925061419a60608701613eff565b91506141a860808701613eff565b90509295509295909350565b600061ffff808416806141c9576141c9613f9c565b92169190910492915050565b8082018082111561344f5761344f613f5c56fea264697066735822122033db04dd6ad85cbb23c61a3c1df229cdee23950afa0e93d191a4e60c173de79664736f6c63430008110033", - "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x443B CODESIZE SUB DUP1 PUSH3 0x443B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x5C JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xC513C9BB PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0xC513C9BB SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCD SWAP2 SWAP1 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x80 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C252F91 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x127 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x14D SWAP2 SWAP1 PUSH3 0x160 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x192 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x18B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x421E PUSH3 0x21D PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x15B ADD MSTORE DUP2 DUP2 PUSH2 0x159E ADD MSTORE PUSH2 0x20EA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C0 ADD MSTORE DUP2 DUP2 PUSH2 0x1033 ADD MSTORE DUP2 DUP2 PUSH2 0x1848 ADD MSTORE DUP2 DUP2 PUSH2 0x1943 ADD MSTORE DUP2 DUP2 PUSH2 0x1A10 ADD MSTORE DUP2 DUP2 PUSH2 0x1BA4 ADD MSTORE DUP2 DUP2 PUSH2 0x1C9F ADD MSTORE DUP2 DUP2 PUSH2 0x1D4A ADD MSTORE DUP2 DUP2 PUSH2 0x1DF0 ADD MSTORE DUP2 DUP2 PUSH2 0x1F02 ADD MSTORE DUP2 DUP2 PUSH2 0x30F4 ADD MSTORE PUSH2 0x319A ADD MSTORE PUSH1 0x0 PUSH2 0x11C ADD MSTORE PUSH2 0x421E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x663B8FDB EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x7A0C7B21 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0xA80DEDA3 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0xAE093F3F EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0xFC9914CB EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDBD616D EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x1BCD8FC0 EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x2954018C EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x4B2F336D EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x4C472FC9 EQ PUSH2 0x17D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x38F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x100A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A07 JUMP JUMPDEST PUSH2 0x10A PUSH2 0x1842 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A16 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x13E PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x19EC JUMP JUMPDEST PUSH2 0x198 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x1AE PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3CDD JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1F5 PUSH2 0x1F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1D43 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D3F JUMP JUMPDEST PUSH2 0x215 PUSH2 0x210 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D94 JUMP JUMPDEST PUSH2 0x235 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x30D0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x24D PUSH2 0x34D6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x25E DUP9 PUSH2 0x318E JUMP JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH1 0x0 DUP6 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x2E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0xFF DUP8 AND PUSH2 0x220 DUP10 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x20 DUP12 ADD MSTORE DUP12 DUP2 AND PUSH1 0x60 DUP12 ADD MSTORE DUP3 AND DUP10 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 SUB PUSH2 0x71A JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E3 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x456 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x534 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x531 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x540 JUMPI PUSH2 0x160 DUP9 ADD MSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x5A9 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x5A6 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x5B5 JUMPI PUSH2 0x180 DUP9 ADD MSTORE JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x132C653F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x996329F8 SWAP1 PUSH1 0x64 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x62C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x629 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DED JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x63E JUMPI POP POP ISZERO ISZERO PUSH2 0x1A0 DUP11 ADD MSTORE POP POP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1AFBB7A4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x67C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6A0 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x710 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x8DF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x758 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x77C SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7EE SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST POP PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x83A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x85E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8CE SWAP2 SWAP1 PUSH2 0x3E51 JUMP JUMPDEST PUSH1 0xC0 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x953 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x9B5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9B5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA19 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP10 AND EQ PUSH2 0xA93 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA8E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xAF5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0xB71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB6C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xBDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D1473B3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB451CECC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x240 DUP11 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBFA JUMPI PUSH2 0xBFA PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC4C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0xC18 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF26 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP1 DUP4 SHL SWAP1 PUSH1 0xFF DUP13 AND SWAP1 SUB PUSH2 0xD87 JUMPI PUSH1 0x40 MLOAD PUSH4 0x57853281 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE DUP11 AND SWAP1 PUSH4 0xAF0A6502 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCDF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD03 SWAP2 SWAP1 PUSH2 0x3E95 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xED8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDEF SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE JUMPDEST PUSH2 0x240 DUP13 ADD MLOAD DUP2 AND ISZERO PUSH2 0xEEC JUMPI PUSH1 0x1 PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 JUMPDEST ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x140 DUP13 ADD MLOAD DUP1 MLOAD DUP4 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0xF11 JUMPI PUSH2 0xF11 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xC56 JUMP JUMPDEST POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D11A15 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF89 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP10 PUSH2 0x1E0 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x200 DUP11 ADD MSTORE POP SWAP7 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1012 PUSH2 0x3593 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x107C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10A0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x10BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A709647 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 DUP4 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFE14112D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP6 SWAP3 SWAP2 PUSH4 0xFE14112D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1107 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x112B SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEF8D9603 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xE0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C19386C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1248 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x126C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x100 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12D8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1320 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1344 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0x80 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x138B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13AF SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x140 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x141B SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x36DDA7D5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1476 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149A SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1519 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE941FA78 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1561 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1585 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH32 0x0 DUP3 AND EQ PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH4 0x609AE317 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 MLOAD SWAP2 DUP5 AND SWAP3 PUSH4 0x609AE317 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1601 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1625 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1C0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDBCB313B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x166D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1691 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1A0 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1703 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA84F927 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x5427C938 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x174E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1772 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x17BD JUMPI PUSH2 0x180 DUP6 ADD MLOAD DUP2 SWAP1 PUSH2 0x17AE SWAP1 PUSH2 0x1792 SWAP1 PUSH2 0x2710 PUSH2 0x3F72 JUMP JUMPDEST DUP8 PUSH2 0x100 ADD MLOAD DUP9 PUSH2 0x140 ADD MLOAD PUSH2 0x17A8 SWAP2 SWAP1 PUSH2 0x3F85 JUMP JUMPDEST SWAP1 PUSH2 0x3402 JUMP JUMPDEST PUSH2 0x17B8 SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD JUMPDEST DUP6 PUSH2 0x120 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x180C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1830 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x1E0 DUP7 ADD MSTORE POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB4AC6860 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18C8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18E3 JUMPI PUSH2 0x18E3 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x191C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1909 PUSH2 0x3593 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1901 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x15895F47 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xAC4AFA38 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1992 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19B6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x19C1 DUP2 PUSH2 0x100A JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x19D3 JUMPI PUSH2 0x19D3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1922 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x1A98 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1AA6 DUP8 PUSH2 0x318E JUMP JUMPDEST POP POP SWAP4 POP SWAP4 POP POP SWAP3 POP DUP3 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x1B29 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B24 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B93 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C24 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C3F JUMPI PUSH2 0x1C3F PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C78 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1C65 PUSH2 0x3630 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1C5D JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D12 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D1D DUP2 PUSH2 0x1FC5 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1D2F JUMPI PUSH2 0x1D2F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1C7E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DCA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E84 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E63 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E6F DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1E7B JUMPI DUP4 PUSH1 0x1 ADD SWAP4 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1DCF JUMP JUMPDEST POP DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1E9E JUMPI PUSH2 0x1E9E PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1ED7 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1EC4 PUSH2 0x34D6 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1EBC JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F75 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F81 DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1FB4 JUMPI PUSH2 0x1F90 DUP2 DUP8 PUSH2 0x245 JUMP JUMPDEST DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1FA2 JUMPI PUSH2 0x1FA2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1EE1 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FCD PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1FDF DUP9 PUSH2 0x318E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 AND DUP14 MSTORE PUSH1 0xFF DUP7 AND PUSH2 0x1A0 DUP15 ADD DUP2 SWAP1 MSTORE SWAP6 SWAP12 POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH1 0x1 EQ PUSH2 0x2074 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x206F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x20D6 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20D6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP10 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 SWAP1 SWAP2 AND EQ PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP9 AND EQ PUSH2 0x2186 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x215D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2181 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x21E8 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21E8 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x40 DUP12 DUP2 ADD DUP3 SWAP1 MSTORE MLOAD PUSH4 0x2E97CA21 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH4 0x2E97CA21 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x45D31F9D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x45D31F9D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22CB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP9 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2312 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2336 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE POP PUSH1 0xFF DUP7 AND PUSH1 0x1 SUB PUSH2 0x241F JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9B2CB5D8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2386 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23AA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5F48F393 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2415 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH2 0x2497 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x860AEFCF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2480 SWAP2 SWAP1 PUSH2 0x3FDD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0xE0 DUP11 ADD MSTORE AND PUSH1 0xC0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x250B JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2506 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x256D JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2549 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x256D SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2588 JUMPI PUSH2 0x2588 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP10 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25D1 JUMPI PUSH2 0x25D1 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25FA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x180 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x280F JUMPI DUP8 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x273F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F2F9713 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5E5F2E26 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x265F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2683 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x269D JUMPI PUSH2 0x269D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF064E87 PUSH1 0xE3 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0x78327438 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2716 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP11 PUSH2 0x180 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x272D JUMPI PUSH2 0x272D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP PUSH2 0x2807 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2783 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A7 SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST DUP1 PUSH2 0xFFFF AND SWAP1 POP DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x27C5 JUMPI PUSH2 0x27C5 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH2 0x180 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27E3 JUMPI PUSH2 0x27E3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2604 JUMP JUMPDEST POP POP DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2A1E JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x50E036FF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x285C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2880 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x289B JUMPI PUSH2 0x289B PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x28E0 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x28B9 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A17 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5094CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5094CB4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x293A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x295E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 DUP4 MSTORE SWAP3 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 DUP11 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP11 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A03 JUMPI PUSH2 0x2A03 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x28EA JUMP JUMPDEST POP POP PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x373C8F62 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2A86 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AA4 JUMPI PUSH2 0x2AA4 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2AE9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2AC2 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2BE6 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B0F JUMPI PUSH2 0x2B0F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFDD57645 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B6E SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BAF SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP12 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BD2 JUMPI PUSH2 0x2BD2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2AF3 JUMP JUMPDEST POP POP POP JUMPDEST DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2DC3 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB2C53A6C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C57 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0xFF PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5E0B63D3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x5E0B63D3 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CCE SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2A0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D41 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2C0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DB4 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2E0 DUP9 ADD MSTORE PUSH2 0x30C5 JUMP JUMPDEST DUP2 DUP8 PUSH2 0x1C0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E44 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x1E0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9408B63F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EC4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x220 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCFF0AB96 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F44 SWAP2 SWAP1 PUSH2 0x40CC JUMP JUMPDEST POP POP ISZERO ISZERO PUSH2 0x240 DUP10 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x9FD12B77 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9FD12B77 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FB8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH2 0x260 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8345F26E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3000 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3024 SWAP2 SWAP1 PUSH2 0x412C JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x4D78E9AD PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9AF1D35A SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3096 SWAP2 SWAP1 PUSH2 0x414F JUMP JUMPDEST PUSH2 0xFFFF SWAP1 DUP2 AND PUSH2 0x320 DUP14 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x300 DUP13 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2E0 DUP12 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2C0 DUP11 ADD MSTORE AND PUSH2 0x2A0 DUP9 ADD MSTORE JUMPDEST POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x313B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x315F SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x317C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3186 DUP5 DUP5 PUSH2 0x3455 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FBC6F6B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x31F3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3210 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3234 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x3251 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x328F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32B3 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP7 POP DUP7 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x332C JUMPI DUP8 SWAP6 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF93F515B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3301 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3325 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP5 POP PUSH2 0x33F8 JUMP JUMPDEST DUP8 SWAP4 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F7A1881 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x336D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3391 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP3 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33F5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x340F JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x341C JUMPI POP PUSH1 0x0 PUSH2 0x344F JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x342A PUSH1 0x2 DUP3 PUSH2 0x41B4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x3438 DUP5 DUP7 PUSH2 0x3F85 JUMP JUMPDEST PUSH2 0x3442 SWAP2 SWAP1 PUSH2 0x41D5 JUMP JUMPDEST PUSH2 0x344C SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x55EE9B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP6 AND SWAP1 PUSH4 0x55EE9B5 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34C4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x200 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x340 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x220 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x240 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x260 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x280 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x300 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x320 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x372E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3739 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3749 DUP2 PUSH2 0x3703 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 MSTORE DUP4 DUP2 ADD MLOAD DUP5 DUP10 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP9 ADD MSTORE PUSH1 0x80 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3768 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x260 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x37E8 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x37FC PUSH1 0x40 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3817 PUSH1 0x60 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3832 PUSH1 0x80 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3881 DUP4 DUP8 ADD DUP3 PUSH2 0x3754 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x38B1 DUP3 DUP8 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1E0 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x200 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x220 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 SWAP3 DUP4 ADD MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x37BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x391A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x394C PUSH1 0x20 DUP5 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x3967 PUSH1 0x40 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x3982 PUSH1 0x60 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP2 DUP2 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1C0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1E0 SWAP1 DUP2 ADD MLOAD PUSH1 0xFF AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x200 DUP2 ADD PUSH2 0x344F DUP3 DUP5 PUSH2 0x392C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A59 JUMPI PUSH2 0x3A45 DUP4 DUP6 MLOAD PUSH2 0x392C JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 PUSH2 0x200 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3A32 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP10 MSTORE SWAP1 DUP5 ADD MLOAD AND DUP4 DUP9 ADD MSTORE PUSH1 0x40 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AFA JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x340 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3B42 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3B5D PUSH1 0x40 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3B71 PUSH1 0x60 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3B85 PUSH1 0x80 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3BD4 DUP4 DUP8 ADD DUP3 PUSH2 0x3A65 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3BF0 DUP4 DUP3 PUSH2 0x3A9E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3C0C DUP4 DUP3 PUSH2 0x3AE6 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x3C25 DUP3 DUP8 ADD DUP3 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x200 DUP1 DUP6 ADD MLOAD ISZERO ISZERO SWAP1 DUP7 ADD MSTORE PUSH2 0x220 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 DUP1 DUP5 ADD MLOAD ISZERO ISZERO SWAP1 DUP6 ADD MSTORE PUSH2 0x260 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x280 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x2A0 DUP1 DUP5 ADD MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x2E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x300 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x320 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D20 DUP6 DUP4 MLOAD PUSH2 0x3B16 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D04 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D82 DUP6 DUP4 MLOAD PUSH2 0x37BC JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D66 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3B16 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3DB2 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3E05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP4 MLOAD PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x80 SWAP1 SWAP8 ADD MLOAD SWAP3 SWAP9 SWAP2 SWAP8 POP SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3EAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x3EB6 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x60 SWAP1 SWAP8 ADD MLOAD SWAP2 SWAP9 SWAP1 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x344C DUP3 PUSH2 0x3ED4 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x3F2F DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3FC1 JUMPI PUSH2 0x3FC1 PUSH2 0x3F9C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FF9 DUP4 PUSH2 0x3FC6 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3FC6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x401A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4046 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x4058 JUMPI PUSH2 0x4058 PUSH2 0x3E7F JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR ISZERO PUSH2 0x407D JUMPI PUSH2 0x407D PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 DUP3 MSTORE DUP5 DUP3 ADD SWAP3 POP DUP4 DUP2 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x409B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x40C0 JUMPI PUSH2 0x40B1 DUP6 PUSH2 0x3DA7 JUMP JUMPDEST DUP5 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x40A0 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x40E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40EB DUP6 PUSH2 0x3FC6 JUMP JUMPDEST SWAP4 POP PUSH2 0x40F9 PUSH1 0x20 DUP7 ADD PUSH2 0x3ED4 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x4121 PUSH1 0x60 DUP7 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x413E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4170 DUP7 PUSH2 0x3EFF JUMP JUMPDEST SWAP5 POP PUSH2 0x417E PUSH1 0x20 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP4 POP PUSH2 0x418C PUSH1 0x40 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP3 POP PUSH2 0x419A PUSH1 0x60 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP2 POP PUSH2 0x41A8 PUSH1 0x80 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 AND DUP1 PUSH2 0x41C9 JUMPI PUSH2 0x41C9 PUSH2 0x3F9C JUMP JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0xDB DIV 0xDD PUSH11 0xD85CBB23C61A3C1DF229CD 0xEE 0x23 SWAP6 EXP STATICCALL 0xE SWAP4 0xD1 SWAP2 LOG4 0xE6 0xC OR RETURNDATASIZE 0xE7 SWAP7 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "1496:17729:17:-:0;;;2469:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2521:30:17;;2517:65;;2560:22;;-1:-1:-1;;;2560:22:17;;;;;;;;;;;2517:65;-1:-1:-1;;;;;2593:51:17;;;;;;2705:38;;;-1:-1:-1;;;2705:38:17;;;;:36;;:38;;;;;;;;;;;;;;;2593:51;2705:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2654:99:17;;;-1:-1:-1;;;;;2654:99:17;;;;;2775:15;;-1:-1:-1;;;;;2775:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2763:42:17;;;-1:-1:-1;1496:17729:17;;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;:::-;1496:17729:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@WETHToken_3170": { - "entryPoint": null, - "id": 3170, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_hasOpenedCreditAccount_4642": { - "entryPoint": 13397, - "id": 4642, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@addressProvider_3163": { - "entryPoint": null, - "id": 3163, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@contractsRegister_3167": { - "entryPoint": null, - "id": 3167, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@getAdapter_4619": { - "entryPoint": 6636, - "id": 4619, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@getCreditAccountData_3793": { - "entryPoint": 581, - "id": 3793, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@getCreditAccountList_3341": { - "entryPoint": 7491, - "id": 3341, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getCreditContracts_4722": { - "entryPoint": 12686, - "id": 4722, - "parameterSlots": 1, - "returnSlots": 6 - }, - "@getCreditManagerData_4332": { - "entryPoint": 8133, - "id": 4332, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getCreditManagersList_3845": { - "entryPoint": 7070, - "id": 3845, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getPoolData_4525": { - "entryPoint": 4106, - "id": 4525, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getPoolsList_4577": { - "entryPoint": 6210, - "id": 4577, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@hasOpenedCreditAccount_3360": { - "entryPoint": 12496, - "id": 3360, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@percentMul_14435": { - "entryPoint": 13314, - "id": 14435, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@version_3173": { - "entryPoint": null, - "id": 3173, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 15783, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_bool_fromMemory": { - "entryPoint": 16084, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 14600, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 15799, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 14107, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint16_fromMemory": { - "entryPoint": 16145, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_uint256t_uint256_fromMemory": { - "entryPoint": 16021, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory": { - "entryPoint": 16391, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 16100, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_ICreditFilter_$13277_fromMemory": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint128t_boolt_uint40t_uint16_fromMemory": { - "entryPoint": 16588, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint128t_uint128_fromMemory": { - "entryPoint": 16349, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16_fromMemory": { - "entryPoint": 16719, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 15828, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_uint256_fromMemory": { - "entryPoint": 15917, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory": { - "entryPoint": 15953, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory": { - "entryPoint": 15853, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint8_fromMemory": { - "entryPoint": 16684, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint128_fromMemory": { - "entryPoint": 16326, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_uint16_fromMemory": { - "entryPoint": 16127, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_array_address_dyn": { - "entryPoint": 14949, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_struct_ContractAdapter_dyn": { - "entryPoint": 15006, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_struct_TokenBalance_dyn": { - "entryPoint": 14164, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_uint256_dyn": { - "entryPoint": 15078, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_bool": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_struct_CreditAccountData": { - "entryPoint": 14268, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_struct_CreditManagerData": { - "entryPoint": 15126, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_struct_PoolData": { - "entryPoint": 14636, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 15679, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 15581, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 14870, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_CreditAccountData_$14533_memory_ptr__to_t_struct$_CreditAccountData_$14533_memory_ptr__fromStack_reversed": { - "entryPoint": 14581, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_CreditManagerData_$14590_memory_ptr__to_t_struct$_CreditManagerData_$14590_memory_ptr__fromStack_reversed": { - "entryPoint": 15764, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_PoolData_$14623_memory_ptr__to_t_struct$_PoolData_$14623_memory_ptr__fromStack_reversed": { - "entryPoint": 14855, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_uint16": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_uint8": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "checked_add_t_uint256": { - "entryPoint": 16853, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint16": { - "entryPoint": 16820, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 16306, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 16261, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 16242, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 16220, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x12": { - "entryPoint": 16284, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 16198, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 15999, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 14083, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:22648:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "59:86:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "82:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "108:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "113:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "104:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "117:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "100:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "89:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "89:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "79:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "79:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "72:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "72:50:70" - }, - "nodeType": "YulIf", - "src": "69:70:70" - } - ] - }, - "name": "validator_revert_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "48:5:70", - "type": "" - } - ], - "src": "14:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "237:301:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "283:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "292:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "295:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "285:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "285:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "285:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "258:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "267:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "254:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "254:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "279:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "250:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "250:32:70" - }, - "nodeType": "YulIf", - "src": "247:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "308:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "334:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "321:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "321:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "312:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "378:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "353:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "353:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "353:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "393:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "403:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "393:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "417:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "449:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "460:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "445:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "445:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "432:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "432:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "421:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "498:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "473:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "473:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "473:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "515:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "525:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "515:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "195:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "206:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "218:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "226:6:70", - "type": "" - } - ], - "src": "150:388:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "587:60:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "604:3:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "613:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "628:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "633:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "624:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "624:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "620:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "620:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "609:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "609:31:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "597:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "597:44:70" - }, - "nodeType": "YulExpressionStatement", - "src": "597:44:70" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "571:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "578:3:70", - "type": "" - } - ], - "src": "543:104:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "693:50:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "710:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "729:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "722:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "722:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "715:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "715:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "703:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "703:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "703:34:70" - } - ] - }, - "name": "abi_encode_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "677:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "684:3:70", - "type": "" - } - ], - "src": "652:91:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "821:679:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "831:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "851:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "845:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "845:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "835:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "873:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "878:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "866:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "866:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "866:19:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "894:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "904:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "898:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "917:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "928:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "933:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "924:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "924:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "917:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "945:28:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "963:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "970:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "959:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "959:14:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "949:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "982:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "991:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "986:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1050:425:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1064:23:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1080:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1074:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1074:13:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1068:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1107:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1122:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1116:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1116:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1135:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1140:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1131:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1131:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1144:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1127:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1127:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1112:35:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1100:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1100:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1100:48:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1172:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1177:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1168:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1168:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1192:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1196:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1188:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1188:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1182:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1182:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1161:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1161:40:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1161:40:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1214:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1224:4:70", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1218:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1252:3:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1257:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1248:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1248:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1286:2:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1290:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1282:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1282:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1276:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1276:18:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1269:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1269:26:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1262:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1262:34:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1241:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1241:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1241:56:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1310:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1320:4:70", - "type": "", - "value": "0x60" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1314:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1348:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1353:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1344:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1344:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1382:2:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1386:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1378:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1378:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1372:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1372:18:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1365:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1365:26:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1358:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1358:34:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1337:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1337:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1337:56:70" - }, - { - "nodeType": "YulAssignment", - "src": "1406:21:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1417:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1422:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1413:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1413:14:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1406:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1440:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1454:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1462:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1450:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1450:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1440:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1012:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1015:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1009:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1009:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1023:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1025:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1034:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1037:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1030:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1030:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1025:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1005:3:70", - "statements": [] - }, - "src": "1001:474:70" - }, - { - "nodeType": "YulAssignment", - "src": "1484:10:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1491:3:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1484:3:70" - } - ] - } - ] - }, - "name": "abi_encode_array_struct_TokenBalance_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "798:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "805:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "813:3:70", - "type": "" - } - ], - "src": "748:752:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1547:33:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1556:3:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1565:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1572:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1561:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1561:16:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1549:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1549:29:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1549:29:70" - } - ] - }, - "name": "abi_encode_uint8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1531:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1538:3:70", - "type": "" - } - ], - "src": "1505:75:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1653:1800:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1663:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1673:6:70", - "type": "", - "value": "0x0260" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1667:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1713:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1707:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1707:12:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1721:3:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "1688:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1688:37:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1688:37:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1734:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1764:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1771:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1760:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1760:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1754:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1754:23:70" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "1738:12:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "1805:12:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1823:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1828:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1819:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1819:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "1786:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1786:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1786:48:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1843:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1875:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1882:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1871:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1871:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1865:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1865:23:70" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "1847:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "1913:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1933:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1938:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1929:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1929:14:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "1897:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "1897:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1897:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1953:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1985:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1992:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1981:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1981:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1975:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1975:23:70" - }, - "variables": [ - { - "name": "memberValue0_2", - "nodeType": "YulTypedName", - "src": "1957:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_2", - "nodeType": "YulIdentifier", - "src": "2026:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2046:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2051:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2042:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2042:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "2007:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2007:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2007:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2066:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2098:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2105:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2094:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2094:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2088:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2088:23:70" - }, - "variables": [ - { - "name": "memberValue0_3", - "nodeType": "YulTypedName", - "src": "2070:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_3", - "nodeType": "YulIdentifier", - "src": "2139:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2159:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2164:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2155:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2155:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "2120:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2120:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2120:50:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2190:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2195:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2186:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2186:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2212:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2219:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2208:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2208:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2202:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2202:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2179:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2179:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2179:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2246:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2251:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2242:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2242:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2268:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2275:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2264:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2264:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2258:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2258:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2235:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2235:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2235:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2302:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2307:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2298:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2298:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2324:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2331:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2320:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2320:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2314:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2314:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2291:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2291:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2291:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2347:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2357:6:70", - "type": "", - "value": "0x0100" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2351:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2383:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2388:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2379:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2379:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2403:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2410:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2399:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2399:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2393:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2393:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2372:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2372:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2372:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2424:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2434:6:70", - "type": "", - "value": "0x0120" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2428:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2460:3:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2465:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2456:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2456:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2480:5:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2487:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2476:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2476:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2470:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2470:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2449:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2449:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2449:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2501:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2511:6:70", - "type": "", - "value": "0x0140" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "2505:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2526:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2558:5:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2565:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2554:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2548:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2548:21:70" - }, - "variables": [ - { - "name": "memberValue0_4", - "nodeType": "YulTypedName", - "src": "2530:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2589:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2594:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2585:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2585:12:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2599:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2578:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2578:24:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2578:24:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2611:82:70", - "value": { - "arguments": [ - { - "name": "memberValue0_4", - "nodeType": "YulIdentifier", - "src": "2664:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2684:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2689:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2680:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2680:12:70" - } - ], - "functionName": { - "name": "abi_encode_array_struct_TokenBalance_dyn", - "nodeType": "YulIdentifier", - "src": "2623:40:70" - }, - "nodeType": "YulFunctionCall", - "src": "2623:70:70" - }, - "variables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2615:4:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2702:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2712:6:70", - "type": "", - "value": "0x0160" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "2706:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2738:3:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2743:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2734:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2734:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2758:5:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2765:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2754:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2754:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2748:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2748:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2727:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2727:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2727:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2779:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2789:6:70", - "type": "", - "value": "0x0180" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "2783:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2815:3:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2820:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2811:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2811:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2835:5:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2842:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2831:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2831:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2825:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2825:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2804:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2804:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2804:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2856:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2866:6:70", - "type": "", - "value": "0x01a0" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "2860:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2881:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2913:5:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2920:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2909:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2909:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2903:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2903:21:70" - }, - "variables": [ - { - "name": "memberValue0_5", - "nodeType": "YulTypedName", - "src": "2885:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_5", - "nodeType": "YulIdentifier", - "src": "2949:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2969:3:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2974:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2965:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2965:12:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "2933:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "2933:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2933:45:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2987:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2997:6:70", - "type": "", - "value": "0x01c0" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "2991:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3023:3:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "3028:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3019:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3019:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3043:5:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "3050:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3039:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3039:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3033:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3033:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3012:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3012:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3012:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3064:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3074:6:70", - "type": "", - "value": "0x01e0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "3068:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3100:3:70" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "3105:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3096:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3096:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3120:5:70" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "3127:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3116:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3116:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3110:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3110:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3089:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3089:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3089:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3141:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3152:6:70", - "type": "", - "value": "0x0200" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "3145:3:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3178:3:70" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "3183:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3174:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3174:13:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3199:5:70" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "3206:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3195:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3189:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3189:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3167:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3167:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3167:45:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3221:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3232:6:70", - "type": "", - "value": "0x0220" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "3225:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3247:44:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3279:5:70" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3286:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3275:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3275:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3269:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3269:22:70" - }, - "variables": [ - { - "name": "memberValue0_6", - "nodeType": "YulTypedName", - "src": "3251:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_6", - "nodeType": "YulIdentifier", - "src": "3317:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3337:3:70" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3342:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3333:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3333:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint8", - "nodeType": "YulIdentifier", - "src": "3300:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "3300:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3300:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3356:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3367:6:70", - "type": "", - "value": "0x0240" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "3360:3:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3393:3:70" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3398:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3389:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3389:13:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3414:5:70" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3421:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3410:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3410:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3404:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3404:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3382:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3382:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3382:45:70" - }, - { - "nodeType": "YulAssignment", - "src": "3436:11:70", - "value": { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3443:4:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3436:3:70" - } - ] - } - ] - }, - "name": "abi_encode_struct_CreditAccountData", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1630:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1637:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1645:3:70", - "type": "" - } - ], - "src": "1585:1868:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3631:117:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3648:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3659:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3641:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3641:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3641:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "3671:71:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3715:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3727:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3738:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3723:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3723:18:70" - } - ], - "functionName": { - "name": "abi_encode_struct_CreditAccountData", - "nodeType": "YulIdentifier", - "src": "3679:35:70" - }, - "nodeType": "YulFunctionCall", - "src": "3679:63:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3671:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_struct$_CreditAccountData_$14533_memory_ptr__to_t_struct$_CreditAccountData_$14533_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3600:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3611:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3622:4:70", - "type": "" - } - ], - "src": "3458:290:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3823:177:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3869:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3878:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3881:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3871:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3871:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3871:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3844:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3853:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3840:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3840:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3865:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3836:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3836:32:70" - }, - "nodeType": "YulIf", - "src": "3833:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3894:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3920:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3907:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3907:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3898:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3964:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3939:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3939:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3939:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "3979:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3989:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3979:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3789:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3800:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3812:6:70", - "type": "" - } - ], - "src": "3753:247:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4057:1280:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4092:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4086:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4086:12:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4100:3:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "4067:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4067:37:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4067:37:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4113:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4143:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4150:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4139:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4139:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4133:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4133:23:70" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "4117:12:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "4181:12:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4199:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4204:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4195:14:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "4165:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "4165:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4165:45:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4219:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4251:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4258:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4247:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4247:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4241:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4241:23:70" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "4223:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "4292:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4312:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4317:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4308:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4308:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "4273:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4273:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4273:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4332:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4364:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4371:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4360:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4360:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4354:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4354:23:70" - }, - "variables": [ - { - "name": "memberValue0_2", - "nodeType": "YulTypedName", - "src": "4336:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_2", - "nodeType": "YulIdentifier", - "src": "4405:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4425:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4430:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4421:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4421:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "4386:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4386:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4386:50:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4456:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4461:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4452:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4452:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4478:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4485:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4474:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4474:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4468:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4468:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4445:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4445:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4445:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4512:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4517:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4508:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4508:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4534:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4541:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4530:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4530:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4524:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4524:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4501:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4501:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4501:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4568:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4573:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4564:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4564:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4590:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4597:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4586:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4586:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4580:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4580:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4557:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4557:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4557:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4624:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4629:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4620:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4620:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4646:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4653:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4642:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4642:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4636:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4636:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4613:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4613:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4613:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4669:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4679:6:70", - "type": "", - "value": "0x0100" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4673:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4705:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4710:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4701:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4701:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4725:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4732:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4721:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4721:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4715:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4715:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4694:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4694:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4694:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4746:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4756:6:70", - "type": "", - "value": "0x0120" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "4750:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4782:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4787:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4778:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4778:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4802:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4809:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4798:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4798:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4792:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4792:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4771:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4771:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4771:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4823:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4833:6:70", - "type": "", - "value": "0x0140" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "4827:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4859:3:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4864:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4855:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4855:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4879:5:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4886:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4875:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4875:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4869:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4869:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4848:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4848:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4848:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4900:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4910:6:70", - "type": "", - "value": "0x0160" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "4904:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4936:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4941:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4932:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4932:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4956:5:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4963:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4952:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4952:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4946:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4946:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4925:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4925:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4925:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4977:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4987:6:70", - "type": "", - "value": "0x0180" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "4981:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5013:3:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5018:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5009:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5009:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5033:5:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5040:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5029:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5029:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5023:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5023:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5002:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5002:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5002:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5054:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5064:6:70", - "type": "", - "value": "0x01a0" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "5058:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5090:3:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5095:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5086:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5086:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5110:5:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5117:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5106:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5106:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5100:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5100:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5079:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5079:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5079:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5131:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5141:6:70", - "type": "", - "value": "0x01c0" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "5135:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5167:3:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "5172:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5163:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5163:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5187:5:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "5194:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5183:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5183:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5177:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5177:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5156:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5156:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5156:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5208:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5218:6:70", - "type": "", - "value": "0x01e0" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "5212:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5233:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5265:5:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "5272:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5261:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5261:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5255:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5255:21:70" - }, - "variables": [ - { - "name": "memberValue0_3", - "nodeType": "YulTypedName", - "src": "5237:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_3", - "nodeType": "YulIdentifier", - "src": "5302:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5322:3:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "5327:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5318:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5318:12:70" - } - ], - "functionName": { - "name": "abi_encode_uint8", - "nodeType": "YulIdentifier", - "src": "5285:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "5285:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5285:46:70" - } - ] - }, - "name": "abi_encode_struct_PoolData", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4041:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "4048:3:70", - "type": "" - } - ], - "src": "4005:1332:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5497:97:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5507:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5519:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5530:3:70", - "type": "", - "value": "512" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5515:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5515:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5507:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5570:6:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5578:9:70" - } - ], - "functionName": { - "name": "abi_encode_struct_PoolData", - "nodeType": "YulIdentifier", - "src": "5543:26:70" - }, - "nodeType": "YulFunctionCall", - "src": "5543:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5543:45:70" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_PoolData_$14623_memory_ptr__to_t_struct$_PoolData_$14623_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5466:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5477:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5488:4:70", - "type": "" - } - ], - "src": "5342:252:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5804:505:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5814:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5824:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "5818:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5835:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5853:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5864:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5849:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5849:18:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "5839:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5883:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5894:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5876:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5876:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5876:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5906:17:70", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "5917:6:70" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5910:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5932:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5952:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5946:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5946:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "5936:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "5975:6:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5983:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5968:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5968:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5968:22:70" - }, - { - "nodeType": "YulAssignment", - "src": "5999:25:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6010:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6021:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6006:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6006:18:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5999:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6033:29:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6051:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6059:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6047:15:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "6037:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6071:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6080:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "6075:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6139:144:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "6186:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "6180:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "6180:13:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6195:3:70" - } - ], - "functionName": { - "name": "abi_encode_struct_PoolData", - "nodeType": "YulIdentifier", - "src": "6153:26:70" - }, - "nodeType": "YulFunctionCall", - "src": "6153:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6153:46:70" - }, - { - "nodeType": "YulAssignment", - "src": "6212:23:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6223:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6228:6:70", - "type": "", - "value": "0x0200" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6219:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6219:16:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6212:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6248:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "6262:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6270:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6258:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6258:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "6248:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "6101:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6104:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "6098:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6098:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "6112:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6114:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "6123:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6126:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6119:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6119:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "6114:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "6094:3:70", - "statements": [] - }, - "src": "6090:193:70" - }, - { - "nodeType": "YulAssignment", - "src": "6292:11:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6300:3:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6292:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5773:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5784:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5795:4:70", - "type": "" - } - ], - "src": "5599:710:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6439:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6449:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6461:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6472:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6457:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6457:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6449:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6491:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6506:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6522:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6527:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6518:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6518:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6531:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6514:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6514:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6502:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6484:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6484:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6484:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6408:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6419:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6430:4:70", - "type": "" - } - ], - "src": "6314:227:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6647:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6657:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6669:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6680:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6665:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6665:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6657:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6699:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6714:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6730:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6735:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6726:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6726:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6739:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6722:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6722:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6710:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6710:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6692:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6692:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6692:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6616:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6627:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6638:4:70", - "type": "" - } - ], - "src": "6546:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6855:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6865:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6877:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6888:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6873:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6873:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6865:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6907:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6918:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6900:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6900:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6900:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6824:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6835:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6846:4:70", - "type": "" - } - ], - "src": "6754:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6997:400:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7007:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7027:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7021:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7021:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7011:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7049:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7054:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7042:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7042:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7042:19:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7070:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7080:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7074:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7093:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7104:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7109:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7100:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7093:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7121:28:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7139:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7146:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7135:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7135:14:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "7125:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7158:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7167:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "7162:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7226:146:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7247:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7262:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7256:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7256:13:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7279:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7284:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7275:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7275:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7288:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7271:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7271:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7252:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7252:39:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7240:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7240:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7240:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "7305:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7316:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7321:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7312:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7312:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7305:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7337:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7351:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7359:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7347:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7347:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7337:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7188:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7191:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "7185:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "7185:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "7199:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7201:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7210:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7213:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7206:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7206:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7201:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "7181:3:70", - "statements": [] - }, - "src": "7177:195:70" - }, - { - "nodeType": "YulAssignment", - "src": "7381:10:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7388:3:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7381:3:70" - } - ] - } - ] - }, - "name": "abi_encode_array_address_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6974:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "6981:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "6989:3:70", - "type": "" - } - ], - "src": "6936:461:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7478:521:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7488:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7508:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7502:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7502:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7492:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7530:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7535:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7523:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7523:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7523:19:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7551:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7561:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7555:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7574:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7585:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7590:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7581:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7581:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7574:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7602:28:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7620:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7627:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7616:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7616:14:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "7606:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7639:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7648:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "7643:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7707:267:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7721:23:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7737:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7731:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7731:13:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "7725:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7757:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7775:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7780:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7771:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7771:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7784:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7767:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7767:19:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "7761:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7806:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7821:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7815:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7815:9:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "7826:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7811:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7811:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7799:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7799:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7799:31:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7854:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7859:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7850:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7850:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7878:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7882:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7874:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7874:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7868:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7868:18:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "7888:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7864:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7864:27:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7843:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7843:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7843:49:70" - }, - { - "nodeType": "YulAssignment", - "src": "7905:21:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7916:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7921:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7912:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7912:14:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7905:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7939:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7953:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7961:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7949:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7949:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "7939:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7669:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7672:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "7666:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "7666:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "7680:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7682:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7691:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7694:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7687:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7687:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7682:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "7662:3:70", - "statements": [] - }, - "src": "7658:316:70" - }, - { - "nodeType": "YulAssignment", - "src": "7983:10:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7990:3:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7983:3:70" - } - ] - } - ] - }, - "name": "abi_encode_array_struct_ContractAdapter_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7455:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7462:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7470:3:70", - "type": "" - } - ], - "src": "7402:597:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8065:374:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8075:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8095:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8089:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8089:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8079:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8117:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8122:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8110:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8110:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8110:19:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8138:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8148:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "8142:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8161:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8172:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8177:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8168:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8168:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8161:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8189:28:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8207:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8214:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8203:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8203:14:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8193:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8226:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8235:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8230:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8294:120:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8315:3:70" - }, - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8326:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8320:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8320:13:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8308:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8308:26:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8308:26:70" - }, - { - "nodeType": "YulAssignment", - "src": "8347:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8358:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8363:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8354:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8354:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8347:3:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8379:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8393:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8401:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8389:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8389:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8379:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8256:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8259:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8253:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "8253:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8267:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8269:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8278:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8281:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8274:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8274:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8269:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8249:3:70", - "statements": [] - }, - "src": "8245:169:70" - }, - { - "nodeType": "YulAssignment", - "src": "8423:10:70", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8430:3:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "8423:3:70" - } - ] - } - ] - }, - "name": "abi_encode_array_uint256_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8042:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8049:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "8057:3:70", - "type": "" - } - ], - "src": "8004:435:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8487:47:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8504:3:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8513:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8520:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8509:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8497:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8497:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8497:31:70" - } - ] - }, - "name": "abi_encode_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8471:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8478:3:70", - "type": "" - } - ], - "src": "8444:90:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8607:3180:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8617:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8627:6:70", - "type": "", - "value": "0x0340" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "8621:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8667:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8661:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8661:12:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8675:3:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "8642:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "8642:37:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8642:37:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8688:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8718:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8725:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8714:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8714:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8708:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8708:23:70" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "8692:12:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8759:12:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8777:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8782:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8773:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8773:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "8740:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "8740:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8740:48:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8797:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8829:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8836:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8825:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8825:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8819:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8819:23:70" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "8801:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "8870:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8890:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8895:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8886:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8886:14:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "8851:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "8851:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8851:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8910:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8942:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8949:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8938:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8938:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8932:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "8932:23:70" - }, - "variables": [ - { - "name": "memberValue0_2", - "nodeType": "YulTypedName", - "src": "8914:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_2", - "nodeType": "YulIdentifier", - "src": "8980:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9000:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9005:4:70", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8996:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8996:14:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "8964:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "8964:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8964:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9020:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9052:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9059:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9048:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9048:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9042:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9042:23:70" - }, - "variables": [ - { - "name": "memberValue0_3", - "nodeType": "YulTypedName", - "src": "9024:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_3", - "nodeType": "YulIdentifier", - "src": "9090:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9110:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9115:4:70", - "type": "", - "value": "0x80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9106:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9106:14:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "9074:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "9074:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9074:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9141:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9146:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9137:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9137:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9163:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9170:4:70", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9159:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9159:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9153:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9153:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9130:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9130:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9130:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9197:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9202:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9193:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9193:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9219:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9226:4:70", - "type": "", - "value": "0xc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9215:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9215:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9209:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9209:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9186:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9186:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9186:47:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9253:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9258:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9249:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9249:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9275:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9282:4:70", - "type": "", - "value": "0xe0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9271:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9271:16:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9265:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9265:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9242:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9242:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9242:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9298:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9308:6:70", - "type": "", - "value": "0x0100" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "9302:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9334:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9339:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9330:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9330:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9354:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9361:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9350:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9350:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9344:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9344:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9323:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9323:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9323:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9375:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9385:6:70", - "type": "", - "value": "0x0120" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "9379:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9411:3:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9416:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9407:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9407:12:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9431:5:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9438:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9427:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9427:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9421:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9421:21:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9400:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9400:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9400:43:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9452:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9462:6:70", - "type": "", - "value": "0x0140" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "9456:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9477:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9509:5:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "9516:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9505:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9505:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9499:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9499:21:70" - }, - "variables": [ - { - "name": "memberValue0_4", - "nodeType": "YulTypedName", - "src": "9481:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9540:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "9545:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9536:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9536:12:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "9550:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9529:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9529:24:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9529:24:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9562:70:70", - "value": { - "arguments": [ - { - "name": "memberValue0_4", - "nodeType": "YulIdentifier", - "src": "9603:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9623:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "9628:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9619:12:70" - } - ], - "functionName": { - "name": "abi_encode_array_address_dyn", - "nodeType": "YulIdentifier", - "src": "9574:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "9574:58:70" - }, - "variables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9566:4:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9641:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9651:6:70", - "type": "", - "value": "0x0160" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "9645:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9666:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9698:5:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9705:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9694:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9694:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9688:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9688:21:70" - }, - "variables": [ - { - "name": "memberValue0_5", - "nodeType": "YulTypedName", - "src": "9670:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9729:3:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9734:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9725:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9725:12:70" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9743:4:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9749:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9739:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9739:14:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9718:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9718:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9718:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9763:79:70", - "value": { - "arguments": [ - { - "name": "memberValue0_5", - "nodeType": "YulIdentifier", - "src": "9821:14:70" - }, - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9837:4:70" - } - ], - "functionName": { - "name": "abi_encode_array_struct_ContractAdapter_dyn", - "nodeType": "YulIdentifier", - "src": "9777:43:70" - }, - "nodeType": "YulFunctionCall", - "src": "9777:65:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "9767:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9851:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9861:6:70", - "type": "", - "value": "0x0180" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "9855:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9876:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9908:5:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "9915:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9904:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9904:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9898:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "9898:21:70" - }, - "variables": [ - { - "name": "memberValue0_6", - "nodeType": "YulTypedName", - "src": "9880:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9939:3:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "9944:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9935:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9935:12:70" - }, - { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "9953:6:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9961:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9949:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9949:16:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9928:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9928:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9928:38:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9975:66:70", - "value": { - "arguments": [ - { - "name": "memberValue0_6", - "nodeType": "YulIdentifier", - "src": "10018:14:70" - }, - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "10034:6:70" - } - ], - "functionName": { - "name": "abi_encode_array_uint256_dyn", - "nodeType": "YulIdentifier", - "src": "9989:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "9989:52:70" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "9979:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10050:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10060:6:70", - "type": "", - "value": "0x01a0" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "10054:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10075:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10107:5:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "10114:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10103:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10103:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10097:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10097:21:70" - }, - "variables": [ - { - "name": "memberValue0_7", - "nodeType": "YulTypedName", - "src": "10079:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_7", - "nodeType": "YulIdentifier", - "src": "10144:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10164:3:70" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "10169:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10160:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10160:12:70" - } - ], - "functionName": { - "name": "abi_encode_uint8", - "nodeType": "YulIdentifier", - "src": "10127:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "10127:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10127:46:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10182:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10192:6:70", - "type": "", - "value": "0x01c0" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "10186:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10207:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10239:5:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "10246:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10235:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10229:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10229:21:70" - }, - "variables": [ - { - "name": "memberValue0_8", - "nodeType": "YulTypedName", - "src": "10211:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_8", - "nodeType": "YulIdentifier", - "src": "10278:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10298:3:70" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "10303:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10294:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10294:12:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "10259:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "10259:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10259:48:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10316:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10326:6:70", - "type": "", - "value": "0x01e0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "10320:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10341:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10373:5:70" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "10380:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10369:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10369:14:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10363:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10363:21:70" - }, - "variables": [ - { - "name": "memberValue0_9", - "nodeType": "YulTypedName", - "src": "10345:14:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_9", - "nodeType": "YulIdentifier", - "src": "10412:14:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10432:3:70" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "10437:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10428:12:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "10393:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "10393:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10393:48:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10450:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10461:6:70", - "type": "", - "value": "0x0200" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "10454:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10476:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10509:5:70" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "10516:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10505:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10505:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10499:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10499:22:70" - }, - "variables": [ - { - "name": "memberValue0_10", - "nodeType": "YulTypedName", - "src": "10480:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_10", - "nodeType": "YulIdentifier", - "src": "10546:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10567:3:70" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "10572:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10563:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10563:13:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "10530:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "10530:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10530:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10586:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10597:6:70", - "type": "", - "value": "0x0220" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "10590:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10612:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10645:5:70" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "10652:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10641:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10641:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10635:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10635:22:70" - }, - "variables": [ - { - "name": "memberValue0_11", - "nodeType": "YulTypedName", - "src": "10616:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_11", - "nodeType": "YulIdentifier", - "src": "10685:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10706:3:70" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "10711:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10702:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10702:13:70" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "10666:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "10666:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10666:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10725:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10736:6:70", - "type": "", - "value": "0x0240" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "10729:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10751:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10784:5:70" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "10791:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10780:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10780:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10774:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10774:22:70" - }, - "variables": [ - { - "name": "memberValue0_12", - "nodeType": "YulTypedName", - "src": "10755:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_12", - "nodeType": "YulIdentifier", - "src": "10821:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10842:3:70" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "10847:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10838:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10838:13:70" - } - ], - "functionName": { - "name": "abi_encode_bool", - "nodeType": "YulIdentifier", - "src": "10805:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "10805:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10805:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10861:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10872:6:70", - "type": "", - "value": "0x0260" - }, - "variables": [ - { - "name": "_13", - "nodeType": "YulTypedName", - "src": "10865:3:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10898:3:70" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "10903:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10894:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10894:13:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10919:5:70" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "10926:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10915:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10915:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10909:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10909:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10887:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10887:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10887:45:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10941:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10952:6:70", - "type": "", - "value": "0x0280" - }, - "variables": [ - { - "name": "_14", - "nodeType": "YulTypedName", - "src": "10945:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10967:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11000:5:70" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "11007:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10996:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10996:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10990:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "10990:22:70" - }, - "variables": [ - { - "name": "memberValue0_13", - "nodeType": "YulTypedName", - "src": "10971:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_13", - "nodeType": "YulIdentifier", - "src": "11038:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11059:3:70" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "11064:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11055:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11055:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint8", - "nodeType": "YulIdentifier", - "src": "11021:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "11021:48:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11021:48:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11078:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11089:6:70", - "type": "", - "value": "0x02a0" - }, - "variables": [ - { - "name": "_15", - "nodeType": "YulTypedName", - "src": "11082:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11104:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11137:5:70" - }, - { - "name": "_15", - "nodeType": "YulIdentifier", - "src": "11144:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11133:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11127:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11127:22:70" - }, - "variables": [ - { - "name": "memberValue0_14", - "nodeType": "YulTypedName", - "src": "11108:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_14", - "nodeType": "YulIdentifier", - "src": "11176:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11197:3:70" - }, - { - "name": "_15", - "nodeType": "YulIdentifier", - "src": "11202:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11193:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11193:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint16", - "nodeType": "YulIdentifier", - "src": "11158:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "11158:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11158:49:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11216:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11227:6:70", - "type": "", - "value": "0x02c0" - }, - "variables": [ - { - "name": "_16", - "nodeType": "YulTypedName", - "src": "11220:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11242:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11275:5:70" - }, - { - "name": "_16", - "nodeType": "YulIdentifier", - "src": "11282:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11271:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11271:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11265:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11265:22:70" - }, - "variables": [ - { - "name": "memberValue0_15", - "nodeType": "YulTypedName", - "src": "11246:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_15", - "nodeType": "YulIdentifier", - "src": "11314:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11335:3:70" - }, - { - "name": "_16", - "nodeType": "YulIdentifier", - "src": "11340:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11331:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11331:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint16", - "nodeType": "YulIdentifier", - "src": "11296:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "11296:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11296:49:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11354:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11365:6:70", - "type": "", - "value": "0x02e0" - }, - "variables": [ - { - "name": "_17", - "nodeType": "YulTypedName", - "src": "11358:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11380:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11413:5:70" - }, - { - "name": "_17", - "nodeType": "YulIdentifier", - "src": "11420:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11409:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11409:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11403:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11403:22:70" - }, - "variables": [ - { - "name": "memberValue0_16", - "nodeType": "YulTypedName", - "src": "11384:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_16", - "nodeType": "YulIdentifier", - "src": "11452:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11473:3:70" - }, - { - "name": "_17", - "nodeType": "YulIdentifier", - "src": "11478:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11469:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11469:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint16", - "nodeType": "YulIdentifier", - "src": "11434:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "11434:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11434:49:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11492:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11503:6:70", - "type": "", - "value": "0x0300" - }, - "variables": [ - { - "name": "_18", - "nodeType": "YulTypedName", - "src": "11496:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11518:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11551:5:70" - }, - { - "name": "_18", - "nodeType": "YulIdentifier", - "src": "11558:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11547:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11547:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11541:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11541:22:70" - }, - "variables": [ - { - "name": "memberValue0_17", - "nodeType": "YulTypedName", - "src": "11522:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_17", - "nodeType": "YulIdentifier", - "src": "11590:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11611:3:70" - }, - { - "name": "_18", - "nodeType": "YulIdentifier", - "src": "11616:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11607:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11607:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint16", - "nodeType": "YulIdentifier", - "src": "11572:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "11572:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11572:49:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11630:17:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11641:6:70", - "type": "", - "value": "0x0320" - }, - "variables": [ - { - "name": "_19", - "nodeType": "YulTypedName", - "src": "11634:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11656:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11689:5:70" - }, - { - "name": "_19", - "nodeType": "YulIdentifier", - "src": "11696:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11685:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11685:15:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11679:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11679:22:70" - }, - "variables": [ - { - "name": "memberValue0_18", - "nodeType": "YulTypedName", - "src": "11660:15:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0_18", - "nodeType": "YulIdentifier", - "src": "11728:15:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11749:3:70" - }, - { - "name": "_19", - "nodeType": "YulIdentifier", - "src": "11754:3:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11745:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11745:13:70" - } - ], - "functionName": { - "name": "abi_encode_uint16", - "nodeType": "YulIdentifier", - "src": "11710:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "11710:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11710:49:70" - }, - { - "nodeType": "YulAssignment", - "src": "11768:13:70", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "11775:6:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "11768:3:70" - } - ] - } - ] - }, - "name": "abi_encode_struct_CreditManagerData", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8584:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8591:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "8599:3:70", - "type": "" - } - ], - "src": "8539:3248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12015:650:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "12025:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12035:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "12029:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12046:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12064:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12075:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12060:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12060:18:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "12050:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12094:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12105:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12087:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12087:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12087:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12117:17:70", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "12128:6:70" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "12121:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12143:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12163:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12157:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "12157:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "12147:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "12186:6:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12194:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12179:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12179:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12179:22:70" - }, - { - "nodeType": "YulAssignment", - "src": "12210:25:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12221:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12232:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12217:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12217:18:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12210:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12244:53:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12266:9:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12281:1:70", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12284:6:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12277:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12277:14:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12262:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12262:30:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12294:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12258:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12258:39:70" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "12248:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12306:29:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12324:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12332:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12320:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12320:15:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "12310:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12344:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12353:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "12348:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12412:224:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12433:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "12446:6:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12454:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12442:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12442:22:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12470:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "12466:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12466:7:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12438:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12438:36:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12426:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12426:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12426:49:70" - }, - { - "nodeType": "YulAssignment", - "src": "12488:68:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "12540:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12534:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "12534:13:70" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "12549:6:70" - } - ], - "functionName": { - "name": "abi_encode_struct_CreditManagerData", - "nodeType": "YulIdentifier", - "src": "12498:35:70" - }, - "nodeType": "YulFunctionCall", - "src": "12498:58:70" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "12488:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "12569:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "12583:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12591:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12579:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12579:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "12569:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "12607:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12618:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12623:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12614:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12614:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12607:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "12374:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12377:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "12371:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "12371:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "12385:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12387:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "12396:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12399:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12392:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12392:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "12387:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "12367:3:70", - "statements": [] - }, - "src": "12363:273:70" - }, - { - "nodeType": "YulAssignment", - "src": "12645:14:70", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "12653:6:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12645:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11984:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11995:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12006:4:70", - "type": "" - } - ], - "src": "11792:873:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12797:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12807:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12819:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12830:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12815:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12815:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12807:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12849:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12864:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12880:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12885:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12876:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12876:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12889:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12872:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12872:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "12860:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12860:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12842:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12842:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12842:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12766:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "12777:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12788:4:70", - "type": "" - } - ], - "src": "12670:229:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13127:650:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13137:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13147:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "13141:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13158:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13176:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13187:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13172:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13172:18:70" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "13162:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13206:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13217:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13199:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13199:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13199:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13229:17:70", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "13240:6:70" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "13233:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13255:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13275:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13269:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "13269:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "13259:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "13298:6:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13306:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13291:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13291:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13291:22:70" - }, - { - "nodeType": "YulAssignment", - "src": "13322:25:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13333:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13344:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13329:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13329:18:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13322:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13356:53:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13378:9:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13393:1:70", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13396:6:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "13389:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13389:14:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13374:30:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13406:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13370:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13370:39:70" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "13360:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13418:29:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13436:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13444:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13432:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13432:15:70" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "13422:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13456:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13465:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "13460:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13524:224:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13545:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "13558:6:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13566:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13554:22:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13582:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "13578:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13578:7:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13550:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13550:36:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13538:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13538:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13538:49:70" - }, - { - "nodeType": "YulAssignment", - "src": "13600:68:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "13652:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13646:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "13646:13:70" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "13661:6:70" - } - ], - "functionName": { - "name": "abi_encode_struct_CreditAccountData", - "nodeType": "YulIdentifier", - "src": "13610:35:70" - }, - "nodeType": "YulFunctionCall", - "src": "13610:58:70" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "13600:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "13681:25:70", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "13695:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13703:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13691:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13691:15:70" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "13681:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "13719:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13730:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13735:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13726:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13726:12:70" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13719:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13486:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13489:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "13483:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "13483:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "13497:18:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13499:14:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13508:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13511:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13504:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13504:9:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13499:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "13479:3:70", - "statements": [] - }, - "src": "13475:273:70" - }, - { - "nodeType": "YulAssignment", - "src": "13757:14:70", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "13765:6:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13757:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13096:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13107:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13118:4:70", - "type": "" - } - ], - "src": "12904:873:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13955:117:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13972:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13983:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13965:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13965:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13965:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "13995:71:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14039:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14051:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14062:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14047:18:70" - } - ], - "functionName": { - "name": "abi_encode_struct_CreditManagerData", - "nodeType": "YulIdentifier", - "src": "14003:35:70" - }, - "nodeType": "YulFunctionCall", - "src": "14003:63:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13995:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_struct$_CreditManagerData_$14590_memory_ptr__to_t_struct$_CreditManagerData_$14590_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13924:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13935:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13946:4:70", - "type": "" - } - ], - "src": "13782:290:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14172:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "14182:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14194:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14205:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14190:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14182:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14224:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14249:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "14242:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14242:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "14235:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14235:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14217:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14217:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14217:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14141:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14152:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14163:4:70", - "type": "" - } - ], - "src": "14077:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14329:78:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "14339:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "14354:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14348:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14348:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14339:5:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14395:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "14370:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "14370:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14370:31:70" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "14308:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "14319:5:70", - "type": "" - } - ], - "src": "14269:138:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14493:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14539:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14548:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14551:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14541:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14541:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14541:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14514:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14523:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14510:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14510:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14535:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14506:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14506:32:70" - }, - "nodeType": "YulIf", - "src": "14503:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "14564:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14583:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14577:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14577:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "14568:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14627:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "14602:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "14602:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14602:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "14642:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14652:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14642:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14459:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "14470:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14482:6:70", - "type": "" - } - ], - "src": "14412:251:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14749:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14795:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14804:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14807:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14797:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14797:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14797:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14770:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14779:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14766:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14766:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14791:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14762:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14762:32:70" - }, - "nodeType": "YulIf", - "src": "14759:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "14820:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14836:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14830:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14830:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14820:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14715:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "14726:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14738:6:70", - "type": "" - } - ], - "src": "14668:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14980:161:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "14990:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15002:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15013:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14998:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14998:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14990:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15032:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15047:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15063:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15068:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "15059:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15059:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15072:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15055:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15055:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15043:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15043:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15025:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15025:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15025:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15096:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15107:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15092:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15092:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15126:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15119:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15119:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15112:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15112:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15085:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15085:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15085:50:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14941:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "14952:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14960:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14971:4:70", - "type": "" - } - ], - "src": "14857:284:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15297:204:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15307:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15319:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15330:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15315:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15315:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "15307:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15349:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15364:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15380:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15385:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "15376:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15376:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15389:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15372:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15372:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15360:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15360:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15342:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15342:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15413:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15424:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15409:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15409:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15429:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15402:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15402:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15402:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15456:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15467:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15452:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15452:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "15486:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15479:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15479:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15472:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15472:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15445:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15445:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15445:50:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15250:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "15261:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15269:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15277:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "15288:4:70", - "type": "" - } - ], - "src": "15146:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15655:281:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "15702:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15711:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15714:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "15704:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15704:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15704:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "15676:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15685:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15672:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15672:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15697:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "15668:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15668:33:70" - }, - "nodeType": "YulIf", - "src": "15665:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "15727:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15743:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15737:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15737:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15727:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "15762:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15782:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15793:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15778:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15778:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15772:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15772:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15762:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "15806:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15826:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15837:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15822:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15822:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15816:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15816:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "15806:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "15850:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15870:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15881:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15866:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15866:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15860:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15860:25:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "15850:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "15894:36:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15914:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15925:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15910:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15910:19:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15904:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15904:26:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "15894:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15589:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "15600:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15612:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15620:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "15628:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "15636:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "15644:6:70", - "type": "" - } - ], - "src": "15506:430:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16039:147:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "16085:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16094:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16097:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "16087:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16087:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16087:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "16060:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16069:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16056:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16056:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16081:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "16052:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16052:32:70" - }, - "nodeType": "YulIf", - "src": "16049:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "16110:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16126:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16120:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16120:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16110:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "16145:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16165:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16176:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16161:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16161:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16155:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16155:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16145:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15997:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "16008:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16020:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16028:6:70", - "type": "" - } - ], - "src": "15941:245:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16306:191:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "16352:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16361:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16364:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "16354:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16354:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16354:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "16327:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16336:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16323:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16348:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "16319:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16319:32:70" - }, - "nodeType": "YulIf", - "src": "16316:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "16377:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16393:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16387:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16387:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16377:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "16412:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16432:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16443:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16428:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16422:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16422:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16412:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "16456:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16476:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16487:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16472:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16472:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16466:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16466:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "16456:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16256:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "16267:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16279:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16287:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "16295:6:70", - "type": "" - } - ], - "src": "16191:306:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16534:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16551:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16558:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16563:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "16554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16554:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16544:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16544:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16544:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16591:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16594:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16584:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16584:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16584:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16615:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16618:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "16608:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16608:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16608:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "16502:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16763:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "16773:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16785:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16796:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16781:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16781:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "16773:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16815:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16830:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16846:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16851:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "16842:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16842:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16855:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16838:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16838:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16826:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16826:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16808:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16808:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16808:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16879:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16890:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16875:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16875:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16895:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16868:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16868:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16868:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16724:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16735:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16743:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16754:4:70", - "type": "" - } - ], - "src": "16634:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17045:303:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "17092:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17101:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17104:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17094:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17094:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17094:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "17066:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17075:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "17062:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17062:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17087:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "17058:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17058:33:70" - }, - "nodeType": "YulIf", - "src": "17055:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "17117:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17136:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17130:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17130:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "17121:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17180:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "17155:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "17155:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17155:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "17195:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17205:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "17195:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "17219:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17239:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17250:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17235:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17229:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17229:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "17219:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "17263:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17283:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17294:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17279:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17279:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17273:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17273:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "17263:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "17307:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17327:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17338:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17323:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17317:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17317:25:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "17307:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16987:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "16998:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "17010:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "17018:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "17026:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "17034:6:70", - "type": "" - } - ], - "src": "16913:435:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17410:107:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "17420:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "17435:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17429:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17429:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17420:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17495:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17504:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17507:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17497:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17497:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17497:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17464:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17485:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "17478:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17478:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "17471:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17471:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "17461:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "17461:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "17454:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17454:40:70" - }, - "nodeType": "YulIf", - "src": "17451:60:70" - } - ] - }, - "name": "abi_decode_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "17389:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "17400:5:70", - "type": "" - } - ], - "src": "17353:164:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17600:124:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "17646:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17655:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17658:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17648:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17648:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17648:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "17621:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17630:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "17617:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17617:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17642:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "17613:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17613:32:70" - }, - "nodeType": "YulIf", - "src": "17610:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "17671:47:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17708:9:70" - } - ], - "functionName": { - "name": "abi_decode_bool_fromMemory", - "nodeType": "YulIdentifier", - "src": "17681:26:70" - }, - "nodeType": "YulFunctionCall", - "src": "17681:37:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "17671:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "17566:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "17577:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "17589:6:70", - "type": "" - } - ], - "src": "17522:202:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17788:104:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "17798:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "17813:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "17807:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "17807:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17798:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17870:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17879:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17882:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17872:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17872:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17872:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17842:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17853:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17860:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17849:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17849:18:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "17839:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "17839:29:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "17832:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17832:37:70" - }, - "nodeType": "YulIf", - "src": "17829:57:70" - } - ] - }, - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "17767:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "17778:5:70", - "type": "" - } - ], - "src": "17729:163:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17994:237:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "18040:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18049:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18052:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18042:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18042:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18042:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "18015:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18024:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18011:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18011:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18036:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "18007:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18007:32:70" - }, - "nodeType": "YulIf", - "src": "18004:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "18065:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18084:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "18078:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "18078:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "18069:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "18128:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "18103:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "18103:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18103:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "18143:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "18153:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "18143:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "18167:58:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18210:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18221:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18206:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18206:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "18177:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "18177:48:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "18167:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint16_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "17952:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "17963:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "17975:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "17983:6:70", - "type": "" - } - ], - "src": "17897:334:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18268:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18285:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18292:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18297:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18288:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18288:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18278:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18278:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18278:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18325:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18328:4:70", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18318:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18318:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18318:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18349:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18352:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18342:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18342:15:70" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "18236:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18400:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18417:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18424:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18429:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18420:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18420:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18410:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18410:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18410:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18457:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18460:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18450:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18450:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18450:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18481:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18484:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18474:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18474:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18474:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "18368:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18549:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "18559:17:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "18571:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "18574:1:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18567:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18567:9:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "18559:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18600:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "18602:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "18602:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18602:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "18591:4:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "18597:1:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "18588:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "18588:11:70" - }, - "nodeType": "YulIf", - "src": "18585:37:70" - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "18531:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "18534:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "18540:4:70", - "type": "" - } - ], - "src": "18500:128:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18685:116:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "18695:20:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "18710:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "18713:1:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "18706:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18706:9:70" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "18695:7:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18773:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "18775:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "18775:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18775:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "18744:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "18737:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18737:9:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "18751:1:70" - }, - { - "arguments": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "18758:7:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "18767:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "18754:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18754:15:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "18748:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "18748:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "18734:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "18734:37:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "18727:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18727:45:70" - }, - "nodeType": "YulIf", - "src": "18724:71:70" - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "18664:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "18667:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "18673:7:70", - "type": "" - } - ], - "src": "18633:168:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18838:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18855:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18862:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18867:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18858:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18858:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18848:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18848:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18848:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18895:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18898:4:70", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18888:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18888:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18888:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18919:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18922:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18912:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18912:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18912:15:70" - } - ] - }, - "name": "panic_error_0x12", - "nodeType": "YulFunctionDefinition", - "src": "18806:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18984:74:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "19007:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x12", - "nodeType": "YulIdentifier", - "src": "19009:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "19009:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19009:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "19004:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "18997:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18997:9:70" - }, - "nodeType": "YulIf", - "src": "18994:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "19038:14:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "19047:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "19050:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "19043:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19043:9:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "19038:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "18969:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "18972:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "18978:1:70", - "type": "" - } - ], - "src": "18938:120:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19123:132:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "19133:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "19148:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "19142:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "19142:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "19133:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19233:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19242:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19245:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "19235:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19235:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19235:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "19177:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "19188:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19195:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "19184:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19184:46:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "19174:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "19174:57:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "19167:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19167:65:70" - }, - "nodeType": "YulIf", - "src": "19164:85:70" - } - ] - }, - "name": "abi_decode_uint128_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "19102:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "19113:5:70", - "type": "" - } - ], - "src": "19063:192:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19358:195:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "19404:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19413:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19416:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "19406:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19406:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19406:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "19379:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19388:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "19375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19375:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19400:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "19371:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19371:32:70" - }, - "nodeType": "YulIf", - "src": "19368:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "19429:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19469:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint128_fromMemory", - "nodeType": "YulIdentifier", - "src": "19439:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "19439:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "19429:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "19488:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19532:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19543:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19528:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19528:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint128_fromMemory", - "nodeType": "YulIdentifier", - "src": "19498:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "19498:49:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "19488:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint128t_uint128_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19316:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "19327:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19339:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "19347:6:70", - "type": "" - } - ], - "src": "19260:293:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19664:1023:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "19674:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19684:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "19678:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19731:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19740:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19743:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "19733:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19733:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19733:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "19706:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19715:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "19702:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19702:23:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "19727:2:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "19698:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19698:32:70" - }, - "nodeType": "YulIf", - "src": "19695:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "19756:30:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19776:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "19770:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "19770:16:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "19760:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "19795:28:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19805:18:70", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "19799:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19850:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19859:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19862:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "19852:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19852:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19852:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "19838:6:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "19846:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "19835:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "19835:14:70" - }, - "nodeType": "YulIf", - "src": "19832:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "19875:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19889:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "19900:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19885:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19885:22:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "19879:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19955:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19964:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19967:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "19957:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19957:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19957:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "19934:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19938:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19930:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19930:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "19945:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "19926:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19926:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "19919:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19919:35:70" - }, - "nodeType": "YulIf", - "src": "19916:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "19980:19:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "19996:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "19990:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "19990:9:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "19984:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20022:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "20024:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "20024:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20024:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "20014:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "20018:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20011:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20011:10:70" - }, - "nodeType": "YulIf", - "src": "20008:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20053:20:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20067:1:70", - "type": "", - "value": "5" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "20070:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "20063:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20063:10:70" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "20057:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20082:23:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20102:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "20096:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "20096:9:70" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "20086:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20114:56:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20136:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "20152:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20156:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20148:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20148:11:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20165:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "20161:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20161:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "20144:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20144:25:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20132:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20132:38:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "20118:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20229:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "20231:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "20231:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20231:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20188:10:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "20200:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20185:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20185:18:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20208:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20220:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "20205:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20205:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "20182:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20182:46:70" - }, - "nodeType": "YulIf", - "src": "20179:72:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20267:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20271:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20260:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20260:22:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20291:17:70", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20302:6:70" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "20295:3:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20324:6:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "20332:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20317:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20317:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20317:18:70" - }, - { - "nodeType": "YulAssignment", - "src": "20344:22:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20355:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "20363:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20351:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20351:15:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "20344:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20375:34:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "20397:2:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "20401:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20393:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20393:11:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "20406:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20389:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20389:20:70" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "20379:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20441:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20450:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20453:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "20443:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20443:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20443:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "20424:6:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "20432:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20421:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20421:19:70" - }, - "nodeType": "YulIf", - "src": "20418:39:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20466:22:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "20481:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "20485:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20477:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20477:11:70" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "20470:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20553:103:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "20574:3:70" - }, - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "20609:3:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "20579:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "20579:34:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20567:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20567:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20567:47:70" - }, - { - "nodeType": "YulAssignment", - "src": "20627:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "20638:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "20643:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20634:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20634:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "20627:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "20508:3:70" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "20513:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "20505:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20505:15:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "20521:23:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "20523:19:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "20534:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "20539:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20530:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20530:12:70" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "20523:3:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "20501:3:70", - "statements": [] - }, - "src": "20497:159:70" - }, - { - "nodeType": "YulAssignment", - "src": "20665:16:70", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20675:6:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "20665:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19630:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "19641:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19653:6:70", - "type": "" - } - ], - "src": "19558:1129:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20819:403:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "20866:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20875:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20878:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "20868:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20868:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20868:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "20840:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20849:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "20836:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20836:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20861:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "20832:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20832:33:70" - }, - "nodeType": "YulIf", - "src": "20829:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "20891:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20931:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint128_fromMemory", - "nodeType": "YulIdentifier", - "src": "20901:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "20901:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "20891:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "20950:56:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20991:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21002:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20987:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20987:18:70" - } - ], - "functionName": { - "name": "abi_decode_bool_fromMemory", - "nodeType": "YulIdentifier", - "src": "20960:26:70" - }, - "nodeType": "YulFunctionCall", - "src": "20960:46:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "20950:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21015:38:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21038:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21049:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21034:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21034:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "21028:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "21028:25:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "21019:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21109:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21118:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21121:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21111:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21111:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21111:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21075:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21086:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21093:12:70", - "type": "", - "value": "0xffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "21082:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21082:24:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "21072:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21072:35:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "21065:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21065:43:70" - }, - "nodeType": "YulIf", - "src": "21062:63:70" - }, - { - "nodeType": "YulAssignment", - "src": "21134:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21144:5:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "21134:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "21158:58:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21201:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21212:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21197:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21197:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21168:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21168:48:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "21158:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint128t_boolt_uint40t_uint16_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "20761:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "20772:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "20784:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "20792:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "20800:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "20808:6:70", - "type": "" - } - ], - "src": "20692:530:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21306:194:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "21352:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21361:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21364:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21354:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21354:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21354:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "21327:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21336:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "21323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21323:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21348:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "21319:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21319:32:70" - }, - "nodeType": "YulIf", - "src": "21316:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21377:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21396:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "21390:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "21390:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "21381:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21454:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21463:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21466:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21456:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21456:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21456:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21428:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21439:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21446:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "21435:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21435:16:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "21425:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21425:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "21418:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21418:35:70" - }, - "nodeType": "YulIf", - "src": "21415:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "21479:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "21489:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "21479:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint8_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "21272:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "21283:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "21295:6:70", - "type": "" - } - ], - "src": "21227:273:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21649:396:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "21696:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21705:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21708:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21698:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21698:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21698:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "21670:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21679:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "21666:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21666:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21691:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "21662:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21662:33:70" - }, - "nodeType": "YulIf", - "src": "21659:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "21721:49:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21760:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21731:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21731:39:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "21721:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "21779:58:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21822:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21833:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21818:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21818:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21789:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21789:48:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "21779:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "21846:58:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21889:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21900:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21885:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21885:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21856:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21856:48:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "21846:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "21913:58:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21956:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21967:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21952:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21952:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21923:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21923:48:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "21913:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "21980:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22023:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22034:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22019:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22019:19:70" - } - ], - "functionName": { - "name": "abi_decode_uint16_fromMemory", - "nodeType": "YulIdentifier", - "src": "21990:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "21990:49:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "21980:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "21583:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "21594:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "21606:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "21614:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "21622:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "21630:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "21638:6:70", - "type": "" - } - ], - "src": "21505:540:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22154:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "22200:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22209:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22212:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "22202:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22202:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22202:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "22175:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22184:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "22171:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22171:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22196:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "22167:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22167:32:70" - }, - "nodeType": "YulIf", - "src": "22164:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22225:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22244:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "22238:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "22238:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "22229:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22288:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "22263:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "22263:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22263:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "22303:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22313:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "22303:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_ICreditFilter_$13277_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "22120:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "22131:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "22143:6:70", - "type": "" - } - ], - "src": "22050:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22374:142:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "22384:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22394:6:70", - "type": "", - "value": "0xffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "22388:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22409:21:70", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "22424:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "22427:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "22420:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22420:10:70" - }, - "variables": [ - { - "name": "y_1", - "nodeType": "YulTypedName", - "src": "22413:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22454:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x12", - "nodeType": "YulIdentifier", - "src": "22456:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "22456:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22456:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y_1", - "nodeType": "YulIdentifier", - "src": "22449:3:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "22442:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22442:11:70" - }, - "nodeType": "YulIf", - "src": "22439:37:70" - }, - { - "nodeType": "YulAssignment", - "src": "22485:25:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "22498:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "22501:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "22494:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22494:10:70" - }, - { - "name": "y_1", - "nodeType": "YulIdentifier", - "src": "22506:3:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "22490:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22490:20:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "22485:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "22359:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "22362:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "22368:1:70", - "type": "" - } - ], - "src": "22329:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22569:77:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "22579:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "22590:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "22593:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22586:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22586:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "22579:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22618:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "22620:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "22620:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22620:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "22610:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "22613:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "22607:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "22607:10:70" - }, - "nodeType": "YulIf", - "src": "22604:36:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "22552:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "22555:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "22561:3:70", - "type": "" - } - ], - "src": "22521:125:70" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, sub(shl(160, 1), 1)))\n }\n function abi_encode_bool(value, pos)\n {\n mstore(pos, iszero(iszero(value)))\n }\n function abi_encode_array_struct_TokenBalance_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, and(mload(_2), sub(shl(160, 1), 1)))\n mstore(add(pos, _1), mload(add(_2, _1)))\n let _3 := 0x40\n mstore(add(pos, _3), iszero(iszero(mload(add(_2, _3)))))\n let _4 := 0x60\n mstore(add(pos, _4), iszero(iszero(mload(add(_2, _4)))))\n pos := add(pos, 0x80)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_uint8(value, pos)\n { mstore(pos, and(value, 0xff)) }\n function abi_encode_struct_CreditAccountData(value, pos) -> end\n {\n let _1 := 0x0260\n abi_encode_address(mload(value), pos)\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_address(memberValue0, add(pos, 0x20))\n let memberValue0_1 := mload(add(value, 0x40))\n abi_encode_bool(memberValue0_1, add(pos, 0x40))\n let memberValue0_2 := mload(add(value, 0x60))\n abi_encode_address(memberValue0_2, add(pos, 0x60))\n let memberValue0_3 := mload(add(value, 0x80))\n abi_encode_address(memberValue0_3, add(pos, 0x80))\n mstore(add(pos, 0xa0), mload(add(value, 0xa0)))\n mstore(add(pos, 0xc0), mload(add(value, 0xc0)))\n mstore(add(pos, 0xe0), mload(add(value, 0xe0)))\n let _2 := 0x0100\n mstore(add(pos, _2), mload(add(value, _2)))\n let _3 := 0x0120\n mstore(add(pos, _3), mload(add(value, _3)))\n let _4 := 0x0140\n let memberValue0_4 := mload(add(value, _4))\n mstore(add(pos, _4), _1)\n let tail := abi_encode_array_struct_TokenBalance_dyn(memberValue0_4, add(pos, _1))\n let _5 := 0x0160\n mstore(add(pos, _5), mload(add(value, _5)))\n let _6 := 0x0180\n mstore(add(pos, _6), mload(add(value, _6)))\n let _7 := 0x01a0\n let memberValue0_5 := mload(add(value, _7))\n abi_encode_bool(memberValue0_5, add(pos, _7))\n let _8 := 0x01c0\n mstore(add(pos, _8), mload(add(value, _8)))\n let _9 := 0x01e0\n mstore(add(pos, _9), mload(add(value, _9)))\n let _10 := 0x0200\n mstore(add(pos, _10), mload(add(value, _10)))\n let _11 := 0x0220\n let memberValue0_6 := mload(add(value, _11))\n abi_encode_uint8(memberValue0_6, add(pos, _11))\n let _12 := 0x0240\n mstore(add(pos, _12), mload(add(value, _12)))\n end := tail\n }\n function abi_encode_tuple_t_struct$_CreditAccountData_$14533_memory_ptr__to_t_struct$_CreditAccountData_$14533_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_struct_CreditAccountData(value0, add(headStart, 32))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_struct_PoolData(value, pos)\n {\n abi_encode_address(mload(value), pos)\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_bool(memberValue0, add(pos, 0x20))\n let memberValue0_1 := mload(add(value, 0x40))\n abi_encode_address(memberValue0_1, add(pos, 0x40))\n let memberValue0_2 := mload(add(value, 0x60))\n abi_encode_address(memberValue0_2, add(pos, 0x60))\n mstore(add(pos, 0x80), mload(add(value, 0x80)))\n mstore(add(pos, 0xa0), mload(add(value, 0xa0)))\n mstore(add(pos, 0xc0), mload(add(value, 0xc0)))\n mstore(add(pos, 0xe0), mload(add(value, 0xe0)))\n let _1 := 0x0100\n mstore(add(pos, _1), mload(add(value, _1)))\n let _2 := 0x0120\n mstore(add(pos, _2), mload(add(value, _2)))\n let _3 := 0x0140\n mstore(add(pos, _3), mload(add(value, _3)))\n let _4 := 0x0160\n mstore(add(pos, _4), mload(add(value, _4)))\n let _5 := 0x0180\n mstore(add(pos, _5), mload(add(value, _5)))\n let _6 := 0x01a0\n mstore(add(pos, _6), mload(add(value, _6)))\n let _7 := 0x01c0\n mstore(add(pos, _7), mload(add(value, _7)))\n let _8 := 0x01e0\n let memberValue0_3 := mload(add(value, _8))\n abi_encode_uint8(memberValue0_3, add(pos, _8))\n }\n function abi_encode_tuple_t_struct$_PoolData_$14623_memory_ptr__to_t_struct$_PoolData_$14623_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 512)\n abi_encode_struct_PoolData(value0, headStart)\n }\n function abi_encode_tuple_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n abi_encode_struct_PoolData(mload(srcPtr), pos)\n pos := add(pos, 0x0200)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_tuple_t_contract$_AddressProvider_$2931__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_array_address_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), sub(shl(160, 1), 1)))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_array_struct_ContractAdapter_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n let _3 := sub(shl(160, 1), 1)\n mstore(pos, and(mload(_2), _3))\n mstore(add(pos, _1), and(mload(add(_2, _1)), _3))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_array_uint256_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, mload(srcPtr))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_uint16(value, pos)\n {\n mstore(pos, and(value, 0xffff))\n }\n function abi_encode_struct_CreditManagerData(value, pos) -> end\n {\n let _1 := 0x0340\n abi_encode_address(mload(value), pos)\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_address(memberValue0, add(pos, 0x20))\n let memberValue0_1 := mload(add(value, 0x40))\n abi_encode_address(memberValue0_1, add(pos, 0x40))\n let memberValue0_2 := mload(add(value, 0x60))\n abi_encode_bool(memberValue0_2, add(pos, 0x60))\n let memberValue0_3 := mload(add(value, 0x80))\n abi_encode_bool(memberValue0_3, add(pos, 0x80))\n mstore(add(pos, 0xa0), mload(add(value, 0xa0)))\n mstore(add(pos, 0xc0), mload(add(value, 0xc0)))\n mstore(add(pos, 0xe0), mload(add(value, 0xe0)))\n let _2 := 0x0100\n mstore(add(pos, _2), mload(add(value, _2)))\n let _3 := 0x0120\n mstore(add(pos, _3), mload(add(value, _3)))\n let _4 := 0x0140\n let memberValue0_4 := mload(add(value, _4))\n mstore(add(pos, _4), _1)\n let tail := abi_encode_array_address_dyn(memberValue0_4, add(pos, _1))\n let _5 := 0x0160\n let memberValue0_5 := mload(add(value, _5))\n mstore(add(pos, _5), sub(tail, pos))\n let tail_1 := abi_encode_array_struct_ContractAdapter_dyn(memberValue0_5, tail)\n let _6 := 0x0180\n let memberValue0_6 := mload(add(value, _6))\n mstore(add(pos, _6), sub(tail_1, pos))\n let tail_2 := abi_encode_array_uint256_dyn(memberValue0_6, tail_1)\n let _7 := 0x01a0\n let memberValue0_7 := mload(add(value, _7))\n abi_encode_uint8(memberValue0_7, add(pos, _7))\n let _8 := 0x01c0\n let memberValue0_8 := mload(add(value, _8))\n abi_encode_address(memberValue0_8, add(pos, _8))\n let _9 := 0x01e0\n let memberValue0_9 := mload(add(value, _9))\n abi_encode_address(memberValue0_9, add(pos, _9))\n let _10 := 0x0200\n let memberValue0_10 := mload(add(value, _10))\n abi_encode_bool(memberValue0_10, add(pos, _10))\n let _11 := 0x0220\n let memberValue0_11 := mload(add(value, _11))\n abi_encode_address(memberValue0_11, add(pos, _11))\n let _12 := 0x0240\n let memberValue0_12 := mload(add(value, _12))\n abi_encode_bool(memberValue0_12, add(pos, _12))\n let _13 := 0x0260\n mstore(add(pos, _13), mload(add(value, _13)))\n let _14 := 0x0280\n let memberValue0_13 := mload(add(value, _14))\n abi_encode_uint8(memberValue0_13, add(pos, _14))\n let _15 := 0x02a0\n let memberValue0_14 := mload(add(value, _15))\n abi_encode_uint16(memberValue0_14, add(pos, _15))\n let _16 := 0x02c0\n let memberValue0_15 := mload(add(value, _16))\n abi_encode_uint16(memberValue0_15, add(pos, _16))\n let _17 := 0x02e0\n let memberValue0_16 := mload(add(value, _17))\n abi_encode_uint16(memberValue0_16, add(pos, _17))\n let _18 := 0x0300\n let memberValue0_17 := mload(add(value, _18))\n abi_encode_uint16(memberValue0_17, add(pos, _18))\n let _19 := 0x0320\n let memberValue0_18 := mload(add(value, _19))\n abi_encode_uint16(memberValue0_18, add(pos, _19))\n end := tail_2\n }\n function abi_encode_tuple_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n tail_2 := abi_encode_struct_CreditManagerData(mload(srcPtr), tail_2)\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_encode_tuple_t_contract$_ContractsRegister_$3114__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n tail_2 := abi_encode_struct_CreditAccountData(mload(srcPtr), tail_2)\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_encode_tuple_t_struct$_CreditManagerData_$14590_memory_ptr__to_t_struct$_CreditManagerData_$14590_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_struct_CreditManagerData(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_address(value)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n }\n function abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), iszero(iszero(value2)))\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n value3 := mload(add(headStart, 96))\n value4 := mload(add(headStart, 128))\n }\n function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_addresst_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n value3 := mload(add(headStart, 96))\n }\n function abi_decode_bool_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_bool_fromMemory(headStart)\n }\n function abi_decode_uint16_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint16_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := abi_decode_uint16_fromMemory(add(headStart, 32))\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function panic_error_0x12()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y) { panic_error_0x12() }\n r := div(x, y)\n }\n function abi_decode_uint128_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint128t_uint128_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint128_fromMemory(headStart)\n value1 := abi_decode_uint128_fromMemory(add(headStart, 32))\n }\n function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(0, 0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := mload(_3)\n if gt(_4, _2) { panic_error_0x41() }\n let _5 := shl(5, _4)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(_5, 63), not(31)))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n let dst := memPtr\n mstore(memPtr, _4)\n dst := add(memPtr, _1)\n let srcEnd := add(add(_3, _5), _1)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_3, _1)\n for { } lt(src, srcEnd) { src := add(src, _1) }\n {\n mstore(dst, abi_decode_address_fromMemory(src))\n dst := add(dst, _1)\n }\n value0 := memPtr\n }\n function abi_decode_tuple_t_uint128t_boolt_uint40t_uint16_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_uint128_fromMemory(headStart)\n value1 := abi_decode_bool_fromMemory(add(headStart, 32))\n let value := mload(add(headStart, 64))\n if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n value2 := value\n value3 := abi_decode_uint16_fromMemory(add(headStart, 96))\n }\n function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n value0 := value\n }\n function abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_uint16_fromMemory(headStart)\n value1 := abi_decode_uint16_fromMemory(add(headStart, 32))\n value2 := abi_decode_uint16_fromMemory(add(headStart, 64))\n value3 := abi_decode_uint16_fromMemory(add(headStart, 96))\n value4 := abi_decode_uint16_fromMemory(add(headStart, 128))\n }\n function abi_decode_tuple_t_contract$_ICreditFilter_$13277_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function checked_div_t_uint16(x, y) -> r\n {\n let _1 := 0xffff\n let y_1 := and(y, _1)\n if iszero(y_1) { panic_error_0x12() }\n r := div(and(x, _1), y_1)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "3163": [ - { - "length": 32, - "start": 284 - } - ], - "3167": [ - { - "length": 32, - "start": 448 - }, - { - "length": 32, - "start": 4147 - }, - { - "length": 32, - "start": 6216 - }, - { - "length": 32, - "start": 6467 - }, - { - "length": 32, - "start": 6672 - }, - { - "length": 32, - "start": 7076 - }, - { - "length": 32, - "start": 7327 - }, - { - "length": 32, - "start": 7498 - }, - { - "length": 32, - "start": 7664 - }, - { - "length": 32, - "start": 7938 - }, - { - "length": 32, - "start": 12532 - }, - { - "length": 32, - "start": 12698 - } - ], - "3170": [ - { - "length": 32, - "start": 347 - }, - { - "length": 32, - "start": 5534 - }, - { - "length": 32, - "start": 8426 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d5014610190578063663b8fdb146101a65780637a0c7b21146101bb578063a80deda3146101e2578063ae093f3f14610202578063fc9914cb1461022257600080fd5b80630dbd616d146100b957806313d21cdf146100e25780631bcd8fc0146101025780632954018c146101175780634b2f336d146101565780634c472fc91461017d575b600080fd5b6100cc6100c736600461371b565b610245565b6040516100d991906138f5565b60405180910390f35b6100f56100f0366004613908565b61100a565b6040516100d99190613a07565b61010a611842565b6040516100d99190613a16565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d9565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b61013e61018b36600461371b565b6119ec565b610198600281565b6040519081526020016100d9565b6101ae611b9e565b6040516100d99190613cdd565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6101f56101f0366004613908565b611d43565b6040516100d99190613d3f565b610215610210366004613908565b611fc5565b6040516100d99190613d94565b61023561023036600461371b565b6130d0565b60405190151581526020016100d9565b61024d6134d6565b600080600080600061025e8861318e565b509450945094509450945060008560ff166001146102e557604051633a562dc160e21b81526001600160a01b03898116600483015284169063e958b70490602401602060405180830381865afa1580156102bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e09190613db7565b61034f565b604051633a562dc160e21b81526001600160a01b03898116600483015286169063e958b70490602401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190613db7565b60ff871661022089018190526001600160a01b03808b1660208b01528b811660608b01528216895290915060010361071a57846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529085169063c7de38a690602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104569190613dd4565b60e088015260405163dfd5946560e01b81526001600160a01b03828116600483015285169063dfd5946590602401602060405180830381865afa1580156104a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c59190613dd4565b610100880152604051633ce0735560e01b81526001600160a01b03898116600483015260006024830152861690633ce0735590604401602060405180830381865afa925050508015610534575060408051601f3d908101601f1916820190925261053191810190613dd4565b60015b15610540576101608801525b604051633ce0735560e01b81526001600160a01b03898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156105a9575060408051601f3d908101601f191682019092526105a691810190613dd4565b60015b156105b5576101808801525b60e087015160405163132c653f60e31b81526001600160a01b0383811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa92505050801561062c575060408051601f3d908101601f1916820190925261062991810190613ded565b60015b1561063e57505015156101a08a015250505b806001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190613dd4565b6101c0880152604051630c64865760e21b81526001600160a01b038281166004830152851690633192195c90602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613dd4565b60a08801526108df565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529083169063c7de38a6906024016040805180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190613e2d565b5060e088015260405163dfd5946560e01b81526001600160a01b03828116600483015283169063dfd5946590602401602060405180830381865afa15801561083a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085e9190613dd4565b610100880152604051630c64865760e21b81526001600160a01b038281166004830152841690633192195c90602401606060405180830381865afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613e51565b60c08a015260a08901526101c08801525b60008660ff1660011461095357836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190613db7565b6109b5565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613db7565b9050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613dd4565b6101208901526000600160ff891614610a9357846001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190613dd4565b610af5565b856001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613dd4565b90508760ff16600114610b7157604051638991b2f160e01b81526001600160a01b038481166004830152861690638991b2f190602401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613dd4565b610bdb565b604051632d1473b360e21b81526001600160a01b03848116600483015287169063b451cecc90602401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613dd4565b6102408a01528067ffffffffffffffff811115610bfa57610bfa613e7f565b604051908082528060200260200182016040528015610c4c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c185790505b506101408a015260005b81811015610f2657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c169003610d8757604051635785328160e11b81526001600160a01b038781166004830152602482018590528a169063af0a650290604401608060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613e95565b505060208401526001600160a01b0390811680845260405163f9eaee0d60e01b81526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b9190613ee4565b15156040830152610ed8565b60405163172c48c760e01b8152600481018490526001600160a01b0389169063172c48c7906024016040805180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190613f11565b506001600160a01b039081168084526040516370a0823160e01b81529188166004830152906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613dd4565b6020830152815160405163f9eaee0d60e01b81526001600160a01b0391821660048201529088169063f9eaee0d90602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190613ee4565b151560408301525b6102408c0151811615610eec576001610eef565b60005b151560608301526101408c0151805183919085908110610f1157610f11613f46565b60209081029190910101525050600101610c56565b50826001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190613dd4565b896101e0018181525050826001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190613dd4565b6102008a015250969998505050505050505050565b611012613593565b604051635b16ebb760e01b81526001600160a01b03808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613ee4565b6110bd57604051631a70964760e31b815260040160405180910390fd5b6001600160a01b0383168083526040805163fe14112d60e01b8152905185929163fe14112d9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613dd4565b8360c0018181525050806001600160a01b031663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613dd4565b8360e0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613dd4565b8360a0018181525050806001600160a01b0316634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613dd4565b83610100018181525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190613dd4565b83610160018181525050806001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613dd4565b836080018181525050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190613dd4565b83610140018181525050806001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190613db7565b83604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190613db7565b83606001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190613dd4565b83610160018181525050806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190613dd4565b6101808401526040808401516001600160a01b039081167f0000000000000000000000000000000000000000000000000000000000000000821614602080870191909152825163609ae31760e01b815292519184169263609ae31792600480830193928290030181865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190613dd4565b836101c0018181525050806001600160a01b031663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613dd4565b836101a0018181525050600083606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190613dd4565b604051630a84f92760e31b8152600481018290529091506000906001600160a01b03841690635427c93890602401602060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613dd4565b905080156117bd5761018085015181906117ae9061179290612710613f72565b8761010001518861014001516117a89190613f85565b90613402565b6117b89190613fb2565b6117c4565b8461014001515b85610120018181525050826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118309190613dd4565b60ff166101e086015250505050919050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c89190613dd4565b90508067ffffffffffffffff8111156118e3576118e3613e7f565b60405190808252806020026020018201604052801561191c57816020015b611909613593565b8152602001906001900390816119015790505b50915060005b818110156119e7576040516315895f4760e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ac4afa3890602401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613db7565b90506119c18161100a565b8483815181106119d3576119d3613f46565b602090810291909101015250600101611922565b505090565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613ee4565b611a9857604051631679e86f60e11b815260040160405180910390fd5b6000806000611aa68761318e565b5050935093505092508260ff16600114611b295760405163fdd5764560e01b81526001600160a01b03878116600483015282169063fdd5764590602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190613db7565b611b93565b60405163fdd5764560e01b81526001600160a01b03878116600483015283169063fdd5764590602401602060405180830381865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190613db7565b979650505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613dd4565b90508067ffffffffffffffff811115611c3f57611c3f613e7f565b604051908082528060200260200182016040528015611c7857816020015b611c65613630565b815260200190600190039081611c5d5790505b50915060005b818110156119e757604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613db7565b9050611d1d81611fc5565b848381518110611d2f57611d2f613f46565b602090810291909101015250600101611c7e565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca9190613dd4565b905060005b81811015611e8457604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190613db7565b9050611e6f81876130d0565b15611e7b578360010193505b50600101611dcf565b508167ffffffffffffffff811115611e9e57611e9e613e7f565b604051908082528060200260200182016040528015611ed757816020015b611ec46134d6565b815260200190600190039081611ebc5790505b5092506000915060005b81811015611fbd57604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190613db7565b9050611f8181876130d0565b15611fb457611f908187610245565b858581518110611fa257611fa2613f46565b60209081029190910101526001909301925b50600101611ee1565b505050919050565b611fcd613630565b600080600080600080611fdf8861318e565b6001600160a01b038e168d5260ff86166101a08e01819052959b5093995091975095509350915060011461207457826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f9190613db7565b6120d6565b846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613db7565b6001600160a01b03908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460608801526000600160ff88161461218657836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613db7565b6121e8565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190613db7565b6001600160a01b0381811660408b810182905251632e97ca2160e01b8152918c166004830152919250632e97ca2190602401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190613ee4565b15156080890152604080516345d31f9d60e01b815290516001600160a01b038316916345d31f9d9160048083019260209291908290030181865afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190613dd4565b8860a0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190613dd4565b6101208901525060ff861660010361241f57846001600160a01b0316639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190613dd4565b8760c0018181525050846001600160a01b0316635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190613dd4565b60e0880152612497565b816001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190613fdd565b6001600160801b0390811660e08a01521660c08801525b60008660ff1660011461250b57836001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613dd4565b61256d565b846001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190613dd4565b90508067ffffffffffffffff81111561258857612588613e7f565b6040519080825280602002602001820160405280156125b1578160200160208202803683370190505b506101408901528067ffffffffffffffff8111156125d1576125d1613e7f565b6040519080825280602002602001820160405280156125fa578160200160208202803683370190505b5061018089015260005b8181101561280f578760ff1660010361273f57604051632f2f971360e11b8152600481018290526000906001600160a01b03881690635e5f2e2690602401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613db7565b9050808a6101400151838151811061269d5761269d613f46565b6001600160a01b039283166020918202929092010152604051630f064e8760e31b8152828216600482015290881690637832743890602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127169190613dd4565b8a6101800151838151811061272d5761272d613f46565b60200260200101818152505050612807565b60405163172c48c760e01b8152600481018290526001600160a01b0386169063172c48c7906024016040805180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190613f11565b8061ffff1690508a610140015183815181106127c5576127c5613f46565b602002602001018b610180015184815181106127e3576127e3613f46565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505b600101612604565b50508560ff16600103612a1e576000846001600160a01b03166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613dd4565b90508067ffffffffffffffff81111561289b5761289b613e7f565b6040519080825280602002602001820160405280156128e057816020015b60408051808201909152600080825260208201528152602001906001900390816128b95790505b5061016089015260005b81811015612a1757604051635094cb4f60e01b8152600481018290526000906001600160a01b03881690635094cb4f90602401602060405180830381865afa15801561293a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295e9190613db7565b6040805180820182526001600160a01b03808416808352925163fdd5764560e01b81526004810193909352929350916020830191908a169063fdd5764590602401602060405180830381865afa1580156129bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e09190613db7565b6001600160a01b03168152508a61016001518381518110612a0357612a03613f46565b6020908102919091010152506001016128ea565b5050612bea565b6000816001600160a01b031663373c8f626040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a869190810190614007565b80519091508067ffffffffffffffff811115612aa457612aa4613e7f565b604051908082528060200260200182016040528015612ae957816020015b6040805180820190915260008082526020820152815260200190600190039081612ac25790505b506101608a015260005b81811015612be6576000838281518110612b0f57612b0f613f46565b602002602001015190506040518060400160405280826001600160a01b03168152602001886001600160a01b031663fdd57645846040518263ffffffff1660e01b8152600401612b6e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baf9190613db7565b6001600160a01b03168152508b61016001518381518110612bd257612bd2613f46565b602090810291909101015250600101612af3565b5050505b8560ff16600103612dc357846001600160a01b031663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613dd4565b61010088015260ff61028088015260408051635e0b63d360e01b815290516001600160a01b03871691635e0b63d39160048083019260209291908290030181865afa158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190613dd4565b61ffff166102a088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613dd4565b61ffff166102c088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db49190613dd4565b61ffff166102e08801526130c5565b81876101c001906001600160a01b031690816001600160a01b031681525050826001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613db7565b876101e001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190613db7565b8761022001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401608060405180830381865afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906140cc565b505015156102408901525060408051639fd12b7760e01b815290516001600160a01b03851691639fd12b779160048083019260209291908290030181865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190613dd4565b87610260018181525050826001600160a01b0316638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061412c565b60ff1661028088015260408051634d78e9ad60e11b815290516001600160a01b03851691639af1d35a9160048083019260a09291908290030181865afa158015613072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613096919061414f565b61ffff9081166103208d01529081166103008c01529081166102e08b01529081166102c08a0152166102a08801525b505050505050919050565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190613ee4565b61317c57604051631679e86f60e11b815260040160405180910390fd5b6131868484613455565b949350505050565b600080600080600080867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fbc6f6b826040518263ffffffff1660e01b81526004016131f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132349190613ee4565b61325157604051631679e86f60e11b815260040160405180910390fd5b876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190613dd4565b96508660ff1660010361332c57879550856001600160a01b031663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613db7565b94506133f8565b879350836001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561336d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133919190613db7565b9250836001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190613db7565b91505b5091939550919395565b600082158061340f575081155b1561341c5750600061344f565b61271061342a6002826141b4565b61ffff166134388486613f85565b61344291906141d5565b61344c9190613fb2565b90505b92915050565b60405163055ee9b560e01b81526001600160a01b038281166004830152600091829185169063055ee9b590602401602060405180830381865afa1580156134a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c49190613db7565b6001600160a01b031614159392505050565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b60405180610200016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b604080516103408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082018190526101808201526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081019190915290565b6001600160a01b038116811461371857600080fd5b50565b6000806040838503121561372e57600080fd5b823561373981613703565b9150602083013561374981613703565b809150509250929050565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101613768565b509495945050505050565b80516001600160a01b03168252600061026060208301516137e860208601826001600160a01b03169052565b5060408301516137fc604086018215159052565b50606083015161381760608601826001600160a01b03169052565b50608083015161383260808601826001600160a01b03169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261388183870182613754565b925050506101608084015181860152506101808084015181860152506101a0808401516138b18287018215159052565b50506101c083810151908501526101e0808401519085015261020080840151908501526102208084015160ff16908501526102409283015192909301919091525090565b60208152600061344c60208301846137bc565b60006020828403121561391a57600080fd5b813561392581613703565b9392505050565b80516001600160a01b03168252602081015161394c602084018215159052565b50604081015161396760408401826001600160a01b03169052565b50606081015161398260608401826001600160a01b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161344f828461392c565b6020808252825182820181905260009190848201906040850190845b81811015613a5957613a4583855161392c565b928401926102009290920191600101613a32565b50909695505050505050565b600081518084526020808501945080840160005b838110156137b15781516001600160a01b031687529582019590820190600101613a79565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03908116895290840151168388015260409096019590820190600101613ab2565b600081518084526020808501945080840160005b838110156137b157815187529582019590820190600101613afa565b80516001600160a01b0316825260006103406020830151613b4260208601826001600160a01b03169052565b506040830151613b5d60408601826001600160a01b03169052565b506060830151613b71606086018215159052565b506080830151613b85608086018215159052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152613bd483870182613a65565b925050506101608084015185830382870152613bf08382613a9e565b925050506101808084015185830382870152613c0c8382613ae6565b925050506101a080840151613c258287018260ff169052565b50506101c0838101516001600160a01b03908116918601919091526101e0808501518216908601526102008085015115159086015261022080850151909116908501526102408084015115159085015261026080840151908501526102808084015160ff16908501526102a08084015161ffff908116918601919091526102c0808501518216908601526102e08085015182169086015261030080850151821690860152610320938401511692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d20858351613b16565b94509285019290850190600101613d04565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d828583516137bc565b94509285019290850190600101613d66565b60208152600061344c6020830184613b16565b8051613db281613703565b919050565b600060208284031215613dc957600080fd5b815161392581613703565b600060208284031215613de657600080fd5b5051919050565b600080600080600060a08688031215613e0557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008060408385031215613e4057600080fd5b505080516020909101519092909150565b600080600060608486031215613e6657600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215613eab57600080fd5b8451613eb681613703565b60208601516040870151606090970151919890975090945092505050565b80518015158114613db257600080fd5b600060208284031215613ef657600080fd5b61344c82613ed4565b805161ffff81168114613db257600080fd5b60008060408385031215613f2457600080fd5b8251613f2f81613703565b9150613f3d60208401613eff565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561344f5761344f613f5c565b808202811582820484141761344f5761344f613f5c565b634e487b7160e01b600052601260045260246000fd5b600082613fc157613fc1613f9c565b500490565b80516001600160801b0381168114613db257600080fd5b60008060408385031215613ff057600080fd5b613ff983613fc6565b9150613f3d60208401613fc6565b6000602080838503121561401a57600080fd5b825167ffffffffffffffff8082111561403257600080fd5b818501915085601f83011261404657600080fd5b81518181111561405857614058613e7f565b8060051b604051601f19603f8301168101818110858211171561407d5761407d613e7f565b60405291825284820192508381018501918883111561409b57600080fd5b938501935b828510156140c0576140b185613da7565b845293850193928501926140a0565b98975050505050505050565b600080600080608085870312156140e257600080fd5b6140eb85613fc6565b93506140f960208601613ed4565b9250604085015164ffffffffff8116811461411357600080fd5b915061412160608601613eff565b905092959194509250565b60006020828403121561413e57600080fd5b815160ff8116811461392557600080fd5b600080600080600060a0868803121561416757600080fd5b61417086613eff565b945061417e60208701613eff565b935061418c60408701613eff565b925061419a60608701613eff565b91506141a860808701613eff565b90509295509295909350565b600061ffff808416806141c9576141c9613f9c565b92169190910492915050565b8082018082111561344f5761344f613f5c56fea264697066735822122033db04dd6ad85cbb23c61a3c1df229cdee23950afa0e93d191a4e60c173de79664736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0x663B8FDB EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0x7A0C7B21 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0xA80DEDA3 EQ PUSH2 0x1E2 JUMPI DUP1 PUSH4 0xAE093F3F EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0xFC9914CB EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDBD616D EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x1BCD8FC0 EQ PUSH2 0x102 JUMPI DUP1 PUSH4 0x2954018C EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x4B2F336D EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x4C472FC9 EQ PUSH2 0x17D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x38F5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF5 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x100A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A07 JUMP JUMPDEST PUSH2 0x10A PUSH2 0x1842 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3A16 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x13E PUSH2 0x18B CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x19EC JUMP JUMPDEST PUSH2 0x198 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x1AE PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3CDD JUMP JUMPDEST PUSH2 0x13E PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1F5 PUSH2 0x1F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1D43 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D3F JUMP JUMPDEST PUSH2 0x215 PUSH2 0x210 CALLDATASIZE PUSH1 0x4 PUSH2 0x3908 JUMP JUMPDEST PUSH2 0x1FC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD9 SWAP2 SWAP1 PUSH2 0x3D94 JUMP JUMPDEST PUSH2 0x235 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x371B JUMP JUMPDEST PUSH2 0x30D0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD9 JUMP JUMPDEST PUSH2 0x24D PUSH2 0x34D6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x25E DUP9 PUSH2 0x318E JUMP JUMPDEST POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP PUSH1 0x0 DUP6 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x2E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0xFF DUP8 AND PUSH2 0x220 DUP10 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x20 DUP12 ADD MSTORE DUP12 DUP2 AND PUSH1 0x60 DUP12 ADD MSTORE DUP3 AND DUP10 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 SUB PUSH2 0x71A JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E3 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x456 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x534 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x531 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x540 JUMPI PUSH2 0x160 DUP9 ADD MSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3CE07355 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x3CE07355 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x5A9 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x5A6 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x5B5 JUMPI PUSH2 0x180 DUP9 ADD MSTORE JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH4 0x132C653F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x996329F8 SWAP1 PUSH1 0x64 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x62C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x629 SWAP2 DUP2 ADD SWAP1 PUSH2 0x3DED JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x63E JUMPI POP POP ISZERO ISZERO PUSH2 0x1A0 DUP11 ADD MSTORE POP POP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1AFBB7A4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x67C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6A0 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x1C0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x710 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x8DF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x758 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x77C SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x63EF1C53 PUSH1 0xE1 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xC7DE38A6 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7EE SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST POP PUSH1 0xE0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xDFD59465 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xDFD59465 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x83A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x85E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8CE SWAP2 SWAP1 PUSH2 0x3E51 JUMP JUMPDEST PUSH1 0xC0 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x1C0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x953 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x9B5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x991 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9B5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA19 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP10 AND EQ PUSH2 0xA93 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA8E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xAF5 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0xB71 JUMPI PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB6C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xBDB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2D1473B3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB451CECC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x240 DUP11 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBFA JUMPI PUSH2 0xBFA PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC4C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x0 NOT SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0xC18 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF26 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x80 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP1 DUP4 SHL SWAP1 PUSH1 0xFF DUP13 AND SWAP1 SUB PUSH2 0xD87 JUMPI PUSH1 0x40 MLOAD PUSH4 0x57853281 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE DUP11 AND SWAP1 PUSH4 0xAF0A6502 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCDF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD03 SWAP2 SWAP1 PUSH2 0x3E95 JUMP JUMPDEST POP POP PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP11 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xED8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDEF SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 DUP5 MSTORE PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE3A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5E SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE DUP2 MLOAD PUSH1 0x40 MLOAD PUSH4 0xF9EAEE0D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0xF9EAEE0D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xED0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE JUMPDEST PUSH2 0x240 DUP13 ADD MLOAD DUP2 AND ISZERO PUSH2 0xEEC JUMPI PUSH1 0x1 PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 JUMPDEST ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x140 DUP13 ADD MLOAD DUP1 MLOAD DUP4 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0xF11 JUMPI PUSH2 0xF11 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0xC56 JUMP JUMPDEST POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D11A15 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF89 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP10 PUSH2 0x1E0 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3DC54B40 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFD1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFF5 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x200 DUP11 ADD MSTORE POP SWAP7 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1012 PUSH2 0x3593 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x5B16EBB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x5B16EBB7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x107C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10A0 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x10BD JUMPI PUSH1 0x40 MLOAD PUSH4 0x1A709647 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 DUP4 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFE14112D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD DUP6 SWAP3 SWAP2 PUSH4 0xFE14112D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1107 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x112B SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xEF8D9603 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xE0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11DD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C19386C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1248 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x126C SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x100 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12B4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12D8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1320 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1344 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH1 0x80 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x45D31F9D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x138B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13AF SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x140 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x141B SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x40 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x36DDA7D5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1476 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149A SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x788C6BFE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1519 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x160 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE941FA78 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1561 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1585 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH32 0x0 DUP3 AND EQ PUSH1 0x20 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD PUSH4 0x609AE317 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 MLOAD SWAP2 DUP5 AND SWAP3 PUSH4 0x609AE317 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1601 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1625 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1C0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDBCB313B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x166D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1691 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP4 PUSH2 0x1A0 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP4 PUSH1 0x60 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1703 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xA84F927 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x5427C938 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x174E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1772 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x17BD JUMPI PUSH2 0x180 DUP6 ADD MLOAD DUP2 SWAP1 PUSH2 0x17AE SWAP1 PUSH2 0x1792 SWAP1 PUSH2 0x2710 PUSH2 0x3F72 JUMP JUMPDEST DUP8 PUSH2 0x100 ADD MLOAD DUP9 PUSH2 0x140 ADD MLOAD PUSH2 0x17A8 SWAP2 SWAP1 PUSH2 0x3F85 JUMP JUMPDEST SWAP1 PUSH2 0x3402 JUMP JUMPDEST PUSH2 0x17B8 SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD JUMPDEST DUP6 PUSH2 0x120 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x180C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1830 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x1E0 DUP7 ADD MSTORE POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB4AC6860 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18C8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x18E3 JUMPI PUSH2 0x18E3 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x191C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1909 PUSH2 0x3593 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1901 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x15895F47 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xAC4AFA38 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1992 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19B6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x19C1 DUP2 PUSH2 0x100A JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x19D3 JUMPI PUSH2 0x19D3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1922 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x1A98 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1AA6 DUP8 PUSH2 0x318E JUMP JUMPDEST POP POP SWAP4 POP SWAP4 POP POP SWAP3 POP DUP3 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x1B29 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B24 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B93 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C00 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C24 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1C3F JUMPI PUSH2 0x1C3F PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1C78 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1C65 PUSH2 0x3630 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1C5D JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x19E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D12 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1D1D DUP2 PUSH2 0x1FC5 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1D2F JUMPI PUSH2 0x1D2F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1C7E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC29277CD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DCA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E84 JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E3F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E63 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E6F DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1E7B JUMPI DUP4 PUSH1 0x1 ADD SWAP4 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1DCF JUMP JUMPDEST POP DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1E9E JUMPI PUSH2 0x1E9E PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1ED7 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1EC4 PUSH2 0x34D6 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1EBC JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x785B93F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x1E16E4FC SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F75 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP PUSH2 0x1F81 DUP2 DUP8 PUSH2 0x30D0 JUMP JUMPDEST ISZERO PUSH2 0x1FB4 JUMPI PUSH2 0x1F90 DUP2 DUP8 PUSH2 0x245 JUMP JUMPDEST DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1FA2 JUMPI PUSH2 0x1FA2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1EE1 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1FCD PUSH2 0x3630 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1FDF DUP9 PUSH2 0x318E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 AND DUP14 MSTORE PUSH1 0xFF DUP7 AND PUSH2 0x1A0 DUP15 ADD DUP2 SWAP1 MSTORE SWAP6 SWAP12 POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP SWAP2 POP PUSH1 0x1 EQ PUSH2 0x2074 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6F307DC3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x204B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x206F SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x20D6 JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2495A599 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20D6 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP10 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 SWAP1 SWAP2 AND EQ PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0xFF DUP9 AND EQ PUSH2 0x2186 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x215D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2181 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x21E8 JUMP JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x570A7AF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21E8 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x40 DUP12 DUP2 ADD DUP3 SWAP1 MSTORE MLOAD PUSH4 0x2E97CA21 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH4 0x2E97CA21 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2237 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x225B SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x45D31F9D PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x45D31F9D SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22CB SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP9 PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x74375359 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2312 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2336 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x120 DUP10 ADD MSTORE POP PUSH1 0xFF DUP7 AND PUSH1 0x1 SUB PUSH2 0x241F JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9B2CB5D8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2386 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23AA SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5F48F393 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2415 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE PUSH2 0x2497 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x860AEFCF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x245C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2480 SWAP2 SWAP1 PUSH2 0x3FDD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0xE0 DUP11 ADD MSTORE AND PUSH1 0xC0 DUP9 ADD MSTORE JUMPDEST PUSH1 0x0 DUP7 PUSH1 0xFF AND PUSH1 0x1 EQ PUSH2 0x250B JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x458936F5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2506 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x256D JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x20A05FF7 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2549 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x256D SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2588 JUMPI PUSH2 0x2588 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x140 DUP10 ADD MSTORE DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x25D1 JUMPI PUSH2 0x25D1 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25FA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH2 0x180 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x280F JUMPI DUP8 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x273F JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F2F9713 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5E5F2E26 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x265F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2683 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 POP DUP1 DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x269D JUMPI PUSH2 0x269D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x20 SWAP2 DUP3 MUL SWAP3 SWAP1 SWAP3 ADD ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF064E87 PUSH1 0xE3 SHL DUP2 MSTORE DUP3 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND SWAP1 PUSH4 0x78327438 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2716 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP11 PUSH2 0x180 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x272D JUMPI PUSH2 0x272D PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP PUSH2 0x2807 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2783 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A7 SWAP2 SWAP1 PUSH2 0x3F11 JUMP JUMPDEST DUP1 PUSH2 0xFFFF AND SWAP1 POP DUP11 PUSH2 0x140 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x27C5 JUMPI PUSH2 0x27C5 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP12 PUSH2 0x180 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27E3 JUMPI PUSH2 0x27E3 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP3 DUP2 MSTORE POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2604 JUMP JUMPDEST POP POP DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2A1E JUMPI PUSH1 0x0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x50E036FF PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x285C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2880 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP1 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x289B JUMPI PUSH2 0x289B PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x28E0 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x28B9 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP10 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2A17 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5094CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP1 PUSH4 0x5094CB4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x293A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x295E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 DUP4 MSTORE SWAP3 MLOAD PUSH4 0xFDD57645 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 DUP11 AND SWAP1 PUSH4 0xFDD57645 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29E0 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP11 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A03 JUMPI PUSH2 0x2A03 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x28EA JUMP JUMPDEST POP POP PUSH2 0x2BEA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x373C8F62 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2A86 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2AA4 JUMPI PUSH2 0x2AA4 PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2AE9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2AC2 JUMPI SWAP1 POP JUMPDEST POP PUSH2 0x160 DUP11 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2BE6 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B0F JUMPI PUSH2 0x2B0F PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFDD57645 DUP5 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2B6E SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BAF SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP DUP12 PUSH2 0x160 ADD MLOAD DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BD2 JUMPI PUSH2 0x2BD2 PUSH2 0x3F46 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2AF3 JUMP JUMPDEST POP POP POP JUMPDEST DUP6 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x2DC3 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB2C53A6C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C57 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0x100 DUP9 ADD MSTORE PUSH1 0xFF PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x5E0B63D3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x5E0B63D3 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2CCE SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2A0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D41 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2C0 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x1C8AFFD5 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x3915FFAA SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DB4 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x2E0 DUP9 ADD MSTORE PUSH2 0x30C5 JUMP JUMPDEST DUP2 DUP8 PUSH2 0x1C0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E44 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x1E0 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9408B63F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EC4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST DUP8 PUSH2 0x220 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCFF0AB96 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F44 SWAP2 SWAP1 PUSH2 0x40CC JUMP JUMPDEST POP POP ISZERO ISZERO PUSH2 0x240 DUP10 ADD MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x9FD12B77 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9FD12B77 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FB8 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST DUP8 PUSH2 0x260 ADD DUP2 DUP2 MSTORE POP POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8345F26E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3000 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3024 SWAP2 SWAP1 PUSH2 0x412C JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x280 DUP9 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x4D78E9AD PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH4 0x9AF1D35A SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3096 SWAP2 SWAP1 PUSH2 0x414F JUMP JUMPDEST PUSH2 0xFFFF SWAP1 DUP2 AND PUSH2 0x320 DUP14 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x300 DUP13 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2E0 DUP12 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x2C0 DUP11 ADD MSTORE AND PUSH2 0x2A0 DUP9 ADD MSTORE JUMPDEST POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6FBC6F6B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x6FBC6F6B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x313B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x315F SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x317C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3186 DUP5 DUP5 PUSH2 0x3455 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x6FBC6F6B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x31F3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3210 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3234 SWAP2 SWAP1 PUSH2 0x3EE4 JUMP JUMPDEST PUSH2 0x3251 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1679E86F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x54FD4D50 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x328F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32B3 SWAP2 SWAP1 PUSH2 0x3DD4 JUMP JUMPDEST SWAP7 POP DUP7 PUSH1 0xFF AND PUSH1 0x1 SUB PUSH2 0x332C JUMPI DUP8 SWAP6 POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF93F515B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3301 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3325 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP5 POP PUSH2 0x33F8 JUMP JUMPDEST DUP8 SWAP4 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F7A1881 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x336D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3391 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP3 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33F5 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP2 SWAP4 SWAP6 POP SWAP2 SWAP4 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x340F JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0x341C JUMPI POP PUSH1 0x0 PUSH2 0x344F JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x342A PUSH1 0x2 DUP3 PUSH2 0x41B4 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x3438 DUP5 DUP7 PUSH2 0x3F85 JUMP JUMPDEST PUSH2 0x3442 SWAP2 SWAP1 PUSH2 0x41D5 JUMP JUMPDEST PUSH2 0x344C SWAP2 SWAP1 PUSH2 0x3FB2 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x55EE9B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP6 AND SWAP1 PUSH4 0x55EE9B5 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34A0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34C4 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x200 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x340 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD DUP4 SWAP1 MSTORE PUSH2 0x140 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x180 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x200 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x220 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x240 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x260 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x280 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2C0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x2E0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x300 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x320 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x372E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3739 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3749 DUP2 PUSH2 0x3703 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 MSTORE DUP4 DUP2 ADD MLOAD DUP5 DUP10 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP9 ADD MSTORE PUSH1 0x80 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3768 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x260 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x37E8 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x37FC PUSH1 0x40 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3817 PUSH1 0x60 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3832 PUSH1 0x80 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3881 DUP4 DUP8 ADD DUP3 PUSH2 0x3754 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x38B1 DUP3 DUP8 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1E0 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x200 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x220 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 SWAP3 DUP4 ADD MLOAD SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x37BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x391A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x394C PUSH1 0x20 DUP5 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x3967 PUSH1 0x40 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x3982 PUSH1 0x60 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP2 DUP2 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1C0 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x1E0 SWAP1 DUP2 ADD MLOAD PUSH1 0xFF AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x200 DUP2 ADD PUSH2 0x344F DUP3 DUP5 PUSH2 0x392C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A59 JUMPI PUSH2 0x3A45 DUP4 DUP6 MLOAD PUSH2 0x392C JUMP JUMPDEST SWAP3 DUP5 ADD SWAP3 PUSH2 0x200 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3A32 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3A79 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP10 MSTORE SWAP1 DUP5 ADD MLOAD AND DUP4 DUP9 ADD MSTORE PUSH1 0x40 SWAP1 SWAP7 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x37B1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3AFA JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE PUSH1 0x0 PUSH2 0x340 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3B42 PUSH1 0x20 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3B5D PUSH1 0x40 DUP7 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3B71 PUSH1 0x60 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3B85 PUSH1 0x80 DUP7 ADD DUP3 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH2 0x140 DUP1 DUP5 ADD MLOAD DUP3 DUP3 DUP8 ADD MSTORE PUSH2 0x3BD4 DUP4 DUP8 ADD DUP3 PUSH2 0x3A65 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x160 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3BF0 DUP4 DUP3 PUSH2 0x3A9E JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x180 DUP1 DUP5 ADD MLOAD DUP6 DUP4 SUB DUP3 DUP8 ADD MSTORE PUSH2 0x3C0C DUP4 DUP3 PUSH2 0x3AE6 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1A0 DUP1 DUP5 ADD MLOAD PUSH2 0x3C25 DUP3 DUP8 ADD DUP3 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH2 0x1C0 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x200 DUP1 DUP6 ADD MLOAD ISZERO ISZERO SWAP1 DUP7 ADD MSTORE PUSH2 0x220 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP6 ADD MSTORE PUSH2 0x240 DUP1 DUP5 ADD MLOAD ISZERO ISZERO SWAP1 DUP6 ADD MSTORE PUSH2 0x260 DUP1 DUP5 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x280 DUP1 DUP5 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP6 ADD MSTORE PUSH2 0x2A0 DUP1 DUP5 ADD MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x2C0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x2E0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x300 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x320 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D20 DUP6 DUP4 MLOAD PUSH2 0x3B16 JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D04 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3D32 JUMPI PUSH1 0x3F NOT DUP9 DUP7 SUB ADD DUP5 MSTORE PUSH2 0x3D82 DUP6 DUP4 MLOAD PUSH2 0x37BC JUMP JUMPDEST SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3D66 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x344C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3B16 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3DB2 DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3925 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3E05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP4 MLOAD PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x80 SWAP1 SWAP8 ADD MLOAD SWAP3 SWAP9 SWAP2 SWAP8 POP SWAP6 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3EAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH2 0x3EB6 DUP2 PUSH2 0x3703 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x60 SWAP1 SWAP8 ADD MLOAD SWAP2 SWAP9 SWAP1 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3EF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x344C DUP3 PUSH2 0x3ED4 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x3F2F DUP2 PUSH2 0x3703 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3FC1 JUMPI PUSH2 0x3FC1 PUSH2 0x3F9C JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3DB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FF9 DUP4 PUSH2 0x3FC6 JUMP JUMPDEST SWAP2 POP PUSH2 0x3F3D PUSH1 0x20 DUP5 ADD PUSH2 0x3FC6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x401A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4032 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4046 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x4058 JUMPI PUSH2 0x4058 PUSH2 0x3E7F JUMP JUMPDEST DUP1 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR ISZERO PUSH2 0x407D JUMPI PUSH2 0x407D PUSH2 0x3E7F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 DUP3 MSTORE DUP5 DUP3 ADD SWAP3 POP DUP4 DUP2 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x409B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x40C0 JUMPI PUSH2 0x40B1 DUP6 PUSH2 0x3DA7 JUMP JUMPDEST DUP5 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x40A0 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x40E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40EB DUP6 PUSH2 0x3FC6 JUMP JUMPDEST SWAP4 POP PUSH2 0x40F9 PUSH1 0x20 DUP7 ADD PUSH2 0x3ED4 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH2 0x4121 PUSH1 0x60 DUP7 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x413E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3925 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4170 DUP7 PUSH2 0x3EFF JUMP JUMPDEST SWAP5 POP PUSH2 0x417E PUSH1 0x20 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP4 POP PUSH2 0x418C PUSH1 0x40 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP3 POP PUSH2 0x419A PUSH1 0x60 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP2 POP PUSH2 0x41A8 PUSH1 0x80 DUP8 ADD PUSH2 0x3EFF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 AND DUP1 PUSH2 0x41C9 JUMPI PUSH2 0x41C9 PUSH2 0x3F9C JUMP JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x344F JUMPI PUSH2 0x344F PUSH2 0x3F5C JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLER 0xDB DIV 0xDD PUSH11 0xD85CBB23C61A3C1DF229CD 0xEE 0x23 SWAP6 EXP STATICCALL 0xE SWAP4 0xD1 SWAP2 LOG4 0xE6 0xC OR RETURNDATASIZE 0xE7 SWAP7 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "1496:17729:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4836:4483;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15290:1480;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16831:409::-;;;:::i;:::-;;;;;;;:::i;1628:48::-;;;;;;;;-1:-1:-1;;;;;6502:32:70;;;6484:51;;6472:2;6457:18;1628:48:17;6314:227:70;1817:34:17;;;;;17337:557;;;;;;:::i;:::-;;:::i;1882:35::-;;1916:1;1882:35;;;;;6900:25:70;;;6888:2;6873:18;1882:35:17;6754:177:70;9388:546:17;;;:::i;:::-;;;;;;;:::i;1729:52::-;;;;;2946:1221;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10063:5135::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4362:258::-;;;;;;:::i;:::-;;:::i;:::-;;;14242:14:70;;14235:22;14217:41;;14205:2;14190:18;4362:258:17;14077:187:70;4836:4483:17;4953:31;;:::i;:::-;5014:9;5037:28;5079:26;5119:32;5165:26;5206:34;5225:14;5206:18;:34::i;:::-;5000:240;;;;;;;;;;;5251:21;5276:3;:8;;5283:1;5276:8;5275:138;;5363:50;;-1:-1:-1;;;5363:50:17;;-1:-1:-1;;;;;6502:32:70;;;5363:50:17;;;6484:51:70;5363:40:17;;;;;6457:18:70;;5363:50:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5275:138;;;5300:48;;-1:-1:-1;;;5300:48:17;;-1:-1:-1;;;;;6502:32:70;;;5300:48:17;;;6484:51:70;5300:38:17;;;;;6457:18:70;;5300:48:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5424:20;;;:14;;;:20;;;-1:-1:-1;;;;;5455:26:17;;;:15;;;:26;5491:37;;;:20;;;:37;5538:27;;;;5251:162;;-1:-1:-1;5587:1:17;5580:8;5576:1909;;5624:13;-1:-1:-1;;;;;5624:29:17;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5604:51:17;;;:17;;;:51;5689:42;;-1:-1:-1;;;5689:42:17;;6502:32:70;;;5689:42:17;;;6484:51:70;5689:27:17;;;;;;6457:18:70;;5689:42:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5669:17;;;:62;5767:87;;-1:-1:-1;;;5767:87:17;;-1:-1:-1;;;;;6502:32:70;;;5767:87:17;;;6484:51:70;5767:42:17;;;;;6457:18:70;;5767:87:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5745:19;;;:109;5889:62;;-1:-1:-1;;;5889:62:17;;-1:-1:-1;;;;;15043:32:70;;;5889:62:17;;;15025:51:70;5945:5:17;15092:18:70;;;15085:50;5889:45:17;;;;;14998:18:70;;5889:62:17;;;;;;;;;;;;;;;;;;-1:-1:-1;5889:62:17;;;;;;;;-1:-1:-1;;5889:62:17;;;;;;;;;;;;:::i;:::-;;;5869:187;;;6006:18;;;:26;5869:187;6090:61;;-1:-1:-1;;;6090:61:17;;-1:-1:-1;;;;;15043:32:70;;;6090:61:17;;;15025:51:70;6146:4:17;15092:18:70;;;15085:50;6090:45:17;;;;;14998:18:70;;6090:61:17;;;;;;;;;;;;;;;;;;-1:-1:-1;6090:61:17;;;;;;;;-1:-1:-1;;6090:61:17;;;;;;;;;;;;:::i;:::-;;;6070:192;;;6206:24;;;:32;6070:192;6401:17;;;;6296:167;;-1:-1:-1;;;6296:167:17;;-1:-1:-1;;;;;15360:32:70;;;6296:167:17;;;15342:51:70;15409:18;;;15402:34;;;;6440:5:17;15452:18:70;;;15445:50;6296:48:17;;;;;;15315:18:70;;6296:167:17;;;;;;;;;;;;;;;;;;-1:-1:-1;6296:167:17;;;;;;;;-1:-1:-1;;6296:167:17;;;;;;;;;;;;:::i;:::-;;;6276:444;;;-1:-1:-1;;6678:18:17;;6657;;;:39;-1:-1:-1;;6276:444:17;6773:13;-1:-1:-1;;;;;6758:61:17;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6734:21;;;:87;6872:77;;-1:-1:-1;;;6872:77:17;;-1:-1:-1;;;;;6502:32:70;;;6872:77:17;;;6484:51:70;6872:62:17;;;;;6457:18:70;;6872:77:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6836:33;;;:113;5576:1909;;;7000:15;-1:-1:-1;;;;;7000:26:17;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6980:48:17;;;:17;;;:48;7066:42;;-1:-1:-1;;;7066:42:17;;6502:32:70;;;7066:42:17;;;6484:51:70;7066:27:17;;;;;;6457:18:70;;7066:42:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7043:17:17;;;7042:66;7144:87;;-1:-1:-1;;;7144:87:17;;-1:-1:-1;;;;;6502:32:70;;;7144:87:17;;;6484:51:70;7144:42:17;;;;;6457:18:70;;7144:87:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7122:19;;;:109;7411:63;;-1:-1:-1;;;7411:63:17;;-1:-1:-1;;;;;6502:32:70;;;7411:63:17;;;6484:51:70;7411:48:17;;;;;6457:18:70;;7411:63:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7354:40;;;7246:228;7303:33;;;7246:228;7264:21;;;7246:228;5576:1909;7495:12;7532:3;:8;;7539:1;7532:8;7531:65;;7574:15;-1:-1:-1;;;;;7574:20:17;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7531:65;;;7544:13;-1:-1:-1;;;;;7544:25:17;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7495:111;;7649:4;-1:-1:-1;;;;;7636:32:17;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7616:17;;;:54;7681:28;7720:1;7713:8;;;;7712:112;;7785:15;-1:-1:-1;;;;;7785:37:17;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7712:112;;;7737:12;-1:-1:-1;;;;;7737:31:17;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7681:143;;7862:3;:8;;7869:1;7862:8;7861:128;;7942:47;;-1:-1:-1;;;7942:47:17;;-1:-1:-1;;;;;6502:32:70;;;7942:47:17;;;6484:51:70;7942:32:17;;;;;6457:18:70;;7942:47:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7861:128;;;7886:41;;-1:-1:-1;;;7886:41:17;;-1:-1:-1;;;;;6502:32:70;;;7886:41:17;;;6484:51:70;7886:26:17;;;;;6457:18:70;;7886:41:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7835:23;;;:154;8037:20;8018:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8018:40:17;;-1:-1:-1;;8018:40:17;;;;;;;;;;;-1:-1:-1;8000:15:17;;;:58;8073:9;8068:1074;8092:20;8088:1;:24;8068:1074;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8223:1:17;:6;;;;8251:8;;;;;8247:669;;8322:81;;-1:-1:-1;;;8322:81:17;;-1:-1:-1;;;;;16826:32:70;;;8322:81:17;;;16808:51:70;16875:18;;;16868:34;;;8322:63:17;;;;;16781:18:70;;8322:81:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;8299:15:17;;;8283:120;-1:-1:-1;;;;;8283:120:17;;;;;;8445:88;;-1:-1:-1;;;8445:88:17;;;;;6484:51:70;;;;8445:27:17;;;;;;6457:18:70;;8445:88:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8425:108;;:17;;;:108;8247:669;;;8600:35;;-1:-1:-1;;;8600:35:17;;;;;6900:25:70;;;-1:-1:-1;;;;;8600:32:17;;;;;6873:18:70;;8600:35:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;8580:55:17;;;;;;8675:92;;-1:-1:-1;;;8675:92:17;;6502:32:70;;;8675:92:17;;;6484:51:70;8580:55:17;8675:31;;6457:18:70;;8675:92:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8657:15;;;:110;8862:13;;8809:88;;-1:-1:-1;;;8809:88:17;;-1:-1:-1;;;;;6502:32:70;;;8809:88:17;;;6484:51:70;8809:27:17;;;;;;6457:18:70;;8809:88:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8789:108;;:17;;;:108;8247:669;8965:23;;;;8953:35;;:40;:95;;9044:4;8953:95;;;9016:5;8953:95;8933:115;;:17;;;:115;9067:15;;;;:18;;8933:7;;9067:15;9083:1;;9067:18;;;;;;:::i;:::-;;;;;;;;;;:28;-1:-1:-1;;9114:3:17;;8068:1074;;;;9198:13;-1:-1:-1;;;;;9183:64:17;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9152:6;:28;;:97;;;;;9290:13;-1:-1:-1;;;;;9275:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9260:12;;;:52;-1:-1:-1;9260:6:17;;4836:4483;-1:-1:-1;;;;;;;;;4836:4483:17:o;15290:1480::-;15409:22;;:::i;:::-;2070:30;;-1:-1:-1;;;2070:30:17;;-1:-1:-1;;;;;6502:32:70;;;2070:30:17;;;6484:51:70;15385:5:17;;2070:17;:24;;;;;;6457:18:70;;2070:30:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2065:62;;2109:18;;-1:-1:-1;;;2109:18:17;;;;;;;;;;;2065:62;-1:-1:-1;;;;;15497:19:17;::::1;::::0;;;15553:24:::1;::::0;;-1:-1:-1;;;15553:24:17;;;;15480:5;;15497:19;15553:22:::1;::::0;:24:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;15497:19;15553:24:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15526:6;:24;;:51;;;::::0;::::1;15619:4;-1:-1:-1::0;;;;;15619:27:17::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15587:6;:29;;:61;;;::::0;::::1;15686:4;-1:-1:-1::0;;;;;15686:23:17::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15658:6;:25;;:53;;;::::0;::::1;15744:4;-1:-1:-1::0;;;;;15744:18:17::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15721:6;:20;;:43;;;::::0;::::1;15798:4;-1:-1:-1::0;;;;;15798:22:17::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15774:6;:21;;:48;;;::::0;::::1;15863:4;-1:-1:-1::0;;;;;15863:29:17::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15832:6;:28;;:62;;;::::0;::::1;15927:4;-1:-1:-1::0;;;;;15927:18:17::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15904:6;:20;;:43;;;::::0;::::1;15977:4;-1:-1:-1::0;;;;;15977:20:17::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15957:6;:17;;:42;-1:-1:-1::0;;;;;15957:42:17::1;;;-1:-1:-1::0;;;;;15957:42:17::1;;;::::0;::::1;16030:4;-1:-1:-1::0;;;;;16030:16:17::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16009:6;:18;;:39;-1:-1:-1::0;;;;;16009:39:17::1;;;-1:-1:-1::0;;;;;16009:39:17::1;;;::::0;::::1;16082:4;-1:-1:-1::0;;;;;16082:22:17::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16058:6;:21;;:48;;;::::0;::::1;16137:4;-1:-1:-1::0;;;;;16137:16:17::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16116;::::0;::::1;:39:::0;16181:17:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;16181:30:17;;::::1;16202:9;16181:30:::0;::::1;;16165:13;::::0;;::::1;:46:::0;;;;16242:19;;-1:-1:-1;;;16242:19:17;;;;:17;;::::1;::::0;::::1;::::0;:19:::1;::::0;;::::1;::::0;16165:13;16242:19;;;;;:17;:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16221:6;:18;;:40;;;::::0;::::1;16300:4;-1:-1:-1::0;;;;;16300:25:17::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16271:6;:26;;:56;;;::::0;::::1;16338:20;16368:6;:18;;;-1:-1:-1::0;;;;;16361:38:17::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16429:29;::::0;-1:-1:-1;;;16429:29:17;;::::1;::::0;::::1;6900:25:70::0;;;16338:63:17;;-1:-1:-1;16411:15:17::1;::::0;-1:-1:-1;;;;;16429:15:17;::::1;::::0;::::1;::::0;6873:18:70;;16429:29:17::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16411:47:::0;-1:-1:-1;16492:12:17;;:198:::1;;16648:18;::::0;::::1;::::0;16683:7;;16554:126:::1;::::0;16628:38:::1;::::0;139:3:47::1;16628:38:17;:::i;:::-;16578:6;:20;;;16555:6;:20;;;:43;;;;:::i;:::-;16554:56:::0;::::1;:126::i;:::-;:136;;;;:::i;:::-;16492:198;;;16519:6;:20;;;16492:198;16468:6;:21;;:222;;;::::0;::::1;16724:4;-1:-1:-1::0;;;;;16724:12:17::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16701:38;;:14;::::0;::::1;:38:::0;-1:-1:-1;;;15290:1480:17;;;;:::o;16831:409::-;16878:24;16914:19;16936:17;-1:-1:-1;;;;;16936:31:17;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16914:55;;17004:11;16989:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;16980:36;;17032:9;17027:207;17051:11;17047:1;:15;17027:207;;;17095:26;;-1:-1:-1;;;17095:26:17;;;;;6900:25:70;;;17080:12:17;;17095:17;-1:-1:-1;;;;;17095:23:17;;;;6873:18:70;;17095:26:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17080:41;;17147:17;17159:4;17147:11;:17::i;:::-;17135:6;17142:1;17135:9;;;;;;;;:::i;:::-;;;;;;;;;;:29;-1:-1:-1;17206:3:17;;17027:207;;;;16904:336;16831:409;:::o;17337:557::-;2337:48;;-1:-1:-1;;;2337:48:17;;-1:-1:-1;;;;;6502:32:70;;;2337:48:17;;;6484:51:70;17510:15:17;;17477:14;;2337:17;:33;;;;6457:18:70;;2337:48:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2332:101;;2406:27;;-1:-1:-1;;;2406:27:17;;;;;;;;;;;2332:101;17555:9:::1;17592:26:::0;17632:32:::1;17693:34;17712:14;17693:18;:34::i;:::-;17541:186;;;;;;;;;17749:3;:8;;17756:1;17749:8;17748:139;;17836:51;::::0;-1:-1:-1;;;17836:51:17;;-1:-1:-1;;;;;6502:32:70;;;17836:51:17::1;::::0;::::1;6484::70::0;17836:33:17;::::1;::::0;::::1;::::0;6457:18:70;;17836:51:17::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17748:139;;;17773:48;::::0;-1:-1:-1;;;17773:48:17;;-1:-1:-1;;;;;6502:32:70;;;17773:48:17::1;::::0;::::1;6484:51:70::0;17773:30:17;::::1;::::0;::::1;::::0;6457:18:70;;17773:48:17::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17738:149:::0;17337:557;-1:-1:-1;;;;;;;17337:557:17:o;9388:546::-;9468:33;9517:27;9547:17;-1:-1:-1;;;;;9547:53:17;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9517:85;;9646:19;9622:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9613:53;;9682:9;9677:251;9701:19;9697:1;:23;9677:251;;;9762:35;;-1:-1:-1;;;9762:35:17;;;;;6900:25:70;;;9738:21:17;;9762:17;-1:-1:-1;;;;;9762:32:17;;;;6873:18:70;;9762:35:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9738:59;;9823:35;9844:13;9823:20;:35::i;:::-;9811:6;9818:1;9811:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;9900:3:17;;9677:251;;2946:1221;3041:33;3148:13;3171:28;3202:17;-1:-1:-1;;;;;3202:53:17;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3171:86;;3273:9;3268:313;3292:20;3288:1;:24;3268:313;;;3382:35;;-1:-1:-1;;;3382:35:17;;;;;6900:25:70;;;3358:21:17;;3382:17;-1:-1:-1;;;;;3382:32:17;;;;6873:18:70;;3382:35:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3358:59;;3439:47;3462:13;3477:8;3439:22;:47::i;:::-;3435:101;;;3510:7;;;;;3435:101;-1:-1:-1;3553:3:17;;3268:313;;;;3624:5;3600:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3591:39;;3686:1;3678:9;;3702;3697:464;3721:20;3717:1;:24;3697:464;;;3783:35;;-1:-1:-1;;;3783:35:17;;;;;6900:25:70;;;3759:21:17;;3783:17;-1:-1:-1;;;;;3783:32:17;;;;6873:18:70;;3783:35:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3759:59;;3864:47;3887:13;3902:8;3864:22;:47::i;:::-;3860:255;;;3951:115;3997:13;4036:8;3951:20;:115::i;:::-;3935:6;3942:5;3935:13;;;;;;;;:::i;:::-;;;;;;;;;;:131;4089:7;;;;;3860:255;-1:-1:-1;4133:3:17;;3697:464;;;;3080:1087;;2946:1221;;;:::o;10063:5135::-;10162:31;;:::i;:::-;10223:9;10246:28;10288:26;10328:32;10374:26;10414:38;10465:34;10484:14;10465:18;:34::i;:::-;-1:-1:-1;;;;;10510:28:17;;;;10548:20;;;:14;;;:20;;;10209:290;;-1:-1:-1;10209:290:17;;-1:-1:-1;10209:290:17;;-1:-1:-1;10209:290:17;-1:-1:-1;10209:290:17;-1:-1:-1;10209:290:17;-1:-1:-1;10607:1:17;10600:8;10599:99;;10670:15;-1:-1:-1;;;;;10670:26:17;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:99;;;10624:13;-1:-1:-1;;;;;10624:29:17;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10579:119:17;;;:17;;;:119;;;10745:9;10724:30;;;;10708:13;;;:46;-1:-1:-1;10837:1:17;10830:8;;;;10829:105;;10912:15;-1:-1:-1;;;;;10912:20:17;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10829:105;;;10862:13;-1:-1:-1;;;;;10862:25:17;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10962:27:17;;;:11;;;;:27;;;11022:44;-1:-1:-1;;;11022:44:17;;6502:32:70;;;11022:44:17;;;6484:51:70;10962:27:17;;-1:-1:-1;11022:28:17;;6457:18:70;;11022:44:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11003:63;;:16;;;:63;11100:20;;;-1:-1:-1;;;11100:20:17;;;;-1:-1:-1;;;;;11100:18:17;;;;;:20;;;;;;;;;;;;;;:18;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11080:6;:17;;:40;;;;;11162:4;-1:-1:-1;;;;;11162:23:17;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11134;;;:53;-1:-1:-1;11212:8:17;;;11219:1;11212:8;11208:232;;11255:13;-1:-1:-1;;;;;11255:23:17;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11236:6;:16;;:44;;;;;11313:13;-1:-1:-1;;;;;11313:23:17;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11294:16;;;:44;11208:232;;;11408:12;-1:-1:-1;;;;;11408:19:17;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11369:60:17;;;11388:16;;;11369:60;;11370:16;;;11369:60;11208:232;11463:28;11495:3;:8;;11502:1;11495:8;11494:120;;11575:15;-1:-1:-1;;;;;11575:37:17;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11494:120;;;11523:12;-1:-1:-1;;;;;11523:31:17;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11463:151;;11669:20;11655:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11655:35:17;-1:-1:-1;11629:23:17;;;:61;11749:20;11735:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11735:35:17;-1:-1:-1;11704:28:17;;;:66;11817:9;11812:625;11836:20;11832:1;:24;11812:625;;;11889:3;:8;;11896:1;11889:8;11885:534;;11941:29;;-1:-1:-1;;;11941:29:17;;;;;6900:25:70;;;11925:13:17;;-1:-1:-1;;;;;11941:26:17;;;;;6873:18:70;;11941:29:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11925:45;;12025:5;11996:6;:23;;;12020:1;11996:26;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11996:34:17;;;:26;;;;;;;;;:34;12090:70;;-1:-1:-1;;;12090:70:17;;6502:32:70;;;12090:70:17;;;6484:51:70;12090:63:17;;;;;;6457:18:70;;12090:70:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12056:6;:28;;;12085:1;12056:31;;;;;;;;:::i;:::-;;;;;;:104;;;;;11899:284;11885:534;;;12361:35;;-1:-1:-1;;;12361:35:17;;;;;6900:25:70;;;-1:-1:-1;;;;;12361:32:17;;;;;6873:18:70;;12361:35:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12215:181;;;;;12245:6;:23;;;12269:1;12245:26;;;;;;;;:::i;:::-;;;;;;12301:6;:28;;;12330:1;12301:31;;;;;;;;:::i;:::-;;;;;;12215:181;;;;;-1:-1:-1;;;;;12215:181:17;-1:-1:-1;;;;;12215:181:17;;;;;;11885:534;11858:3;;11812:625;;;;11449:1012;12474:3;:8;;12481:1;12474:8;12470:1265;;12498:29;12530:12;-1:-1:-1;;;;;12530:51:17;;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12498:85;;12638:21;12616:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;12616:44:17;;;;;;;;;;;;;;;-1:-1:-1;12598:15:17;;;:62;12679:9;12674:418;12698:21;12694:1;:25;12674:418;;;12767:32;;-1:-1:-1;;;12767:32:17;;;;;6900:25:70;;;12741:23:17;;-1:-1:-1;;;;;12767:29:17;;;;;6873:18:70;;12767:32:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12839:167;;;;;;;;-1:-1:-1;;;;;12839:167:17;;;;;;12940:47;;-1:-1:-1;;;12940:47:17;;;;;6484:51:70;;;;12741:58:17;;-1:-1:-1;12839:167:17;;;;;12940:30;;;;;;6457:18:70;;12940:47:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12839:167:17;;;;12818:6;:15;;;12834:1;12818:18;;;;;;;;:::i;:::-;;;;;;;;;;:188;-1:-1:-1;13056:3:17;;12674:418;;;;12484:618;12470:1265;;;13122:33;13158:18;-1:-1:-1;;;;;13158:52:17;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13158:54:17;;;;;;;;;;;;:::i;:::-;13240:23;;13122:90;;-1:-1:-1;13240:23:17;13295:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;13295:26:17;;;;;;;;;;;;;;;-1:-1:-1;13277:15:17;;;:44;13340:9;13335:390;13359:3;13355:1;:7;13335:390;;;13384:23;13410:16;13427:1;13410:19;;;;;;;;:::i;:::-;;;;;;;13384:45;;13469:170;;;;;;;;13524:15;-1:-1:-1;;;;;13469:170:17;;;;;13570:15;-1:-1:-1;;;;;13570:33:17;;13604:15;13570:50;;;;;;;;;;;;;;-1:-1:-1;;;;;6502:32:70;;;;6484:51;;6472:2;6457:18;;6314:227;13570:50:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13469:170:17;;;;13448:6;:15;;;13464:1;13448:18;;;;;;;;:::i;:::-;;;;;;;;;;:191;-1:-1:-1;13689:3:17;;13335:390;;;;13108:627;;12470:1265;13749:3;:8;;13756:1;13749:8;13745:1447;;13856:13;-1:-1:-1;;;;;13841:64:17;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13814:24;;;:93;13953:3;13921:29;;;:35;13998:27;;;-1:-1:-1;;;13998:27:17;;;;-1:-1:-1;;;;;13998:25:17;;;;;:27;;;;;;;;;;;;;;:25;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13970:56;;:18;;;:56;14071:30;;;-1:-1:-1;;;14071:30:17;;;;-1:-1:-1;;;;;14071:28:17;;;;;:30;;;;;;;;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14040:62;;:21;;;:62;14152:30;;;-1:-1:-1;;;14152:30:17;;;;-1:-1:-1;;;;;14152:28:17;;;;;:30;;;;;;;;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14116:67;;:26;;;:67;13745:1447;;;14285:12;14255:6;:19;;:43;-1:-1:-1;;;;;14255:43:17;;;-1:-1:-1;;;;;14255:43:17;;;;;14340:15;-1:-1:-1;;;;;14340:34:17;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14312:6;:25;;:64;-1:-1:-1;;;;;14312:64:17;;;-1:-1:-1;;;;;14312:64:17;;;;;14408:12;-1:-1:-1;;;;;14408:21:17;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14390:6;:15;;:41;-1:-1:-1;;;;;14390:41:17;;;-1:-1:-1;;;;;14390:41:17;;;;;14486:12;-1:-1:-1;;;;;14486:19:17;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;14445:62:17;;14448:30;;;14445:62;-1:-1:-1;14598:36:17;;;-1:-1:-1;;;14598:36:17;;;;-1:-1:-1;;;;;14598:34:17;;;;;:36;;;;;;;;;;;;;;:34;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14570:6;:25;;:64;;;;;14734:15;-1:-1:-1;;;;;14734:61:17;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14702:95;;:29;;;:95;15145:22;;;-1:-1:-1;;;15145:22:17;;;;-1:-1:-1;;;;;15145:20:17;;;;;:22;;;;;;;;;;;;;;:20;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14888:279;;;;15091:33;;;14888:279;;;;15041:28;;;14888:279;;;;14993:26;;;14888:279;;;;14950:21;;;14888:279;;14910:18;;;14888:279;13745:1447;10199:4999;;;;;;10063:5135;;;:::o;4362:258::-;2337:48;;-1:-1:-1;;;2337:48:17;;-1:-1:-1;;;;;6502:32:70;;;2337:48:17;;;6484:51:70;4537:4:17;;4504:14;;2337:17;:33;;;;6457:18:70;;2337:48:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2332:101;;2406:27;;-1:-1:-1;;;2406:27:17;;;;;;;;;;;2332:101;4564:49:::1;4588:14;4604:8;4564:23;:49::i;:::-;4557:56:::0;4362:258;-1:-1:-1;;;;4362:258:17:o;18304:919::-;18472:9;18495:28;18537:26;18577:32;18623:26;18663:38;18426:14;2337:17;-1:-1:-1;;;;;2337:33:17;;2371:13;2337:48;;;;;;;;;;;;;;-1:-1:-1;;;;;6502:32:70;;;;6484:51;;6472:2;6457:18;;6314:227;2337:48:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2332:101;;2406:27;;-1:-1:-1;;;2406:27:17;;;;;;;;;;;2332:101;18747:14:::1;-1:-1:-1::0;;;;;18738:32:17::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18726:47;;18787:3;:8;;18794:1;18787:8:::0;18783:434:::1;;18842:14;18811:46;;18900:13;-1:-1:-1::0;;;;;18900:26:17::1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18871:58;;18783:434;;;18995:14;18960:50;;19053:15;-1:-1:-1::0;;;;;19053:28:17::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19024:60;;19156:15;-1:-1:-1::0;;;;;19156:34:17::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19098:108;;18783:434;18304:919:::0;;;;;;;;:::o;805:495:47:-;907:7;934:10;;;:29;;-1:-1:-1;948:15:47;;934:29;930:80;;;-1:-1:-1;986:1:47;979:8;;930:80;139:3;207:21;227:1;139:3;207:21;:::i;:::-;1248:12;;1227:18;1235:10;1227:5;:18;:::i;:::-;:33;;;;:::i;:::-;1226:55;;;;:::i;:::-;1219:62;;805:495;;;;;:::o;17964:249:17:-;18124:56;;-1:-1:-1;;;18124:56:17;;-1:-1:-1;;;;;6502:32:70;;;18124:56:17;;;6484:51:70;18085:4:17;;;;18124:46;;;;;6457:18:70;;18124:56:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18124:82:17;;;;17964:249;-1:-1:-1;;;17964:249:17:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:70:-;-1:-1:-1;;;;;89:31:70;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:388::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:70;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;748:752::-;813:3;851:5;845:12;878:6;873:3;866:19;904:4;933:2;928:3;924:12;917:19;;970:2;963:5;959:14;991:1;1001:474;1015:6;1012:1;1009:13;1001:474;;;1074:13;;1116:9;;-1:-1:-1;;;;;1112:35:70;1100:48;;1188:11;;;1182:18;1168:12;;;1161:40;1224:4;1282:11;;;1276:18;1269:26;1262:34;1248:12;;;1241:56;1320:4;1378:11;;;1372:18;1365:26;1358:34;1344:12;;;1337:56;1422:4;1413:14;;;;1450:15;;;;1144:1;1030:9;1001:474;;;-1:-1:-1;1491:3:70;;748:752;-1:-1:-1;;;;;748:752:70:o;1585:1868::-;1707:12;;-1:-1:-1;;;;;609:31:70;597:44;;1645:3;1673:6;1771:4;1764:5;1760:16;1754:23;1786:48;1828:4;1823:3;1819:14;1805:12;-1:-1:-1;;;;;609:31:70;597:44;;543:104;1786:48;;1882:4;1875:5;1871:16;1865:23;1897:47;1938:4;1933:3;1929:14;1913;722:13;715:21;703:34;;652:91;1897:47;;1992:4;1985:5;1981:16;1975:23;2007:50;2051:4;2046:3;2042:14;2026;-1:-1:-1;;;;;609:31:70;597:44;;543:104;2007:50;;2105:4;2098:5;2094:16;2088:23;2120:50;2164:4;2159:3;2155:14;2139;-1:-1:-1;;;;;609:31:70;597:44;;543:104;2120:50;;2219:4;2212:5;2208:16;2202:23;2195:4;2190:3;2186:14;2179:47;2275:4;2268:5;2264:16;2258:23;2251:4;2246:3;2242:14;2235:47;2331:4;2324:5;2320:16;2314:23;2307:4;2302:3;2298:14;2291:47;2357:6;2410:2;2403:5;2399:14;2393:21;2388:2;2383:3;2379:12;2372:43;;2434:6;2487:2;2480:5;2476:14;2470:21;2465:2;2460:3;2456:12;2449:43;;2511:6;2565:2;2558:5;2554:14;2548:21;2599:2;2594;2589:3;2585:12;2578:24;2623:70;2689:2;2684:3;2680:12;2664:14;2623:70;:::i;:::-;2611:82;;;;2712:6;2765:2;2758:5;2754:14;2748:21;2743:2;2738:3;2734:12;2727:43;;2789:6;2842:2;2835:5;2831:14;2825:21;2820:2;2815:3;2811:12;2804:43;;2866:6;2920:2;2913:5;2909:14;2903:21;2933:45;2974:2;2969:3;2965:12;2949:14;722:13;715:21;703:34;;652:91;2933:45;-1:-1:-1;;2997:6:70;3039:14;;;3033:21;3019:12;;;3012:43;3074:6;3116:14;;;3110:21;3096:12;;;3089:43;3152:6;3195:15;;;3189:22;3174:13;;;3167:45;3232:6;3275:15;;;3269:22;1572:4;1561:16;3333:13;;;1549:29;3367:6;3410:15;;;3404:22;3389:13;;;;3382:45;;;;-1:-1:-1;3389:13:70;1585:1868::o;3458:290::-;3659:2;3648:9;3641:21;3622:4;3679:63;3738:2;3727:9;3723:18;3715:6;3679:63;:::i;3753:247::-;3812:6;3865:2;3853:9;3844:7;3840:23;3836:32;3833:52;;;3881:1;3878;3871:12;3833:52;3920:9;3907:23;3939:31;3964:5;3939:31;:::i;:::-;3989:5;3753:247;-1:-1:-1;;;3753:247:70:o;4005:1332::-;4086:12;;-1:-1:-1;;;;;609:31:70;597:44;;4150:4;4143:5;4139:16;4133:23;4165:45;4204:4;4199:3;4195:14;4181:12;722:13;715:21;703:34;;652:91;4165:45;;4258:4;4251:5;4247:16;4241:23;4273:50;4317:4;4312:3;4308:14;4292;-1:-1:-1;;;;;609:31:70;597:44;;543:104;4273:50;;4371:4;4364:5;4360:16;4354:23;4386:50;4430:4;4425:3;4421:14;4405;-1:-1:-1;;;;;609:31:70;597:44;;543:104;4386:50;-1:-1:-1;4485:4:70;4474:16;;;4468:23;4452:14;;;4445:47;4541:4;4530:16;;;4524:23;4508:14;;;4501:47;4597:4;4586:16;;;4580:23;4564:14;;;4557:47;4653:4;4642:16;;;4636:23;4620:14;;;4613:47;4679:6;4721:14;;;4715:21;4701:12;;;4694:43;4756:6;4798:14;;;4792:21;4778:12;;;4771:43;4833:6;4875:14;;;4869:21;4855:12;;;4848:43;4910:6;4952:14;;;4946:21;4932:12;;;4925:43;4987:6;5029:14;;;5023:21;5009:12;;;5002:43;5064:6;5106:14;;;5100:21;5086:12;;;5079:43;5141:6;5183:14;;;5177:21;5163:12;;;5156:43;5218:6;5261:14;;;5255:21;1572:4;1561:16;5318:12;;1549:29;4005:1332::o;5342:252::-;5530:3;5515:19;;5543:45;5519:9;5570:6;5543:45;:::i;5599:710::-;5824:2;5876:21;;;5946:13;;5849:18;;;5968:22;;;5795:4;;5824:2;6047:15;;;;6021:2;6006:18;;;5795:4;6090:193;6104:6;6101:1;6098:13;6090:193;;;6153:46;6195:3;6186:6;6180:13;6153:46;:::i;:::-;6258:15;;;;6228:6;6219:16;;;;;6126:1;6119:9;6090:193;;;-1:-1:-1;6300:3:70;;5599:710;-1:-1:-1;;;;;;5599:710:70:o;6936:461::-;6989:3;7027:5;7021:12;7054:6;7049:3;7042:19;7080:4;7109:2;7104:3;7100:12;7093:19;;7146:2;7139:5;7135:14;7167:1;7177:195;7191:6;7188:1;7185:13;7177:195;;;7256:13;;-1:-1:-1;;;;;7252:39:70;7240:52;;7312:12;;;;7347:15;;;;7288:1;7206:9;7177:195;;7402:597;7470:3;7508:5;7502:12;7535:6;7530:3;7523:19;7561:4;7590:2;7585:3;7581:12;7574:19;;7627:2;7620:5;7616:14;7648:1;7658:316;7672:6;7669:1;7666:13;7658:316;;;7731:13;;7815:9;;-1:-1:-1;;;;;7811:18:70;;;7799:31;;7874:11;;;7868:18;7864:27;7850:12;;;7843:49;7921:4;7912:14;;;;7949:15;;;;7784:1;7687:9;7658:316;;8004:435;8057:3;8095:5;8089:12;8122:6;8117:3;8110:19;8148:4;8177:2;8172:3;8168:12;8161:19;;8214:2;8207:5;8203:14;8235:1;8245:169;8259:6;8256:1;8253:13;8245:169;;;8320:13;;8308:26;;8354:12;;;;8389:15;;;;8281:1;8274:9;8245:169;;8539:3248;8661:12;;-1:-1:-1;;;;;609:31:70;597:44;;8599:3;8627:6;8725:4;8718:5;8714:16;8708:23;8740:48;8782:4;8777:3;8773:14;8759:12;-1:-1:-1;;;;;609:31:70;597:44;;543:104;8740:48;;8836:4;8829:5;8825:16;8819:23;8851:50;8895:4;8890:3;8886:14;8870;-1:-1:-1;;;;;609:31:70;597:44;;543:104;8851:50;;8949:4;8942:5;8938:16;8932:23;8964:47;9005:4;9000:3;8996:14;8980;722:13;715:21;703:34;;652:91;8964:47;;9059:4;9052:5;9048:16;9042:23;9074:47;9115:4;9110:3;9106:14;9090;722:13;715:21;703:34;;652:91;9074:47;;9170:4;9163:5;9159:16;9153:23;9146:4;9141:3;9137:14;9130:47;9226:4;9219:5;9215:16;9209:23;9202:4;9197:3;9193:14;9186:47;9282:4;9275:5;9271:16;9265:23;9258:4;9253:3;9249:14;9242:47;9308:6;9361:2;9354:5;9350:14;9344:21;9339:2;9334:3;9330:12;9323:43;;9385:6;9438:2;9431:5;9427:14;9421:21;9416:2;9411:3;9407:12;9400:43;;9462:6;9516:2;9509:5;9505:14;9499:21;9550:2;9545;9540:3;9536:12;9529:24;9574:58;9628:2;9623:3;9619:12;9603:14;9574:58;:::i;:::-;9562:70;;;;9651:6;9705:2;9698:5;9694:14;9688:21;9749:3;9743:4;9739:14;9734:2;9729:3;9725:12;9718:36;9777:65;9837:4;9821:14;9777:65;:::i;:::-;9763:79;;;;9861:6;9915:2;9908:5;9904:14;9898:21;9961:3;9953:6;9949:16;9944:2;9939:3;9935:12;9928:38;9989:52;10034:6;10018:14;9989:52;:::i;:::-;9975:66;;;;10060:6;10114:2;10107:5;10103:14;10097:21;10127:46;10169:2;10164:3;10160:12;10144:14;1572:4;1561:16;1549:29;;1505:75;10127:46;-1:-1:-1;;10192:6:70;10235:14;;;10229:21;-1:-1:-1;;;;;609:31:70;;;10294:12;;;597:44;;;;10326:6;10369:14;;;10363:21;609:31;;10428:12;;;597:44;10461:6;10505:15;;;10499:22;722:13;715:21;10563:13;;;703:34;10597:6;10641:15;;;10635:22;609:31;;;10702:13;;;597:44;10736:6;10780:15;;;10774:22;722:13;715:21;10838:13;;;703:34;10872:6;10915:15;;;10909:22;10894:13;;;10887:45;10952:6;10996:15;;;10990:22;1572:4;1561:16;11055:13;;;1549:29;11089:6;11133:15;;;11127:22;8520:6;8509:18;;;11193:13;;;8497:31;;;;11227:6;11271:15;;;11265:22;8509:18;;11331:13;;;8497:31;11365:6;11409:15;;;11403:22;8509:18;;11469:13;;;8497:31;11503:6;11547:15;;;11541:22;8509:18;;11607:13;;;8497:31;11641:6;11685:15;;;11679:22;8509:18;11745:13;;;;8497:31;;;;-1:-1:-1;11775:6:70;8539:3248::o;11792:873::-;12006:4;12035:2;12075;12064:9;12060:18;12105:2;12094:9;12087:21;12128:6;12163;12157:13;12194:6;12186;12179:22;12232:2;12221:9;12217:18;12210:25;;12294:2;12284:6;12281:1;12277:14;12266:9;12262:30;12258:39;12244:53;;12332:2;12324:6;12320:15;12353:1;12363:273;12377:6;12374:1;12371:13;12363:273;;;12470:2;12466:7;12454:9;12446:6;12442:22;12438:36;12433:3;12426:49;12498:58;12549:6;12540;12534:13;12498:58;:::i;:::-;12488:68;-1:-1:-1;12614:12:70;;;;12579:15;;;;12399:1;12392:9;12363:273;;;-1:-1:-1;12653:6:70;;11792:873;-1:-1:-1;;;;;;;11792:873:70:o;12904:::-;13118:4;13147:2;13187;13176:9;13172:18;13217:2;13206:9;13199:21;13240:6;13275;13269:13;13306:6;13298;13291:22;13344:2;13333:9;13329:18;13322:25;;13406:2;13396:6;13393:1;13389:14;13378:9;13374:30;13370:39;13356:53;;13444:2;13436:6;13432:15;13465:1;13475:273;13489:6;13486:1;13483:13;13475:273;;;13582:2;13578:7;13566:9;13558:6;13554:22;13550:36;13545:3;13538:49;13610:58;13661:6;13652;13646:13;13610:58;:::i;:::-;13600:68;-1:-1:-1;13726:12:70;;;;13691:15;;;;13511:1;13504:9;13475:273;;13782:290;13983:2;13972:9;13965:21;13946:4;14003:63;14062:2;14051:9;14047:18;14039:6;14003:63;:::i;14269:138::-;14348:13;;14370:31;14348:13;14370:31;:::i;:::-;14269:138;;;:::o;14412:251::-;14482:6;14535:2;14523:9;14514:7;14510:23;14506:32;14503:52;;;14551:1;14548;14541:12;14503:52;14583:9;14577:16;14602:31;14627:5;14602:31;:::i;14668:184::-;14738:6;14791:2;14779:9;14770:7;14766:23;14762:32;14759:52;;;14807:1;14804;14797:12;14759:52;-1:-1:-1;14830:16:70;;14668:184;-1:-1:-1;14668:184:70:o;15506:430::-;15612:6;15620;15628;15636;15644;15697:3;15685:9;15676:7;15672:23;15668:33;15665:53;;;15714:1;15711;15704:12;15665:53;-1:-1:-1;;15737:16:70;;15793:2;15778:18;;15772:25;15837:2;15822:18;;15816:25;15881:2;15866:18;;15860:25;15925:3;15910:19;;;15904:26;15737:16;;15772:25;;-1:-1:-1;15816:25:70;15860;-1:-1:-1;15904:26:70;;-1:-1:-1;15506:430:70;-1:-1:-1;15506:430:70:o;15941:245::-;16020:6;16028;16081:2;16069:9;16060:7;16056:23;16052:32;16049:52;;;16097:1;16094;16087:12;16049:52;-1:-1:-1;;16120:16:70;;16176:2;16161:18;;;16155:25;16120:16;;16155:25;;-1:-1:-1;15941:245:70:o;16191:306::-;16279:6;16287;16295;16348:2;16336:9;16327:7;16323:23;16319:32;16316:52;;;16364:1;16361;16354:12;16316:52;16393:9;16387:16;16377:26;;16443:2;16432:9;16428:18;16422:25;16412:35;;16487:2;16476:9;16472:18;16466:25;16456:35;;16191:306;;;;;:::o;16502:127::-;16563:10;16558:3;16554:20;16551:1;16544:31;16594:4;16591:1;16584:15;16618:4;16615:1;16608:15;16913:435;17010:6;17018;17026;17034;17087:3;17075:9;17066:7;17062:23;17058:33;17055:53;;;17104:1;17101;17094:12;17055:53;17136:9;17130:16;17155:31;17180:5;17155:31;:::i;:::-;17250:2;17235:18;;17229:25;17294:2;17279:18;;17273:25;17338:2;17323:18;;;17317:25;17205:5;;17229:25;;-1:-1:-1;17317:25:70;;-1:-1:-1;16913:435:70;-1:-1:-1;;;16913:435:70:o;17353:164::-;17429:13;;17478;;17471:21;17461:32;;17451:60;;17507:1;17504;17497:12;17522:202;17589:6;17642:2;17630:9;17621:7;17617:23;17613:32;17610:52;;;17658:1;17655;17648:12;17610:52;17681:37;17708:9;17681:37;:::i;17729:163::-;17807:13;;17860:6;17849:18;;17839:29;;17829:57;;17882:1;17879;17872:12;17897:334;17975:6;17983;18036:2;18024:9;18015:7;18011:23;18007:32;18004:52;;;18052:1;18049;18042:12;18004:52;18084:9;18078:16;18103:31;18128:5;18103:31;:::i;:::-;18153:5;-1:-1:-1;18177:48:70;18221:2;18206:18;;18177:48;:::i;:::-;18167:58;;17897:334;;;;;:::o;18236:127::-;18297:10;18292:3;18288:20;18285:1;18278:31;18328:4;18325:1;18318:15;18352:4;18349:1;18342:15;18368:127;18429:10;18424:3;18420:20;18417:1;18410:31;18460:4;18457:1;18450:15;18484:4;18481:1;18474:15;18500:128;18567:9;;;18588:11;;;18585:37;;;18602:18;;:::i;18633:168::-;18706:9;;;18737;;18754:15;;;18748:22;;18734:37;18724:71;;18775:18;;:::i;18806:127::-;18867:10;18862:3;18858:20;18855:1;18848:31;18898:4;18895:1;18888:15;18922:4;18919:1;18912:15;18938:120;18978:1;19004;18994:35;;19009:18;;:::i;:::-;-1:-1:-1;19043:9:70;;18938:120::o;19063:192::-;19142:13;;-1:-1:-1;;;;;19184:46:70;;19174:57;;19164:85;;19245:1;19242;19235:12;19260:293;19339:6;19347;19400:2;19388:9;19379:7;19375:23;19371:32;19368:52;;;19416:1;19413;19406:12;19368:52;19439:40;19469:9;19439:40;:::i;:::-;19429:50;;19498:49;19543:2;19532:9;19528:18;19498:49;:::i;19558:1129::-;19653:6;19684:2;19727;19715:9;19706:7;19702:23;19698:32;19695:52;;;19743:1;19740;19733:12;19695:52;19776:9;19770:16;19805:18;19846:2;19838:6;19835:14;19832:34;;;19862:1;19859;19852:12;19832:34;19900:6;19889:9;19885:22;19875:32;;19945:7;19938:4;19934:2;19930:13;19926:27;19916:55;;19967:1;19964;19957:12;19916:55;19996:2;19990:9;20018:2;20014;20011:10;20008:36;;;20024:18;;:::i;:::-;20070:2;20067:1;20063:10;20102:2;20096:9;20165:2;20161:7;20156:2;20152;20148:11;20144:25;20136:6;20132:38;20220:6;20208:10;20205:22;20200:2;20188:10;20185:18;20182:46;20179:72;;;20231:18;;:::i;:::-;20267:2;20260:22;20317:18;;;20351:15;;;;-1:-1:-1;20393:11:70;;;20389:20;;;20421:19;;;20418:39;;;20453:1;20450;20443:12;20418:39;20477:11;;;;20497:159;20513:6;20508:3;20505:15;20497:159;;;20579:34;20609:3;20579:34;:::i;:::-;20567:47;;20530:12;;;;20634;;;;20497:159;;;20675:6;19558:1129;-1:-1:-1;;;;;;;;19558:1129:70:o;20692:530::-;20784:6;20792;20800;20808;20861:3;20849:9;20840:7;20836:23;20832:33;20829:53;;;20878:1;20875;20868:12;20829:53;20901:40;20931:9;20901:40;:::i;:::-;20891:50;;20960:46;21002:2;20991:9;20987:18;20960:46;:::i;:::-;20950:56;;21049:2;21038:9;21034:18;21028:25;21093:12;21086:5;21082:24;21075:5;21072:35;21062:63;;21121:1;21118;21111:12;21062:63;21144:5;-1:-1:-1;21168:48:70;21212:2;21197:18;;21168:48;:::i;:::-;21158:58;;20692:530;;;;;;;:::o;21227:273::-;21295:6;21348:2;21336:9;21327:7;21323:23;21319:32;21316:52;;;21364:1;21361;21354:12;21316:52;21396:9;21390:16;21446:4;21439:5;21435:16;21428:5;21425:27;21415:55;;21466:1;21463;21456:12;21505:540;21606:6;21614;21622;21630;21638;21691:3;21679:9;21670:7;21666:23;21662:33;21659:53;;;21708:1;21705;21698:12;21659:53;21731:39;21760:9;21731:39;:::i;:::-;21721:49;;21789:48;21833:2;21822:9;21818:18;21789:48;:::i;:::-;21779:58;;21856:48;21900:2;21889:9;21885:18;21856:48;:::i;:::-;21846:58;;21923:48;21967:2;21956:9;21952:18;21923:48;:::i;:::-;21913:58;;21990:49;22034:3;22023:9;22019:19;21990:49;:::i;:::-;21980:59;;21505:540;;;;;;;;:::o;22329:187::-;22368:1;22394:6;22427:2;22424:1;22420:10;22449:3;22439:37;;22456:18;;:::i;:::-;22494:10;;22490:20;;;;;22329:187;-1:-1:-1;;22329:187:70:o;22521:125::-;22586:9;;;22607:10;;;22604:36;;;22620:18;;:::i" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "3385200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "WETHToken()": "infinite", - "addressProvider()": "infinite", - "contractsRegister()": "infinite", - "getAdapter(address,address)": "infinite", - "getCreditAccountData(address,address)": "infinite", - "getCreditAccountList(address)": "infinite", - "getCreditManagerData(address)": "infinite", - "getCreditManagersList()": "infinite", - "getPoolData(address)": "infinite", - "getPoolsList()": "infinite", - "hasOpenedCreditAccount(address,address)": "infinite", - "version()": "195" - }, - "internal": { - "_hasOpenedCreditAccount(address,address)": "infinite", - "getCreditContracts(address)": "infinite" - } - }, - "methodIdentifiers": { - "WETHToken()": "4b2f336d", - "addressProvider()": "2954018c", - "contractsRegister()": "7a0c7b21", - "getAdapter(address,address)": "4c472fc9", - "getCreditAccountData(address,address)": "0dbd616d", - "getCreditAccountList(address)": "a80deda3", - "getCreditManagerData(address)": "ae093f3f", - "getCreditManagersList()": "663b8fdb", - "getPoolData(address)": "13d21cdf", - "getPoolsList()": "1bcd8fc0", - "hasOpenedCreditAccount(address,address)": "fc9914cb", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addressProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"NotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPoolException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WETHToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract AddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractsRegister\",\"outputs\":[{\"internalType\":\"contract ContractsRegister\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_allowedContract\",\"type\":\"address\"}],\"name\":\"getAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"inUse\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterestAndFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct TokenBalance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canBeClosed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndexAtOpen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"since\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"enabledTokenMask\",\"type\":\"uint256\"}],\"internalType\":\"struct CreditAccountData\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"inUse\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterestAndFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct TokenBalance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canBeClosed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndexAtOpen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"since\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"enabledTokenMask\",\"type\":\"uint256\"}],\"internalType\":\"struct CreditAccountData[]\",\"name\":\"result\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"}],\"name\":\"getCreditManagerData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"canBorrow\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxLeverageFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"collateralTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"allowedContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"internalType\":\"struct ContractAdapter[]\",\"name\":\"adapters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"liquidationThresholds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditConfigurator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDegenMode\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"degenNFT\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"forbiddenTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"maxEnabledTokensLength\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"internalType\":\"struct CreditManagerData\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagersList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"canBorrow\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxLeverageFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"collateralTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"allowedContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"internalType\":\"struct ContractAdapter[]\",\"name\":\"adapters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"liquidationThresholds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditConfigurator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDegenMode\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"degenNFT\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"forbiddenTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"maxEnabledTokensLength\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"internalType\":\"struct CreditManagerData[]\",\"name\":\"result\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dieselToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"linearCumulativeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidityLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dieselRate_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndex_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampLU\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"internalType\":\"struct PoolData\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolsList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dieselToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"linearCumulativeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidityLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dieselRate_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndex_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampLU\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"internalType\":\"struct PoolData[]\",\"name\":\"result\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"hasOpenedCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"NotCreditManagerException()\":[{\"details\":\"Thrown if attempting to get data on a contract that is not a registered Credit Manager\"}],\"NotPoolException()\":[{\"details\":\"Thrown if attempting the get data on a contract that is not a registered pool\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}]},\"kind\":\"dev\",\"methods\":{\"getAdapter(address,address)\":{\"details\":\"Returns the adapter address for a particular creditManager and targetContract\"},\"getCreditAccountData(address,address)\":{\"details\":\"Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower\",\"params\":{\"_creditManager\":\"Credit manager address\",\"borrower\":\"Borrower address\"}},\"getCreditAccountList(address)\":{\"details\":\"Returns CreditAccountData for all opened accounts for particular borrower\",\"params\":{\"borrower\":\"Borrower address\"}},\"getCreditManagerData(address)\":{\"details\":\"Returns CreditManagerData for a particular _creditManager\",\"params\":{\"_creditManager\":\"CreditManager address\"}},\"getCreditManagersList()\":{\"details\":\"Returns CreditManagerData for all Credit Managers\"},\"getPoolData(address)\":{\"details\":\"Returns PoolData for a particular pool\",\"params\":{\"_pool\":\"Pool address\"}},\"getPoolsList()\":{\"details\":\"Returns PoolData for all registered pools\"},\"hasOpenedCreditAccount(address,address)\":{\"details\":\"Returns whether the borrower has an open credit account with the credit manager\",\"params\":{\"_creditManager\":\"Credit manager to check\",\"borrower\":\"Borrower to check\"}}},\"stateVariables\":{\"WETHToken\":{\"details\":\"Address of WETH\"},\"addressProvider\":{\"details\":\"Address of the AddressProvider\"},\"contractsRegister\":{\"details\":\"Address of the ContractsRegister\"},\"version\":{\"details\":\"Returns contract version\"}},\"title\":\"Data compressor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Collects data from various contracts for use in the dApp Do not use for data from data compressor for state-changing functions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol\":\"DataCompressor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol\":{\"keccak256\":\"0x65282248dfed37353288ecef1fbe29ca1795dd2be8e41bcc82c89959f3e1891f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9cbab66f5bf30f9b04e28d877c83013a211d786395fe35f43079c7b2ad1e16ff\",\"dweb:/ipfs/QmQXEwb1PsYQMt3mZCQJBjx7Qfwur6rdKCTFJ5nk8qJzRR\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":{\"keccak256\":\"0xe1410055319adc7ecf394fb8544d529db28b529b1d1294d6dcfeeb99f4321a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1eae0a83069a64c7ebd3af145566e31693a0d902dfcc4412cd6c49f48e653b83\",\"dweb:/ipfs/QmaAHy5YqbSLdWSXfGRHiVZxwMuVs5ZgMeZ1qkTKSSd5fr\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":{\"keccak256\":\"0x33021aa2cf8a70971bc33cee83d1efc8f8054579b419c7beb26653be92bb1a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad3e94c28e83e55a70eaaa2dd683242a8be7319024f7149b657044189116dd93\",\"dweb:/ipfs/QmVsXMF7qoEMZ3wYB4TVWJwvsxUZjUDYC2JdxTPPNbssDM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol\":{\"keccak256\":\"0x22db3491682fd72c4b261ce500ccb2e9c3742ac18830d4e10d40f49014bafa5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b192f1ec27283cab14d04466ec19a4d5b765e0ba3c951108d147d1fe6c5948f0\",\"dweb:/ipfs/QmY7oMStzT9JqbpCVAbaXSPhLqdeQKN1eXwEaEuTxNcLz6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol\":{\"keccak256\":\"0x1c6c6e6078da902a7551eaaf696cd91295559959966b5a9ccd790266128f86e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c26ab3e22c4acd8d91d546a4a5c0f7b3da268f328da93ca33d6b92f453d0d846\",\"dweb:/ipfs/QmQsQhx3bp3pzwkTqdYQ8th2XaYhxk7xSRFaqY2iij1ViP\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Collects data from various contracts for use in the dApp Do not use for data from data compressor for state-changing functions", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol": { - "Claimable": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "claimOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Implements logic for a two-step ownership transfer on top of Ownable", - "kind": "dev", - "methods": { - "claimOwnership()": { - "details": "Used by the pending owner to claim ownership after transferOwnership" - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Sets pending owner to the new owner, but does not transfer ownership yet", - "params": { - "newOwner": "The address to become the future owner" - } - } - }, - "stateVariables": { - "pendingOwner": { - "details": "The new owner that has not claimed ownership yet" - } - }, - "title": "Claimable", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_16572": { - "entryPoint": null, - "id": 16572, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 31, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6103078061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634e71e0c81461005c578063715018a6146100665780638da5cb5b1461006e578063e30c397814610097578063f2fde38b146100aa575b600080fd5b6100646100bd565b005b610064610152565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b60015461007b906001600160a01b031681565b6100646100b83660046102a1565b610166565b6001546001600160a01b0316331461012b5760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610140906001600160a01b03166101f7565b600180546001600160a01b0319169055565b61015a610247565b61016460006101f7565b565b61016e610247565b6001600160a01b0381166101d55760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610122565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146101645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610122565b6000602082840312156102b357600080fd5b81356001600160a01b03811681146102ca57600080fd5b939250505056fea26469706673582212202fc174853ed5f0187a7215f53ce90bc304e8633fdf29ee6759e4bce43c4120e664736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1A CALLER PUSH2 0x1F JUMP JUMPDEST PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x307 DUP1 PUSH2 0x7E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xBD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x7B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0x166 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x140 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F7 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x15A PUSH2 0x247 JUMP JUMPDEST PUSH2 0x164 PUSH1 0x0 PUSH2 0x1F7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16E PUSH2 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x122 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x164 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x122 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F 0xC1 PUSH21 0x853ED5F0187A7215F53CE90BC304E8633FDF29EE67 MSIZE 0xE4 0xBC 0xE4 EXTCODECOPY COINBASE KECCAK256 0xE6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "364:989:18:-:0;;;;;;;;;;;;-1:-1:-1;936:32:52;719:10:66;936:18:52;:32::i;:::-;364:989:18;;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;364:989:18:-;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_checkOwner_16603": { - "entryPoint": 583, - "id": 16603, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_16660": { - "entryPoint": 503, - "id": 16660, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@claimOwnership_4790": { - "entryPoint": 189, - "id": 4790, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@owner_16589": { - "entryPoint": null, - "id": 16589, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@pendingOwner_4733": { - "entryPoint": null, - "id": 4733, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@renounceOwnership_16617": { - "entryPoint": 338, - "id": 16617, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_4772": { - "entryPoint": 358, - "id": 4772, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 673, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1687:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "198:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "203:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "194:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "194:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "207:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "190:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "178:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "160:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "160:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:70", - "type": "" - } - ], - "src": "14:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "292:216:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "338:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "347:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "350:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "340:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "340:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "340:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "313:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "322:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "309:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "309:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "334:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "305:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "305:32:70" - }, - "nodeType": "YulIf", - "src": "302:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "363:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "389:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "376:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "376:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "367:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "462:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "471:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "474:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "464:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "464:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "464:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "421:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "432:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "447:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "452:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "443:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "456:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "439:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "439:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "428:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "418:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "418:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "411:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "411:50:70" - }, - "nodeType": "YulIf", - "src": "408:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "487:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "497:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "487:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "258:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "269:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "281:6:70", - "type": "" - } - ], - "src": "222:286:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "687:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "704:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "715:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "697:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "697:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "697:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "738:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "749:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "734:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "734:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "754:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "727:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "727:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "727:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "777:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "788:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "773:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "773:18:70" - }, - { - "hexValue": "436c61696d61626c653a2053656e646572206973206e6f742070656e64696e67", - "kind": "string", - "nodeType": "YulLiteral", - "src": "793:34:70", - "type": "", - "value": "Claimable: Sender is not pending" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "766:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "766:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "766:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "848:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "859:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "844:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "844:18:70" - }, - { - "hexValue": "206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "864:8:70", - "type": "", - "value": " owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "837:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "837:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "837:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "882:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "894:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "905:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "890:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "890:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "882:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "664:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "678:4:70", - "type": "" - } - ], - "src": "513:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1094:230:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1111:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1122:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1104:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1104:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1104:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1145:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1156:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1141:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1141:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1161:2:70", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1134:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1134:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1134:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1184:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1195:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1180:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1180:18:70" - }, - { - "hexValue": "436c61696d61626c653a206e6577206f776e657220697320746865207a65726f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1200:34:70", - "type": "", - "value": "Claimable: new owner is the zero" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1173:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1173:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1173:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1255:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1266:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1251:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:70" - }, - { - "hexValue": "2061646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1271:10:70", - "type": "", - "value": " address" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1244:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1244:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1244:38:70" - }, - { - "nodeType": "YulAssignment", - "src": "1291:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1303:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1314:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1299:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1299:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1291:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1071:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1085:4:70", - "type": "" - } - ], - "src": "920:404:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1503:182:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1520:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1531:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1513:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1513:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1513:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1554:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1565:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1550:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1550:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1570:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1543:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1543:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1543:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1593:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1604:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1589:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1589:18:70" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1609:34:70", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1582:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1582:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1582:62:70" - }, - { - "nodeType": "YulAssignment", - "src": "1653:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1665:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1676:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1661:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1661:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1653:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1480:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1494:4:70", - "type": "" - } - ], - "src": "1329:356:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Claimable: Sender is not pending\")\n mstore(add(headStart, 96), \" owner\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 40)\n mstore(add(headStart, 64), \"Claimable: new owner is the zero\")\n mstore(add(headStart, 96), \" address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c80634e71e0c81461005c578063715018a6146100665780638da5cb5b1461006e578063e30c397814610097578063f2fde38b146100aa575b600080fd5b6100646100bd565b005b610064610152565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b60015461007b906001600160a01b031681565b6100646100b83660046102a1565b610166565b6001546001600160a01b0316331461012b5760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610140906001600160a01b03166101f7565b600180546001600160a01b0319169055565b61015a610247565b61016460006101f7565b565b61016e610247565b6001600160a01b0381166101d55760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610122565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146101645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610122565b6000602082840312156102b357600080fd5b81356001600160a01b03811681146102ca57600080fd5b939250505056fea26469706673582212202fc174853ed5f0187a7215f53ce90bc304e8633fdf29ee6759e4bce43c4120e664736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xAA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xBD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x7B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0x166 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A2053656E646572206973206E6F742070656E64696E67 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1037BBB732B9 PUSH1 0xD1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x140 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1F7 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x15A PUSH2 0x247 JUMP JUMPDEST PUSH2 0x164 PUSH1 0x0 PUSH2 0x1F7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x16E PUSH2 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x28 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436C61696D61626C653A206E6577206F776E657220697320746865207A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH8 0x2061646472657373 PUSH1 0xC0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x122 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x164 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x122 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x2CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F 0xC1 PUSH21 0x853ED5F0187A7215F53CE90BC304E8633FDF29EE67 MSIZE 0xE4 0xBC 0xE4 EXTCODECOPY COINBASE KECCAK256 0xE6 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "364:989:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1215:136;;;:::i;:::-;;1831:101:52;;;:::i;1201:85::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;1201:85;;;-1:-1:-1;;;;;178:32:70;;;160:51;;148:2;133:18;1201:85:52;;;;;;;462:27:18;;;;;-1:-1:-1;;;;;462:27:18;;;897:230;;;;;;:::i;:::-;;:::i;1215:136::-;630:12;;-1:-1:-1;;;;;630:12:18;616:10;:26;612:105;;658:48;;-1:-1:-1;;;658:48:18;;715:2:70;658:48:18;;;697:21:70;754:2;734:18;;;727:30;793:34;773:18;;;766:62;-1:-1:-1;;;844:18:70;;;837:36;890:19;;658:48:18;;;;;;;;612:105;1296:12:::1;::::0;1277:32:::1;::::0;-1:-1:-1;;;;;1296:12:18::1;1277:18;:32::i;:::-;1319:12;:25:::0;;-1:-1:-1;;;;;;1319:25:18::1;::::0;;1215:136::o;1831:101:52:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;897:230:18:-;1094:13:52;:11;:13::i;:::-;-1:-1:-1;;;;;999:22:18;::::1;978:109;;;::::0;-1:-1:-1;;;978:109:18;;1122:2:70;978:109:18::1;::::0;::::1;1104:21:70::0;1161:2;1141:18;;;1134:30;1200:34;1180:18;;;1173:62;-1:-1:-1;;;1251:18:70;;;1244:38;1299:19;;978:109:18::1;920:404:70::0;978:109:18::1;1097:12;:23:::0;;-1:-1:-1;;;;;;1097:23:18::1;-1:-1:-1::0;;;;;1097:23:18;;;::::1;::::0;;;::::1;::::0;;897:230::o;2433:187:52:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;719:10:66;1422:23:52;1414:68;;;;-1:-1:-1;;;1414:68:52;;1531:2:70;1414:68:52;;;1513:21:70;;;1550:18;;;1543:30;1609:34;1589:18;;;1582:62;1661:18;;1414:68:52;1329:356:70;222:286;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;376:23;;-1:-1:-1;;;;;428:31:70;;418:42;;408:70;;474:1;471;464:12;408:70;497:5;222:286;-1:-1:-1;;;222:286:70:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "155000", - "executionCost": "26043", - "totalCost": "181043" - }, - "external": { - "claimOwnership()": "54443", - "owner()": "2330", - "pendingOwner()": "2369", - "renounceOwnership()": "infinite", - "transferOwnership(address)": "26801" - } - }, - "methodIdentifiers": { - "claimOwnership()": "4e71e0c8", - "owner()": "8da5cb5b", - "pendingOwner()": "e30c3978", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implements logic for a two-step ownership transfer on top of Ownable\",\"kind\":\"dev\",\"methods\":{\"claimOwnership()\":{\"details\":\"Used by the pending owner to claim ownership after transferOwnership\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Sets pending owner to the new owner, but does not transfer ownership yet\",\"params\":{\"newOwner\":\"The address to become the future owner\"}}},\"stateVariables\":{\"pendingOwner\":{\"details\":\"The new owner that has not claimed ownership yet\"}},\"title\":\"Claimable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":\"Claimable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16556, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol:Claimable", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 4733, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol:Claimable", - "label": "pendingOwner", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol": { - "CreditAccount": { - "abi": [ - { - "inputs": [], - "name": "CallerNotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotFactoryException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [], - "name": "borrowedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "cancelAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "connectTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "cumulativeIndexAtOpen", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "safeTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "since", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "updateParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotCreditManagerException()": [ - { - "details": "throws if the caller is not the connected Credit Manager" - } - ], - "CallerNotFactoryException()": [ - { - "details": "throws if the caller is not the factory" - } - ] - }, - "kind": "dev", - "methods": { - "cancelAllowance(address,address)": { - "details": "Removes allowance for a token to a 3rd-party contract. Restricted to factory only.", - "params": { - "targetContract": "Target contract to revoke allowance to.", - "token": "ERC20 token to remove allowance for." - } - }, - "connectTo(address,uint256,uint256)": { - "details": "Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.", - "params": { - "_borrowedAmount": "The amount borrowed at Credit Account opening", - "_creditManager": "Credit manager address", - "_cumulativeIndexAtOpen": "The interest index at Credit Account opening" - } - }, - "execute(address,bytes)": { - "details": "Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.", - "params": { - "data": "Data to call the contract with.", - "destination": "Contract address to be called." - } - }, - "initialize()": { - "details": "Called on new Credit Account creation." - }, - "safeTransfer(address,address,uint256)": { - "details": "Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.", - "params": { - "amount": "Amount to be transferred.", - "to": "Address of the recipient.", - "token": "Token to be transferred from the Credit Account." - } - }, - "updateParameters(uint256,uint256)": { - "details": "Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.", - "params": { - "_borrowedAmount": "The amount currently lent to the Credit Account", - "_cumulativeIndexAtOpen": "New cumulative index to calculate interest from" - } - } - }, - "stateVariables": { - "borrowedAmount": { - "details": "The principal amount borrowed from the pool" - }, - "creditManager": { - "details": "Address of the currently connected Credit Manager" - }, - "cumulativeIndexAtOpen": { - "details": "Cumulative interest index since the last Credit Account's debt update" - }, - "factory": { - "details": "Address of the Credit Account factory" - }, - "since": { - "details": "Block at which the contract was last taken from the factory" - }, - "version": { - "details": "Returns contract version" - } - }, - "title": "Credit Account", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50610afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAFA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x8129FC1C EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xC75B5A71 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16128211 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x17D11A15 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x19A16039 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x1AFBB7A4 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x3DC54B40 EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD7 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCC PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x890 JUMP JUMPDEST PUSH2 0x1DF JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D9 JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x271 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x152 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x152 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x398 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA31 JUMP JUMPDEST PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x210 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x225 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH1 0x0 PUSH2 0x43A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x257 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x291 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x2AB JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x313 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND CALLER PUSH3 0x10000 MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SSTORE NUMBER PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x435 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x5C6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4B4 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B2 SWAP2 SWAP1 PUSH2 0xA6D JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x64B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x435 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x435 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x745 SWAP2 SWAP1 PUSH2 0xAA8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x787 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x798 DUP8 DUP4 DUP4 DUP8 PUSH2 0x7B4 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x823 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x81C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30A JUMP JUMPDEST POP DUP2 PUSH2 0x79D JUMP JUMPDEST PUSH2 0x79D DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x838 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30A SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AC DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH2 0x8BA PUSH1 0x20 DUP5 ADD PUSH2 0x874 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F5 DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x938 JUMPI PUSH2 0x938 PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x960 JUMPI PUSH2 0x960 PUSH2 0x8C3 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x99E JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9D7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x26A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA1C DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA4F DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP3 POP PUSH2 0xA5D PUSH1 0x20 DUP6 ADD PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xABA DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x99B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xE0 ORIGIN 0xB4 0xD4 SLOAD REVERT 0xE8 SWAP14 SELFBALANCE 0xC1 RETURN 0xE3 0xD2 DUP9 DUP4 0xF9 0xDD PUSH27 0x1D4A9F2897AD07A0CE3EB716D364736F6C63430008110033000000 ", - "sourceMap": "1095:4065:19:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_callOptionalReturn_18246": { - "entryPoint": 1526, - "id": 18246, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_revert_18719": { - "entryPoint": null, - "id": 18719, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@borrowedAmount_4827": { - "entryPoint": null, - "id": 4827, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@cancelAllowance_4948": { - "entryPoint": 479, - "id": 4948, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@connectTo_4908": { - "entryPoint": 920, - "id": 4908, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@creditManager_4823": { - "entryPoint": null, - "id": 4823, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@cumulativeIndexAtOpen_4831": { - "entryPoint": null, - "id": 4831, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@execute_4989": { - "entryPoint": 553, - "id": 4989, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@factory_4819": { - "entryPoint": null, - "id": 4819, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@functionCallWithValue_18544": { - "entryPoint": 1736, - "id": 18544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@functionCall_18460": { - "entryPoint": 1410, - "id": 18460, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionCall_18480": { - "entryPoint": 1957, - "id": 18480, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@initialize_4877": { - "entryPoint": 625, - "id": 4877, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isContract_18408": { - "entryPoint": null, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@safeApprove_18068": { - "entryPoint": 1082, - "id": 18068, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@safeTransfer_17998": { - "entryPoint": 1478, - "id": 17998, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@safeTransfer_4970": { - "entryPoint": 1014, - "id": 4970, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@since_4835": { - "entryPoint": null, - "id": 4835, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@updateParameters_4928": { - "entryPoint": 425, - "id": 4928, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@verifyCallResultFromTarget_18675": { - "entryPoint": 1972, - "id": 18675, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@version_4838": { - "entryPoint": null, - "id": 4838, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2164, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 2192, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 2609, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr": { - "entryPoint": 2265, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_uint256": { - "entryPoint": 2558, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2694, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 2669, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_uint256": { - "entryPoint": 2130, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_bytes": { - "entryPoint": 2495, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2728, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 2539, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 2459, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 2243, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:7429:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "101:161:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "147:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "156:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "149:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "149:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "149:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "122:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "131:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "118:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "118:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "143:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "114:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "114:32:70" - }, - "nodeType": "YulIf", - "src": "111:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "172:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "195:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "182:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "182:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "172:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "214:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "241:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "237:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "237:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "224:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "214:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "59:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "70:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "82:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "90:6:70", - "type": "" - } - ], - "src": "14:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "368:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "378:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "390:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "401:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "386:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "386:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "378:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "420:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "431:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "413:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "413:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "413:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "337:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "348:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "359:4:70", - "type": "" - } - ], - "src": "267:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "498:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "508:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "530:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "517:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "517:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "508:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "600:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "609:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "612:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "602:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "602:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "602:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "559:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "570:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "585:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "590:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "581:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "581:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "594:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "577:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "577:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "566:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "566:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "556:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "556:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "549:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "549:50:70" - }, - "nodeType": "YulIf", - "src": "546:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "477:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "488:5:70", - "type": "" - } - ], - "src": "449:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "714:173:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "760:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "769:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "772:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "762:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "762:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "762:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "735:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "744:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "731:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "731:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "727:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "727:32:70" - }, - "nodeType": "YulIf", - "src": "724:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "785:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "814:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "795:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "795:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "785:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "833:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "866:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "877:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "862:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "862:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "843:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "843:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "833:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "672:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "683:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "695:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "703:6:70", - "type": "" - } - ], - "src": "627:260:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "924:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "941:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "953:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "944:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "944:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "934:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "934:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "934:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "981:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "984:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "974:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "974:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "974:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1005:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1008:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "998:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "998:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "998:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "892:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1120:899:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1166:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1175:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1178:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1168:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1168:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1168:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1141:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1150:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1137:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1137:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1162:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1133:32:70" - }, - "nodeType": "YulIf", - "src": "1130:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1191:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1220:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1201:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1201:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1191:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1239:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1270:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1281:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1266:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1266:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1253:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1253:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1243:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1294:28:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1304:18:70", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1298:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1349:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1358:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1361:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1351:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1351:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1351:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1337:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1345:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1334:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1334:14:70" - }, - "nodeType": "YulIf", - "src": "1331:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1374:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1388:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1399:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1384:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1384:22:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1378:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1454:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1463:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1466:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1456:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1456:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1456:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1433:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1437:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1429:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1444:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1425:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1425:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1418:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1418:35:70" - }, - "nodeType": "YulIf", - "src": "1415:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1479:26:70", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1502:2:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1489:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1489:16:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1483:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1528:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1530:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1520:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1524:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1517:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1517:10:70" - }, - "nodeType": "YulIf", - "src": "1514:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1559:17:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1573:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1569:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1569:7:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1563:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1585:23:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1605:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1599:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1599:9:70" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1589:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1617:71:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1639:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1663:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1667:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1659:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1659:13:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1674:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1655:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1655:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1679:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1651:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1651:31:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1684:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1647:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1647:40:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1635:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1635:53:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1621:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1747:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1749:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1749:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1749:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1706:10:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1718:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1703:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1703:18:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1726:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1738:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1723:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1723:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1700:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1700:46:70" - }, - "nodeType": "YulIf", - "src": "1697:72:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1785:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1789:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1778:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1778:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1778:22:70" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1816:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1824:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1809:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1809:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1809:18:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1873:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1882:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1885:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1875:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1875:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1875:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1850:2:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1854:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1846:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1846:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1859:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1842:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1842:20:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1864:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1839:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1839:33:70" - }, - "nodeType": "YulIf", - "src": "1836:53:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1915:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1923:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1911:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1911:15:70" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1932:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1936:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1928:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1928:11:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1941:2:70" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "1898:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1898:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1898:46:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1968:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1976:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1964:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1964:15:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1981:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1960:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1960:24:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1986:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1953:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1953:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1953:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "1997:16:70", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2007:6:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1997:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1078:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1089:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1101:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1109:6:70", - "type": "" - } - ], - "src": "1024:995:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2090:184:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2100:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2109:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2104:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2169:63:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2194:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2199:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2190:11:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2213:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2218:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2209:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2209:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2203:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2203:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2183:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2183:39:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2183:39:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2130:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2133:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2127:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2127:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2141:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2143:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2152:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2155:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2148:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2148:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2143:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2123:3:70", - "statements": [] - }, - "src": "2119:113:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2252:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2257:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2248:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2248:16:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2266:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2241:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2241:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2241:27:70" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2068:3:70", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2073:3:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2078:6:70", - "type": "" - } - ], - "src": "2024:250:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2328:221:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2338:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2358:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2352:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2352:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2342:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2380:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2385:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2373:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2373:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2373:19:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2440:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2447:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2436:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2436:16:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2458:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2463:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2454:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2454:14:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2470:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "2401:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "2401:76:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2401:76:70" - }, - { - "nodeType": "YulAssignment", - "src": "2486:57:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2501:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2514:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2522:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2510:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2510:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2531:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2527:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2527:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2506:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2506:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2497:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2497:39:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2538:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2493:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2493:50:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2486:3:70" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2305:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2312:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2320:3:70", - "type": "" - } - ], - "src": "2279:270:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2673:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2690:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2701:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2683:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2683:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2683:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "2713:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2738:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2750:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2761:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2746:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2746:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "2721:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "2721:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2713:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2642:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2653:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2664:4:70", - "type": "" - } - ], - "src": "2554:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2877:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2887:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2899:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2910:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2895:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2895:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2887:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2929:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2944:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2960:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2965:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2956:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2956:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2969:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2952:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2952:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2940:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2940:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2922:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2922:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2922:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2846:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2857:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2868:4:70", - "type": "" - } - ], - "src": "2776:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3088:218:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3134:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3143:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3146:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3136:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3136:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3136:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3109:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3118:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3105:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3105:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3130:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3101:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3101:32:70" - }, - "nodeType": "YulIf", - "src": "3098:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "3159:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3188:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3169:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3169:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3159:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3207:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3234:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3245:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3230:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3230:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3217:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3217:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3207:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3258:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3285:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3296:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3281:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3281:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3268:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3268:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3258:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3038:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3049:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3061:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3069:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3077:6:70", - "type": "" - } - ], - "src": "2984:322:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3415:224:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3461:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3470:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3473:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3463:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3463:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3463:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3436:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3445:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3432:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3432:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3457:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3428:32:70" - }, - "nodeType": "YulIf", - "src": "3425:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "3486:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3515:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3496:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3496:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3486:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3534:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3567:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3578:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3563:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3563:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3544:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3544:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3534:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3591:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3618:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3629:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3614:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3614:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3601:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3601:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3591:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3365:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3376:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3388:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3396:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3404:6:70", - "type": "" - } - ], - "src": "3311:328:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3818:236:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3835:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3846:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3828:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3828:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3828:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3869:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3880:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3865:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3865:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3885:2:70", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3858:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3858:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3858:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3908:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3919:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3904:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3904:18:70" - }, - { - "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3924:34:70", - "type": "", - "value": "Initializable: contract is alrea" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3897:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3897:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3897:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3979:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3990:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3975:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3975:18:70" - }, - { - "hexValue": "647920696e697469616c697a6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3995:16:70", - "type": "", - "value": "dy initialized" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3968:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3968:44:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3968:44:70" - }, - { - "nodeType": "YulAssignment", - "src": "4021:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4033:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4044:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4029:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4029:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4021:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3795:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3809:4:70", - "type": "" - } - ], - "src": "3644:410:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4166:87:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4176:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4188:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4199:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4184:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4184:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4176:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4218:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4233:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4241:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4229:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4229:17:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4211:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4211:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4211:36:70" - } - ] - }, - "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4135:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4146:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4157:4:70", - "type": "" - } - ], - "src": "4059:194:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4387:175:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4397:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4409:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4420:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4405:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4405:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4397:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4432:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4450:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4455:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4446:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4446:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4459:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4442:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4442:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4436:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4477:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4492:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4500:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4488:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4488:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4470:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4470:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4470:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4524:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4535:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4520:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4520:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4544:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4552:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4540:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4540:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4513:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4513:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4513:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4348:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4359:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4367:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4378:4:70", - "type": "" - } - ], - "src": "4258:304:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4648:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4694:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4703:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4706:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4696:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4696:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4696:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4669:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4678:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4665:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4665:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4690:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4661:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4661:32:70" - }, - "nodeType": "YulIf", - "src": "4658:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "4719:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4735:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4729:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "4729:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4719:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4614:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4625:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4637:6:70", - "type": "" - } - ], - "src": "4567:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4930:244:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4947:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4958:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4940:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4940:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4940:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4981:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4992:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4977:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4977:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4997:2:70", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4970:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4970:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4970:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5020:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5031:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5016:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5016:18:70" - }, - { - "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5036:34:70", - "type": "", - "value": "SafeERC20: approve from non-zero" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5009:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5009:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5009:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5091:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5102:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5087:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5087:18:70" - }, - { - "hexValue": "20746f206e6f6e2d7a65726f20616c6c6f77616e6365", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5107:24:70", - "type": "", - "value": " to non-zero allowance" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5080:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5080:52:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5080:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "5141:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5153:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5164:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5149:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5149:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5141:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4907:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4921:4:70", - "type": "" - } - ], - "src": "4756:418:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5308:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5318:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5330:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5341:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5326:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5318:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5360:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5375:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5391:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5396:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5387:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5387:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5400:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5383:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5383:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5371:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5371:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5353:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5353:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5353:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5424:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5435:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5420:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5420:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5440:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5413:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5413:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5413:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5269:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5280:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5288:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5299:4:70", - "type": "" - } - ], - "src": "5179:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5536:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5582:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5591:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5594:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5584:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5584:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5584:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5557:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5566:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5553:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5553:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5578:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5549:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5549:32:70" - }, - "nodeType": "YulIf", - "src": "5546:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5607:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5626:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5620:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5620:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5611:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5689:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5698:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5701:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5691:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5691:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5691:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5658:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5679:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5672:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5672:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5665:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5665:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5655:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5655:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5648:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5648:40:70" - }, - "nodeType": "YulIf", - "src": "5645:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "5714:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5724:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5714:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5502:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5513:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5525:6:70", - "type": "" - } - ], - "src": "5458:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5914:232:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5931:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5942:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5924:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5924:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5924:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5965:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5976:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5961:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5961:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5981:2:70", - "type": "", - "value": "42" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5954:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5954:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5954:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6004:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6015:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6000:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6000:18:70" - }, - { - "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6020:34:70", - "type": "", - "value": "SafeERC20: ERC20 operation did n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5993:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5993:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5993:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6075:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6086:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6071:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6071:18:70" - }, - { - "hexValue": "6f742073756363656564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6091:12:70", - "type": "", - "value": "ot succeed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6064:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6064:40:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6064:40:70" - }, - { - "nodeType": "YulAssignment", - "src": "6113:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6125:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6136:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6121:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6121:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6113:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5891:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5905:4:70", - "type": "" - } - ], - "src": "5740:406:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6325:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6342:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6353:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6335:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6335:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6335:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6376:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6387:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6372:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6372:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6392:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6365:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6365:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6365:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6415:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6426:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6411:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6411:18:70" - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6431:34:70", - "type": "", - "value": "Address: insufficient balance fo" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6404:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6404:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6404:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6486:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6497:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6482:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6482:18:70" - }, - { - "hexValue": "722063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6502:8:70", - "type": "", - "value": "r call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6475:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6475:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6475:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "6520:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6532:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6543:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6528:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6528:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6520:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6302:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6316:4:70", - "type": "" - } - ], - "src": "6151:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6695:150:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "6705:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6725:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "6719:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "6719:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "6709:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6780:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6788:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6776:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6776:17:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6795:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6800:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "6741:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "6741:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6741:66:70" - }, - { - "nodeType": "YulAssignment", - "src": "6816:23:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6827:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6832:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6823:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6823:16:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "6816:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "6671:3:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6676:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "6687:3:70", - "type": "" - } - ], - "src": "6558:287:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7024:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7041:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7052:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7034:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7034:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7034:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7075:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7086:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7071:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7071:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7091:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7064:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7064:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7064:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7114:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7125:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7110:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7110:18:70" - }, - { - "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7130:31:70", - "type": "", - "value": "Address: call to non-contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7103:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7103:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7103:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "7171:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7183:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7194:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7179:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7179:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7171:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7001:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7015:4:70", - "type": "" - } - ], - "src": "6850:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7329:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7346:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7357:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7339:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7339:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7339:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "7369:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7394:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7406:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7417:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7402:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7402:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "7377:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "7377:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7369:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7298:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7309:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7320:4:70", - "type": "" - } - ], - "src": "7208:219:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := calldataload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n mstore(add(add(memPtr, _3), 32), 0)\n value1 := memPtr\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n mstore(add(headStart, 96), \"dy initialized\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n mstore(add(headStart, 96), \" to non-zero allowance\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n mstore(add(headStart, 96), \"ot succeed\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x8129FC1C EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xC75B5A71 EQ PUSH2 0x183 JUMPI DUP1 PUSH4 0xD1660F99 EQ PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16128211 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x17D11A15 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x19A16039 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x1AFBB7A4 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x1CFF79CD EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0x3DC54B40 EQ PUSH2 0x126 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCC PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD7 PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCC PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x890 JUMP JUMPDEST PUSH2 0x1DF JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D9 JUMP JUMPDEST PUSH2 0x229 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xD7 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x271 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x152 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x152 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x9FE JUMP JUMPDEST PUSH2 0x398 JUMP JUMPDEST PUSH2 0xCC PUSH2 0x1A4 CALLDATASIZE PUSH1 0x4 PUSH2 0xA31 JUMP JUMPDEST PUSH2 0x3F6 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x210 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x225 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 PUSH1 0x0 PUSH2 0x43A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x257 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x26A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 PUSH2 0x582 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x291 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x2AB JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AB JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x313 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x191E481A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x336 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH3 0x10000 PUSH1 0x1 PUSH1 0xB0 SHL SUB NOT AND CALLER PUSH3 0x10000 MUL OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x395 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1624D709 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SSTORE NUMBER PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x421 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F511167 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x435 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND DUP4 DUP4 PUSH2 0x5C6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x4B4 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B2 SWAP2 SWAP1 PUSH2 0xA6D JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x51F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x5F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x26A DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x435 SWAP1 DUP5 SWAP1 PUSH4 0xA9059CBB PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x64B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x7A5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x435 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x435 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x745 SWAP2 SWAP1 PUSH2 0xAA8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x782 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x787 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x798 DUP8 DUP4 DUP4 DUP8 PUSH2 0x7B4 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x79D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x6C8 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x823 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x81C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x81C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30A JUMP JUMPDEST POP DUP2 PUSH2 0x79D JUMP JUMPDEST PUSH2 0x79D DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x838 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x30A SWAP2 SWAP1 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x865 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x88B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AC DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH2 0x8BA PUSH1 0x20 DUP5 ADD PUSH2 0x874 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8F5 DUP4 PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x938 JUMPI PUSH2 0x938 PUSH2 0x8C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x960 JUMPI PUSH2 0x960 PUSH2 0x8C3 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x979 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x99E JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x9D7 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x26A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA1C DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA4F DUP5 PUSH2 0x874 JUMP JUMPDEST SWAP3 POP PUSH2 0xA5D PUSH1 0x20 DUP6 ADD PUSH2 0x874 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xABA DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x99B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xE0 ORIGIN 0xB4 0xD4 SLOAD REVERT 0xE8 SWAP14 SELFBALANCE 0xC1 RETURN 0xE3 0xD2 DUP9 DUP4 0xF9 0xDD PUSH27 0x1D4A9F2897AD07A0CE3EB716D364736F6C63430008110033000000 ", - "sourceMap": "1095:4065:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3461:298;;;;;;:::i;:::-;;:::i;:::-;;1602:45;;;;;;;;;413:25:70;;;401:2;386:18;1602:45:19;;;;;;;;3989:183;;;;;;:::i;:::-;;:::i;1474:38::-;;;;;;4938:220;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1727:29::-;;;;;;1787:35;;1821:1;1787:35;;2370:89;;;:::i;1373:37::-;;;;;-1:-1:-1;;;;;1373:37:19;;;;;;-1:-1:-1;;;;;2940:32:70;;;2922:51;;2910:2;2895:18;1373:37:19;2776:203:70;1272:31:19;;;;;;;;-1:-1:-1;;;;;1272:31:19;;;2789:388;;;;;;:::i;:::-;;:::i;4464:238::-;;;;;;:::i;:::-;;:::i;3461:298::-;1957:13;;-1:-1:-1;;;;;1957:13:19;1943:10;:27;1939:85;;1991:33;;-1:-1:-1;;;1991:33:19;;;;;;;;;;;1939:85;3652:14:::1;:32:::0;;;;3706:21:::1;:46:::0;3461:298::o;3989:183::-;2162:7;;;;;-1:-1:-1;;;;;2162:7:19;2148:10;:21;2144:61;;2178:27;;-1:-1:-1;;;2178:27:19;;;;;;;;;;;2144:61;4121:44:::1;-1:-1:-1::0;;;;;4121:25:19;::::1;4147:14:::0;4163:1:::1;4121:25;:44::i;:::-;3989:183:::0;;:::o;4938:220::-;1957:13;;5072:12;;-1:-1:-1;;;;;1957:13:19;1943:10;:27;1939:85;;1991:33;;-1:-1:-1;;;1991:33:19;;;;;;;;;;;1939:85;5107:30:::1;-1:-1:-1::0;;;;;5107:24:19;::::1;5132:4:::0;5107:24:::1;:30::i;:::-;5100:37:::0;4938:220;-1:-1:-1;;;4938:220:19:o;2370:89::-;3257:19:55;3280:13;;;;;;3279:14;;3325:34;;;;-1:-1:-1;3343:12:55;;3358:1;3343:12;;;;:16;3325:34;3324:97;;;-1:-1:-1;3393:4:55;1465:19:65;:23;;;3365:55:55;;-1:-1:-1;3403:12:55;;;;;:17;3365:55;3303:190;;;;-1:-1:-1;;;3303:190:55;;3846:2:70;3303:190:55;;;3828:21:70;3885:2;3865:18;;;3858:30;3924:34;3904:18;;;3897:62;-1:-1:-1;;;3975:18:70;;;3968:44;4029:19;;3303:190:55;;;;;;;;;3503:12;:16;;-1:-1:-1;;3503:16:55;3518:1;3503:16;;;3529:65;;;;3563:13;:20;;-1:-1:-1;;3563:20:55;;;;;3529:65;2432:7:19::1;:20:::0;;-1:-1:-1;;;;;;2432:20:19::1;2442:10;2432:20:::0;::::1;;::::0;;3614:99:55;;;;3664:5;3648:21;;-1:-1:-1;;3648:21:55;;;3688:14;;-1:-1:-1;4211:36:70;;3688:14:55;;4199:2:70;4184:18;3688:14:55;;;;;;;3614:99;3247:472;2370:89:19:o;2789:388::-;2162:7;;;;;-1:-1:-1;;;;;2162:7:19;2148:10;:21;2144:61;;2178:27;;-1:-1:-1;;;2178:27:19;;;;;;;;;;;2144:61;2959:13:::1;:30:::0;;-1:-1:-1;;;;;;2959:30:19::1;-1:-1:-1::0;;;;;2959:30:19;;;::::1;::::0;;;::::1;::::0;;;3011:14:::1;:32:::0;3067:21:::1;:46:::0;3146:12:::1;3138:5;:20:::0;2789:388::o;4464:238::-;1957:13;;-1:-1:-1;;;;;1957:13:19;1943:10;:27;1939:85;;1991:33;;-1:-1:-1;;;1991:33:19;;;;;;;;;;;1939:85;4645:38:::1;-1:-1:-1::0;;;;;4645:26:19;::::1;4672:2:::0;4676:6;4645:26:::1;:38::i;:::-;4464:238:::0;;;:::o;1475:603:62:-;1830:10;;;1829:62;;-1:-1:-1;1846:39:62;;-1:-1:-1;;;1846:39:62;;1870:4;1846:39;;;4470:34:70;-1:-1:-1;;;;;4540:15:70;;;4520:18;;;4513:43;1846:15:62;;;;;4405:18:70;;1846:39:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1829:62;1808:163;;;;-1:-1:-1;;;1808:163:62;;4958:2:70;1808:163:62;;;4940:21:70;4997:2;4977:18;;;4970:30;5036:34;5016:18;;;5009:62;-1:-1:-1;;;5087:18:70;;;5080:52;5149:19;;1808:163:62;4756:418:70;1808:163:62;2008:62;;-1:-1:-1;;;;;5371:32:70;;2008:62:62;;;5353:51:70;5420:18;;;5413:34;;;1981:90:62;;2001:5;;-1:-1:-1;;;2031:22:62;5326:18:70;;2008:62:62;;;;-1:-1:-1;;2008:62:62;;;;;;;;;;;;;;-1:-1:-1;;;;;2008:62:62;-1:-1:-1;;;;;;2008:62:62;;;;;;;;;;1981:19;:90::i;3466:185:65:-;3541:12;3572:72;3594:6;3602:4;3608:1;3572:72;;;;;;;;;;;;;;;;;:21;:72::i;763:205:62:-;902:58;;-1:-1:-1;;;;;5371:32:70;;902:58:62;;;5353:51:70;5420:18;;;5413:34;;;875:86:62;;895:5;;-1:-1:-1;;;925:23:62;5326:18:70;;902:58:62;5179:274:70;3747:706:62;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:62;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:62;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:62;;5942:2:70;4351:85:62;;;5924:21:70;5981:2;5961:18;;;5954:30;6020:34;6000:18;;;5993:62;-1:-1:-1;;;6071:18:70;;;6064:40;6121:19;;4351:85:62;5740:406:70;4960:446:65;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:65;;6353:2:70;5149:81:65;;;6335:21:70;6392:2;6372:18;;;6365:30;6431:34;6411:18;;;6404:62;-1:-1:-1;;;6482:18:70;;;6475:36;6528:19;;5149:81:65;6151:402:70;5149:81:65;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:65;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;;;;4960:446;;;;;;;:::o;3873:223::-;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:65;;;7908:60;;;;-1:-1:-1;;;7908:60:65;;7052:2:70;7908:60:65;;;7034:21:70;7091:2;7071:18;;;7064:30;7130:31;7110:18;;;7103:59;7179:18;;7908:60:65;6850:353:70;7908:60:65;-1:-1:-1;8003:10:65;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:65;;;;;;;;:::i;14:248:70:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:70;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:70:o;449:173::-;517:20;;-1:-1:-1;;;;;566:31:70;;556:42;;546:70;;612:1;609;602:12;546:70;449:173;;;:::o;627:260::-;695:6;703;756:2;744:9;735:7;731:23;727:32;724:52;;;772:1;769;762:12;724:52;795:29;814:9;795:29;:::i;:::-;785:39;;843:38;877:2;866:9;862:18;843:38;:::i;:::-;833:48;;627:260;;;;;:::o;892:127::-;953:10;948:3;944:20;941:1;934:31;984:4;981:1;974:15;1008:4;1005:1;998:15;1024:995;1101:6;1109;1162:2;1150:9;1141:7;1137:23;1133:32;1130:52;;;1178:1;1175;1168:12;1130:52;1201:29;1220:9;1201:29;:::i;:::-;1191:39;;1281:2;1270:9;1266:18;1253:32;1304:18;1345:2;1337:6;1334:14;1331:34;;;1361:1;1358;1351:12;1331:34;1399:6;1388:9;1384:22;1374:32;;1444:7;1437:4;1433:2;1429:13;1425:27;1415:55;;1466:1;1463;1456:12;1415:55;1502:2;1489:16;1524:2;1520;1517:10;1514:36;;;1530:18;;:::i;:::-;1605:2;1599:9;1573:2;1659:13;;-1:-1:-1;;1655:22:70;;;1679:2;1651:31;1647:40;1635:53;;;1703:18;;;1723:22;;;1700:46;1697:72;;;1749:18;;:::i;:::-;1789:10;1785:2;1778:22;1824:2;1816:6;1809:18;1864:7;1859:2;1854;1850;1846:11;1842:20;1839:33;1836:53;;;1885:1;1882;1875:12;1836:53;1941:2;1936;1932;1928:11;1923:2;1915:6;1911:15;1898:46;1986:1;1981:2;1976;1968:6;1964:15;1960:24;1953:35;2007:6;1997:16;;;;;;;1024:995;;;;;:::o;2024:250::-;2109:1;2119:113;2133:6;2130:1;2127:13;2119:113;;;2209:11;;;2203:18;2190:11;;;2183:39;2155:2;2148:10;2119:113;;;-1:-1:-1;;2266:1:70;2248:16;;2241:27;2024:250::o;2279:270::-;2320:3;2358:5;2352:12;2385:6;2380:3;2373:19;2401:76;2470:6;2463:4;2458:3;2454:14;2447:4;2440:5;2436:16;2401:76;:::i;:::-;2531:2;2510:15;-1:-1:-1;;2506:29:70;2497:39;;;;2538:4;2493:50;;2279:270;-1:-1:-1;;2279:270:70:o;2554:217::-;2701:2;2690:9;2683:21;2664:4;2721:44;2761:2;2750:9;2746:18;2738:6;2721:44;:::i;2984:322::-;3061:6;3069;3077;3130:2;3118:9;3109:7;3105:23;3101:32;3098:52;;;3146:1;3143;3136:12;3098:52;3169:29;3188:9;3169:29;:::i;:::-;3159:39;3245:2;3230:18;;3217:32;;-1:-1:-1;3296:2:70;3281:18;;;3268:32;;2984:322;-1:-1:-1;;;2984:322:70:o;3311:328::-;3388:6;3396;3404;3457:2;3445:9;3436:7;3432:23;3428:32;3425:52;;;3473:1;3470;3463:12;3425:52;3496:29;3515:9;3496:29;:::i;:::-;3486:39;;3544:38;3578:2;3567:9;3563:18;3544:38;:::i;:::-;3534:48;;3629:2;3618:9;3614:18;3601:32;3591:42;;3311:328;;;;;:::o;4567:184::-;4637:6;4690:2;4678:9;4669:7;4665:23;4661:32;4658:52;;;4706:1;4703;4696:12;4658:52;-1:-1:-1;4729:16:70;;4567:184;-1:-1:-1;4567:184:70:o;5458:277::-;5525:6;5578:2;5566:9;5557:7;5553:23;5549:32;5546:52;;;5594:1;5591;5584:12;5546:52;5626:9;5620:16;5679:5;5672:13;5665:21;5658:5;5655:32;5645:60;;5701:1;5698;5691:12;6558:287;6687:3;6725:6;6719:13;6741:66;6800:6;6795:3;6788:4;6780:6;6776:17;6741:66;:::i;:::-;6823:16;;;;;6558:287;-1:-1:-1;;6558:287:70:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "562000", - "executionCost": "594", - "totalCost": "562594" - }, - "external": { - "borrowedAmount()": "2351", - "cancelAllowance(address,address)": "infinite", - "connectTo(address,uint256,uint256)": "93165", - "creditManager()": "2381", - "cumulativeIndexAtOpen()": "2307", - "execute(address,bytes)": "infinite", - "factory()": "2414", - "initialize()": "107217", - "safeTransfer(address,address,uint256)": "infinite", - "since()": "2395", - "updateParameters(uint256,uint256)": "46600", - "version()": "184" - } - }, - "methodIdentifiers": { - "borrowedAmount()": "1afbb7a4", - "cancelAllowance(address,address)": "19a16039", - "connectTo(address,uint256,uint256)": "c75b5a71", - "creditManager()": "c12c21c0", - "cumulativeIndexAtOpen()": "17d11a15", - "execute(address,bytes)": "1cff79cd", - "factory()": "c45a0155", - "initialize()": "8129fc1c", - "safeTransfer(address,address,uint256)": "d1660f99", - "since()": "3dc54b40", - "updateParameters(uint256,uint256)": "16128211", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerNotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotFactoryException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"borrowedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"cancelAllowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"connectTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cumulativeIndexAtOpen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"safeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"since\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"updateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotCreditManagerException()\":[{\"details\":\"throws if the caller is not the connected Credit Manager\"}],\"CallerNotFactoryException()\":[{\"details\":\"throws if the caller is not the factory\"}]},\"kind\":\"dev\",\"methods\":{\"cancelAllowance(address,address)\":{\"details\":\"Removes allowance for a token to a 3rd-party contract. Restricted to factory only.\",\"params\":{\"targetContract\":\"Target contract to revoke allowance to.\",\"token\":\"ERC20 token to remove allowance for.\"}},\"connectTo(address,uint256,uint256)\":{\"details\":\"Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.\",\"params\":{\"_borrowedAmount\":\"The amount borrowed at Credit Account opening\",\"_creditManager\":\"Credit manager address\",\"_cumulativeIndexAtOpen\":\"The interest index at Credit Account opening\"}},\"execute(address,bytes)\":{\"details\":\"Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\",\"params\":{\"data\":\"Data to call the contract with.\",\"destination\":\"Contract address to be called.\"}},\"initialize()\":{\"details\":\"Called on new Credit Account creation.\"},\"safeTransfer(address,address,uint256)\":{\"details\":\"Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\",\"params\":{\"amount\":\"Amount to be transferred.\",\"to\":\"Address of the recipient.\",\"token\":\"Token to be transferred from the Credit Account.\"}},\"updateParameters(uint256,uint256)\":{\"details\":\"Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.\",\"params\":{\"_borrowedAmount\":\"The amount currently lent to the Credit Account\",\"_cumulativeIndexAtOpen\":\"New cumulative index to calculate interest from\"}}},\"stateVariables\":{\"borrowedAmount\":{\"details\":\"The principal amount borrowed from the pool\"},\"creditManager\":{\"details\":\"Address of the currently connected Credit Manager\"},\"cumulativeIndexAtOpen\":{\"details\":\"Cumulative interest index since the last Credit Account's debt update\"},\"factory\":{\"details\":\"Address of the Credit Account factory\"},\"since\":{\"details\":\"Block at which the contract was last taken from the factory\"},\"version\":{\"details\":\"Returns contract version\"}},\"title\":\"Credit Account\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize()\":{\"notice\":\"Initialize is used instead of constructor, since the contract is cloned.\"}},\"notice\":\"Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol\":\"CreditAccount\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0x03dff98ec94968396354b8f2063b2954297a4e13fbb43bf94d5e14e8e883f8ed\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://74180382ecc18d692902e2b67c561682a25a3faf227bf6a13e99ca56e339a497\",\"dweb:/ipfs/QmfV9TDgz33PwmixtBE1Rqp3eAZBoyoLoMVaDC5yzFTy3Q\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16916, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 16919, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4819, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "factory", - "offset": 2, - "slot": "0", - "type": "t_address" - }, - { - "astId": 4823, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "creditManager", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 4827, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "borrowedAmount", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 4831, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "cumulativeIndexAtOpen", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 4835, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol:CreditAccount", - "label": "since", - "offset": 0, - "slot": "4", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "initialize()": { - "notice": "Initialize is used instead of constructor, since the contract is cloned." - } - }, - "notice": "Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol": { - "CreditFacade": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_degenNFT", - "type": "address" - }, - { - "internalType": "address", - "name": "_blacklistHelper", - "type": "address" - }, - { - "internalType": "bool", - "name": "_expirable", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AccountTransferNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "ActionProhibitedWithForbiddenTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "BalanceLessThanMinimumDesiredException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowAmountOutOfLimitsException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowedBlockLimitException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateNonExpiredException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateWithSuchHealthFactorException", - "type": "error" - }, - { - "inputs": [], - "name": "CantTransferLiquidatableAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedBalancesAlreadySetException", - "type": "error" - }, - { - "inputs": [], - "name": "ForbiddenDuringClosureException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCallDataException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseDebtForbiddenException", - "type": "error" - }, - { - "inputs": [], - "name": "LiquiditySanityCheckException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedForBlacklistedAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedInWhitelistedMode", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedWhenNotExpirableException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "OpenAccountNotAllowedAfterExpirationException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "UnknownMethodException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "AddCollateral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "blacklistHelper", - "type": "address" - } - ], - "name": "BlacklistHelperSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "CloseCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "DecreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "IncreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "IncurLossOnLiquidation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateExpiredCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "MultiCallFinished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "MultiCallStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "OpenCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "TransferAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "TransferAccountAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "UnderlyingSentToBlacklistHelper", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "approveAccountTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "blacklistHelper", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountHealthFactor", - "outputs": [ - { - "internalType": "uint256", - "name": "hf", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcTotalValue", - "outputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "twv", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "closeCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "closeCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "contract ICreditManagerV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "degenNFT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "expirable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotalBorrowedInBlock", - "outputs": [ - { - "internalType": "uint64", - "name": "blockLastUpdate", - "type": "uint64" - }, - { - "internalType": "uint128", - "name": "borrowedInBlock", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "hasOpenedCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isBlacklistableUnderlying", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "isTokenAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "limits", - "outputs": [ - { - "internalType": "uint128", - "name": "minBorrowedAmount", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "maxBorrowedAmount", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateExpiredCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateExpiredCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "lossParams", - "outputs": [ - { - "internalType": "uint128", - "name": "currentCumulativeLoss", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "maxCumulativeLoss", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "multicall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "uint16", - "name": "leverageFactor", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "openCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "openCreditAccountMulticall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "maxBorrowedAmountPerBlock", - "type": "uint128" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint40", - "name": "expirationDate", - "type": "uint40" - }, - { - "internalType": "uint16", - "name": "emergencyLiquidationDiscount", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "resetCumulativeLoss", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_minBorrowedAmount", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "_maxBorrowedAmount", - "type": "uint128" - } - ], - "name": "setCreditAccountLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "newDiscount", - "type": "uint16" - } - ], - "name": "setEmergencyLiquidationDiscount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint40", - "name": "newExpirationDate", - "type": "uint40" - } - ], - "name": "setExpirationDate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_mode", - "type": "bool" - } - ], - "name": "setIncreaseDebtForbidden", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "newLimit", - "type": "uint128" - } - ], - "name": "setLimitPerBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_maxCumulativeLoss", - "type": "uint128" - } - ], - "name": "setMaxCumulativeLoss", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "newCurrentTotalDebt", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "newLimit", - "type": "uint128" - } - ], - "name": "setTotalDebtParams", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "totalDebt", - "outputs": [ - { - "internalType": "uint128", - "name": "currentTotalDebt", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "totalDebtLimit", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferAccountOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "transfersAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wethAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "whitelisted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Direct interaction with the Credit Manager is forbidden, but Credit Facade provides all the needed account management functions: open / close / liquidate / addCollateral / manageDebt / multicall. The latter allows to perform multiple actions within a single transaction, followed by a single collateral check in the end.", - "errors": { - "AccountTransferNotAllowedException()": [ - { - "details": "Thrown if a user attempts to transfer a CA to an address that didn't allow it" - } - ], - "ActionProhibitedWithForbiddenTokensException()": [ - { - "details": "Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled" - } - ], - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "BalanceLessThanMinimumDesiredException(address)": [ - { - "details": "Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called" - } - ], - "BorrowAmountOutOfLimitsException()": [ - { - "details": "Thrown if the new debt principal for a CA falls outside of borrowing limits" - } - ], - "BorrowedBlockLimitException()": [ - { - "details": "Thrown if too much new debt was taken within a single block" - } - ], - "CantLiquidateNonExpiredException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired" - } - ], - "CantLiquidateWithSuchHealthFactorException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account with a health factor above 1" - } - ], - "CantTransferLiquidatableAccountException()": [ - { - "details": "Thrown if the account owner tries to transfer an unhealthy account" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "ExpectedBalancesAlreadySetException()": [ - { - "details": "Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice" - } - ], - "ForbiddenDuringClosureException()": [ - { - "details": "Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "IncorrectCallDataException()": [ - { - "details": "Thrown if call data passed to a multicall is too short" - } - ], - "IncreaseAndDecreaseForbiddenInOneCallException()": [ - { - "details": "Thrown if debt increase and decrease are subsequently attempted in one multicall" - } - ], - "IncreaseDebtForbiddenException()": [ - { - "details": "Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on" - } - ], - "LiquiditySanityCheckException()": [ - { - "details": "Thrown when the pool receives less funds than borrowAmountWithInterest on account closure" - } - ], - "NotAllowedForBlacklistedAddressException()": [ - { - "details": "Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token" - } - ], - "NotAllowedInWhitelistedMode()": [ - { - "details": "Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode" - } - ], - "NotAllowedWhenNotExpirableException()": [ - { - "details": "Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "OpenAccountNotAllowedAfterExpirationException()": [ - { - "details": "Thrown if a user attempts to open an account on a Credit Facade that has expired" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "UnknownMethodException()": [ - { - "details": "Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": { - "addCollateral(address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "onBehalfOf": "Address of the borrower whose account is funded", - "token": "Address of a collateral token" - } - }, - "approveAccountTransfer(address,bool)": { - "details": "Approves account transfer from another user to msg.sender", - "params": { - "from": "Address for which account transfers are allowed/forbidden", - "state": "True is transfer is allowed, false if forbidden" - } - }, - "calcCreditAccountHealthFactor(address)": { - "details": "Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued + fees More info: https://dev.gearbox.fi/developers/credit/economy#health-factor", - "params": { - "creditAccount": "Credit account address" - }, - "returns": { - "hf": "= Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)" - } - }, - "calcTotalValue(address)": { - "details": "Calculates total value for provided Credit Account in underlying More: https://dev.gearbox.fi/developers/credit/economy#totalUSD-value", - "params": { - "creditAccount": "Credit Account address" - }, - "returns": { - "total": "Total value in underlying", - "twv": "Total weighted (discounted by liquidation thresholds) value in underlying" - } - }, - "closeCreditAccount(address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and closes the account - Wraps ETH to WETH and sends it msg.sender if value > 0 - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying in order to pay the debt. - Closes credit account: + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender. + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked to be skipped in skipTokenMask - Emits a CloseCreditAccount event", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before closing the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to during account closing" - } - }, - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": { - "details": "A version of `closeCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "constructor": { - "details": "Initializes creditFacade and connects it with CreditManager", - "params": { - "_blacklistHelper": "address of the funds recovery contract for blacklistable underlyings. Must be address(0) is the underlying is not blacklistable", - "_creditManager": "address of Credit Manager", - "_degenNFT": "address of the DegenNFT or address(0) if whitelisted mode is not used", - "_expirable": "Whether the CreditFacade can expire and implements expiration-related logic" - } - }, - "getTotalBorrowedInBlock()": { - "details": "Returns the last block where debt was taken, and the total amount borrowed in that block" - }, - "hasOpenedCreditAccount(address)": { - "details": "Returns true if the borrower has an open Credit Account", - "params": { - "borrower": "Borrower address" - } - }, - "isTokenAllowed(address)": { - "details": "Returns true if token is a collateral token and is not forbidden, otherwise returns false", - "params": { - "token": "Token to check" - } - }, - "liquidateCreditAccount(address,address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and liquidates the account - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1. Total value has to be computed before the multicall, otherwise the liquidator would be able to manipulate it. - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0 - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying in order to pay the debt. - Liquidate credit account: + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees, only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower as totalValue * liquidationDiscount - amountToPool. + If borrower happens to be blacklisted in the underlying asset, sends funds to the blacklist helper and marks them as claimable by the borrower. + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator. + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying - Emits LiquidateCreditAccount event", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before liquidating the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to after liquidation" - } - }, - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": { - "details": "A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and liquidates the account when this Credit Facade is expired The general flow of liquidation is nearly the same as normal liquidations, with two main differences: - An account can be liquidated on an expired Credit Facade even with hf > 1. However, no accounts can be liquidated through this function if the Credit Facade is not expired. - Liquidation premiums and fees for liquidating expired accounts are reduced. It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade is expired.", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before liquidating the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to after liquidation" - } - }, - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": { - "details": "A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "multicall((address,bytes)[])": { - "details": "Executes a batch of transactions within a Multicall, to manage an existing account - Wraps ETH and sends it back to msg.sender, if value > 0 - Executes the Multicall - Performs a fullCollateralCheck to verify that hf > 1 after all actions", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute." - } - }, - "openCreditAccount(uint256,address,uint16,uint16)": { - "details": "Opens credit account, borrows funds from the pool and pulls collateral without any additional action. - Performs sanity checks to determine whether opening an account is allowed - Wraps ETH to WETH and sends it msg. sender is value > 0 - Requests CreditManager to open a Credit Account with a specified borrowed amount - Transfers collateral in the underlying asset from the user - Emits OpenCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account", - "params": { - "amount": "The amount of collateral provided by the borrower", - "leverageFactor": "Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount as the user's own collateral, equivalent to 2x leverage.", - "onBehalfOf": "The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf", - "referralCode": "Referral code that is used for potential rewards. 0 if no referral code provided." - } - }, - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": { - "details": "Opens a Credit Account and runs a batch of operations in a multicall - Opens credit account with the desired borrowed amount - Executes all operations in a multicall - Checks that the new account has enough collateral - Emits OpenCreditAccount event", - "params": { - "borrowedAmount": "Debt size", - "calls": "The array of MultiCall structs encoding the required operations. Generally must have at least a call to addCollateral, as otherwise the health check at the end will fail.", - "onBehalfOf": "The address to open an account for. Transfers to it have to be allowed if msg.sender != onBehalfOf", - "referralCode": "Referral code which is used for potential rewards. 0 if no referral code provided" - } - }, - "resetCumulativeLoss()": { - "details": "Resets the current cumulative loss value" - }, - "setCreditAccountLimits(uint128,uint128)": { - "details": "Sets borrowing limits per single Credit Account", - "params": { - "_maxBorrowedAmount": "The maximal borrowed amount per Credit Account. Used to limit exposure per a single credit account - especially relevant in whitelisted mode.", - "_minBorrowedAmount": "The minimal borrowed amount per Credit Account. Minimal amount can be relevant for liquidations, since very small amounts will make liquidations unprofitable for liquidators" - } - }, - "setEmergencyLiquidationDiscount(uint16)": { - "details": "Sets the new emergency liquidation discount value" - }, - "setExpirationDate(uint40)": { - "details": "Sets Credit Facade expiration date" - }, - "setIncreaseDebtForbidden(bool)": { - "details": "Sets the increaseDebtForbidden mode" - }, - "setLimitPerBlock(uint128)": { - "details": "Sets borrowing limit per single block" - }, - "setMaxCumulativeLoss(uint128)": { - "details": "Sets the max cumulative loss that can be accrued before pausing the Credit Manager" - }, - "setTotalDebtParams(uint128,uint128)": { - "details": "Sets the total debt limit and the current total debt value (used for Credit Facade migration)" - }, - "transferAccountOwnership(address)": { - "details": "Transfers credit account to another user By default, this action is forbidden, and the user has to approve transfers from sender to itself by calling approveAccountTransfer. This is done to prevent malicious actors from transferring compromised accounts to other users.", - "params": { - "to": "Address to transfer the account to" - } - } - }, - "stateVariables": { - "blacklistHelper": { - "details": "Address of the BlacklistHelper if underlying is blacklistable, otherwise address(0)" - }, - "creditManager": { - "details": "Credit Manager connected to this Credit Facade" - }, - "degenNFT": { - "details": "Address of the DegenNFT that gatekeeps account openings in whitelisted mode" - }, - "expirable": { - "details": "Whether the Credit Facade implements expirable logic" - }, - "isBlacklistableUnderlying": { - "details": "Whether the Credit Manager's underlying has blacklisting" - }, - "limits": { - "details": "Keeps borrowing limits together for storage access optimization" - }, - "lossParams": { - "details": "Keeps parameters that are used to pause the system after too much bad debt over a short period" - }, - "params": { - "details": "Keeps frequently accessed parameters for storage access optimization" - }, - "pool": { - "details": "Address of the pool connected to the Credit Manager" - }, - "totalBorrowedInBlock": { - "details": "Stores in a compressed state the last block where borrowing happened and the total amount borrowed in that block" - }, - "transfersAllowed": { - "details": "A map that stores whether a user allows a transfer of an account from another user to themselves" - }, - "underlying": { - "details": "Address of the underlying token" - }, - "version": { - "details": "Contract version" - }, - "wethAddress": { - "details": "Address of WETH" - }, - "whitelisted": { - "details": "Whether the whitelisted mode is active" - } - }, - "title": "CreditFacade", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_17205": { - "entryPoint": null, - "id": 17205, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_5262": { - "entryPoint": null, - "id": 5262, - "parameterSlots": 4, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 605, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 733, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_addresst_bool_fromMemory": { - "entryPoint": 634, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:944:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:70" - }, - "nodeType": "YulIf", - "src": "115:70:70" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:70", - "type": "" - } - ], - "src": "14:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "325:404:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "372:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "381:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "384:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "374:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "374:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "374:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "346:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "355:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "342:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "342:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "367:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "338:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "338:33:70" - }, - "nodeType": "YulIf", - "src": "335:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "397:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "437:9:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "407:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "407:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "397:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "456:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "500:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "511:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "496:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "496:18:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "466:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "466:49:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "456:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "524:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "568:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "579:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "564:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "564:18:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "534:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "534:49:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "524:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "592:38:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "615:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "626:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "611:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "611:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "605:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "605:25:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "596:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "683:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "692:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "695:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "685:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "685:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "685:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "652:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "673:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "666:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "666:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "659:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "659:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "649:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "649:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "642:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "642:40:70" - }, - "nodeType": "YulIf", - "src": "639:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "708:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "718:5:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "708:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_addresst_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "267:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "278:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "290:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "298:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "306:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "314:6:70", - "type": "" - } - ], - "src": "196:533:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "815:127:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "861:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "870:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "873:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "863:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "863:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "863:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "836:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "845:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "832:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "832:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "857:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "828:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "828:32:70" - }, - "nodeType": "YulIf", - "src": "825:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "886:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "926:9:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "896:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "896:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "886:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "781:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "792:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "804:6:70", - "type": "" - } - ], - "src": "734:208:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_addresst_bool_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n let value := mload(add(headStart, 96))\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value3 := value\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "6101a06040523480156200001257600080fd5b506040516200562d3803806200562d83398101604081905262000035916200027a565b60016000556001600160a01b0384166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038416608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620002dd565b6001600160a01b0316610100816001600160a01b031681525050836001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001529190620002dd565b6001600160a01b0316610120816001600160a01b031681525050836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d19190620002dd565b6001600160a01b0390811661018052838116610140819052151560a052821661016081905215801560c05262000236576040516001600160a01b038316907fcb3b4bdae9a9c5626b486904f099393ae5286a7f2b58380329f6d67a6ecdc9da90600090a25b151560e0525050600480546001600160801b03166001600160801b03191790555062000302565b80516001600160a01b03811681146200027557600080fd5b919050565b600080600080608085870312156200029157600080fd5b6200029c856200025d565b9350620002ac602086016200025d565b9250620002bc604086016200025d565b915060608501518015158114620002d257600080fd5b939692955090935050565b600060208284031215620002f057600080fd5b620002fb826200025d565b9392505050565b60805160a05160c05160e051610100516101205161014051610160516101805161509f6200058e600039600081816102a601526131fa015260008181610554015281816133a70152818161350e015281816138080152818161388f01528181613dbc0152613eb3015260008181610588015281816129ad0152612a5401526000818161038e0152818161247f01526125090152600081816104cf015281816112130152818161173a015281816117d2015281816122b5015281816123dd01528181613225015281816137d8015281816138b701528181613de70152613e7501526000818161062b01528181611b12015261329b0152600081816107d7015261379b01526000818161033a01528181610b9d0152818161283401526129dc01526000818161067f0152818161090401528181610a1c01528181610ac001528181610bf201528181610cfe01528181610dd101528181610e6b01528181610f290152818161106001528181611141015281816112a4015281816113a401528181611422015281816114f7015281816115bc0152818161168d0152818161188001528181611931015281816119cb01528181611a5f01528181611b9a01528181611c1401528181611ca001528181611de501528181611ea901528181611f330152818161205d0152818161220801528181612354015281816125c10152818161269201528181612bb301528181612d3e01528181612dfa01528181612f1c01528181612fab0152818161304b015281816132f9015281816133cf0152818161345d015281816134d101528181613a1a01528181613d38015281816140a901528181614180015281816142210152818161431e015281816143de015281816145920152614605015261509f6000f3fe60806040526004361061023a5760003560e01c806382871ace1161012e578063c7de38a6116100ab578063e1d49d7d1161006f578063e1d49d7d146107c5578063eb9606df146107f9578063f9eaee0d14610819578063fc7b9c1814610839578063ffd9b9071461086457600080fd5b8063c7de38a6146106a1578063caa5c23f146106d6578063cff0ab96146106e9578063d9ccbec11461076a578063dfd59465146107a557600080fd5b80639c55a054116100f25780639c55a054146105e4578063a706efc414610604578063b1836d3214610619578063b2f4d3281461064d578063c12c21c01461066d57600080fd5b806382871ace14610504578063860aefcf14610517578063938294a9146105425780639408b63f146105765780639b67ab30146105aa57600080fd5b806350393109116101bc5780635f73fbec116101805780635f73fbec14610477578063601d66f61461048a5780636c8f225d146104aa5780636f307dc3146104bd5780637071b7c5146104f157600080fd5b806350393109146103d057806354fd4d501461041b578063597810341461043e5780635c1ca80f146104515780635d91a0e01461046457600080fd5b806326aac8591161020357806326aac859146103155780633d9287fa146103285780634527d9ce1461035c5780634f0e0ef31461037c5780635019e20a146103b057600080fd5b8062842b571461023f57806308c25f8f1461026157806312de90c91461028157806316f0115b14610294578063256ac915146102e5575b600080fd5b34801561024b57600080fd5b5061025f61025a366004614769565b610884565b005b34801561026d57600080fd5b5061025f61027c3660046147b9565b610902565b61025f61028f36600461481f565b6109d4565b3480156102a057600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f157600080fd5b5061030561030036600461487a565b6109f8565b60405190151581526020016102dc565b61025f610323366004614897565b610a98565b34801561033457600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561036857600080fd5b5061025f610377366004614919565b610abe565b34801561038857600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156103bc57600080fd5b5061025f6103cb36600461487a565b610b93565b3480156103dc57600080fd5b506003546103fb906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102dc565b34801561042757600080fd5b5061043060d281565b6040519081526020016102dc565b61025f61044c366004614936565b610d9f565b61025f61045f366004614897565b610ed7565b61025f610472366004614977565b610eec565b61025f6104853660046149fb565b610f13565b34801561049657600080fd5b5061025f6104a5366004614a50565b610f27565b61025f6104b8366004614a83565b610ff3565b3480156104c957600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b61025f6104ff366004614ad6565b611245565b61025f610512366004614977565b61140b565b34801561052357600080fd5b506002546103fb906001600160801b0380821691600160801b90041682565b34801561054e57600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561058257600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b657600080fd5b50600654604080516001600160401b03608084901c1681526001600160801b039092166020830152016102dc565b3480156105f057600080fd5b5061025f6105ff3660046147b9565b611420565b34801561061057600080fd5b5061025f6114f5565b34801561062557600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561065957600080fd5b5061025f610668366004614a50565b6115ba565b34801561067957600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ad57600080fd5b506106c16106bc36600461487a565b611686565b604080519283526020830191909152016102dc565b61025f6106e4366004614b49565b611860565b3480156106f557600080fd5b50600154610730906001600160801b03811690600160801b810460ff1690600160881b810464ffffffffff1690600160b01b900461ffff1684565b604080516001600160801b039095168552921515602085015264ffffffffff9091169183019190915261ffff1660608201526080016102dc565b34801561077657600080fd5b50610305610785366004614b8a565b600560209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506104306107c036600461487a565b611999565b3480156107d157600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561080557600080fd5b5061025f610814366004614bb8565b611a5d565b34801561082557600080fd5b5061030561083436600461487a565b611b76565b34801561084557600080fd5b506004546103fb906001600160801b0380821691600160801b90041682565b34801561087057600080fd5b5061025f61087f366004614bdf565b611c9e565b61088c611d6f565b6001600160a01b03821660008181526005602090815260408083203380855290835292819020805460ff191686151590811790915590519081529192917f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a36108fe6001600055565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190614bfc565b6001600160a01b0316336001600160a01b0316146109b55760405163eee4716960e01b815260040160405180910390fd5b600380546001600160801b03928316600160801b029216919091179055565b6109dc611d6f565b6109e884848484611dcd565b6109f26001600055565b50505050565b60405163055ee9b560e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614bfc565b6001600160a01b0316141592915050565b610aa0611d6f565b610aad858585858561203b565b610ab76001600055565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190614bfc565b6001600160a01b0316336001600160a01b031614610b715760405163eee4716960e01b815260040160405180910390fd5b6001805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b610b9b611d6f565b7f000000000000000000000000000000000000000000000000000000000000000015610bda57604051635aa6676760e01b815260040160405180910390fd5b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614bfc565b3360009081526005602090815260408083206001600160a01b038716845290915290205490915060ff16610cac576040516342d83b9360e11b815260040160405180910390fd5b6000610cb782612201565b5090508015610cd957604051637b89c20f60e11b815260040160405180910390fd5b60405163e1998cf960e01b81523360048201526001600160a01b0384811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b50506040516001600160a01b03861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050610d9c6001600055565b50565b610da7611d6f565b610daf612477565b604051633a562dc160e21b81526001600160a01b0384811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e9190614bfc565b9050610e4c84828585612584565b6040516329df0b9360e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b158015610eaf57600080fd5b505af1158015610ec3573d6000803e3d6000fd5b5050505050610ed26001600055565b505050565b610edf611d6f565b610aad8585858585612670565b610ef4611d6f565b610f018686868585612670565b610f0b6001600055565b505050505050565b610f1b611d6f565b610aad85858484611dcd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190614bfc565b6001600160a01b0316336001600160a01b031614610fda5760405163eee4716960e01b815260040160405180910390fd5b6001600160801b03908116600160801b02911617600255565b610ffb611d6f565b6000606461100d61ffff851687614c2f565b6110179190614c46565b905061102281612832565b61102b816128eb565b61103484612933565b61103c612477565b611047816001612aba565b60405163172c48c760e01b8152600060048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063172c48c7906024016040805180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190614c68565b61ffff1691506110e6905081612710614c97565b6110f09083614c2f565b6110fa8288614c2f565b11611118576040516329973ddb60e11b815260040160405180910390fd5b604051638fe3f93f60e01b8152600481018390526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af115801561118c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b09190614bfc565b9050806001600160a01b0316866001600160a01b03167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763858760405161120492919091825261ffff16602082015260400190565b60405180910390a361123886827f00000000000000000000000000000000000000000000000000000000000000008a612584565b5050506109f26001600055565b61124d611d6f565b61125685612832565b61125f84612933565b611268856128eb565b611270612477565b61127b856001612aba565b604051638fe3f93f60e01b8152600481018690526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af11580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190614bfc565b9050806001600160a01b0316856001600160a01b03167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763888560405161136792919091825261ffff16602082015260400190565b60405180910390a38215611385576113858484878460006001612b8e565b6040516312a6e60360e31b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b5050505050610ab76001600055565b611413611d6f565b610f01868686858561203b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190614bfc565b6001600160a01b0316336001600160a01b0316146114d35760405163eee4716960e01b815260040160405180910390fd5b600180546001600160801b0319166001600160801b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614bfc565b6001600160a01b0316336001600160a01b0316146115a85760405163eee4716960e01b815260040160405180910390fd5b600380546001600160801b0319169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163c9190614bfc565b6001600160a01b0316336001600160a01b03161461166d5760405163eee4716960e01b815260040160405180910390fd5b6001600160801b03908116600160801b02911617600455565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d9190614bfc565b905060008061171c8387612f82565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190614caa565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c9190614caa565b6118569190614c46565b9350505050915091565b611868611d6f565b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190614bfc565b90506118fd612477565b811561198e5761191283833384600080612b8e565b6040516312a6e60360e31b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561197557600080fd5b505af1158015611989573d6000803e3d6000fd5b505050505b506108fe6001600055565b6000806119a583611686565b604051630c64865760e21b81526001600160a01b038681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190614cc3565b9250829150611a4b905061271084614c2f565b611a559190614c46565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adf9190614bfc565b6001600160a01b0316336001600160a01b031614611b105760405163eee4716960e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b4e57604051631437447f60e21b815260040160405180910390fd5b6001805464ffffffffff909216600160881b0264ffffffffff60881b19909216919091179055565b604051630f67c5bd60e41b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190614caa565b90508015801590611c975750807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190614caa565b16155b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190614bfc565b6001600160a01b0316336001600160a01b031614611d515760405163eee4716960e01b815260040160405180910390fd5b60018054911515600160801b0260ff60801b19909216919091179055565b600260005403611dc65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa158015611e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e589190614bfc565b9050611e62612477565b8115611e7857611e788383338460016000612b8e565b6000611e826131e3565b604051630c64865760e21b81526001600160a01b03848116600483015291925060009182917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614cc3565b5060405163046c545b60e31b815291935091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632362a2d890611f75903390600090819083908f908f908490600401614d13565b6020604051808303816000875af1158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190614caa565b506000611fc36131e3565b9050611fcf8285614d62565b811015611fef57604051631e05cdad60e01b815260040160405180910390fd5b611ffa836000612aba565b6040516001600160a01b038a169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a3505050505050505050565b604051633a562dc160e21b81526001600160a01b0386811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa1580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca9190614bfc565b90506001600160a01b0385166120f357604051635919af9760e11b815260040160405180910390fd5b6120fb613297565b61211857604051631f94b32d60e21b815260040160405180910390fd5b600061212382611686565b50905061212e612477565b600061213a60016132d9565b905083156121525761215285858a8660016000612b8e565b801561218c576001546127109061217490600160b01b900461ffff1684614c2f565b61217e9190614c46565b915061218a60006132d9565b505b600061219d83858b8b8b6001613374565b9050876001600160a01b0316336001600160a01b03168a6001600160a01b03167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b86707846040516121ee91815260200190565b60405180910390a4505050505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122889190614bfc565b90506000806122978387612f82565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa15801561230b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232f9190614caa565b604051630c64865760e21b81526001600160a01b0388811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c90602401606060405180830381865afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190614cc3565b604051630f9a650360e41b8152600481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529194506000935061271092509087169063f9a6503090604401602060405180830381865afa158015612439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245d9190614caa565b6124679190614c2f565b9092109794965093945050505050565b3415612582577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124d857600080fd5b505af11580156124ec573d6000803e3d6000fd5b505060405163a9059cbb60e01b81523360048201523460248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316935063a9059cbb925060440190506020604051808303816000875af115801561255e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190614d75565b565b61258d846136cf565b60405163830aa74560e01b81523360048201526001600160a01b0384811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b15801561260557600080fd5b505af1158015612619573d6000803e3d6000fd5b50505050816001600160a01b0316846001600160a01b03167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f8360405161266291815260200190565b60405180910390a350505050565b604051633a562dc160e21b81526001600160a01b0386811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa1580156126db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ff9190614bfc565b90506001600160a01b03851661272857604051635919af9760e11b815260040160405180910390fd5b60008061273483612201565b915091508161275657604051631fdd676f60e01b815260040160405180910390fd5b61275e612477565b600061276a60016132d9565b905084156127825761278286868b8760016000612b8e565b80156127bc57600154612710906127a490600160b01b900461ffff1684614c2f565b6127ae9190614c46565b91506127ba60006132d9565b505b60006127cd83868c8c8c6000613374565b9050886001600160a01b0316336001600160a01b03168b6001600160a01b03167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161281e91815260200190565b60405180910390a450505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000610d9c576001546001600160801b039081169081146108fe57600654608081901c906001600160801b031660006001600160401b038316431461289657846128a9565b6128a96001600160801b03831686614d62565b9050838111156128cc576040516333af8d2b60e11b815260040160405180910390fd5b610ab76128d88261372a565b6001600160801b03164360801b17600655565b6002546001600160801b03168110806129155750600254600160801b90046001600160801b031681115b15610d9c576040516333859e6560e21b815260040160405180910390fd5b600154600160801b900460ff161561295e57604051637615238d60e01b815260040160405180910390fd5b612966613297565b156129845760405163cba1df9b60e01b815260040160405180910390fd5b61298d81613797565b156129ab576040516301e68b8960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615612ab1577f00000000000000000000000000000000000000000000000000000000000000008015612a105750336001600160a01b03821614155b15612a2e57604051635aa6676760e01b815260040160405180910390fd5b604051632770a7eb60e21b81526001600160a01b038281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b505050505b610d9c816136cf565b81156108fe57604080518082019091526004546001600160801b038082168352600160801b9091041660208201528115612b4657612af78361372a565b81518290612b06908390614d92565b6001600160801b0390811690915260208301518351908216911611159050612b41576040516333859e6560e21b815260040160405180910390fd5b612b6b565b612b4f8361372a565b81518290612b5e908390614db9565b6001600160801b03169052505b80516020909101516001600160801b03908116600160801b029116176004555050565b60405163e1998cf960e01b81526001600160a01b0385811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015612bf757600080fd5b505af1158015612c0b573d6000803e3d6000fd5b50506040516001600160a01b03871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260608560005b81811015612ebc5736898983818110612c6457612c64614dd9565b9050602002810190612c769190614def565b90506004612c876020830183614e0f565b90501015612ca857604051637158728360e11b815260040160405180910390fd5b30612cb6602083018361487a565b6001600160a01b031603612d3a578515612d17576000612cd96020830183614e0f565b612ce291614e55565b90506001600160e01b031981166381314b5960e01b14612d1557604051635fb9107f60e01b815260040160405180910390fd5b505b612d308888612d296020850185614e0f565b898961392d565b9095509350612eb3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff687543612d78602085018561487a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190614bfc565b6001600160a01b03161480612e3257506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612e27602083018361487a565b6001600160a01b0316145b15612e505760405163fc1a554360e01b815260040160405180910390fd5b612eb1612e606020830183614e0f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ea292505050602084018461487a565b6001600160a01b031690613bed565b505b50600101612c49565b50815115612ece57612ece8286613c31565b6040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a160405163e1998cf960e01b81523060048201526001600160a01b0387811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050505050505050505050565b604051638991b2f160e01b81526001600160a01b038281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015612ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130169190614caa565b90505b8082116131da57808216156131ce5760405163e75538c760e01b81526004810183905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015613091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b59190614c68565b6040516370a0823160e01b81526001600160a01b038a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015613104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131289190614caa565b905060018111156131ca57604051630f9a650360e41b8152600481018290526001600160a01b038481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a89190614caa565b9788019790506131bc61ffff841682614c2f565b6131c69088614d62565b9650505b5050505b600182901b9150613019565b50509250929050565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561326e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132929190614caa565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000008015613292575050600154600160881b900464ffffffffff1642101590565b60405163eb99c2bf60e01b815233600482015281151560248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063eb99c2bf906044016020604051808303816000875af115801561334a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336e9190614d75565b92915050565b60008061338086613797565b9050801561342c5760405163e1998cf960e01b81526001600160a01b0387811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561341357600080fd5b505af1158015613427573d6000803e3d6000fd5b505050505b60006134366131e3565b604051630c64865760e21b81526001600160a01b038a8116600483015291925060009182917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca9190614cc3565b50915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632362a2d86000861161350c578a61352e565b7f00000000000000000000000000000000000000000000000000000000000000005b8861353a57600161353d565b60025b8e338d8d60006040518863ffffffff1660e01b81526004016135659796959493929190614d13565b6020604051808303816000875af1158015613584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a89190614caa565b945060006135b46131e3565b905060006135c28386614d62565b82106135cf5760006135e4565b816135da8487614d62565b6135e49190614c97565b90508015613695576001805460ff60801b1916600160801b1790556136088161372a565b600380546000906136239084906001600160801b0316614d92565b82546101009290920a6001600160801b03818102199093169183160217909155600354600160801b8104821691161115905061366157613661613d36565b6040518181527f039b20af1a8da82c3d37dd7b0fe81a987532ffca72fbd69951823f7c40511f2d9060200160405180910390a15b6136a0846000612aba565b6000861180156136b05750600187115b156136bf576136bf8b87613da5565b5050505050509695505050505050565b336001600160a01b0382161480159061370c57503360009081526005602090815260408083206001600160a01b038516845290915290205460ff16155b15610d9c576040516342d83b9360e11b815260040160405180910390fd5b60006001600160801b038211156137935760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401611dbd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000008015613873575060405163100a3b7760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015283811660248301527f00000000000000000000000000000000000000000000000000000000000000001690634028eddc90604401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138739190614d75565b15613928576040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156138fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139229190614caa565b60010190505b919050565b8181600061393b8688614e55565b9050637eceb4a760e01b6001600160e01b03198216016139a2578151156139755760405163e61eedf560e01b815260040160405180910390fd5b613982866004818a614e85565b81019061398f9190614f1d565b915061399b8289613f5a565b9150613be1565b6329a1fbf360e21b6001600160e01b0319821601613a9b57600080806139cb896004818d614e85565b8101906139d89190614936565b925092509250613a93838d6001600160a01b0316856001600160a01b031614613a8a57604051633a562dc160e21b81526001600160a01b0386811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a859190614bfc565b613a8c565b8c5b8484612584565b505050613be1565b63d48384ef60e01b6001600160e01b0319821601613ae657600192506000613ac6876004818b614e85565b810190613ad39190614fe7565b9050613ae08a8a83614031565b50613be1565b63d5845e0960e01b6001600160e01b0319821601613b46578215613b1d57604051631816195560e31b815260040160405180910390fd5b6000613b2c876004818b614e85565b810190613b399190614fe7565b9050613ae08a8a8361415e565b631cb7b7bb60e11b6001600160e01b0319821601613b87576000613b6d876004818b614e85565b810190613b7a919061487a565b9050613ae08a8a836142f7565b633707616760e21b6001600160e01b0319821601613bc8576000613bae876004818b614e85565b810190613bbb919061487a565b9050613ae08a8a836143b7565b604051630f4f3f3d60e11b815260040160405180910390fd5b50965096945050505050565b6060611c97838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250614495565b815160005b818110156109f257838181518110613c5057613c50614dd9565b602002602001015160200151848281518110613c6e57613c6e614dd9565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015613cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce59190614caa565b1015613d2e57838181518110613cfd57613cfd614dd9565b602090810291909101015151604051632f42bd8760e01b81526001600160a01b039091166004820152602401611dbd565b600101613c36565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d9157600080fd5b505af11580156109f2573d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e549190614caa565b905081811115610ed2576040516309e3896160e41b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015260018484030160448301819052917f000000000000000000000000000000000000000000000000000000000000000090911690639e38961090606401600060405180830381600087803b158015613ef957600080fd5b505af1158015613f0d573d6000803e3d6000fd5b50505050836001600160a01b03167fe2655809b4fc2a2dffc14ecf5aad9dbf5a9703a5bb2b19ab7ae6afa29ef0c7c882604051613f4c91815260200190565b60405180910390a250505050565b815160609060005b8181101561402857848181518110613f7c57613f7c614dd9565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015613fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff39190614caa565b85828151811061400557614005614dd9565b602002602001015160200181815161401d9190614d62565b905250600101613f62565b50929392505050565b600154600160801b900460ff161561405c57604051637615238d60e01b815260040160405180910390fd5b61406581612832565b61406e82614570565b614079816001612aba565b604051634a67839d60e11b81526001600160a01b03838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af11580156140f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141189190614caa565b9050614123816128eb565b836001600160a01b03167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c4583604051613f4c91815260200190565b604051630c64865760e21b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa1580156141c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ed9190614cc3565b5050604051634a67839d60e11b81526001600160a01b038581166004830152602482018590526000604483018190529293507f000000000000000000000000000000000000000000000000000000000000000016906394cf073a906064016020604051808303816000875af115801561426a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428e9190614caa565b9050614299816128eb565b6142ad6142a68284614c97565b6000612aba565b846001600160a01b03167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a846040516142e891815260200190565b60405180910390a25050505050565b60405163028f1f8b60e51b81526001600160a01b03838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561436257600080fd5b505af1158015614376573d6000803e3d6000fd5b50506040516001600160a01b038085169350861691507fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8790600090a3505050565b6040516306c7ce7760e11b81526001600160a01b03838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee906044016020604051808303816000875af1158015614427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444b9190614d75565b15610ed257806001600160a01b0316836001600160a01b03167f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d6097760405160405180910390a3505050565b6060824710156144f65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611dbd565b600080866001600160a01b031685876040516145129190615024565b60006040518083038185875af1925050503d806000811461454f576040519150601f19603f3d011682016040523d82523d6000602084013e614554565b606091505b5091509150614565878383876146a8565b979650505050505050565b604051638991b2f160e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638991b2f190602401602060405180830381865afa1580156145db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ff9190614caa565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015614661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146859190614caa565b905081811615610ed257604051635754baed60e11b815260040160405180910390fd5b60608315614717578251600003614710576001600160a01b0385163b6147105760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611dbd565b5081611a55565b611a55838381511561472c5781518083602001fd5b8060405162461bcd60e51b8152600401611dbd9190615036565b6001600160a01b0381168114610d9c57600080fd5b8015158114610d9c57600080fd5b6000806040838503121561477c57600080fd5b823561478781614746565b915060208301356147978161475b565b809150509250929050565b80356001600160801b038116811461392857600080fd5b6000602082840312156147cb57600080fd5b611c97826147a2565b60008083601f8401126147e657600080fd5b5081356001600160401b038111156147fd57600080fd5b6020830191508360208260051b850101111561481857600080fd5b9250929050565b6000806000806060858703121561483557600080fd5b843561484081614746565b93506020850135925060408501356001600160401b0381111561486257600080fd5b61486e878288016147d4565b95989497509550505050565b60006020828403121561488c57600080fd5b8135611c9781614746565b6000806000806000608086880312156148af57600080fd5b85356148ba81614746565b945060208601356148ca81614746565b93506040860135925060608601356001600160401b038111156148ec57600080fd5b6148f8888289016147d4565b969995985093965092949392505050565b61ffff81168114610d9c57600080fd5b60006020828403121561492b57600080fd5b8135611c9781614909565b60008060006060848603121561494b57600080fd5b833561495681614746565b9250602084013561496681614746565b929592945050506040919091013590565b60008060008060008060a0878903121561499057600080fd5b863561499b81614746565b955060208701356149ab81614746565b94506040870135935060608701356149c28161475b565b925060808701356001600160401b038111156149dd57600080fd5b6149e989828a016147d4565b979a9699509497509295939492505050565b600080600080600060808688031215614a1357600080fd5b8535614a1e81614746565b9450602086013593506040860135614a358161475b565b925060608601356001600160401b038111156148ec57600080fd5b60008060408385031215614a6357600080fd5b614a6c836147a2565b9150614a7a602084016147a2565b90509250929050565b60008060008060808587031215614a9957600080fd5b843593506020850135614aab81614746565b92506040850135614abb81614909565b91506060850135614acb81614909565b939692955090935050565b600080600080600060808688031215614aee57600080fd5b853594506020860135614b0081614746565b935060408601356001600160401b03811115614b1b57600080fd5b614b27888289016147d4565b9094509250506060860135614b3b81614909565b809150509295509295909350565b60008060208385031215614b5c57600080fd5b82356001600160401b03811115614b7257600080fd5b614b7e858286016147d4565b90969095509350505050565b60008060408385031215614b9d57600080fd5b8235614ba881614746565b9150602083013561479781614746565b600060208284031215614bca57600080fd5b813564ffffffffff81168114611c9757600080fd5b600060208284031215614bf157600080fd5b8135611c978161475b565b600060208284031215614c0e57600080fd5b8151611c9781614746565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761336e5761336e614c19565b600082614c6357634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215614c7b57600080fd5b8251614c8681614746565b602084015190925061479781614909565b8181038181111561336e5761336e614c19565b600060208284031215614cbc57600080fd5b5051919050565b600080600060608486031215614cd857600080fd5b8351925060208401519150604084015190509250925092565b60048110614d0f57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b03888116825260e0820190614d32602084018a614cf1565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b8082018082111561336e5761336e614c19565b600060208284031215614d8757600080fd5b8151611c978161475b565b6001600160801b03818116838216019080821115614db257614db2614c19565b5092915050565b6001600160801b03828116828216039080821115614db257614db2614c19565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112614e0557600080fd5b9190910192915050565b6000808335601e19843603018112614e2657600080fd5b8301803591506001600160401b03821115614e4057600080fd5b60200191503681900382131561481857600080fd5b6001600160e01b03198135818116916004851015614e7d5780818660040360031b1b83161692505b505092915050565b60008085851115614e9557600080fd5b83861115614ea257600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614ee757614ee7614eaf565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614f1557614f15614eaf565b604052919050565b60006020808385031215614f3057600080fd5b82356001600160401b0380821115614f4757600080fd5b818501915085601f830112614f5b57600080fd5b813581811115614f6d57614f6d614eaf565b614f7b848260051b01614eed565b818152848101925060069190911b830184019087821115614f9b57600080fd5b928401925b818410156145655760408489031215614fb95760008081fd5b614fc1614ec5565b8435614fcc81614746565b81528486013586820152835260409093019291840191614fa0565b600060208284031215614ff957600080fd5b5035919050565b60005b8381101561501b578181015183820152602001615003565b50506000910152565b60008251614e05818460208701615000565b6020815260008251806020840152615055816040850160208701615000565b601f01601f1916919091016040019291505056fea26469706673582212205d91950770275e8a7f227e7315186a1d146eb499a68be6c5e037fd3c5c446d8b64736f6c63430008110033", - "opcodes": "PUSH2 0x1A0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x562D CODESIZE SUB DUP1 PUSH3 0x562D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x27A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH3 0x62 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x6F307DC3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x6F307DC3 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xAD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xD3 SWAP2 SWAP1 PUSH3 0x2DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x100 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4F0E0EF3 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x12C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x152 SWAP2 SWAP1 PUSH3 0x2DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16F0115B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1D1 SWAP2 SWAP1 PUSH3 0x2DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x180 MSTORE DUP4 DUP2 AND PUSH2 0x140 DUP2 SWAP1 MSTORE ISZERO ISZERO PUSH1 0xA0 MSTORE DUP3 AND PUSH2 0x160 DUP2 SWAP1 MSTORE ISZERO DUP1 ISZERO PUSH1 0xC0 MSTORE PUSH3 0x236 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0xCB3B4BDAE9A9C5626B486904F099393AE5286A7F2B58380329F6D67A6ECDC9DA SWAP1 PUSH1 0x0 SWAP1 LOG2 JUMPDEST ISZERO ISZERO PUSH1 0xE0 MSTORE POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT OR SWAP1 SSTORE POP PUSH3 0x302 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x291 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x29C DUP6 PUSH3 0x25D JUMP JUMPDEST SWAP4 POP PUSH3 0x2AC PUSH1 0x20 DUP7 ADD PUSH3 0x25D JUMP JUMPDEST SWAP3 POP PUSH3 0x2BC PUSH1 0x40 DUP7 ADD PUSH3 0x25D JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2FB DUP3 PUSH3 0x25D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x509F PUSH3 0x58E PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x2A6 ADD MSTORE PUSH2 0x31FA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x554 ADD MSTORE DUP2 DUP2 PUSH2 0x33A7 ADD MSTORE DUP2 DUP2 PUSH2 0x350E ADD MSTORE DUP2 DUP2 PUSH2 0x3808 ADD MSTORE DUP2 DUP2 PUSH2 0x388F ADD MSTORE DUP2 DUP2 PUSH2 0x3DBC ADD MSTORE PUSH2 0x3EB3 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x588 ADD MSTORE DUP2 DUP2 PUSH2 0x29AD ADD MSTORE PUSH2 0x2A54 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x38E ADD MSTORE DUP2 DUP2 PUSH2 0x247F ADD MSTORE PUSH2 0x2509 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4CF ADD MSTORE DUP2 DUP2 PUSH2 0x1213 ADD MSTORE DUP2 DUP2 PUSH2 0x173A ADD MSTORE DUP2 DUP2 PUSH2 0x17D2 ADD MSTORE DUP2 DUP2 PUSH2 0x22B5 ADD MSTORE DUP2 DUP2 PUSH2 0x23DD ADD MSTORE DUP2 DUP2 PUSH2 0x3225 ADD MSTORE DUP2 DUP2 PUSH2 0x37D8 ADD MSTORE DUP2 DUP2 PUSH2 0x38B7 ADD MSTORE DUP2 DUP2 PUSH2 0x3DE7 ADD MSTORE PUSH2 0x3E75 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x62B ADD MSTORE DUP2 DUP2 PUSH2 0x1B12 ADD MSTORE PUSH2 0x329B ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x7D7 ADD MSTORE PUSH2 0x379B ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x33A ADD MSTORE DUP2 DUP2 PUSH2 0xB9D ADD MSTORE DUP2 DUP2 PUSH2 0x2834 ADD MSTORE PUSH2 0x29DC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x67F ADD MSTORE DUP2 DUP2 PUSH2 0x904 ADD MSTORE DUP2 DUP2 PUSH2 0xA1C ADD MSTORE DUP2 DUP2 PUSH2 0xAC0 ADD MSTORE DUP2 DUP2 PUSH2 0xBF2 ADD MSTORE DUP2 DUP2 PUSH2 0xCFE ADD MSTORE DUP2 DUP2 PUSH2 0xDD1 ADD MSTORE DUP2 DUP2 PUSH2 0xE6B ADD MSTORE DUP2 DUP2 PUSH2 0xF29 ADD MSTORE DUP2 DUP2 PUSH2 0x1060 ADD MSTORE DUP2 DUP2 PUSH2 0x1141 ADD MSTORE DUP2 DUP2 PUSH2 0x12A4 ADD MSTORE DUP2 DUP2 PUSH2 0x13A4 ADD MSTORE DUP2 DUP2 PUSH2 0x1422 ADD MSTORE DUP2 DUP2 PUSH2 0x14F7 ADD MSTORE DUP2 DUP2 PUSH2 0x15BC ADD MSTORE DUP2 DUP2 PUSH2 0x168D ADD MSTORE DUP2 DUP2 PUSH2 0x1880 ADD MSTORE DUP2 DUP2 PUSH2 0x1931 ADD MSTORE DUP2 DUP2 PUSH2 0x19CB ADD MSTORE DUP2 DUP2 PUSH2 0x1A5F ADD MSTORE DUP2 DUP2 PUSH2 0x1B9A ADD MSTORE DUP2 DUP2 PUSH2 0x1C14 ADD MSTORE DUP2 DUP2 PUSH2 0x1CA0 ADD MSTORE DUP2 DUP2 PUSH2 0x1DE5 ADD MSTORE DUP2 DUP2 PUSH2 0x1EA9 ADD MSTORE DUP2 DUP2 PUSH2 0x1F33 ADD MSTORE DUP2 DUP2 PUSH2 0x205D ADD MSTORE DUP2 DUP2 PUSH2 0x2208 ADD MSTORE DUP2 DUP2 PUSH2 0x2354 ADD MSTORE DUP2 DUP2 PUSH2 0x25C1 ADD MSTORE DUP2 DUP2 PUSH2 0x2692 ADD MSTORE DUP2 DUP2 PUSH2 0x2BB3 ADD MSTORE DUP2 DUP2 PUSH2 0x2D3E ADD MSTORE DUP2 DUP2 PUSH2 0x2DFA ADD MSTORE DUP2 DUP2 PUSH2 0x2F1C ADD MSTORE DUP2 DUP2 PUSH2 0x2FAB ADD MSTORE DUP2 DUP2 PUSH2 0x304B ADD MSTORE DUP2 DUP2 PUSH2 0x32F9 ADD MSTORE DUP2 DUP2 PUSH2 0x33CF ADD MSTORE DUP2 DUP2 PUSH2 0x345D ADD MSTORE DUP2 DUP2 PUSH2 0x34D1 ADD MSTORE DUP2 DUP2 PUSH2 0x3A1A ADD MSTORE DUP2 DUP2 PUSH2 0x3D38 ADD MSTORE DUP2 DUP2 PUSH2 0x40A9 ADD MSTORE DUP2 DUP2 PUSH2 0x4180 ADD MSTORE DUP2 DUP2 PUSH2 0x4221 ADD MSTORE DUP2 DUP2 PUSH2 0x431E ADD MSTORE DUP2 DUP2 PUSH2 0x43DE ADD MSTORE DUP2 DUP2 PUSH2 0x4592 ADD MSTORE PUSH2 0x4605 ADD MSTORE PUSH2 0x509F PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x23A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82871ACE GT PUSH2 0x12E JUMPI DUP1 PUSH4 0xC7DE38A6 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xE1D49D7D GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE1D49D7D EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0xEB9606DF EQ PUSH2 0x7F9 JUMPI DUP1 PUSH4 0xF9EAEE0D EQ PUSH2 0x819 JUMPI DUP1 PUSH4 0xFC7B9C18 EQ PUSH2 0x839 JUMPI DUP1 PUSH4 0xFFD9B907 EQ PUSH2 0x864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC7DE38A6 EQ PUSH2 0x6A1 JUMPI DUP1 PUSH4 0xCAA5C23F EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0xCFF0AB96 EQ PUSH2 0x6E9 JUMPI DUP1 PUSH4 0xD9CCBEC1 EQ PUSH2 0x76A JUMPI DUP1 PUSH4 0xDFD59465 EQ PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9C55A054 GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x9C55A054 EQ PUSH2 0x5E4 JUMPI DUP1 PUSH4 0xA706EFC4 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0xB1836D32 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xB2F4D328 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x82871ACE EQ PUSH2 0x504 JUMPI DUP1 PUSH4 0x860AEFCF EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x938294A9 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0x9408B63F EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x9B67AB30 EQ PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50393109 GT PUSH2 0x1BC JUMPI DUP1 PUSH4 0x5F73FBEC GT PUSH2 0x180 JUMPI DUP1 PUSH4 0x5F73FBEC EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x601D66F6 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0x6C8F225D EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x7071B7C5 EQ PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50393109 EQ PUSH2 0x3D0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0x59781034 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x5C1CA80F EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x5D91A0E0 EQ PUSH2 0x464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26AAC859 GT PUSH2 0x203 JUMPI DUP1 PUSH4 0x26AAC859 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0x3D9287FA EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4527D9CE EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x5019E20A EQ PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0x842B57 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0x8C25F8F EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x12DE90C9 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x256AC915 EQ PUSH2 0x2E5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x25A CALLDATASIZE PUSH1 0x4 PUSH2 0x4769 JUMP JUMPDEST PUSH2 0x884 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x47B9 JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x481F JUMP JUMPDEST PUSH2 0x9D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x323 CALLDATASIZE PUSH1 0x4 PUSH2 0x4897 JUMP JUMPDEST PUSH2 0xA98 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x377 CALLDATASIZE PUSH1 0x4 PUSH2 0x4919 JUMP JUMPDEST PUSH2 0xABE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x3CB CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x430 PUSH1 0xD2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x4936 JUMP JUMPDEST PUSH2 0xD9F JUMP JUMPDEST PUSH2 0x25F PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x4897 JUMP JUMPDEST PUSH2 0xED7 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x4977 JUMP JUMPDEST PUSH2 0xEEC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x49FB JUMP JUMPDEST PUSH2 0xF13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x4A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A50 JUMP JUMPDEST PUSH2 0xF27 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x4B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A83 JUMP JUMPDEST PUSH2 0xFF3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x4FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4AD6 JUMP JUMPDEST PUSH2 0x1245 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x4977 JUMP JUMPDEST PUSH2 0x140B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x80 DUP5 SWAP1 SHR AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x47B9 JUMP JUMPDEST PUSH2 0x1420 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x14F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x668 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A50 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C1 PUSH2 0x6BC CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x6E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B49 JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x730 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x80 SHL DUP2 DIV PUSH1 0xFF AND SWAP1 PUSH1 0x1 PUSH1 0x88 SHL DUP2 DIV PUSH5 0xFFFFFFFFFF AND SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP6 AND DUP6 MSTORE SWAP3 ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0xFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x785 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B8A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x430 PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1999 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x814 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BB8 JUMP JUMPDEST PUSH2 0x1A5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1B76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x845 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x870 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x87F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDF JUMP JUMPDEST PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x88C PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x9B3258BC4904FD6426B99843E206C6C7CDB1FD0F040121C25B71DAFBB3851EE0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x8FE PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x960 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x984 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x9DC PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x9E8 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1DCD JUMP JUMPDEST PUSH2 0x9F2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x55EE9B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x55EE9B5 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA87 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAA0 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x203B JUMP JUMPDEST PUSH2 0xAB7 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB40 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xB71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xB0 SHL MUL PUSH2 0xFFFF PUSH1 0xB0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xB9B PUSH2 0x1D6F JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x5AA66767 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC65 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0xCAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x42D83B93 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCB7 DUP3 PUSH2 0x2201 JUMP JUMPDEST POP SWAP1 POP DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B89C20F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 POP CALLER SWAP2 POP PUSH32 0x93C70CC9715BEF0D83EDF2095F3595402279D274F402A73FFC17F1BCB19D863D SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP PUSH2 0xD9C PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xDA7 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xDAF PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE3E SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0xE4C DUP5 DUP3 DUP6 DUP6 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x29DF0B93 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x29DF0B93 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xED2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xEDF PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0xEF4 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xF01 DUP7 DUP7 DUP7 DUP6 DUP6 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0xF0B PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1B PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP5 DUP5 PUSH2 0x1DCD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF85 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFA9 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFDA JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0xFFB PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x100D PUSH2 0xFFFF DUP6 AND DUP8 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x1017 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP1 POP PUSH2 0x1022 DUP2 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x102B DUP2 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x1034 DUP5 PUSH2 0x2933 JUMP JUMPDEST PUSH2 0x103C PUSH2 0x2477 JUMP JUMPDEST PUSH2 0x1047 DUP2 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D2 SWAP2 SWAP1 PUSH2 0x4C68 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP2 POP PUSH2 0x10E6 SWAP1 POP DUP2 PUSH2 0x2710 PUSH2 0x4C97 JUMP JUMPDEST PUSH2 0x10F0 SWAP1 DUP4 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x10FA DUP3 DUP9 PUSH2 0x4C2F JUMP JUMPDEST GT PUSH2 0x1118 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29973DDB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8FE3F93F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8FE3F93F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x118C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11B0 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFA2BAF5D3EB95569F312F22477B246F9D4C50276F1CB3DED8E1AEADCBC07A763 DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1204 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH2 0xFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x1238 DUP7 DUP3 PUSH32 0x0 DUP11 PUSH2 0x2584 JUMP JUMPDEST POP POP POP PUSH2 0x9F2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH2 0x124D PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x1256 DUP6 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x125F DUP5 PUSH2 0x2933 JUMP JUMPDEST PUSH2 0x1268 DUP6 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x1270 PUSH2 0x2477 JUMP JUMPDEST PUSH2 0x127B DUP6 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8FE3F93F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8FE3F93F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1313 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFA2BAF5D3EB95569F312F22477B246F9D4C50276F1CB3DED8E1AEADCBC07A763 DUP9 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1367 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH2 0xFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 ISZERO PUSH2 0x1385 JUMPI PUSH2 0x1385 DUP5 DUP5 DUP8 DUP5 PUSH1 0x0 PUSH1 0x1 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x12A6E603 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95373018 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xAB7 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH2 0x1413 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xF01 DUP7 DUP7 DUP7 DUP6 DUP6 PUSH2 0x203B JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14A2 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x14D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1577 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x15A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1618 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x163C SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x166D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2630C12F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x170D SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x171C DUP4 DUP8 PUSH2 0x2F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP5 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP7 POP PUSH2 0x2710 SWAP2 DUP6 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1828 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184C SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH2 0x1856 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP4 POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x1868 PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18F3 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x18FD PUSH2 0x2477 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x198E JUMPI PUSH2 0x1912 DUP4 DUP4 CALLER DUP5 PUSH1 0x0 DUP1 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x12A6E603 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95373018 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP PUSH2 0x8FE PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x19A5 DUP4 PUSH2 0x1686 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A14 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A38 SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST SWAP3 POP DUP3 SWAP2 POP PUSH2 0x1A4B SWAP1 POP PUSH2 0x2710 DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x1A55 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADF SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1B10 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1437447F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x88 SHL MUL PUSH5 0xFFFFFFFFFF PUSH1 0x88 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF67C5BD PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xF67C5BD0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C05 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1C97 JUMPI POP DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9FD12B77 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C94 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D20 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0xFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x1DC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E58 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x1E62 PUSH2 0x2477 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1E78 JUMPI PUSH2 0x1E78 DUP4 DUP4 CALLER DUP5 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E82 PUSH2 0x31E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F16 SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x46C545B PUSH1 0xE3 SHL DUP2 MSTORE SWAP2 SWAP4 POP SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x2362A2D8 SWAP1 PUSH2 0x1F75 SWAP1 CALLER SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 SWAP1 DUP16 SWAP1 DUP16 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FB8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1FC3 PUSH2 0x31E3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FCF DUP3 DUP6 PUSH2 0x4D62 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1FEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E05CDAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1FFA DUP4 PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 CALLER SWAP1 PUSH32 0x460AD03B1CF79B1D64D3AEFA28475F110AB66E84649C52BB41ED796B9B391981 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20CA SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x20F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20FB PUSH2 0x3297 JUMP JUMPDEST PUSH2 0x2118 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F94B32D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2123 DUP3 PUSH2 0x1686 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x212E PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x213A PUSH1 0x1 PUSH2 0x32D9 JUMP JUMPDEST SWAP1 POP DUP4 ISZERO PUSH2 0x2152 JUMPI PUSH2 0x2152 DUP6 DUP6 DUP11 DUP7 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x218C JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x2174 SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x217E SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP2 POP PUSH2 0x218A PUSH1 0x0 PUSH2 0x32D9 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x219D DUP4 DUP6 DUP12 DUP12 DUP12 PUSH1 0x1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFADA13FF2D5E1A1D9DA37AD4A4130893B34E3C69C32B17F87EC31FD661B86707 DUP5 PUSH1 0x40 MLOAD PUSH2 0x21EE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2630C12F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2264 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2288 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2297 DUP4 DUP8 PUSH2 0x2F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP5 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x230B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x232F SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP6 POP PUSH1 0x0 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x239B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23BF SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x2710 SWAP3 POP SWAP1 DUP8 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2439 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x245D SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH2 0x2467 SWAP2 SWAP1 PUSH2 0x4C2F JUMP JUMPDEST SWAP1 SWAP3 LT SWAP8 SWAP5 SWAP7 POP SWAP4 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x2582 JUMPI PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE CALLVALUE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 POP PUSH4 0xA9059CBB SWAP3 POP PUSH1 0x44 ADD SWAP1 POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x255E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD9C SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x258D DUP5 PUSH2 0x36CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x830AA745 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x830AA745 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2619 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA32435755C235DE2976ED44A75A2F85CB01FAF0C894F639FE0C32BB9455FEA8F DUP4 PUSH1 0x40 MLOAD PUSH2 0x2662 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26FF SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x2728 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2734 DUP4 PUSH2 0x2201 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2756 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FDD676F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x275E PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x276A PUSH1 0x1 PUSH2 0x32D9 JUMP JUMPDEST SWAP1 POP DUP5 ISZERO PUSH2 0x2782 JUMPI PUSH2 0x2782 DUP7 DUP7 DUP12 DUP8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x27BC JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x27A4 SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x27AE SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP2 POP PUSH2 0x27BA PUSH1 0x0 PUSH2 0x32D9 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x27CD DUP4 DUP7 DUP13 DUP13 DUP13 PUSH1 0x0 PUSH2 0x3374 JUMP JUMPDEST SWAP1 POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x7DFECD8419723A9D3954585A30C2A270165D70AAFA146C11C1E1B88AE1439064 DUP5 PUSH1 0x40 MLOAD PUSH2 0x281E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH2 0xD9C JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND SWAP1 DUP2 EQ PUSH2 0x8FE JUMPI PUSH1 0x6 SLOAD PUSH1 0x80 DUP2 SWAP1 SHR SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND NUMBER EQ PUSH2 0x2896 JUMPI DUP5 PUSH2 0x28A9 JUMP JUMPDEST PUSH2 0x28A9 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND DUP7 PUSH2 0x4D62 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x28CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x33AF8D2B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAB7 PUSH2 0x28D8 DUP3 PUSH2 0x372A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND NUMBER PUSH1 0x80 SHL OR PUSH1 0x6 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 LT DUP1 PUSH2 0x2915 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 GT JUMPDEST ISZERO PUSH2 0xD9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x33859E65 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x295E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7615238D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2966 PUSH2 0x3297 JUMP JUMPDEST ISZERO PUSH2 0x2984 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCBA1DF9B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x298D DUP2 PUSH2 0x3797 JUMP JUMPDEST ISZERO PUSH2 0x29AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E68B89 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2AB1 JUMPI PUSH32 0x0 DUP1 ISZERO PUSH2 0x2A10 JUMPI POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5AA66767 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xD9C DUP2 PUSH2 0x36CF JUMP JUMPDEST DUP2 ISZERO PUSH2 0x8FE JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP2 DIV AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2B46 JUMPI PUSH2 0x2AF7 DUP4 PUSH2 0x372A JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH2 0x2B06 SWAP1 DUP4 SWAP1 PUSH2 0x4D92 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD DUP4 MLOAD SWAP1 DUP3 AND SWAP2 AND GT ISZERO SWAP1 POP PUSH2 0x2B41 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33859E65 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B6B JUMP JUMPDEST PUSH2 0x2B4F DUP4 PUSH2 0x372A JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH2 0x2B5E SWAP1 DUP4 SWAP1 PUSH2 0x4DB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 MSTORE POP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x4 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP3 POP PUSH32 0x4AD424605B950D17D87835716D98C0CAC1F6FF9C38114E63304902188A690811 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 PUSH1 0x60 DUP6 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2EBC JUMPI CALLDATASIZE DUP10 DUP10 DUP4 DUP2 DUP2 LT PUSH2 0x2C64 JUMPI PUSH2 0x2C64 PUSH2 0x4DD9 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2C76 SWAP2 SWAP1 PUSH2 0x4DEF JUMP JUMPDEST SWAP1 POP PUSH1 0x4 PUSH2 0x2C87 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST SWAP1 POP LT ISZERO PUSH2 0x2CA8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x71587283 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH2 0x2CB6 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2D3A JUMPI DUP6 ISZERO PUSH2 0x2D17 JUMPI PUSH1 0x0 PUSH2 0x2CD9 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST PUSH2 0x2CE2 SWAP2 PUSH2 0x4E55 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0x81314B59 PUSH1 0xE0 SHL EQ PUSH2 0x2D15 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5FB9107F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMPDEST PUSH2 0x2D30 DUP9 DUP9 PUSH2 0x2D29 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4E0F JUMP JUMPDEST DUP10 DUP10 PUSH2 0x392D JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2EB3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFF687543 PUSH2 0x2D78 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DE0 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x2E32 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH2 0x2E27 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFC1A5543 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2EB1 PUSH2 0x2E60 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2EA2 SWAP3 POP POP POP PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x3BED JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x2C49 JUMP JUMPDEST POP DUP2 MLOAD ISZERO PUSH2 0x2ECE JUMPI PUSH2 0x2ECE DUP3 DUP7 PUSH2 0x3C31 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x60C8E8938C9A0C0D88A98D6F1C562CE68077E12BF3EDB8047378F2F736CB45B4 SWAP1 PUSH1 0x0 SWAP1 LOG1 PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 SWAP2 DUP4 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3016 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 DUP3 GT PUSH2 0x31DA JUMPI DUP1 DUP3 AND ISZERO PUSH2 0x31CE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE75538C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE75538C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3091 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30B5 SWAP2 SWAP1 PUSH2 0x4C68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3104 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3128 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x31CA JUMPI PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP12 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3184 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP8 DUP9 ADD SWAP8 SWAP1 POP PUSH2 0x31BC PUSH2 0xFFFF DUP5 AND DUP3 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x31C6 SWAP1 DUP9 PUSH2 0x4D62 JUMP JUMPDEST SWAP7 POP POP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 DUP3 SWAP1 SHL SWAP2 POP PUSH2 0x3019 JUMP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x326E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3292 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 ISZERO PUSH2 0x3292 JUMPI POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x88 SHL SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP LT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xEB99C2BF PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE DUP2 ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xEB99C2BF SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x334A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x336E SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3380 DUP7 PUSH2 0x3797 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x342C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3427 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3436 PUSH2 0x31E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34CA SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2362A2D8 PUSH1 0x0 DUP7 GT PUSH2 0x350C JUMPI DUP11 PUSH2 0x352E JUMP JUMPDEST PUSH32 0x0 JUMPDEST DUP9 PUSH2 0x353A JUMPI PUSH1 0x1 PUSH2 0x353D JUMP JUMPDEST PUSH1 0x2 JUMPDEST DUP15 CALLER DUP14 DUP14 PUSH1 0x0 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3565 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3584 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35A8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH2 0x35B4 PUSH2 0x31E3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35C2 DUP4 DUP7 PUSH2 0x4D62 JUMP JUMPDEST DUP3 LT PUSH2 0x35CF JUMPI PUSH1 0x0 PUSH2 0x35E4 JUMP JUMPDEST DUP2 PUSH2 0x35DA DUP5 DUP8 PUSH2 0x4D62 JUMP JUMPDEST PUSH2 0x35E4 SWAP2 SWAP1 PUSH2 0x4C97 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3695 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL OR SWAP1 SSTORE PUSH2 0x3608 DUP2 PUSH2 0x372A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3623 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x4D92 JUMP JUMPDEST DUP3 SLOAD PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 MUL NOT SWAP1 SWAP4 AND SWAP2 DUP4 AND MUL OR SWAP1 SWAP2 SSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x80 SHL DUP2 DIV DUP3 AND SWAP2 AND GT ISZERO SWAP1 POP PUSH2 0x3661 JUMPI PUSH2 0x3661 PUSH2 0x3D36 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x39B20AF1A8DA82C3D37DD7B0FE81A987532FFCA72FBD69951823F7C40511F2D SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST PUSH2 0x36A0 DUP5 PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x0 DUP7 GT DUP1 ISZERO PUSH2 0x36B0 JUMPI POP PUSH1 0x1 DUP8 GT JUMPDEST ISZERO PUSH2 0x36BF JUMPI PUSH2 0x36BF DUP12 DUP8 PUSH2 0x3DA5 JUMP JUMPDEST POP POP POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x370C JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0xD9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x42D83B93 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0x3793 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x32382062697473 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1DBD JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 ISZERO PUSH2 0x3873 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x100A3B77 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x4028EDDC SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x384F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3873 SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST ISZERO PUSH2 0x3928 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3922 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH1 0x0 PUSH2 0x393B DUP7 DUP9 PUSH2 0x4E55 JUMP JUMPDEST SWAP1 POP PUSH4 0x7ECEB4A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x39A2 JUMPI DUP2 MLOAD ISZERO PUSH2 0x3975 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE61EEDF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3982 DUP7 PUSH1 0x4 DUP2 DUP11 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x398F SWAP2 SWAP1 PUSH2 0x4F1D JUMP JUMPDEST SWAP2 POP PUSH2 0x399B DUP3 DUP10 PUSH2 0x3F5A JUMP JUMPDEST SWAP2 POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0x29A1FBF3 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3A9B JUMPI PUSH1 0x0 DUP1 DUP1 PUSH2 0x39CB DUP10 PUSH1 0x4 DUP2 DUP14 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x39D8 SWAP2 SWAP1 PUSH2 0x4936 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3A93 DUP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x3A8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A61 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A85 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH2 0x3A8C JUMP JUMPDEST DUP13 JUMPDEST DUP5 DUP5 PUSH2 0x2584 JUMP JUMPDEST POP POP POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0xD48384EF PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3AE6 JUMPI PUSH1 0x1 SWAP3 POP PUSH1 0x0 PUSH2 0x3AC6 DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3AD3 SWAP2 SWAP1 PUSH2 0x4FE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x4031 JUMP JUMPDEST POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0xD5845E09 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3B46 JUMPI DUP3 ISZERO PUSH2 0x3B1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x18161955 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3B2C DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B39 SWAP2 SWAP1 PUSH2 0x4FE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x415E JUMP JUMPDEST PUSH4 0x1CB7B7BB PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3B87 JUMPI PUSH1 0x0 PUSH2 0x3B6D DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B7A SWAP2 SWAP1 PUSH2 0x487A JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x42F7 JUMP JUMPDEST PUSH4 0x37076167 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3BC8 JUMPI PUSH1 0x0 PUSH2 0x3BAE DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3BBB SWAP2 SWAP1 PUSH2 0x487A JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x43B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF4F3F3D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1C97 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x4495 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9F2 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3C50 JUMPI PUSH2 0x3C50 PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3C6E JUMPI PUSH2 0x3C6E PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CC1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3CE5 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST LT ISZERO PUSH2 0x3D2E JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3CFD JUMPI PUSH2 0x3CFD PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2F42BD87 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1DBD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3C36 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8456CB59 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E54 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0xED2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9E38961 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 DUP5 DUP5 SUB ADD PUSH1 0x44 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x9E389610 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3EF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3F0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE2655809B4FC2A2DFFC14ECF5AAD9DBF5A9703A5BB2B19AB7AE6AFA29EF0C7C8 DUP3 PUSH1 0x40 MLOAD PUSH2 0x3F4C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4028 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3F7C JUMPI PUSH2 0x3F7C PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3FF3 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4005 JUMPI PUSH2 0x4005 PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 DUP2 MLOAD PUSH2 0x401D SWAP2 SWAP1 PUSH2 0x4D62 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x1 ADD PUSH2 0x3F62 JUMP JUMPDEST POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x405C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7615238D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4065 DUP2 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x406E DUP3 PUSH2 0x4570 JUMP JUMPDEST PUSH2 0x4079 DUP2 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x4A67839D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x94CF073A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4118 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH2 0x4123 DUP2 PUSH2 0x28EB JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9CAC51154CC0D835E2F9C9D1F59A9344588CEE107F4203BF58A8C797E3A58C45 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3F4C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x41ED SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x4A67839D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x44 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x0 AND SWAP1 PUSH4 0x94CF073A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x426A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x428E SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH2 0x4299 DUP2 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x42AD PUSH2 0x42A6 DUP3 DUP5 PUSH2 0x4C97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x98274BF834D179EE08DC0604071B0DC90B54731BD5F725A5A96A39A86BCE025A DUP5 PUSH1 0x40 MLOAD PUSH2 0x42E8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x28F1F8B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x51E3F160 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4362 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4376 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 POP DUP7 AND SWAP2 POP PUSH32 0xDF498AA1C340E992665D6FB4F3BE8436D452C45A630CB6D7FAB7963DA39BAC87 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6C7CE77 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD8F9CEE SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4427 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x444B SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST ISZERO PUSH2 0xED2 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69DB9E9764DA61B6681B89FB0F5BE018506E0342036E56B59C3015A620D60977 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x44F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1DBD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4512 SWAP2 SWAP1 PUSH2 0x5024 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x454F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4554 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4565 DUP8 DUP4 DUP4 DUP8 PUSH2 0x46A8 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x45FF SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9FD12B77 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4661 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4685 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 AND ISZERO PUSH2 0xED2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5754BAED PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4717 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x4710 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x4710 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1DBD JUMP JUMPDEST POP DUP2 PUSH2 0x1A55 JUMP JUMPDEST PUSH2 0x1A55 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x472C JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DBD SWAP2 SWAP1 PUSH2 0x5036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x477C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4787 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4797 DUP2 PUSH2 0x475B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3928 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C97 DUP3 PUSH2 0x47A2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x47FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4840 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x486E DUP8 DUP3 DUP9 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x488C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x48AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x48BA DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x48CA DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x48EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x48F8 DUP9 DUP3 DUP10 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x492B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x4909 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x494B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4956 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4966 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x499B DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x49AB DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x49C2 DUP2 PUSH2 0x475B JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x49DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x49E9 DUP10 DUP3 DUP11 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4A1E DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4A35 DUP2 PUSH2 0x475B JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x48EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A6C DUP4 PUSH2 0x47A2 JUMP JUMPDEST SWAP2 POP PUSH2 0x4A7A PUSH1 0x20 DUP5 ADD PUSH2 0x47A2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4A99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4AAB DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4ABB DUP2 PUSH2 0x4909 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4ACB DUP2 PUSH2 0x4909 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4AEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4B00 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B27 DUP9 DUP3 DUP10 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B3B DUP2 PUSH2 0x4909 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B7E DUP6 DUP3 DUP7 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4BA8 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4797 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x475B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C97 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4C63 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x4C86 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x4797 DUP2 PUSH2 0x4909 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x4D0F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND DUP3 MSTORE PUSH1 0xE0 DUP3 ADD SWAP1 PUSH2 0x4D32 PUSH1 0x20 DUP5 ADD DUP11 PUSH2 0x4CF1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP5 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP1 SWAP5 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C97 DUP2 PUSH2 0x475B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4DB2 JUMPI PUSH2 0x4DB2 PUSH2 0x4C19 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4DB2 JUMPI PUSH2 0x4DB2 PUSH2 0x4C19 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH1 0x3E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x4E7D JUMPI DUP1 DUP2 DUP7 PUSH1 0x4 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x4E95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x4EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EE7 JUMPI PUSH2 0x4EE7 PUSH2 0x4EAF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F15 JUMPI PUSH2 0x4F15 PUSH2 0x4EAF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x4F47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4F6D JUMPI PUSH2 0x4F6D PUSH2 0x4EAF JUMP JUMPDEST PUSH2 0x4F7B DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x4EED JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP8 DUP3 GT ISZERO PUSH2 0x4F9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH2 0x4565 JUMPI PUSH1 0x40 DUP5 DUP10 SUB SLT ISZERO PUSH2 0x4FB9 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x4FC1 PUSH2 0x4EC5 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4FCC DUP2 PUSH2 0x4746 JUMP JUMPDEST DUP2 MSTORE DUP5 DUP7 ADD CALLDATALOAD DUP7 DUP3 ADD MSTORE DUP4 MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH2 0x4FA0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x501B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5003 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4E05 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5000 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5055 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5000 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5D SWAP2 SWAP6 SMOD PUSH17 0x275E8A7F227E7315186A1D146EB499A68B 0xE6 0xC5 0xE0 CALLDATACOPY REVERT EXTCODECOPY 0x5C DIFFICULTY PUSH14 0x8B64736F6C634300081100330000 ", - "sourceMap": "3062:62081:20:-:0;;;5893:1002;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:1:57;1821:7;:22;-1:-1:-1;;;;;6109:28:20;;6105:63;;6146:22;;-1:-1:-1;;;6146:22:20;;;;;;;;;;;6105:63;-1:-1:-1;;;;;6191:48:20;;;;;;6275:45;;;-1:-1:-1;;;6275:45:20;;;;:43;;:45;;;;;;;;;;;;;;;6191:48;6275:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6262:58:20;;;-1:-1:-1;;;;;6262:58:20;;;;;6374:14;-1:-1:-1;;;;;6357:44:20;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6343:60:20;;;-1:-1:-1;;;;;6343:60:20;;;;;6450:14;-1:-1:-1;;;;;6433:37:20;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6426:46:20;;;;;6483:20;;;;;;;6540:23;;6526:37;;6587:34;;;;;;6659:30;;;6631:58;;6699:102;;6754:36;;-1:-1:-1;;;;;6754:36:20;;;;;;;;6699:102;6811:22;;;;-1:-1:-1;;6844:9:20;:44;;-1:-1:-1;;;;;6844:44:20;-1:-1:-1;;;;;;6844:44:20;;;-1:-1:-1;3062:62081:20;;14:177:70;93:13;;-1:-1:-1;;;;;135:31:70;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:533::-;290:6;298;306;314;367:3;355:9;346:7;342:23;338:33;335:53;;;384:1;381;374:12;335:53;407:40;437:9;407:40;:::i;:::-;397:50;;466:49;511:2;500:9;496:18;466:49;:::i;:::-;456:59;;534:49;579:2;568:9;564:18;534:49;:::i;:::-;524:59;;626:2;615:9;611:18;605:25;673:5;666:13;659:21;652:5;649:32;639:60;;695:1;692;685:12;639:60;196:533;;;;-1:-1:-1;196:533:70;;-1:-1:-1;;196:533:70:o;734:208::-;804:6;857:2;845:9;836:7;832:23;828:32;825:52;;;873:1;870;863:12;825:52;896:40;926:9;896:40;:::i;:::-;886:50;734:208;-1:-1:-1;;;734:208:70:o;:::-;3062:62081:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_calcTotalValueUSD_7430": { - "entryPoint": 12162, - "id": 7430, - "parameterSlots": 2, - "returnSlots": 2 - }, - "@_checkAndUpdateBorrowedBlockLimit_7032": { - "entryPoint": 10290, - "id": 7032, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_checkAndUpdateTotalDebt_7126": { - "entryPoint": 10938, - "id": 7126, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkForbiddenTokens_6180": { - "entryPoint": 17776, - "id": 6180, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_checkIfEmergencyLiquidator_7073": { - "entryPoint": 13017, - "id": 7073, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_closeCreditAccount_5561": { - "entryPoint": 7629, - "id": 5561, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_closeLiquidatedAccount_6020": { - "entryPoint": 13172, - "id": 6020, - "parameterSlots": 6, - "returnSlots": 1 - }, - "@_compareBalances_6832": { - "entryPoint": 15409, - "id": 6832, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_decreaseDebt_6223": { - "entryPoint": 16734, - "id": 6223, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_disableToken_7250": { - "entryPoint": 17335, - "id": 7250, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_enableToken_7227": { - "entryPoint": 17143, - "id": 7227, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_getAvailableLiquidity_7605": { - "entryPoint": 12771, - "id": 7605, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_increaseClaimableBalance_6101": { - "entryPoint": 15781, - "id": 6101, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_increaseDebt_6150": { - "entryPoint": 16433, - "id": 6150, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_isAccountLiquidatable_7572": { - "entryPoint": 8705, - "id": 7572, - "parameterSlots": 1, - "returnSlots": 2 - }, - "@_isBlacklisted_6052": { - "entryPoint": 14231, - "id": 6052, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_isExpired_7591": { - "entryPoint": 12951, - "id": 7591, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_liquidateCreditAccount_5717": { - "entryPoint": 9840, - "id": 5717, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@_liquidateExpiredCreditAccount_5873": { - "entryPoint": 8251, - "id": 5873, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@_multicall_6504": { - "entryPoint": 11150, - "id": 6504, - "parameterSlots": 6, - "returnSlots": 0 - }, - "@_nonReentrantAfter_17239": { - "entryPoint": null, - "id": 17239, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_nonReentrantBefore_17231": { - "entryPoint": 7535, - "id": 17231, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_pauseCreditManager_7264": { - "entryPoint": 15670, - "id": 7264, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_processCreditFacadeMulticall_6731": { - "entryPoint": 14637, - "id": 6731, - "parameterSlots": 6, - "returnSlots": 2 - }, - "@_revertIfActionOnAccountNotAllowed_6974": { - "entryPoint": 14031, - "id": 6974, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_revertIfOpenCreditAccountNotAllowed_6951": { - "entryPoint": 10547, - "id": 6951, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_revertIfOutOfBorrowedLimits_7058": { - "entryPoint": 10475, - "id": 7058, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_revert_18719": { - "entryPoint": null, - "id": 18719, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_storeBalances_6781": { - "entryPoint": 16218, - "id": 6781, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_updateTotalBorrowedInBlock_7176": { - "entryPoint": null, - "id": 7176, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_wrapETH_7512": { - "entryPoint": 9335, - "id": 7512, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addCollateral_6260": { - "entryPoint": 3487, - "id": 6260, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addCollateral_6292": { - "entryPoint": 9604, - "id": 6292, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@approveAccountTransfer_7204": { - "entryPoint": 2180, - "id": 7204, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@blacklistHelper_5131": { - "entryPoint": null, - "id": 5131, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@calcCreditAccountHealthFactor_7462": { - "entryPoint": 6553, - "id": 7462, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@calcTotalValue_7345": { - "entryPoint": 5766, - "id": 7345, - "parameterSlots": 1, - "returnSlots": 2 - }, - "@closeCreditAccount_5446": { - "entryPoint": 3859, - "id": 5446, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@closeCreditAccount_5468": { - "entryPoint": 2516, - "id": 5468, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@creditManager_5081": { - "entryPoint": null, - "id": 5081, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@degenNFT_5127": { - "entryPoint": null, - "id": 5127, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@expirable_5090": { - "entryPoint": null, - "id": 5090, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@functionCallWithValue_18544": { - "entryPoint": 17557, - "id": 18544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@functionCall_18460": { - "entryPoint": 15341, - "id": 18460, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@getTotalBorrowedInBlock_7157": { - "entryPoint": null, - "id": 7157, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@hasOpenedCreditAccount_7482": { - "entryPoint": 2552, - "id": 7482, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isBlacklistableUnderlying_5087": { - "entryPoint": null, - "id": 5087, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isContract_18408": { - "entryPoint": null, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isTokenAllowed_7297": { - "entryPoint": 7030, - "id": 7297, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@limits_5100": { - "entryPoint": null, - "id": 5100, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@liquidateCreditAccount_5586": { - "entryPoint": 3799, - "id": 5586, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@liquidateCreditAccount_5613": { - "entryPoint": 3820, - "id": 5613, - "parameterSlots": 6, - "returnSlots": 0 - }, - "@liquidateExpiredCreditAccount_5742": { - "entryPoint": 2712, - "id": 5742, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@liquidateExpiredCreditAccount_5769": { - "entryPoint": 5131, - "id": 5769, - "parameterSlots": 6, - "returnSlots": 0 - }, - "@lossParams_5105": { - "entryPoint": null, - "id": 5105, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@multicall_6336": { - "entryPoint": 6240, - "id": 6336, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@openCreditAccountMulticall_5422": { - "entryPoint": 4677, - "id": 5422, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@openCreditAccount_5350": { - "entryPoint": 4083, - "id": 5350, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@params_5095": { - "entryPoint": null, - "id": 5095, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pool_5134": { - "entryPoint": null, - "id": 5134, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@resetCumulativeLoss_7731": { - "entryPoint": 5365, - "id": 7731, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@setCreditAccountLimits_7703": { - "entryPoint": 3879, - "id": 7703, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setEmergencyLiquidationDiscount_7746": { - "entryPoint": 2750, - "id": 7746, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setExpirationDate_7680": { - "entryPoint": 6749, - "id": 7680, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setIncreaseDebtForbidden_7620": { - "entryPoint": 7326, - "id": 7620, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setLimitPerBlock_7635": { - "entryPoint": 5152, - "id": 7635, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setMaxCumulativeLoss_7718": { - "entryPoint": 2306, - "id": 7718, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setTotalDebtParams_7658": { - "entryPoint": 5562, - "id": 7658, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@toUint128_19157": { - "entryPoint": 14122, - "id": 19157, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@totalDebt_5109": { - "entryPoint": null, - "id": 5109, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferAccountOwnership_6891": { - "entryPoint": 2963, - "id": 6891, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transfersAllowed_5120": { - "entryPoint": null, - "id": 5120, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@underlying_5112": { - "entryPoint": null, - "id": 5112, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@verifyCallResultFromTarget_18675": { - "entryPoint": 18088, - "id": 18675, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@version_5142": { - "entryPoint": null, - "id": 5142, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@wethAddress_5123": { - "entryPoint": null, - "id": 5123, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@whitelisted_5084": { - "entryPoint": null, - "id": 5084, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_array_struct_MultiCall_calldata_dyn_calldata": { - "entryPoint": 18388, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 18554, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 19452, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payable": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payablet_address_payablet_uint256": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 19338, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 18742, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 18583, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_addresst_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 18807, - "id": null, - "parameterSlots": 2, - "returnSlots": 6 - }, - "abi_decode_tuple_t_addresst_bool": { - "entryPoint": 18281, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint16_fromMemory": { - "entryPoint": 19560, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 18463, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 18939, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 20253, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 19273, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool": { - "entryPoint": 19423, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 19829, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_IPriceOracleV2_$12942_fromMemory": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint128": { - "entryPoint": 18361, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint128t_uint128": { - "entryPoint": 19024, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint16": { - "entryPoint": 18713, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": 20455, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 19626, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_addresst_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptrt_uint16": { - "entryPoint": 19158, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint256t_addresst_uint16t_uint16": { - "entryPoint": 19075, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory": { - "entryPoint": 19651, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint40": { - "entryPoint": 19384, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint128": { - "entryPoint": 18338, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_enum_ClosureAction": { - "entryPoint": 19697, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 20516, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_rational_0_by_1_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed": { - "entryPoint": 19731, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_uint256_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ICreditManagerV2_$12355__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 20534, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint128_t_bool_t_uint40_t_uint16__to_t_uint128_t_bool_t_uint40_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint16__to_t_uint256_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64_t_uint128__to_t_uint64_t_uint128__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "access_calldata_tail_t_bytes_calldata_ptr": { - "entryPoint": 19983, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "access_calldata_tail_t_struct$_MultiCall_$14040_calldata_ptr": { - "entryPoint": 19951, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 20205, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_2690": { - "entryPoint": 20165, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "calldata_array_index_range_access_t_bytes_calldata_ptr": { - "entryPoint": 20101, - "id": null, - "parameterSlots": 4, - "returnSlots": 2 - }, - "checked_add_t_uint128": { - "entryPoint": 19858, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 19810, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 19526, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 19503, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint128": { - "entryPoint": 19897, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 19607, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes4": { - "entryPoint": 20053, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 20480, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x11": { - "entryPoint": 19481, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 19929, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 20143, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 18246, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_bool": { - "entryPoint": 18267, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint16": { - "entryPoint": 18697, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:25868:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "59:86:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "82:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "108:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "113:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "104:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "117:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "100:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "89:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "89:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "79:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "79:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "72:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "72:50:70" - }, - "nodeType": "YulIf", - "src": "69:70:70" - } - ] - }, - "name": "validator_revert_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "48:5:70", - "type": "" - } - ], - "src": "14:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "192:76:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "246:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "258:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "248:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "248:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "248:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "215:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "236:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "229:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "229:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "222:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "222:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "212:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "212:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "205:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "205:40:70" - }, - "nodeType": "YulIf", - "src": "202:60:70" - } - ] - }, - "name": "validator_revert_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "181:5:70", - "type": "" - } - ], - "src": "150:118:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "357:298:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "403:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "412:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "415:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "405:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "405:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "405:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "378:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "387:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "374:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "399:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "370:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "370:32:70" - }, - "nodeType": "YulIf", - "src": "367:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "428:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "454:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "441:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "441:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "432:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "498:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "473:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "473:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "473:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "513:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "523:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "513:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "537:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "569:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "580:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "565:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "565:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "552:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "552:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "541:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "615:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "593:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "593:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "593:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "632:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "642:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "632:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "315:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "326:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "338:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "346:6:70", - "type": "" - } - ], - "src": "273:382:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "709:139:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "719:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "741:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "728:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "728:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "719:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "826:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "835:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "838:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "828:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "828:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "828:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "770:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "781:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "788:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "777:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "777:46:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "767:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "767:57:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "760:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "760:65:70" - }, - "nodeType": "YulIf", - "src": "757:85:70" - } - ] - }, - "name": "abi_decode_uint128", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "688:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "699:5:70", - "type": "" - } - ], - "src": "660:188:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "923:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "969:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "978:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "981:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "971:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "971:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "971:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "944:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "953:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "940:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "940:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "965:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "936:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "936:32:70" - }, - "nodeType": "YulIf", - "src": "933:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "994:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1023:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint128", - "nodeType": "YulIdentifier", - "src": "1004:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1004:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "994:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint128", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "889:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "900:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "912:6:70", - "type": "" - } - ], - "src": "853:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1146:283:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1195:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1204:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1207:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1197:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1197:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1197:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1174:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1182:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1170:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1170:17:70" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1189:3:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1166:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1166:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1159:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1159:35:70" - }, - "nodeType": "YulIf", - "src": "1156:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "1220:30:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1243:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1230:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1230:20:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1220:6:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1293:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1302:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1305:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1295:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1295:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1295:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1265:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1273:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1262:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1262:30:70" - }, - "nodeType": "YulIf", - "src": "1259:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "1318:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1334:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1342:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1330:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1330:17:70" - }, - "variableNames": [ - { - "name": "arrayPos", - "nodeType": "YulIdentifier", - "src": "1318:8:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1416:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1419:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1409:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1409:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1370:6:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1382:1:70", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1385:6:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1378:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1378:14:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1366:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1366:27:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1395:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1362:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1362:38:70" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1402:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1359:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1359:47:70" - }, - "nodeType": "YulIf", - "src": "1356:67:70" - } - ] - }, - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1109:6:70", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1117:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nodeType": "YulTypedName", - "src": "1125:8:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1135:6:70", - "type": "" - } - ], - "src": "1044:385:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1603:519:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1649:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1658:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1661:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1651:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1651:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1651:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1624:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1633:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1620:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1620:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1645:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1616:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1616:32:70" - }, - "nodeType": "YulIf", - "src": "1613:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1674:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1700:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1687:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1687:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1678:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1744:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "1719:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "1719:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1719:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "1759:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1769:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1759:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1783:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1810:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1821:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1806:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1793:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1793:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1783:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1834:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1865:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1876:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1861:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1861:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1848:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1848:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1838:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1923:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1932:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1935:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1925:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1925:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1925:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1895:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1903:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1892:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1892:30:70" - }, - "nodeType": "YulIf", - "src": "1889:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1948:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2034:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2045:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2030:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2030:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2054:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "1974:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "1974:88:70" - }, - "variables": [ - { - "name": "value2_1", - "nodeType": "YulTypedName", - "src": "1952:8:70", - "type": "" - }, - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "1962:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2071:18:70", - "value": { - "name": "value2_1", - "nodeType": "YulIdentifier", - "src": "2081:8:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2071:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2098:18:70", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "2108:8:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "2098:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1545:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1556:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1568:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1576:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1584:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "1592:6:70", - "type": "" - } - ], - "src": "1434:688:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2228:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2238:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2250:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2261:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2246:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2246:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2238:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2280:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2295:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2311:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2316:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2307:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2307:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2320:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2303:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2303:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2291:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2291:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2273:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2273:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2273:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2197:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2208:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2219:4:70", - "type": "" - } - ], - "src": "2127:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2405:177:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2451:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2460:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2463:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2453:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2453:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2453:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2426:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2435:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2422:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2422:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2447:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2418:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2418:32:70" - }, - "nodeType": "YulIf", - "src": "2415:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2476:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2502:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2489:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2489:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2480:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2546:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2521:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2521:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2521:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "2561:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2571:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2561:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2371:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2382:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2394:6:70", - "type": "" - } - ], - "src": "2335:247:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2682:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2692:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2704:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2715:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2700:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2700:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2692:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2734:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2759:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2752:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2752:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2745:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2745:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2727:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2727:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2727:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2651:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2662:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2673:4:70", - "type": "" - } - ], - "src": "2587:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2965:644:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3012:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3021:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3024:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3014:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3014:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3014:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2986:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2995:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2982:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2982:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3007:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2978:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2978:33:70" - }, - "nodeType": "YulIf", - "src": "2975:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3037:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3063:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3050:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3050:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3041:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3107:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3082:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3082:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3082:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "3122:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3132:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3122:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3146:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3178:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3189:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3174:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3174:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3161:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3161:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "3150:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3227:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3202:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3202:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3202:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "3244:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3254:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3244:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3270:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3297:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3308:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3293:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3293:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3280:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3280:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3270:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3321:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3352:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3363:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3348:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3348:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3335:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3335:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "3325:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3410:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3419:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3422:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3412:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3412:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3412:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3382:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3390:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3379:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3379:30:70" - }, - "nodeType": "YulIf", - "src": "3376:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3435:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3521:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3532:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3517:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3517:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3541:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "3461:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "3461:88:70" - }, - "variables": [ - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "3439:8:70", - "type": "" - }, - { - "name": "value4_1", - "nodeType": "YulTypedName", - "src": "3449:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3558:18:70", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "3568:8:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "3558:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3585:18:70", - "value": { - "name": "value4_1", - "nodeType": "YulIdentifier", - "src": "3595:8:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "3585:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2899:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2910:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2922:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2930:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2938:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "2946:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "2954:6:70", - "type": "" - } - ], - "src": "2779:830:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3658:73:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3709:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3718:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3721:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3711:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3711:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3711:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3681:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3692:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3699:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3688:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3688:18:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3678:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3678:29:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3671:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3671:37:70" - }, - "nodeType": "YulIf", - "src": "3668:57:70" - } - ] - }, - "name": "validator_revert_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3647:5:70", - "type": "" - } - ], - "src": "3614:117:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3805:176:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3851:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3860:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3863:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3853:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3853:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3853:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3826:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3835:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3822:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3822:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3847:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3818:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3818:32:70" - }, - "nodeType": "YulIf", - "src": "3815:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3876:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3902:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3889:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3889:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3880:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3945:5:70" - } - ], - "functionName": { - "name": "validator_revert_uint16", - "nodeType": "YulIdentifier", - "src": "3921:23:70" - }, - "nodeType": "YulFunctionCall", - "src": "3921:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3921:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "3960:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3970:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3960:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3771:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3782:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3794:6:70", - "type": "" - } - ], - "src": "3736:245:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4115:190:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4125:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4137:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4148:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4133:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4125:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4160:44:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4170:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4164:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4220:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4235:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4243:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4231:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4231:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4213:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4213:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4213:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4267:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4278:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4263:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4263:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4287:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4295:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4283:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4283:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4256:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4256:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4256:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4076:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4087:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4095:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4106:4:70", - "type": "" - } - ], - "src": "3986:319:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4411:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4421:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4433:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4444:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4429:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4421:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4463:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4474:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4456:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4456:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4456:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4380:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4391:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4402:4:70", - "type": "" - } - ], - "src": "4310:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4596:352:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4642:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4651:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4654:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4644:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4644:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4644:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4617:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4626:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4613:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4613:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4638:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4609:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4609:32:70" - }, - "nodeType": "YulIf", - "src": "4606:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4667:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4693:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4680:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4680:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4671:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4737:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "4712:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "4712:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4712:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "4752:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4762:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4752:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4776:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4808:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4819:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4804:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4804:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4791:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4791:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "4780:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "4857:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "4832:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "4832:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4832:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "4874:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "4884:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4874:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4900:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4927:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4938:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4923:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4923:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4910:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4910:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4900:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4546:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4557:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4569:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4577:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4585:6:70", - "type": "" - } - ], - "src": "4492:456:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5153:766:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5200:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5209:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5212:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5202:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5202:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5202:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5174:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5183:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5170:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5170:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5195:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5166:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5166:33:70" - }, - "nodeType": "YulIf", - "src": "5163:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5225:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5251:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5238:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5238:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5229:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5295:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "5270:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "5270:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5270:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "5310:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5320:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5310:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5334:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5366:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5377:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5362:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5362:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5349:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5349:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "5338:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5415:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "5390:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "5390:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5390:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "5432:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5442:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5432:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5458:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5485:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5496:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5481:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5481:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5468:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5468:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "5458:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5509:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5541:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5552:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5537:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5537:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5524:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5524:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "5513:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5587:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "5565:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "5565:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5565:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "5604:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5614:7:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "5604:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5630:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5661:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5672:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5657:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5657:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5644:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5644:33:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "5634:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5720:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5729:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5732:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5722:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5722:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5722:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5692:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5700:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5689:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5689:30:70" - }, - "nodeType": "YulIf", - "src": "5686:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5745:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5831:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5842:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5827:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5827:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5851:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "5771:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "5771:88:70" - }, - "variables": [ - { - "name": "value4_1", - "nodeType": "YulTypedName", - "src": "5749:8:70", - "type": "" - }, - { - "name": "value5_1", - "nodeType": "YulTypedName", - "src": "5759:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5868:18:70", - "value": { - "name": "value4_1", - "nodeType": "YulIdentifier", - "src": "5878:8:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "5868:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5895:18:70", - "value": { - "name": "value5_1", - "nodeType": "YulIdentifier", - "src": "5905:8:70" - }, - "variableNames": [ - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "5895:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5079:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5090:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5102:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5110:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "5118:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "5126:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "5134:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "5142:6:70", - "type": "" - } - ], - "src": "4953:966:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6107:641:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6154:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6163:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6166:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6156:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6156:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6156:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6128:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6137:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6124:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6124:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6149:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6120:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6120:33:70" - }, - "nodeType": "YulIf", - "src": "6117:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6179:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6205:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6192:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6192:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6183:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6249:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "6224:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "6224:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6224:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "6264:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6274:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6264:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6288:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6315:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6326:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6311:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6311:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6298:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6298:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "6288:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6339:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6371:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6382:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6367:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6367:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6354:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6354:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "6343:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "6417:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "6395:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "6395:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6395:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "6434:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "6444:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "6434:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6460:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6491:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6502:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6487:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6487:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6474:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6474:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "6464:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6549:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6558:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6561:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6551:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6551:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6551:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6521:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6529:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6518:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6518:30:70" - }, - "nodeType": "YulIf", - "src": "6515:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6574:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6660:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6671:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6656:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6656:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6680:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "6600:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "6600:88:70" - }, - "variables": [ - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "6578:8:70", - "type": "" - }, - { - "name": "value4_1", - "nodeType": "YulTypedName", - "src": "6588:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6697:18:70", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "6707:8:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "6697:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6724:18:70", - "value": { - "name": "value4_1", - "nodeType": "YulIdentifier", - "src": "6734:8:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "6724:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6041:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "6052:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6064:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "6072:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "6080:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "6088:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "6096:6:70", - "type": "" - } - ], - "src": "5924:824:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6840:173:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6886:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6895:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6898:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6888:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6888:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6888:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6861:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6870:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6857:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6857:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6882:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6853:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6853:32:70" - }, - "nodeType": "YulIf", - "src": "6850:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "6911:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6940:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint128", - "nodeType": "YulIdentifier", - "src": "6921:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "6921:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6911:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6959:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6992:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7003:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6988:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6988:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint128", - "nodeType": "YulIdentifier", - "src": "6969:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "6969:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "6959:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint128t_uint128", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6798:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "6809:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6821:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "6829:6:70", - "type": "" - } - ], - "src": "6753:260:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7137:475:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "7184:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7193:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7196:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "7186:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7186:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7186:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7158:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7167:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7154:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7154:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7179:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "7150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7150:33:70" - }, - "nodeType": "YulIf", - "src": "7147:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "7209:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7232:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7219:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7219:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7209:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7251:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7281:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7292:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7277:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7277:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7264:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7264:32:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7255:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7330:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "7305:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "7305:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7305:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "7345:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7355:5:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "7345:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7369:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7401:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7412:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7397:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7397:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7384:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7384:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "7373:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7449:7:70" - } - ], - "functionName": { - "name": "validator_revert_uint16", - "nodeType": "YulIdentifier", - "src": "7425:23:70" - }, - "nodeType": "YulFunctionCall", - "src": "7425:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7425:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "7466:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7476:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "7466:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7492:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7524:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7535:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7520:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7520:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7507:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7507:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "7496:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "7572:7:70" - } - ], - "functionName": { - "name": "validator_revert_uint16", - "nodeType": "YulIdentifier", - "src": "7548:23:70" - }, - "nodeType": "YulFunctionCall", - "src": "7548:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7548:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "7589:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "7599:7:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "7589:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_addresst_uint16t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7079:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "7090:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7102:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7110:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7118:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "7126:6:70", - "type": "" - } - ], - "src": "7018:594:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7802:643:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "7849:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7858:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7861:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "7851:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7851:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7851:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7823:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7832:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7819:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7819:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7844:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "7815:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7815:33:70" - }, - "nodeType": "YulIf", - "src": "7812:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "7874:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7897:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7884:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7884:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7874:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7916:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7946:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7957:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7942:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7942:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "7929:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7929:32:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7920:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7995:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "7970:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "7970:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7970:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "8010:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8020:5:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "8010:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8034:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8065:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8076:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8061:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8061:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8048:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "8048:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "8038:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "8095:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8103:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "8092:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "8092:30:70" - }, - "nodeType": "YulIf", - "src": "8089:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8148:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8234:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "8245:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8230:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8230:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "8254:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "8174:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "8174:88:70" - }, - "variables": [ - { - "name": "value2_1", - "nodeType": "YulTypedName", - "src": "8152:8:70", - "type": "" - }, - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "8162:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8271:18:70", - "value": { - "name": "value2_1", - "nodeType": "YulIdentifier", - "src": "8281:8:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "8271:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8298:18:70", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "8308:8:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "8298:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8325:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8357:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8368:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8353:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8353:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8340:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "8340:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "8329:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "8405:7:70" - } - ], - "functionName": { - "name": "validator_revert_uint16", - "nodeType": "YulIdentifier", - "src": "8381:23:70" - }, - "nodeType": "YulFunctionCall", - "src": "8381:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8381:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "8422:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "8432:7:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "8422:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_addresst_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptrt_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7736:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "7747:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7759:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7767:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7775:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "7783:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "7791:6:70", - "type": "" - } - ], - "src": "7617:828:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8577:185:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8587:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8599:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8610:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8595:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8595:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8587:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8629:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8644:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8652:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8640:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8640:31:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8622:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8622:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8622:50:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8692:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8703:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8688:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8688:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "8712:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8720:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8708:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8708:47:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8681:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8681:75:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8681:75:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint64_t_uint128__to_t_uint64_t_uint128__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8538:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "8549:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8557:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8568:4:70", - "type": "" - } - ], - "src": "8450:312:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8894:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8904:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8916:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8927:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8912:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8912:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8904:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8946:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8961:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8977:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8982:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8973:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8973:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8986:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8969:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8969:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8957:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8957:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8939:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8939:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8939:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ICreditManagerV2_$12355__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8863:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8874:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8885:4:70", - "type": "" - } - ], - "src": "8767:229:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9130:119:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9140:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9152:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9163:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9148:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9148:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9140:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9182:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9193:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9175:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9175:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9175:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9220:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9231:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9216:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9216:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9236:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9209:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9209:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9209:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9091:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9102:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9110:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9121:4:70", - "type": "" - } - ], - "src": "9001:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9389:350:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9435:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9444:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9447:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9437:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9437:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9437:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "9410:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9419:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9406:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9406:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9431:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "9402:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9402:32:70" - }, - "nodeType": "YulIf", - "src": "9399:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9460:37:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9487:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "9474:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "9474:23:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "9464:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9540:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9549:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9552:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9542:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9542:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9542:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "9512:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9520:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "9509:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "9509:30:70" - }, - "nodeType": "YulIf", - "src": "9506:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9565:114:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9651:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "9662:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9647:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9647:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "9671:7:70" - } - ], - "functionName": { - "name": "abi_decode_array_struct_MultiCall_calldata_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "9591:55:70" - }, - "nodeType": "YulFunctionCall", - "src": "9591:88:70" - }, - "variables": [ - { - "name": "value0_1", - "nodeType": "YulTypedName", - "src": "9569:8:70", - "type": "" - }, - { - "name": "value1_1", - "nodeType": "YulTypedName", - "src": "9579:8:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9688:18:70", - "value": { - "name": "value0_1", - "nodeType": "YulIdentifier", - "src": "9698:8:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9688:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9715:18:70", - "value": { - "name": "value1_1", - "nodeType": "YulIdentifier", - "src": "9725:8:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9715:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9347:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "9358:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9370:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9378:6:70", - "type": "" - } - ], - "src": "9254:485:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9919:295:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9929:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9941:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9952:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9937:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9937:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9929:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9972:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9987:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9995:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "9983:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9983:47:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9965:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9965:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9965:66:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10051:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10062:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10047:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10081:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "10074:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10074:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "10067:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10067:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10040:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10040:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10040:50:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10110:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10121:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10106:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10106:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "10130:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10138:12:70", - "type": "", - "value": "0xffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10126:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10126:25:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10099:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10099:53:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10099:53:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10172:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10183:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10168:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10168:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "10192:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10200:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10188:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10188:19:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10161:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10161:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10161:47:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint128_t_bool_t_uint40_t_uint16__to_t_uint128_t_bool_t_uint40_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9864:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "9875:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "9883:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9891:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9899:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9910:4:70", - "type": "" - } - ], - "src": "9744:470:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10306:301:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "10352:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10361:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10364:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "10354:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10354:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10354:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10327:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10336:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10323:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10348:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "10319:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10319:32:70" - }, - "nodeType": "YulIf", - "src": "10316:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10377:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10403:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "10390:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "10390:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10381:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10447:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "10422:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "10422:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10422:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "10462:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10472:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10462:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10486:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10518:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10529:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10514:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10514:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "10501:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "10501:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "10490:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "10567:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "10542:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "10542:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10542:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "10584:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "10594:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10584:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10264:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "10275:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10287:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "10295:6:70", - "type": "" - } - ], - "src": "10219:388:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10681:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "10727:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10736:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10739:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "10729:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10729:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10729:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10702:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10711:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10698:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10698:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10723:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "10694:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10694:32:70" - }, - "nodeType": "YulIf", - "src": "10691:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10752:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10778:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "10765:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "10765:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10756:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10844:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10853:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10856:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "10846:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10846:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10846:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10810:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10821:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10828:12:70", - "type": "", - "value": "0xffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10817:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10817:24:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "10807:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "10807:35:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "10800:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10800:43:70" - }, - "nodeType": "YulIf", - "src": "10797:63:70" - }, - { - "nodeType": "YulAssignment", - "src": "10869:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10879:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10869:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint40", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10647:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "10658:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10670:6:70", - "type": "" - } - ], - "src": "10612:278:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10962:174:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "11008:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11017:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11020:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11010:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11010:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11010:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10983:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10992:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10979:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10979:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11004:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "10975:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10975:32:70" - }, - "nodeType": "YulIf", - "src": "10972:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11033:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11059:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "11046:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "11046:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11037:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11100:5:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "11078:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "11078:28:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11078:28:70" - }, - { - "nodeType": "YulAssignment", - "src": "11115:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11125:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11115:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10928:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "10939:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10951:6:70", - "type": "" - } - ], - "src": "10895:241:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11222:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "11268:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11277:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11280:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11270:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11270:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11270:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "11243:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11252:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11239:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11264:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "11235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11235:32:70" - }, - "nodeType": "YulIf", - "src": "11232:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11293:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11312:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "11306:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "11306:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11297:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11356:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "11331:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "11331:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11331:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "11371:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11381:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11371:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11188:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "11199:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11211:6:70", - "type": "" - } - ], - "src": "11141:251:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11526:175:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "11536:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11548:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11559:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11544:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11544:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11536:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11571:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11589:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11594:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "11585:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11585:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11598:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11581:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11581:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "11575:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11616:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11631:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11639:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11627:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11627:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11609:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11609:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11609:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11663:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11674:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11659:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11659:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "11683:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11691:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11679:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11679:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11652:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11652:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11652:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11487:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "11498:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11506:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11517:4:70", - "type": "" - } - ], - "src": "11397:304:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11738:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11755:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11762:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11767:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "11758:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11758:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11748:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11748:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11748:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11795:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11798:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11788:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11788:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11788:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11819:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11822:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11812:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11812:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11812:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "11706:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11890:116:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "11900:20:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "11915:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "11918:1:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "11911:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11911:9:70" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "11900:7:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11978:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "11980:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "11980:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11980:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "11949:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "11942:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11942:9:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "11956:1:70" - }, - { - "arguments": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "11963:7:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "11972:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "11959:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11959:15:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "11953:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "11953:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "11939:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "11939:37:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "11932:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11932:45:70" - }, - "nodeType": "YulIf", - "src": "11929:71:70" - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "11869:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "11872:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "11878:7:70", - "type": "" - } - ], - "src": "11838:168:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12057:171:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "12088:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12109:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12116:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12121:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12112:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12102:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12102:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12102:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12153:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12156:4:70", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12146:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12146:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12146:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12181:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12184:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "12174:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12174:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12174:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12077:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "12070:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12070:9:70" - }, - "nodeType": "YulIf", - "src": "12067:132:70" - }, - { - "nodeType": "YulAssignment", - "src": "12208:14:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12217:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12220:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "12213:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12213:9:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "12208:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "12042:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "12045:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "12051:1:70", - "type": "" - } - ], - "src": "12011:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12342:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12352:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12364:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12375:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12360:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12360:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12352:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12394:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12405:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12387:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12387:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12387:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12311:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "12322:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12333:4:70", - "type": "" - } - ], - "src": "12233:185:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12520:286:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "12566:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12575:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12578:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "12568:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12568:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12568:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "12541:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12550:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12537:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12537:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12562:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "12533:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12533:32:70" - }, - "nodeType": "YulIf", - "src": "12530:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12591:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12610:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12604:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "12604:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12595:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "12654:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "12629:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "12629:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12629:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "12669:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "12679:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12669:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12693:40:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12718:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12729:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12714:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12714:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12708:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "12708:25:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "12697:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "12766:7:70" - } - ], - "functionName": { - "name": "validator_revert_uint16", - "nodeType": "YulIdentifier", - "src": "12742:23:70" - }, - "nodeType": "YulFunctionCall", - "src": "12742:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12742:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "12783:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "12793:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "12783:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint16_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12478:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "12489:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "12501:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "12509:6:70", - "type": "" - } - ], - "src": "12423:383:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12860:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12870:17:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12882:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12885:1:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12878:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12878:9:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "12870:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12911:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "12913:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "12913:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12913:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "12902:4:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12908:1:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "12899:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "12899:11:70" - }, - "nodeType": "YulIf", - "src": "12896:37:70" - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "12842:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "12845:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "12851:4:70", - "type": "" - } - ], - "src": "12811:128:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13073:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13083:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13095:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13106:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13091:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13091:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13083:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13125:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13136:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13118:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13118:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13118:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13163:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13174:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13159:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13159:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "13183:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13199:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13204:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "13195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13195:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13208:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13191:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13191:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13179:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13179:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13152:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13152:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13152:60:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13034:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "13045:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13053:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13064:4:70", - "type": "" - } - ], - "src": "12944:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13350:132:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13360:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13372:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13383:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13368:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13368:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13360:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13402:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13413:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13395:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13395:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13395:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13440:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13451:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13436:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13436:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "13460:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13468:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13456:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13456:19:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13429:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13429:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13429:47:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint16__to_t_uint256_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13311:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "13322:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13330:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13341:4:70", - "type": "" - } - ], - "src": "13223:259:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13592:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "13638:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13647:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13650:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "13640:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13640:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13640:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "13613:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13622:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13609:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13609:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13634:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "13605:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13605:32:70" - }, - "nodeType": "YulIf", - "src": "13602:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13663:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13682:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13676:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "13676:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "13667:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13726:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "13701:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "13701:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13701:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "13741:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13751:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13741:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_IPriceOracleV2_$12942_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13558:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "13569:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13581:6:70", - "type": "" - } - ], - "src": "13487:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13848:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "13894:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13903:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13906:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "13896:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13896:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13896:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "13869:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13878:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13865:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13865:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13890:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "13861:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13861:32:70" - }, - "nodeType": "YulIf", - "src": "13858:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "13919:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13935:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13929:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "13929:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13919:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13814:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "13825:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13837:6:70", - "type": "" - } - ], - "src": "13767:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14071:191:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14117:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14126:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14129:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14119:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14119:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14119:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14092:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14101:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14088:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14088:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14113:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14084:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14084:32:70" - }, - "nodeType": "YulIf", - "src": "14081:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "14142:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14158:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14152:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14152:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14142:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "14177:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14197:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14208:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14193:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14193:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14187:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14187:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "14177:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "14221:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14241:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14252:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14237:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14237:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14231:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14231:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "14221:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14021:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "14032:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14044:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "14052:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "14060:6:70", - "type": "" - } - ], - "src": "13956:306:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14441:181:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14458:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14469:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14451:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14451:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14451:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14492:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14503:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14488:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14488:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14508:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14481:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14481:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14481:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14531:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14542:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14527:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14527:18:70" - }, - { - "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14547:33:70", - "type": "", - "value": "ReentrancyGuard: reentrant call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14520:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14520:61:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14520:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "14590:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14602:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14613:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14598:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14598:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14590:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14418:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14432:4:70", - "type": "" - } - ], - "src": "14267:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14682:186:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14724:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14745:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14752:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14757:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "14748:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14748:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14738:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14738:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14738:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14789:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14792:4:70", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14782:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14782:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14782:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14817:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14820:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14810:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14810:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14810:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14705:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14712:1:70", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "14702:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "14702:12:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "14695:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14695:20:70" - }, - "nodeType": "YulIf", - "src": "14692:143:70" - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "14851:3:70" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14856:5:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14844:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14844:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14844:18:70" - } - ] - }, - "name": "abi_encode_enum_ClosureAction", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "14666:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "14673:3:70", - "type": "" - } - ], - "src": "14627:241:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15161:442:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15171:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15183:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15194:3:70", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15179:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15179:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "15171:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "15207:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15225:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15230:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "15221:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15221:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15234:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15217:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15217:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "15211:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15252:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15267:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "15275:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15263:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15263:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15245:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15245:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15245:34:70" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15318:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15330:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15341:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15326:18:70" - } - ], - "functionName": { - "name": "abi_encode_enum_ClosureAction", - "nodeType": "YulIdentifier", - "src": "15288:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "15288:57:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15288:57:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15365:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15376:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15361:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15361:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "15381:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15354:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15354:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15354:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15408:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15419:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15404:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15404:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "15428:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "15436:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15424:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15424:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15397:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15397:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15397:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15460:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15471:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15456:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15456:19:70" - }, - { - "arguments": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "15481:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "15489:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15477:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15477:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15449:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15449:44:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15449:44:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15513:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15524:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15509:19:70" - }, - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "15530:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15502:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15502:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15502:35:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15557:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15568:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15553:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15553:19:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value6", - "nodeType": "YulIdentifier", - "src": "15588:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15581:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15581:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "15574:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15574:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15546:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15546:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15546:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_rational_0_by_1_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15082:9:70", - "type": "" - }, - { - "name": "value6", - "nodeType": "YulTypedName", - "src": "15093:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "15101:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "15109:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "15117:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "15125:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15133:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15141:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "15152:4:70", - "type": "" - } - ], - "src": "14873:730:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15656:77:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15666:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "15677:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "15680:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15673:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15673:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "15666:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15705:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "15707:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "15707:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15707:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "15697:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "15700:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "15694:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "15694:10:70" - }, - "nodeType": "YulIf", - "src": "15691:36:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "15639:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "15642:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "15648:3:70", - "type": "" - } - ], - "src": "15608:125:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15867:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15877:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15889:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15900:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15885:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15885:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "15877:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15919:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15934:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15950:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15955:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "15946:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15946:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15959:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15942:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15942:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15930:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15930:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15912:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15912:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15912:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15983:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15994:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15979:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15979:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15999:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15972:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15972:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15972:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15828:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15839:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15847:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "15858:4:70", - "type": "" - } - ], - "src": "15738:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16095:167:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "16141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "16143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "16116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "16108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16108:32:70" - }, - "nodeType": "YulIf", - "src": "16105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "16166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "16179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "16179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "16170:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "16226:5:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "16204:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "16204:28:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16204:28:70" - }, - { - "nodeType": "YulAssignment", - "src": "16241:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "16251:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16241:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16061:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "16072:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16084:6:70", - "type": "" - } - ], - "src": "16017:245:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16452:271:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "16462:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16474:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16485:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16470:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16470:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "16462:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "16498:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16516:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16521:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "16512:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16512:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16525:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16508:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16508:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "16502:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16543:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16558:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16566:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16554:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16554:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16536:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16536:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16536:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16590:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16601:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16586:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16586:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16610:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16618:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16606:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16606:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16579:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16579:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16579:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16642:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16653:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16638:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16638:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "16662:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16670:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16658:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16658:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16631:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16631:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16631:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16694:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16705:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16690:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16690:18:70" - }, - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "16710:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16683:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16683:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16683:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16397:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "16408:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "16416:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16424:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16432:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16443:4:70", - "type": "" - } - ], - "src": "16267:456:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16865:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "16875:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16887:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16898:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16883:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16883:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "16875:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16917:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16932:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16948:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16953:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "16944:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16944:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16957:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16940:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16940:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16928:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16928:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16910:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16910:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16910:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16981:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16992:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16977:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16977:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16997:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16970:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16970:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16970:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16826:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16837:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16845:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16856:4:70", - "type": "" - } - ], - "src": "16728:282:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17063:149:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "17073:44:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17083:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "17077:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "17126:34:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "17141:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17144:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17137:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17137:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "17153:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17156:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17149:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17149:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17133:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17133:27:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "17126:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17184:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "17186:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "17186:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17186:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "17175:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17180:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "17172:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "17172:11:70" - }, - "nodeType": "YulIf", - "src": "17169:37:70" - } - ] - }, - "name": "checked_add_t_uint128", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "17046:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "17049:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "17055:3:70", - "type": "" - } - ], - "src": "17015:197:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17266:151:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "17276:44:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17286:34:70", - "type": "", - "value": "0xffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "17280:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "17329:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "17345:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17348:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17341:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17341:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "17357:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17360:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17353:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17353:10:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "17337:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17337:27:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "17329:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17389:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "17391:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "17391:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17391:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "17379:4:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "17385:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "17376:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "17376:12:70" - }, - "nodeType": "YulIf", - "src": "17373:38:70" - } - ] - }, - "name": "checked_sub_t_uint128", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "17248:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "17251:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "17257:4:70", - "type": "" - } - ], - "src": "17217:200:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17454:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17471:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17478:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17483:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "17474:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17474:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17464:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17464:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17464:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17511:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17514:4:70", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17504:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17504:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17504:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17535:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17538:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17528:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17528:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17528:15:70" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "17422:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17659:222:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "17669:51:70", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nodeType": "YulIdentifier", - "src": "17708:11:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "17695:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "17695:25:70" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nodeType": "YulTypedName", - "src": "17673:18:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17809:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17818:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17821:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "17811:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17811:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17811:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nodeType": "YulIdentifier", - "src": "17743:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "17771:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "17771:14:70" - }, - { - "name": "base_ref", - "nodeType": "YulIdentifier", - "src": "17787:8:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "17767:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17767:29:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17802:2:70", - "type": "", - "value": "62" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "17798:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17798:7:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17763:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17763:43:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "17739:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17739:68:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "17732:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17732:76:70" - }, - "nodeType": "YulIf", - "src": "17729:96:70" - }, - { - "nodeType": "YulAssignment", - "src": "17834:41:70", - "value": { - "arguments": [ - { - "name": "base_ref", - "nodeType": "YulIdentifier", - "src": "17846:8:70" - }, - { - "name": "rel_offset_of_tail", - "nodeType": "YulIdentifier", - "src": "17856:18:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17842:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17842:33:70" - }, - "variableNames": [ - { - "name": "addr", - "nodeType": "YulIdentifier", - "src": "17834:4:70" - } - ] - } - ] - }, - "name": "access_calldata_tail_t_struct$_MultiCall_$14040_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nodeType": "YulTypedName", - "src": "17624:8:70", - "type": "" - }, - { - "name": "ptr_to_tail", - "nodeType": "YulTypedName", - "src": "17634:11:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nodeType": "YulTypedName", - "src": "17650:4:70", - "type": "" - } - ], - "src": "17554:327:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17980:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "17990:51:70", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nodeType": "YulIdentifier", - "src": "18029:11:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "18016:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "18016:25:70" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nodeType": "YulTypedName", - "src": "17994:18:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18130:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18139:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18142:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18132:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18132:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18132:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nodeType": "YulIdentifier", - "src": "18064:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "18092:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "18092:14:70" - }, - { - "name": "base_ref", - "nodeType": "YulIdentifier", - "src": "18108:8:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18088:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18088:29:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18123:2:70", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "18119:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18119:7:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18084:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18084:43:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "18060:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18060:68:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "18053:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18053:76:70" - }, - "nodeType": "YulIf", - "src": "18050:96:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "18155:47:70", - "value": { - "arguments": [ - { - "name": "base_ref", - "nodeType": "YulIdentifier", - "src": "18173:8:70" - }, - { - "name": "rel_offset_of_tail", - "nodeType": "YulIdentifier", - "src": "18183:18:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18169:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18169:33:70" - }, - "variables": [ - { - "name": "addr_1", - "nodeType": "YulTypedName", - "src": "18159:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "18211:30:70", - "value": { - "arguments": [ - { - "name": "addr_1", - "nodeType": "YulIdentifier", - "src": "18234:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "18221:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "18221:20:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "18211:6:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18284:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18293:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18296:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18286:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18286:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18286:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "18256:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18264:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "18253:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "18253:30:70" - }, - "nodeType": "YulIf", - "src": "18250:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "18309:25:70", - "value": { - "arguments": [ - { - "name": "addr_1", - "nodeType": "YulIdentifier", - "src": "18321:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18329:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18317:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18317:17:70" - }, - "variableNames": [ - { - "name": "addr", - "nodeType": "YulIdentifier", - "src": "18309:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18385:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18394:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18397:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "18387:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18387:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18387:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "addr", - "nodeType": "YulIdentifier", - "src": "18350:4:70" - }, - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "18360:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "18360:14:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "18376:6:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18356:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18356:27:70" - } - ], - "functionName": { - "name": "sgt", - "nodeType": "YulIdentifier", - "src": "18346:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18346:38:70" - }, - "nodeType": "YulIf", - "src": "18343:58:70" - } - ] - }, - "name": "access_calldata_tail_t_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nodeType": "YulTypedName", - "src": "17937:8:70", - "type": "" - }, - { - "name": "ptr_to_tail", - "nodeType": "YulTypedName", - "src": "17947:11:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nodeType": "YulTypedName", - "src": "17963:4:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "17969:6:70", - "type": "" - } - ], - "src": "17886:521:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18512:223:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "18522:29:70", - "value": { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "18545:5:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "18532:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "18532:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "18526:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "18560:30:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18574:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18579:10:70", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18570:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18570:20:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "18564:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "18599:20:70", - "value": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "18612:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "18616:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "18608:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18608:11:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "18599:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18650:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "18664:55:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "18681:2:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18693:1:70", - "type": "", - "value": "3" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18700:1:70", - "type": "", - "value": "4" - }, - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "18703:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18696:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18696:11:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18689:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18689:19:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "18710:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18685:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18685:28:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "18677:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18677:37:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "18716:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "18673:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18673:46:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "18664:5:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "18634:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18639:1:70", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "18631:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "18631:10:70" - }, - "nodeType": "YulIf", - "src": "18628:101:70" - } - ] - }, - "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "18487:5:70", - "type": "" - }, - { - "name": "len", - "nodeType": "YulTypedName", - "src": "18494:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "18502:5:70", - "type": "" - } - ], - "src": "18412:323:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18863:161:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "18873:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18885:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18896:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18881:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18881:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "18873:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18915:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "18930:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18946:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18951:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "18942:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18942:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18955:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "18938:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18938:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "18926:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18926:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18908:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18908:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18908:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18979:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18990:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18975:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18975:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "19009:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "19002:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19002:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "18995:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18995:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18968:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18968:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18968:50:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "18824:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "18835:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "18843:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "18854:4:70", - "type": "" - } - ], - "src": "18740:284:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19309:442:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "19319:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19331:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19342:3:70", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19327:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19327:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "19319:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "19355:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19373:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19378:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "19369:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19369:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19382:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "19365:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19365:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "19359:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19400:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "19415:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "19423:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "19411:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19411:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19393:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19393:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19393:34:70" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "19466:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19478:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19489:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19474:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19474:18:70" - } - ], - "functionName": { - "name": "abi_encode_enum_ClosureAction", - "nodeType": "YulIdentifier", - "src": "19436:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "19436:57:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19436:57:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19513:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19524:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19509:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "19529:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19502:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19502:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19502:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19556:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19567:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19552:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19552:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "19576:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "19584:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "19572:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19572:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19545:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19545:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19545:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19608:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19619:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19604:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19604:19:70" - }, - { - "arguments": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "19629:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "19637:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "19625:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19625:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19597:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19597:44:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19597:44:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19661:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19672:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19657:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19657:19:70" - }, - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "19678:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19650:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19650:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19650:35:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19705:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19716:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19701:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19701:19:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value6", - "nodeType": "YulIdentifier", - "src": "19736:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "19729:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19729:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "19722:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19722:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19694:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19694:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19694:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_uint256_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19230:9:70", - "type": "" - }, - { - "name": "value6", - "nodeType": "YulTypedName", - "src": "19241:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "19249:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "19257:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "19265:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "19273:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "19281:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19289:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "19300:4:70", - "type": "" - } - ], - "src": "19029:722:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19930:229:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19947:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19958:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19940:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19940:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19940:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19981:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19992:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19977:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19977:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19997:2:70", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19970:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19970:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19970:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20020:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20031:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20016:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20016:18:70" - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031", - "kind": "string", - "nodeType": "YulLiteral", - "src": "20036:34:70", - "type": "", - "value": "SafeCast: value doesn't fit in 1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20009:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20009:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20009:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20091:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20102:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20087:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20087:18:70" - }, - { - "hexValue": "32382062697473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "20107:9:70", - "type": "", - "value": "28 bits" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20080:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20080:37:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20080:37:70" - }, - { - "nodeType": "YulAssignment", - "src": "20126:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20138:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20149:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20134:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20134:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "20126:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19907:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "19921:4:70", - "type": "" - } - ], - "src": "19756:403:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20294:201:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "20332:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20341:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20344:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "20334:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20334:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20334:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nodeType": "YulIdentifier", - "src": "20310:10:70" - }, - { - "name": "endIndex", - "nodeType": "YulIdentifier", - "src": "20322:8:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20307:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20307:24:70" - }, - "nodeType": "YulIf", - "src": "20304:44:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20381:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20390:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20393:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "20383:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20383:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20383:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "endIndex", - "nodeType": "YulIdentifier", - "src": "20363:8:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "20373:6:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20360:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20360:20:70" - }, - "nodeType": "YulIf", - "src": "20357:40:70" - }, - { - "nodeType": "YulAssignment", - "src": "20406:36:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "20423:6:70" - }, - { - "name": "startIndex", - "nodeType": "YulIdentifier", - "src": "20431:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20419:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20419:23:70" - }, - "variableNames": [ - { - "name": "offsetOut", - "nodeType": "YulIdentifier", - "src": "20406:9:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "20451:38:70", - "value": { - "arguments": [ - { - "name": "endIndex", - "nodeType": "YulIdentifier", - "src": "20468:8:70" - }, - { - "name": "startIndex", - "nodeType": "YulIdentifier", - "src": "20478:10:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "20464:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20464:25:70" - }, - "variableNames": [ - { - "name": "lengthOut", - "nodeType": "YulIdentifier", - "src": "20451:9:70" - } - ] - } - ] - }, - "name": "calldata_array_index_range_access_t_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "20228:6:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "20236:6:70", - "type": "" - }, - { - "name": "startIndex", - "nodeType": "YulTypedName", - "src": "20244:10:70", - "type": "" - }, - { - "name": "endIndex", - "nodeType": "YulTypedName", - "src": "20256:8:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "offsetOut", - "nodeType": "YulTypedName", - "src": "20269:9:70", - "type": "" - }, - { - "name": "lengthOut", - "nodeType": "YulTypedName", - "src": "20280:9:70", - "type": "" - } - ], - "src": "20164:331:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20532:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20549:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20556:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20561:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "20552:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20552:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20542:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20542:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20542:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20589:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20592:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20582:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20582:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20582:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20613:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20616:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "20606:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20606:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20606:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "20500:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20678:211:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "20688:21:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20704:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "20698:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "20698:11:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20688:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20718:35:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20740:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20748:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20736:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20736:17:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "20722:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20828:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "20830:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "20830:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20830:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20771:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20783:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "20768:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20768:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20807:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20819:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "20804:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20804:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "20765:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "20765:62:70" - }, - "nodeType": "YulIf", - "src": "20762:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20866:4:70", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "20872:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "20859:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "20859:24:70" - }, - "nodeType": "YulExpressionStatement", - "src": "20859:24:70" - } - ] - }, - "name": "allocate_memory_2690", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "20667:6:70", - "type": "" - } - ], - "src": "20632:257:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "20939:230:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "20949:19:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20965:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "20959:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "20959:9:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20949:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "20977:58:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "20999:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "21015:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21021:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21011:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21011:13:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21030:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "21026:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21026:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "21007:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21007:27:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20995:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20995:40:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "20981:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21110:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "21112:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "21112:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21112:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "21053:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21065:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "21050:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21050:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "21089:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "21101:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "21086:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21086:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "21047:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21047:62:70" - }, - "nodeType": "YulIf", - "src": "21044:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21148:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "21152:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "21141:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21141:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21141:22:70" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "20919:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "20928:6:70", - "type": "" - } - ], - "src": "20894:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21295:1196:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "21305:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21315:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "21309:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21362:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21371:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21374:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21364:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21364:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21364:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "21337:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21346:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "21333:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21333:23:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "21358:2:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "21329:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21329:32:70" - }, - "nodeType": "YulIf", - "src": "21326:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21387:37:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21414:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "21401:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "21401:23:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "21391:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21433:28:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21443:18:70", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "21437:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21488:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21497:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21500:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21490:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21490:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21490:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "21476:6:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "21484:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "21473:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21473:14:70" - }, - "nodeType": "YulIf", - "src": "21470:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21513:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "21527:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "21538:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21523:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21523:22:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "21517:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21593:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21602:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21605:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21595:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21595:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21595:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "21572:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21576:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21568:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21568:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "21583:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "21564:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21564:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "21557:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21557:35:70" - }, - "nodeType": "YulIf", - "src": "21554:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21618:26:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "21641:2:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "21628:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "21628:16:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "21622:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21667:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "21669:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "21669:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21669:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "21659:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "21663:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "21656:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21656:10:70" - }, - "nodeType": "YulIf", - "src": "21653:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21698:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21733:1:70", - "type": "", - "value": "5" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "21736:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "21729:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21729:10:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "21741:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21725:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21725:19:70" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "21709:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "21709:36:70" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "21702:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21754:16:70", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "21767:3:70" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "21758:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "21786:3:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "21791:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "21779:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21779:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21779:15:70" - }, - { - "nodeType": "YulAssignment", - "src": "21803:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "21814:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "21819:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21810:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "21803:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21831:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "21853:2:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21861:1:70", - "type": "", - "value": "6" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "21864:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "21857:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21857:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21849:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21849:19:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "21870:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21845:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21845:28:70" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "21835:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "21905:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21914:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "21917:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "21907:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "21907:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "21907:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "21888:6:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "21896:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "21885:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21885:19:70" - }, - "nodeType": "YulIf", - "src": "21882:39:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "21930:22:70", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "21945:2:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "21949:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21941:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21941:11:70" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "21934:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22019:442:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "22077:74:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "22095:11:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22105:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "22099:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "22130:2:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "22134:2:70" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "22123:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22123:14:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22123:14:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "22044:7:70" - }, - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "22053:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "22040:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22040:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22059:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "22036:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22036:28:70" - }, - "nodeType": "YulIf", - "src": "22033:118:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22164:35:70", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_2690", - "nodeType": "YulIdentifier", - "src": "22177:20:70" - }, - "nodeType": "YulFunctionCall", - "src": "22177:22:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "22168:5:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22212:32:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "22240:3:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "22227:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "22227:17:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "22216:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "22282:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "22257:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "22257:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22257:33:70" - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22310:5:70" - }, - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "22317:7:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "22303:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22303:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22303:22:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22349:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "22356:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22345:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22345:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "22378:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "22383:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22374:12:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "22361:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "22361:26:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "22338:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22338:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22338:50:70" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "22408:3:70" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22413:5:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "22401:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22401:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22401:18:70" - }, - { - "nodeType": "YulAssignment", - "src": "22432:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "22443:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "22448:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22439:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22439:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "22432:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "21972:3:70" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "21977:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "21969:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "21969:15:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "21985:25:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "21987:21:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "21998:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22003:4:70", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "21994:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "21994:14:70" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "21987:3:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "21965:3:70", - "statements": [] - }, - "src": "21961:500:70" - }, - { - "nodeType": "YulAssignment", - "src": "22470:15:70", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "22480:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "22470:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "21261:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "21272:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "21284:6:70", - "type": "" - } - ], - "src": "21174:1317:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "22616:352:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "22662:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22671:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22674:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "22664:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "22664:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22664:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "22637:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22646:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "22633:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22633:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22658:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "22629:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22629:32:70" - }, - "nodeType": "YulIf", - "src": "22626:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22687:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22713:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "22700:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "22700:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "22691:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22757:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "22732:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "22732:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22732:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "22772:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "22782:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "22772:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "22796:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22828:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22839:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22824:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22824:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "22811:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "22811:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "22800:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "22877:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "22852:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "22852:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "22852:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "22894:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "22904:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "22894:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "22920:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "22947:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "22958:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "22943:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "22943:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "22930:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "22930:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "22920:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payablet_address_payablet_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "22566:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "22577:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "22589:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "22597:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "22605:6:70", - "type": "" - } - ], - "src": "22496:472:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "23043:110:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "23089:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23098:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23101:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "23091:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23091:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23091:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "23064:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23073:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "23060:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23060:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23085:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "23056:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23056:32:70" - }, - "nodeType": "YulIf", - "src": "23053:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "23114:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23137:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "23124:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "23124:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "23114:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "23009:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "23020:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "23032:6:70", - "type": "" - } - ], - "src": "22973:180:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "23236:177:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "23282:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23291:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23294:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "23284:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23284:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23284:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "23257:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23266:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "23253:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23253:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23278:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "23249:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23249:32:70" - }, - "nodeType": "YulIf", - "src": "23246:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "23307:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23333:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "23320:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "23320:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "23311:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "23377:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "23352:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "23352:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23352:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "23392:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "23402:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "23392:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payable", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "23202:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "23213:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "23225:6:70", - "type": "" - } - ], - "src": "23158:255:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "23575:218:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "23585:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23597:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23608:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "23593:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23593:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "23585:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "23620:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23638:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23643:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "23634:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23634:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23647:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "23630:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23630:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "23624:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23665:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "23680:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "23688:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "23676:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23676:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "23658:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23658:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23658:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23712:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23723:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "23708:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23708:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "23732:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "23740:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "23728:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23728:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "23701:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23701:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23701:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23764:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23775:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "23760:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23760:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "23780:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "23753:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23753:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23753:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "23528:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "23539:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "23547:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "23555:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "23566:4:70", - "type": "" - } - ], - "src": "23418:375:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "23949:204:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "23959:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "23971:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "23982:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "23967:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "23967:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "23959:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24001:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "24016:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24032:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24037:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "24028:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24028:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24041:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "24024:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24024:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "24012:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24012:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "23994:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "23994:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "23994:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24065:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24076:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24061:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24061:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "24081:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24054:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24054:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24054:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24108:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24119:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24104:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "24138:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "24131:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24131:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "24124:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24124:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24097:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24097:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24097:50:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "23902:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "23913:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "23921:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "23929:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "23940:4:70", - "type": "" - } - ], - "src": "23798:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "24332:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24349:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24360:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24342:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24342:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24383:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24394:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24379:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24379:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24399:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24372:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24372:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24372:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24422:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24433:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24418:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24418:18:70" - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "24438:34:70", - "type": "", - "value": "Address: insufficient balance fo" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24411:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24411:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24411:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24493:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24504:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24489:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24489:18:70" - }, - { - "hexValue": "722063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "24509:8:70", - "type": "", - "value": "r call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24482:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24482:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24482:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "24527:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "24539:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24550:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24535:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24535:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "24527:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "24309:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "24323:4:70", - "type": "" - } - ], - "src": "24158:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "24631:184:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "24641:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24650:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "24645:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "24710:63:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "24735:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "24740:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24731:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24731:11:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "24754:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "24759:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24750:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24750:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "24744:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "24744:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24724:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24724:39:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24724:39:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "24671:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "24674:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "24668:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "24668:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "24682:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "24684:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "24693:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24696:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24689:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24689:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "24684:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "24664:3:70", - "statements": [] - }, - "src": "24660:113:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "24793:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "24798:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "24789:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "24789:16:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "24807:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "24782:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "24782:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "24782:27:70" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "24609:3:70", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "24614:3:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "24619:6:70", - "type": "" - } - ], - "src": "24565:250:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "24957:150:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "24967:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "24987:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "24981:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "24981:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "24971:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "25042:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25050:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25038:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25038:17:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "25057:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "25062:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "25003:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "25003:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25003:66:70" - }, - { - "nodeType": "YulAssignment", - "src": "25078:23:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "25089:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "25094:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25085:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25085:16:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "25078:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "24933:3:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "24938:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "24949:3:70", - "type": "" - } - ], - "src": "24820:287:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "25286:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25303:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25314:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "25296:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "25296:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25296:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25337:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25348:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25333:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25333:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25353:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "25326:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "25326:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25326:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25376:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25387:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25372:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25372:18:70" - }, - { - "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "25392:31:70", - "type": "", - "value": "Address: call to non-contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "25365:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "25365:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25365:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "25433:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25445:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25456:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25441:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25441:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "25433:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "25263:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "25277:4:70", - "type": "" - } - ], - "src": "25112:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "25591:275:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25608:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25619:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "25601:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "25601:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25601:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "25631:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "25651:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "25645:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "25645:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "25635:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25678:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25689:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25674:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25674:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "25694:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "25667:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "25667:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25667:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "25749:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25757:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25745:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25745:15:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25766:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25777:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25762:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25762:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "25782:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "25710:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "25710:79:70" - }, - "nodeType": "YulExpressionStatement", - "src": "25710:79:70" - }, - { - "nodeType": "YulAssignment", - "src": "25798:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "25814:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "25833:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25841:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25829:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25829:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25850:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "25846:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25846:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "25825:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25825:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25810:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "25857:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "25806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "25806:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "25798:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "25560:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "25571:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "25582:4:70", - "type": "" - } - ], - "src": "25470:396:70" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_bool(value_1)\n value1 := value_1\n }\n function abi_decode_uint128(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint128(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_uint128(headStart)\n }\n function abi_decode_array_struct_MultiCall_calldata_dyn_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value3_1, value4_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value3 := value3_1\n value4 := value4_1\n }\n function validator_revert_uint16(value)\n {\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint16(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n let value_2 := calldataload(add(headStart, 96))\n validator_revert_bool(value_2)\n value3 := value_2\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value4_1, value5_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value4 := value4_1\n value5 := value5_1\n }\n function abi_decode_tuple_t_addresst_uint256t_boolt_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_bool(value_1)\n value2 := value_1\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value3_1, value4_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value3 := value3_1\n value4 := value4_1\n }\n function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint128(headStart)\n value1 := abi_decode_uint128(add(headStart, 32))\n }\n function abi_decode_tuple_t_uint256t_addresst_uint16t_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n validator_revert_address(value)\n value1 := value\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_uint16(value_1)\n value2 := value_1\n let value_2 := calldataload(add(headStart, 96))\n validator_revert_uint16(value_2)\n value3 := value_2\n }\n function abi_decode_tuple_t_uint256t_addresst_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n validator_revert_address(value)\n value1 := value\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n let value_1 := calldataload(add(headStart, 96))\n validator_revert_uint16(value_1)\n value4 := value_1\n }\n function abi_encode_tuple_t_uint64_t_uint128__to_t_uint64_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_ICreditManagerV2_$12355__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_struct_MultiCall_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_encode_tuple_t_uint128_t_bool_t_uint40_t_uint16__to_t_uint128_t_bool_t_uint40_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n mstore(add(headStart, 64), and(value2, 0xffffffffff))\n mstore(add(headStart, 96), and(value3, 0xffff))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_uint40(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_uint16_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_uint16(value_1)\n value1 := value_1\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256_t_uint16__to_t_uint256_t_uint16__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xffff))\n }\n function abi_decode_tuple_t_contract$_IPriceOracleV2_$12942_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n }\n function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n tail := add(headStart, 96)\n }\n function abi_encode_enum_ClosureAction(value, pos)\n {\n if iszero(lt(value, 4))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(pos, value)\n }\n function abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_rational_0_by_1_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n abi_encode_enum_ClosureAction(value1, add(headStart, 32))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, _1))\n mstore(add(headStart, 128), and(value4, _1))\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), iszero(iszero(value6)))\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), and(value2, _1))\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_address_t_rational_1_by_1__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function checked_add_t_uint128(x, y) -> sum\n {\n let _1 := 0xffffffffffffffffffffffffffffffff\n sum := add(and(x, _1), and(y, _1))\n if gt(sum, _1) { panic_error_0x11() }\n }\n function checked_sub_t_uint128(x, y) -> diff\n {\n let _1 := 0xffffffffffffffffffffffffffffffff\n diff := sub(and(x, _1), and(y, _1))\n if gt(diff, _1) { panic_error_0x11() }\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function access_calldata_tail_t_struct$_MultiCall_$14040_calldata_ptr(base_ref, ptr_to_tail) -> addr\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(62)))) { revert(0, 0) }\n addr := add(base_ref, rel_offset_of_tail)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes4(array, len) -> value\n {\n let _1 := calldataload(array)\n let _2 := shl(224, 0xffffffff)\n value := and(_1, _2)\n if lt(len, 4)\n {\n value := and(and(_1, shl(shl(3, sub(4, len)), _2)), _2)\n }\n }\n function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n }\n function abi_encode_tuple_t_address_t_enum$_ClosureAction_$11941_t_uint256_t_address_t_address_t_uint256_t_bool__to_t_address_t_uint8_t_uint256_t_address_t_address_t_uint256_t_bool__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 224)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n abi_encode_enum_ClosureAction(value1, add(headStart, 32))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, _1))\n mstore(add(headStart, 128), and(value4, _1))\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), iszero(iszero(value6)))\n }\n function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n mstore(add(headStart, 96), \"28 bits\")\n tail := add(headStart, 128)\n }\n function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n {\n if gt(startIndex, endIndex) { revert(0, 0) }\n if gt(endIndex, length) { revert(0, 0) }\n offsetOut := add(offset, startIndex)\n lengthOut := sub(endIndex, startIndex)\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_2690() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_tuple_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(0, 0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := calldataload(_3)\n if gt(_4, _2) { panic_error_0x41() }\n let dst := allocate_memory(add(shl(5, _4), _1))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let srcEnd := add(add(_3, shl(6, _4)), _1)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_3, _1)\n for { } lt(src, srcEnd) { src := add(src, 0x40) }\n {\n if slt(sub(dataEnd, src), 0x40)\n {\n let _5 := 0\n revert(_5, _5)\n }\n let value := allocate_memory_2690()\n let value_1 := calldataload(src)\n validator_revert_address(value_1)\n mstore(value, value_1)\n mstore(add(value, _1), calldataload(add(src, _1)))\n mstore(dst, value)\n dst := add(dst, _1)\n }\n value0 := dst_1\n }\n function abi_decode_tuple_t_address_payablet_address_payablet_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address_t_uint256_t_bool__to_t_address_t_uint256_t_bool__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), iszero(iszero(value2)))\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "5081": [ - { - "length": 32, - "start": 1663 - }, - { - "length": 32, - "start": 2308 - }, - { - "length": 32, - "start": 2588 - }, - { - "length": 32, - "start": 2752 - }, - { - "length": 32, - "start": 3058 - }, - { - "length": 32, - "start": 3326 - }, - { - "length": 32, - "start": 3537 - }, - { - "length": 32, - "start": 3691 - }, - { - "length": 32, - "start": 3881 - }, - { - "length": 32, - "start": 4192 - }, - { - "length": 32, - "start": 4417 - }, - { - "length": 32, - "start": 4772 - }, - { - "length": 32, - "start": 5028 - }, - { - "length": 32, - "start": 5154 - }, - { - "length": 32, - "start": 5367 - }, - { - "length": 32, - "start": 5564 - }, - { - "length": 32, - "start": 5773 - }, - { - "length": 32, - "start": 6272 - }, - { - "length": 32, - "start": 6449 - }, - { - "length": 32, - "start": 6603 - }, - { - "length": 32, - "start": 6751 - }, - { - "length": 32, - "start": 7066 - }, - { - "length": 32, - "start": 7188 - }, - { - "length": 32, - "start": 7328 - }, - { - "length": 32, - "start": 7653 - }, - { - "length": 32, - "start": 7849 - }, - { - "length": 32, - "start": 7987 - }, - { - "length": 32, - "start": 8285 - }, - { - "length": 32, - "start": 8712 - }, - { - "length": 32, - "start": 9044 - }, - { - "length": 32, - "start": 9665 - }, - { - "length": 32, - "start": 9874 - }, - { - "length": 32, - "start": 11187 - }, - { - "length": 32, - "start": 11582 - }, - { - "length": 32, - "start": 11770 - }, - { - "length": 32, - "start": 12060 - }, - { - "length": 32, - "start": 12203 - }, - { - "length": 32, - "start": 12363 - }, - { - "length": 32, - "start": 13049 - }, - { - "length": 32, - "start": 13263 - }, - { - "length": 32, - "start": 13405 - }, - { - "length": 32, - "start": 13521 - }, - { - "length": 32, - "start": 14874 - }, - { - "length": 32, - "start": 15672 - }, - { - "length": 32, - "start": 16553 - }, - { - "length": 32, - "start": 16768 - }, - { - "length": 32, - "start": 16929 - }, - { - "length": 32, - "start": 17182 - }, - { - "length": 32, - "start": 17374 - }, - { - "length": 32, - "start": 17810 - }, - { - "length": 32, - "start": 17925 - } - ], - "5084": [ - { - "length": 32, - "start": 826 - }, - { - "length": 32, - "start": 2973 - }, - { - "length": 32, - "start": 10292 - }, - { - "length": 32, - "start": 10716 - } - ], - "5087": [ - { - "length": 32, - "start": 2007 - }, - { - "length": 32, - "start": 14235 - } - ], - "5090": [ - { - "length": 32, - "start": 1579 - }, - { - "length": 32, - "start": 6930 - }, - { - "length": 32, - "start": 12955 - } - ], - "5112": [ - { - "length": 32, - "start": 1231 - }, - { - "length": 32, - "start": 4627 - }, - { - "length": 32, - "start": 5946 - }, - { - "length": 32, - "start": 6098 - }, - { - "length": 32, - "start": 8885 - }, - { - "length": 32, - "start": 9181 - }, - { - "length": 32, - "start": 12837 - }, - { - "length": 32, - "start": 14296 - }, - { - "length": 32, - "start": 14519 - }, - { - "length": 32, - "start": 15847 - }, - { - "length": 32, - "start": 15989 - } - ], - "5123": [ - { - "length": 32, - "start": 910 - }, - { - "length": 32, - "start": 9343 - }, - { - "length": 32, - "start": 9481 - } - ], - "5127": [ - { - "length": 32, - "start": 1416 - }, - { - "length": 32, - "start": 10669 - }, - { - "length": 32, - "start": 10836 - } - ], - "5131": [ - { - "length": 32, - "start": 1364 - }, - { - "length": 32, - "start": 13223 - }, - { - "length": 32, - "start": 13582 - }, - { - "length": 32, - "start": 14344 - }, - { - "length": 32, - "start": 14479 - }, - { - "length": 32, - "start": 15804 - }, - { - "length": 32, - "start": 16051 - } - ], - "5134": [ - { - "length": 32, - "start": 678 - }, - { - "length": 32, - "start": 12794 - } - ] - }, - "linkReferences": {}, - "object": "60806040526004361061023a5760003560e01c806382871ace1161012e578063c7de38a6116100ab578063e1d49d7d1161006f578063e1d49d7d146107c5578063eb9606df146107f9578063f9eaee0d14610819578063fc7b9c1814610839578063ffd9b9071461086457600080fd5b8063c7de38a6146106a1578063caa5c23f146106d6578063cff0ab96146106e9578063d9ccbec11461076a578063dfd59465146107a557600080fd5b80639c55a054116100f25780639c55a054146105e4578063a706efc414610604578063b1836d3214610619578063b2f4d3281461064d578063c12c21c01461066d57600080fd5b806382871ace14610504578063860aefcf14610517578063938294a9146105425780639408b63f146105765780639b67ab30146105aa57600080fd5b806350393109116101bc5780635f73fbec116101805780635f73fbec14610477578063601d66f61461048a5780636c8f225d146104aa5780636f307dc3146104bd5780637071b7c5146104f157600080fd5b806350393109146103d057806354fd4d501461041b578063597810341461043e5780635c1ca80f146104515780635d91a0e01461046457600080fd5b806326aac8591161020357806326aac859146103155780633d9287fa146103285780634527d9ce1461035c5780634f0e0ef31461037c5780635019e20a146103b057600080fd5b8062842b571461023f57806308c25f8f1461026157806312de90c91461028157806316f0115b14610294578063256ac915146102e5575b600080fd5b34801561024b57600080fd5b5061025f61025a366004614769565b610884565b005b34801561026d57600080fd5b5061025f61027c3660046147b9565b610902565b61025f61028f36600461481f565b6109d4565b3480156102a057600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102f157600080fd5b5061030561030036600461487a565b6109f8565b60405190151581526020016102dc565b61025f610323366004614897565b610a98565b34801561033457600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561036857600080fd5b5061025f610377366004614919565b610abe565b34801561038857600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156103bc57600080fd5b5061025f6103cb36600461487a565b610b93565b3480156103dc57600080fd5b506003546103fb906001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102dc565b34801561042757600080fd5b5061043060d281565b6040519081526020016102dc565b61025f61044c366004614936565b610d9f565b61025f61045f366004614897565b610ed7565b61025f610472366004614977565b610eec565b61025f6104853660046149fb565b610f13565b34801561049657600080fd5b5061025f6104a5366004614a50565b610f27565b61025f6104b8366004614a83565b610ff3565b3480156104c957600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b61025f6104ff366004614ad6565b611245565b61025f610512366004614977565b61140b565b34801561052357600080fd5b506002546103fb906001600160801b0380821691600160801b90041682565b34801561054e57600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561058257600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b657600080fd5b50600654604080516001600160401b03608084901c1681526001600160801b039092166020830152016102dc565b3480156105f057600080fd5b5061025f6105ff3660046147b9565b611420565b34801561061057600080fd5b5061025f6114f5565b34801561062557600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561065957600080fd5b5061025f610668366004614a50565b6115ba565b34801561067957600080fd5b506102c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ad57600080fd5b506106c16106bc36600461487a565b611686565b604080519283526020830191909152016102dc565b61025f6106e4366004614b49565b611860565b3480156106f557600080fd5b50600154610730906001600160801b03811690600160801b810460ff1690600160881b810464ffffffffff1690600160b01b900461ffff1684565b604080516001600160801b039095168552921515602085015264ffffffffff9091169183019190915261ffff1660608201526080016102dc565b34801561077657600080fd5b50610305610785366004614b8a565b600560209081526000928352604080842090915290825290205460ff1681565b3480156107b157600080fd5b506104306107c036600461487a565b611999565b3480156107d157600080fd5b506103057f000000000000000000000000000000000000000000000000000000000000000081565b34801561080557600080fd5b5061025f610814366004614bb8565b611a5d565b34801561082557600080fd5b5061030561083436600461487a565b611b76565b34801561084557600080fd5b506004546103fb906001600160801b0380821691600160801b90041682565b34801561087057600080fd5b5061025f61087f366004614bdf565b611c9e565b61088c611d6f565b6001600160a01b03821660008181526005602090815260408083203380855290835292819020805460ff191686151590811790915590519081529192917f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a36108fe6001600055565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190614bfc565b6001600160a01b0316336001600160a01b0316146109b55760405163eee4716960e01b815260040160405180910390fd5b600380546001600160801b03928316600160801b029216919091179055565b6109dc611d6f565b6109e884848484611dcd565b6109f26001600055565b50505050565b60405163055ee9b560e01b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614bfc565b6001600160a01b0316141592915050565b610aa0611d6f565b610aad858585858561203b565b610ab76001600055565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190614bfc565b6001600160a01b0316336001600160a01b031614610b715760405163eee4716960e01b815260040160405180910390fd5b6001805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b610b9b611d6f565b7f000000000000000000000000000000000000000000000000000000000000000015610bda57604051635aa6676760e01b815260040160405180910390fd5b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190614bfc565b3360009081526005602090815260408083206001600160a01b038716845290915290205490915060ff16610cac576040516342d83b9360e11b815260040160405180910390fd5b6000610cb782612201565b5090508015610cd957604051637b89c20f60e11b815260040160405180910390fd5b60405163e1998cf960e01b81523360048201526001600160a01b0384811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b50506040516001600160a01b03861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050610d9c6001600055565b50565b610da7611d6f565b610daf612477565b604051633a562dc160e21b81526001600160a01b0384811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015610e1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3e9190614bfc565b9050610e4c84828585612584565b6040516329df0b9360e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b158015610eaf57600080fd5b505af1158015610ec3573d6000803e3d6000fd5b5050505050610ed26001600055565b505050565b610edf611d6f565b610aad8585858585612670565b610ef4611d6f565b610f018686868585612670565b610f0b6001600055565b505050505050565b610f1b611d6f565b610aad85858484611dcd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190614bfc565b6001600160a01b0316336001600160a01b031614610fda5760405163eee4716960e01b815260040160405180910390fd5b6001600160801b03908116600160801b02911617600255565b610ffb611d6f565b6000606461100d61ffff851687614c2f565b6110179190614c46565b905061102281612832565b61102b816128eb565b61103484612933565b61103c612477565b611047816001612aba565b60405163172c48c760e01b8152600060048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063172c48c7906024016040805180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d29190614c68565b61ffff1691506110e6905081612710614c97565b6110f09083614c2f565b6110fa8288614c2f565b11611118576040516329973ddb60e11b815260040160405180910390fd5b604051638fe3f93f60e01b8152600481018390526001600160a01b0386811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af115801561118c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b09190614bfc565b9050806001600160a01b0316866001600160a01b03167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763858760405161120492919091825261ffff16602082015260400190565b60405180910390a361123886827f00000000000000000000000000000000000000000000000000000000000000008a612584565b5050506109f26001600055565b61124d611d6f565b61125685612832565b61125f84612933565b611268856128eb565b611270612477565b61127b856001612aba565b604051638fe3f93f60e01b8152600481018690526001600160a01b0385811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af11580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113139190614bfc565b9050806001600160a01b0316856001600160a01b03167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763888560405161136792919091825261ffff16602082015260400190565b60405180910390a38215611385576113858484878460006001612b8e565b6040516312a6e60360e31b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b5050505050610ab76001600055565b611413611d6f565b610f01868686858561203b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a29190614bfc565b6001600160a01b0316336001600160a01b0316146114d35760405163eee4716960e01b815260040160405180910390fd5b600180546001600160801b0319166001600160801b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115779190614bfc565b6001600160a01b0316336001600160a01b0316146115a85760405163eee4716960e01b815260040160405180910390fd5b600380546001600160801b0319169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163c9190614bfc565b6001600160a01b0316336001600160a01b03161461166d5760405163eee4716960e01b815260040160405180910390fd5b6001600160801b03908116600160801b02911617600455565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d9190614bfc565b905060008061171c8387612f82565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190614caa565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c9190614caa565b6118569190614c46565b9350505050915091565b611868611d6f565b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190614bfc565b90506118fd612477565b811561198e5761191283833384600080612b8e565b6040516312a6e60360e31b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b15801561197557600080fd5b505af1158015611989573d6000803e3d6000fd5b505050505b506108fe6001600055565b6000806119a583611686565b604051630c64865760e21b81526001600160a01b038681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a389190614cc3565b9250829150611a4b905061271084614c2f565b611a559190614c46565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adf9190614bfc565b6001600160a01b0316336001600160a01b031614611b105760405163eee4716960e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000611b4e57604051631437447f60e21b815260040160405180910390fd5b6001805464ffffffffff909216600160881b0264ffffffffff60881b19909216919091179055565b604051630f67c5bd60e41b81526001600160a01b03828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190614caa565b90508015801590611c975750807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c949190614caa565b16155b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d209190614bfc565b6001600160a01b0316336001600160a01b031614611d515760405163eee4716960e01b815260040160405180910390fd5b60018054911515600160801b0260ff60801b19909216919091179055565b600260005403611dc65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b604051633a562dc160e21b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e958b70490602401602060405180830381865afa158015611e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e589190614bfc565b9050611e62612477565b8115611e7857611e788383338460016000612b8e565b6000611e826131e3565b604051630c64865760e21b81526001600160a01b03848116600483015291925060009182917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614cc3565b5060405163046c545b60e31b815291935091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632362a2d890611f75903390600090819083908f908f908490600401614d13565b6020604051808303816000875af1158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190614caa565b506000611fc36131e3565b9050611fcf8285614d62565b811015611fef57604051631e05cdad60e01b815260040160405180910390fd5b611ffa836000612aba565b6040516001600160a01b038a169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a3505050505050505050565b604051633a562dc160e21b81526001600160a01b0386811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa1580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca9190614bfc565b90506001600160a01b0385166120f357604051635919af9760e11b815260040160405180910390fd5b6120fb613297565b61211857604051631f94b32d60e21b815260040160405180910390fd5b600061212382611686565b50905061212e612477565b600061213a60016132d9565b905083156121525761215285858a8660016000612b8e565b801561218c576001546127109061217490600160b01b900461ffff1684614c2f565b61217e9190614c46565b915061218a60006132d9565b505b600061219d83858b8b8b6001613374565b9050876001600160a01b0316336001600160a01b03168a6001600160a01b03167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b86707846040516121ee91815260200190565b60405180910390a4505050505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122889190614bfc565b90506000806122978387612f82565b604051631ebec04160e21b8152600481018390526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa15801561230b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232f9190614caa565b604051630c64865760e21b81526001600160a01b0388811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c90602401606060405180830381865afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190614cc3565b604051630f9a650360e41b8152600481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529194506000935061271092509087169063f9a6503090604401602060405180830381865afa158015612439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245d9190614caa565b6124679190614c2f565b9092109794965093945050505050565b3415612582577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124d857600080fd5b505af11580156124ec573d6000803e3d6000fd5b505060405163a9059cbb60e01b81523360048201523460248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316935063a9059cbb925060440190506020604051808303816000875af115801561255e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c9190614d75565b565b61258d846136cf565b60405163830aa74560e01b81523360048201526001600160a01b0384811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b15801561260557600080fd5b505af1158015612619573d6000803e3d6000fd5b50505050816001600160a01b0316846001600160a01b03167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f8360405161266291815260200190565b60405180910390a350505050565b604051633a562dc160e21b81526001600160a01b0386811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa1580156126db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ff9190614bfc565b90506001600160a01b03851661272857604051635919af9760e11b815260040160405180910390fd5b60008061273483612201565b915091508161275657604051631fdd676f60e01b815260040160405180910390fd5b61275e612477565b600061276a60016132d9565b905084156127825761278286868b8760016000612b8e565b80156127bc57600154612710906127a490600160b01b900461ffff1684614c2f565b6127ae9190614c46565b91506127ba60006132d9565b505b60006127cd83868c8c8c6000613374565b9050886001600160a01b0316336001600160a01b03168b6001600160a01b03167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161281e91815260200190565b60405180910390a450505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000610d9c576001546001600160801b039081169081146108fe57600654608081901c906001600160801b031660006001600160401b038316431461289657846128a9565b6128a96001600160801b03831686614d62565b9050838111156128cc576040516333af8d2b60e11b815260040160405180910390fd5b610ab76128d88261372a565b6001600160801b03164360801b17600655565b6002546001600160801b03168110806129155750600254600160801b90046001600160801b031681115b15610d9c576040516333859e6560e21b815260040160405180910390fd5b600154600160801b900460ff161561295e57604051637615238d60e01b815260040160405180910390fd5b612966613297565b156129845760405163cba1df9b60e01b815260040160405180910390fd5b61298d81613797565b156129ab576040516301e68b8960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615612ab1577f00000000000000000000000000000000000000000000000000000000000000008015612a105750336001600160a01b03821614155b15612a2e57604051635aa6676760e01b815260040160405180910390fd5b604051632770a7eb60e21b81526001600160a01b038281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b505050505b610d9c816136cf565b81156108fe57604080518082019091526004546001600160801b038082168352600160801b9091041660208201528115612b4657612af78361372a565b81518290612b06908390614d92565b6001600160801b0390811690915260208301518351908216911611159050612b41576040516333859e6560e21b815260040160405180910390fd5b612b6b565b612b4f8361372a565b81518290612b5e908390614db9565b6001600160801b03169052505b80516020909101516001600160801b03908116600160801b029116176004555050565b60405163e1998cf960e01b81526001600160a01b0385811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015612bf757600080fd5b505af1158015612c0b573d6000803e3d6000fd5b50506040516001600160a01b03871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a260608560005b81811015612ebc5736898983818110612c6457612c64614dd9565b9050602002810190612c769190614def565b90506004612c876020830183614e0f565b90501015612ca857604051637158728360e11b815260040160405180910390fd5b30612cb6602083018361487a565b6001600160a01b031603612d3a578515612d17576000612cd96020830183614e0f565b612ce291614e55565b90506001600160e01b031981166381314b5960e01b14612d1557604051635fb9107f60e01b815260040160405180910390fd5b505b612d308888612d296020850185614e0f565b898961392d565b9095509350612eb3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff687543612d78602085018561487a565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190614bfc565b6001600160a01b03161480612e3257506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612e27602083018361487a565b6001600160a01b0316145b15612e505760405163fc1a554360e01b815260040160405180910390fd5b612eb1612e606020830183614e0f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ea292505050602084018461487a565b6001600160a01b031690613bed565b505b50600101612c49565b50815115612ece57612ece8286613c31565b6040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a160405163e1998cf960e01b81523060048201526001600160a01b0387811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050505050505050505050565b604051638991b2f160e01b81526001600160a01b038281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015612ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130169190614caa565b90505b8082116131da57808216156131ce5760405163e75538c760e01b81526004810183905260009081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015613091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b59190614c68565b6040516370a0823160e01b81526001600160a01b038a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015613104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131289190614caa565b905060018111156131ca57604051630f9a650360e41b8152600481018290526001600160a01b038481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a89190614caa565b9788019790506131bc61ffff841682614c2f565b6131c69088614d62565b9650505b5050505b600182901b9150613019565b50509250929050565b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561326e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132929190614caa565b905090565b60007f00000000000000000000000000000000000000000000000000000000000000008015613292575050600154600160881b900464ffffffffff1642101590565b60405163eb99c2bf60e01b815233600482015281151560248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063eb99c2bf906044016020604051808303816000875af115801561334a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336e9190614d75565b92915050565b60008061338086613797565b9050801561342c5760405163e1998cf960e01b81526001600160a01b0387811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561341357600080fd5b505af1158015613427573d6000803e3d6000fd5b505050505b60006134366131e3565b604051630c64865760e21b81526001600160a01b038a8116600483015291925060009182917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa1580156134a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ca9190614cc3565b50915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632362a2d86000861161350c578a61352e565b7f00000000000000000000000000000000000000000000000000000000000000005b8861353a57600161353d565b60025b8e338d8d60006040518863ffffffff1660e01b81526004016135659796959493929190614d13565b6020604051808303816000875af1158015613584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a89190614caa565b945060006135b46131e3565b905060006135c28386614d62565b82106135cf5760006135e4565b816135da8487614d62565b6135e49190614c97565b90508015613695576001805460ff60801b1916600160801b1790556136088161372a565b600380546000906136239084906001600160801b0316614d92565b82546101009290920a6001600160801b03818102199093169183160217909155600354600160801b8104821691161115905061366157613661613d36565b6040518181527f039b20af1a8da82c3d37dd7b0fe81a987532ffca72fbd69951823f7c40511f2d9060200160405180910390a15b6136a0846000612aba565b6000861180156136b05750600187115b156136bf576136bf8b87613da5565b5050505050509695505050505050565b336001600160a01b0382161480159061370c57503360009081526005602090815260408083206001600160a01b038516845290915290205460ff16155b15610d9c576040516342d83b9360e11b815260040160405180910390fd5b60006001600160801b038211156137935760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401611dbd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000008015613873575060405163100a3b7760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015283811660248301527f00000000000000000000000000000000000000000000000000000000000000001690634028eddc90604401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138739190614d75565b15613928576040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156138fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139229190614caa565b60010190505b919050565b8181600061393b8688614e55565b9050637eceb4a760e01b6001600160e01b03198216016139a2578151156139755760405163e61eedf560e01b815260040160405180910390fd5b613982866004818a614e85565b81019061398f9190614f1d565b915061399b8289613f5a565b9150613be1565b6329a1fbf360e21b6001600160e01b0319821601613a9b57600080806139cb896004818d614e85565b8101906139d89190614936565b925092509250613a93838d6001600160a01b0316856001600160a01b031614613a8a57604051633a562dc160e21b81526001600160a01b0386811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a859190614bfc565b613a8c565b8c5b8484612584565b505050613be1565b63d48384ef60e01b6001600160e01b0319821601613ae657600192506000613ac6876004818b614e85565b810190613ad39190614fe7565b9050613ae08a8a83614031565b50613be1565b63d5845e0960e01b6001600160e01b0319821601613b46578215613b1d57604051631816195560e31b815260040160405180910390fd5b6000613b2c876004818b614e85565b810190613b399190614fe7565b9050613ae08a8a8361415e565b631cb7b7bb60e11b6001600160e01b0319821601613b87576000613b6d876004818b614e85565b810190613b7a919061487a565b9050613ae08a8a836142f7565b633707616760e21b6001600160e01b0319821601613bc8576000613bae876004818b614e85565b810190613bbb919061487a565b9050613ae08a8a836143b7565b604051630f4f3f3d60e11b815260040160405180910390fd5b50965096945050505050565b6060611c97838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250614495565b815160005b818110156109f257838181518110613c5057613c50614dd9565b602002602001015160200151848281518110613c6e57613c6e614dd9565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015613cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce59190614caa565b1015613d2e57838181518110613cfd57613cfd614dd9565b602090810291909101015151604051632f42bd8760e01b81526001600160a01b039091166004820152602401611dbd565b600101613c36565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d9157600080fd5b505af11580156109f2573d6000803e3d6000fd5b6040516370a0823160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e549190614caa565b905081811115610ed2576040516309e3896160e41b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152848116602483015260018484030160448301819052917f000000000000000000000000000000000000000000000000000000000000000090911690639e38961090606401600060405180830381600087803b158015613ef957600080fd5b505af1158015613f0d573d6000803e3d6000fd5b50505050836001600160a01b03167fe2655809b4fc2a2dffc14ecf5aad9dbf5a9703a5bb2b19ab7ae6afa29ef0c7c882604051613f4c91815260200190565b60405180910390a250505050565b815160609060005b8181101561402857848181518110613f7c57613f7c614dd9565b6020908102919091010151516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015613fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ff39190614caa565b85828151811061400557614005614dd9565b602002602001015160200181815161401d9190614d62565b905250600101613f62565b50929392505050565b600154600160801b900460ff161561405c57604051637615238d60e01b815260040160405180910390fd5b61406581612832565b61406e82614570565b614079816001612aba565b604051634a67839d60e11b81526001600160a01b03838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af11580156140f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141189190614caa565b9050614123816128eb565b836001600160a01b03167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c4583604051613f4c91815260200190565b604051630c64865760e21b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690633192195c90602401606060405180830381865afa1580156141c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ed9190614cc3565b5050604051634a67839d60e11b81526001600160a01b038581166004830152602482018590526000604483018190529293507f000000000000000000000000000000000000000000000000000000000000000016906394cf073a906064016020604051808303816000875af115801561426a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428e9190614caa565b9050614299816128eb565b6142ad6142a68284614c97565b6000612aba565b846001600160a01b03167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a846040516142e891815260200190565b60405180910390a25050505050565b60405163028f1f8b60e51b81526001600160a01b03838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561436257600080fd5b505af1158015614376573d6000803e3d6000fd5b50506040516001600160a01b038085169350861691507fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8790600090a3505050565b6040516306c7ce7760e11b81526001600160a01b03838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee906044016020604051808303816000875af1158015614427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444b9190614d75565b15610ed257806001600160a01b0316836001600160a01b03167f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d6097760405160405180910390a3505050565b6060824710156144f65760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611dbd565b600080866001600160a01b031685876040516145129190615024565b60006040518083038185875af1925050503d806000811461454f576040519150601f19603f3d011682016040523d82523d6000602084013e614554565b606091505b5091509150614565878383876146a8565b979650505050505050565b604051638991b2f160e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638991b2f190602401602060405180830381865afa1580156145db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145ff9190614caa565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015614661573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146859190614caa565b905081811615610ed257604051635754baed60e11b815260040160405180910390fd5b60608315614717578251600003614710576001600160a01b0385163b6147105760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611dbd565b5081611a55565b611a55838381511561472c5781518083602001fd5b8060405162461bcd60e51b8152600401611dbd9190615036565b6001600160a01b0381168114610d9c57600080fd5b8015158114610d9c57600080fd5b6000806040838503121561477c57600080fd5b823561478781614746565b915060208301356147978161475b565b809150509250929050565b80356001600160801b038116811461392857600080fd5b6000602082840312156147cb57600080fd5b611c97826147a2565b60008083601f8401126147e657600080fd5b5081356001600160401b038111156147fd57600080fd5b6020830191508360208260051b850101111561481857600080fd5b9250929050565b6000806000806060858703121561483557600080fd5b843561484081614746565b93506020850135925060408501356001600160401b0381111561486257600080fd5b61486e878288016147d4565b95989497509550505050565b60006020828403121561488c57600080fd5b8135611c9781614746565b6000806000806000608086880312156148af57600080fd5b85356148ba81614746565b945060208601356148ca81614746565b93506040860135925060608601356001600160401b038111156148ec57600080fd5b6148f8888289016147d4565b969995985093965092949392505050565b61ffff81168114610d9c57600080fd5b60006020828403121561492b57600080fd5b8135611c9781614909565b60008060006060848603121561494b57600080fd5b833561495681614746565b9250602084013561496681614746565b929592945050506040919091013590565b60008060008060008060a0878903121561499057600080fd5b863561499b81614746565b955060208701356149ab81614746565b94506040870135935060608701356149c28161475b565b925060808701356001600160401b038111156149dd57600080fd5b6149e989828a016147d4565b979a9699509497509295939492505050565b600080600080600060808688031215614a1357600080fd5b8535614a1e81614746565b9450602086013593506040860135614a358161475b565b925060608601356001600160401b038111156148ec57600080fd5b60008060408385031215614a6357600080fd5b614a6c836147a2565b9150614a7a602084016147a2565b90509250929050565b60008060008060808587031215614a9957600080fd5b843593506020850135614aab81614746565b92506040850135614abb81614909565b91506060850135614acb81614909565b939692955090935050565b600080600080600060808688031215614aee57600080fd5b853594506020860135614b0081614746565b935060408601356001600160401b03811115614b1b57600080fd5b614b27888289016147d4565b9094509250506060860135614b3b81614909565b809150509295509295909350565b60008060208385031215614b5c57600080fd5b82356001600160401b03811115614b7257600080fd5b614b7e858286016147d4565b90969095509350505050565b60008060408385031215614b9d57600080fd5b8235614ba881614746565b9150602083013561479781614746565b600060208284031215614bca57600080fd5b813564ffffffffff81168114611c9757600080fd5b600060208284031215614bf157600080fd5b8135611c978161475b565b600060208284031215614c0e57600080fd5b8151611c9781614746565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761336e5761336e614c19565b600082614c6357634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215614c7b57600080fd5b8251614c8681614746565b602084015190925061479781614909565b8181038181111561336e5761336e614c19565b600060208284031215614cbc57600080fd5b5051919050565b600080600060608486031215614cd857600080fd5b8351925060208401519150604084015190509250925092565b60048110614d0f57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b03888116825260e0820190614d32602084018a614cf1565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b8082018082111561336e5761336e614c19565b600060208284031215614d8757600080fd5b8151611c978161475b565b6001600160801b03818116838216019080821115614db257614db2614c19565b5092915050565b6001600160801b03828116828216039080821115614db257614db2614c19565b634e487b7160e01b600052603260045260246000fd5b60008235603e19833603018112614e0557600080fd5b9190910192915050565b6000808335601e19843603018112614e2657600080fd5b8301803591506001600160401b03821115614e4057600080fd5b60200191503681900382131561481857600080fd5b6001600160e01b03198135818116916004851015614e7d5780818660040360031b1b83161692505b505092915050565b60008085851115614e9557600080fd5b83861115614ea257600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715614ee757614ee7614eaf565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614f1557614f15614eaf565b604052919050565b60006020808385031215614f3057600080fd5b82356001600160401b0380821115614f4757600080fd5b818501915085601f830112614f5b57600080fd5b813581811115614f6d57614f6d614eaf565b614f7b848260051b01614eed565b818152848101925060069190911b830184019087821115614f9b57600080fd5b928401925b818410156145655760408489031215614fb95760008081fd5b614fc1614ec5565b8435614fcc81614746565b81528486013586820152835260409093019291840191614fa0565b600060208284031215614ff957600080fd5b5035919050565b60005b8381101561501b578181015183820152602001615003565b50506000910152565b60008251614e05818460208701615000565b6020815260008251806020840152615055816040850160208701615000565b601f01601f1916919091016040019291505056fea26469706673582212205d91950770275e8a7f227e7315186a1d146eb499a68be6c5e037fd3c5c446d8b64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x23A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82871ACE GT PUSH2 0x12E JUMPI DUP1 PUSH4 0xC7DE38A6 GT PUSH2 0xAB JUMPI DUP1 PUSH4 0xE1D49D7D GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE1D49D7D EQ PUSH2 0x7C5 JUMPI DUP1 PUSH4 0xEB9606DF EQ PUSH2 0x7F9 JUMPI DUP1 PUSH4 0xF9EAEE0D EQ PUSH2 0x819 JUMPI DUP1 PUSH4 0xFC7B9C18 EQ PUSH2 0x839 JUMPI DUP1 PUSH4 0xFFD9B907 EQ PUSH2 0x864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC7DE38A6 EQ PUSH2 0x6A1 JUMPI DUP1 PUSH4 0xCAA5C23F EQ PUSH2 0x6D6 JUMPI DUP1 PUSH4 0xCFF0AB96 EQ PUSH2 0x6E9 JUMPI DUP1 PUSH4 0xD9CCBEC1 EQ PUSH2 0x76A JUMPI DUP1 PUSH4 0xDFD59465 EQ PUSH2 0x7A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9C55A054 GT PUSH2 0xF2 JUMPI DUP1 PUSH4 0x9C55A054 EQ PUSH2 0x5E4 JUMPI DUP1 PUSH4 0xA706EFC4 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0xB1836D32 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0xB2F4D328 EQ PUSH2 0x64D JUMPI DUP1 PUSH4 0xC12C21C0 EQ PUSH2 0x66D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x82871ACE EQ PUSH2 0x504 JUMPI DUP1 PUSH4 0x860AEFCF EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x938294A9 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0x9408B63F EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x9B67AB30 EQ PUSH2 0x5AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50393109 GT PUSH2 0x1BC JUMPI DUP1 PUSH4 0x5F73FBEC GT PUSH2 0x180 JUMPI DUP1 PUSH4 0x5F73FBEC EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x601D66F6 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0x6C8F225D EQ PUSH2 0x4AA JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x4BD JUMPI DUP1 PUSH4 0x7071B7C5 EQ PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x50393109 EQ PUSH2 0x3D0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x41B JUMPI DUP1 PUSH4 0x59781034 EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x5C1CA80F EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x5D91A0E0 EQ PUSH2 0x464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26AAC859 GT PUSH2 0x203 JUMPI DUP1 PUSH4 0x26AAC859 EQ PUSH2 0x315 JUMPI DUP1 PUSH4 0x3D9287FA EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4527D9CE EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x5019E20A EQ PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0x842B57 EQ PUSH2 0x23F JUMPI DUP1 PUSH4 0x8C25F8F EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x12DE90C9 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x256AC915 EQ PUSH2 0x2E5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x25A CALLDATASIZE PUSH1 0x4 PUSH2 0x4769 JUMP JUMPDEST PUSH2 0x884 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x47B9 JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x481F JUMP JUMPDEST PUSH2 0x9D4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x300 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x9F8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x323 CALLDATASIZE PUSH1 0x4 PUSH2 0x4897 JUMP JUMPDEST PUSH2 0xA98 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x377 CALLDATASIZE PUSH1 0x4 PUSH2 0x4919 JUMP JUMPDEST PUSH2 0xABE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x3CB CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x427 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x430 PUSH1 0xD2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x4936 JUMP JUMPDEST PUSH2 0xD9F JUMP JUMPDEST PUSH2 0x25F PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x4897 JUMP JUMPDEST PUSH2 0xED7 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x4977 JUMP JUMPDEST PUSH2 0xEEC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x485 CALLDATASIZE PUSH1 0x4 PUSH2 0x49FB JUMP JUMPDEST PUSH2 0xF13 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x4A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A50 JUMP JUMPDEST PUSH2 0xF27 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x4B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A83 JUMP JUMPDEST PUSH2 0xFF3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x4FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4AD6 JUMP JUMPDEST PUSH2 0x1245 JUMP JUMPDEST PUSH2 0x25F PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x4977 JUMP JUMPDEST PUSH2 0x140B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x523 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x80 DUP5 SWAP1 SHR AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x47B9 JUMP JUMPDEST PUSH2 0x1420 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x14F5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x625 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x659 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x668 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A50 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x679 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C8 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6C1 PUSH2 0x6BC CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x2DC JUMP JUMPDEST PUSH2 0x25F PUSH2 0x6E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B49 JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD PUSH2 0x730 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x80 SHL DUP2 DIV PUSH1 0xFF AND SWAP1 PUSH1 0x1 PUSH1 0x88 SHL DUP2 DIV PUSH5 0xFFFFFFFFFF AND SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP6 AND DUP6 MSTORE SWAP3 ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0xFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x2DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x785 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B8A JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x430 PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1999 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x814 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BB8 JUMP JUMPDEST PUSH2 0x1A5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x305 PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x487A JUMP JUMPDEST PUSH2 0x1B76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x845 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x3FB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND SWAP2 PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV AND DUP3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x870 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25F PUSH2 0x87F CALLDATASIZE PUSH1 0x4 PUSH2 0x4BDF JUMP JUMPDEST PUSH2 0x1C9E JUMP JUMPDEST PUSH2 0x88C PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP7 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x9B3258BC4904FD6426B99843E206C6C7CDB1FD0F040121C25B71DAFBB3851EE0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x8FE PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x960 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x984 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x9DC PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x9E8 DUP5 DUP5 DUP5 DUP5 PUSH2 0x1DCD JUMP JUMPDEST PUSH2 0x9F2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x55EE9B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x55EE9B5 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA87 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAA0 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x203B JUMP JUMPDEST PUSH2 0xAB7 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB40 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xB71 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0xB0 SHL MUL PUSH2 0xFFFF PUSH1 0xB0 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0xB9B PUSH2 0x1D6F JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x40 MLOAD PUSH4 0x5AA66767 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC65 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND PUSH2 0xCAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x42D83B93 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xCB7 DUP3 PUSH2 0x2201 JUMP JUMPDEST POP SWAP1 POP DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7B89C20F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD56 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 POP CALLER SWAP2 POP PUSH32 0x93C70CC9715BEF0D83EDF2095F3595402279D274F402A73FFC17F1BCB19D863D SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP PUSH2 0xD9C PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0xDA7 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xDAF PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE3E SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0xE4C DUP5 DUP3 DUP6 DUP6 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x29DF0B93 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x29DF0B93 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEC3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xED2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xEDF PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0xEF4 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xF01 DUP7 DUP7 DUP7 DUP6 DUP6 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0xF0B PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xF1B PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xAAD DUP6 DUP6 DUP5 DUP5 PUSH2 0x1DCD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF85 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFA9 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xFDA JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH2 0xFFB PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x64 PUSH2 0x100D PUSH2 0xFFFF DUP6 AND DUP8 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x1017 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP1 POP PUSH2 0x1022 DUP2 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x102B DUP2 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x1034 DUP5 PUSH2 0x2933 JUMP JUMPDEST PUSH2 0x103C PUSH2 0x2477 JUMP JUMPDEST PUSH2 0x1047 DUP2 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x172C48C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x172C48C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D2 SWAP2 SWAP1 PUSH2 0x4C68 JUMP JUMPDEST PUSH2 0xFFFF AND SWAP2 POP PUSH2 0x10E6 SWAP1 POP DUP2 PUSH2 0x2710 PUSH2 0x4C97 JUMP JUMPDEST PUSH2 0x10F0 SWAP1 DUP4 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x10FA DUP3 DUP9 PUSH2 0x4C2F JUMP JUMPDEST GT PUSH2 0x1118 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29973DDB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8FE3F93F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8FE3F93F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x118C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11B0 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFA2BAF5D3EB95569F312F22477B246F9D4C50276F1CB3DED8E1AEADCBC07A763 DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1204 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH2 0xFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x1238 DUP7 DUP3 PUSH32 0x0 DUP11 PUSH2 0x2584 JUMP JUMPDEST POP POP POP PUSH2 0x9F2 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH2 0x124D PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0x1256 DUP6 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x125F DUP5 PUSH2 0x2933 JUMP JUMPDEST PUSH2 0x1268 DUP6 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x1270 PUSH2 0x2477 JUMP JUMPDEST PUSH2 0x127B DUP6 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8FE3F93F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8FE3F93F SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1313 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFA2BAF5D3EB95569F312F22477B246F9D4C50276F1CB3DED8E1AEADCBC07A763 DUP9 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1367 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH2 0xFFFF AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP3 ISZERO PUSH2 0x1385 JUMPI PUSH2 0x1385 DUP5 DUP5 DUP8 DUP5 PUSH1 0x0 PUSH1 0x1 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x12A6E603 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95373018 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0xAB7 PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH2 0x1413 PUSH2 0x1D6F JUMP JUMPDEST PUSH2 0xF01 DUP7 DUP7 DUP7 DUP6 DUP6 PUSH2 0x203B JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14A2 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x14D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1577 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x15A8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1618 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x163C SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x166D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2630C12F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x170D SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x171C DUP4 DUP8 PUSH2 0x2F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP5 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP7 POP PUSH2 0x2710 SWAP2 DUP6 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1828 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x184C SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH2 0x1856 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP4 POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x1868 PUSH2 0x1D6F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18F3 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x18FD PUSH2 0x2477 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x198E JUMPI PUSH2 0x1912 DUP4 DUP4 CALLER DUP5 PUSH1 0x0 DUP1 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x12A6E603 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95373018 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP PUSH2 0x8FE PUSH1 0x1 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x19A5 DUP4 PUSH2 0x1686 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x0 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A14 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A38 SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST SWAP3 POP DUP3 SWAP2 POP PUSH2 0x1A4B SWAP1 POP PUSH2 0x2710 DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x1A55 SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ABB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADF SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1B10 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH2 0x1B4E JUMPI PUSH1 0x40 MLOAD PUSH4 0x1437447F PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x88 SHL MUL PUSH5 0xFFFFFFFFFF PUSH1 0x88 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF67C5BD PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xF67C5BD0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BE1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C05 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1C97 JUMPI POP DUP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9FD12B77 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C70 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C94 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF9AA028A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D20 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1D51 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0xFF PUSH1 0x80 SHL NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x1DC6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E34 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E58 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH2 0x1E62 PUSH2 0x2477 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1E78 JUMPI PUSH2 0x1E78 DUP4 DUP4 CALLER DUP5 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E82 PUSH2 0x31E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F16 SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x46C545B PUSH1 0xE3 SHL DUP2 MSTORE SWAP2 SWAP4 POP SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x2362A2D8 SWAP1 PUSH2 0x1F75 SWAP1 CALLER SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP4 SWAP1 DUP16 SWAP1 DUP16 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FB8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x1FC3 PUSH2 0x31E3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FCF DUP3 DUP6 PUSH2 0x4D62 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x1FEF JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E05CDAD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1FFA DUP4 PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 CALLER SWAP1 PUSH32 0x460AD03B1CF79B1D64D3AEFA28475F110AB66E84649C52BB41ED796B9B391981 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20CA SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x20F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x20FB PUSH2 0x3297 JUMP JUMPDEST PUSH2 0x2118 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1F94B32D PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2123 DUP3 PUSH2 0x1686 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x212E PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x213A PUSH1 0x1 PUSH2 0x32D9 JUMP JUMPDEST SWAP1 POP DUP4 ISZERO PUSH2 0x2152 JUMPI PUSH2 0x2152 DUP6 DUP6 DUP11 DUP7 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x218C JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x2174 SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x217E SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP2 POP PUSH2 0x218A PUSH1 0x0 PUSH2 0x32D9 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x219D DUP4 DUP6 DUP12 DUP12 DUP12 PUSH1 0x1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFADA13FF2D5E1A1D9DA37AD4A4130893B34E3C69C32B17F87EC31FD661B86707 DUP5 PUSH1 0x40 MLOAD PUSH2 0x21EE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2630C12F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2264 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2288 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x2297 DUP4 DUP8 PUSH2 0x2F82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1EBEC041 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP SWAP1 DUP5 AND SWAP1 PUSH4 0x7AFB0104 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x230B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x232F SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP6 POP PUSH1 0x0 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x239B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23BF SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH2 0x2710 SWAP3 POP SWAP1 DUP8 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2439 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x245D SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH2 0x2467 SWAP2 SWAP1 PUSH2 0x4C2F JUMP JUMPDEST SWAP1 SWAP3 LT SWAP8 SWAP5 SWAP7 POP SWAP4 SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x2582 JUMPI PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24EC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE CALLVALUE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 POP PUSH4 0xA9059CBB SWAP3 POP PUSH1 0x44 ADD SWAP1 POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x255E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD9C SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x258D DUP5 PUSH2 0x36CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x830AA745 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x830AA745 SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2619 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xA32435755C235DE2976ED44A75A2F85CB01FAF0C894F639FE0C32BB9455FEA8F DUP4 PUSH1 0x40 MLOAD PUSH2 0x2662 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26FF SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x2728 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2734 DUP4 PUSH2 0x2201 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2756 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1FDD676F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x275E PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x276A PUSH1 0x1 PUSH2 0x32D9 JUMP JUMPDEST SWAP1 POP DUP5 ISZERO PUSH2 0x2782 JUMPI PUSH2 0x2782 DUP7 DUP7 DUP12 DUP8 PUSH1 0x1 PUSH1 0x0 PUSH2 0x2B8E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x27BC JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x27A4 SWAP1 PUSH1 0x1 PUSH1 0xB0 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP5 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x27AE SWAP2 SWAP1 PUSH2 0x4C46 JUMP JUMPDEST SWAP2 POP PUSH2 0x27BA PUSH1 0x0 PUSH2 0x32D9 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x27CD DUP4 DUP7 DUP13 DUP13 DUP13 PUSH1 0x0 PUSH2 0x3374 JUMP JUMPDEST SWAP1 POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x7DFECD8419723A9D3954585A30C2A270165D70AAFA146C11C1E1B88AE1439064 DUP5 PUSH1 0x40 MLOAD PUSH2 0x281E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH2 0xD9C JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND SWAP1 DUP2 EQ PUSH2 0x8FE JUMPI PUSH1 0x6 SLOAD PUSH1 0x80 DUP2 SWAP1 SHR SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 AND NUMBER EQ PUSH2 0x2896 JUMPI DUP5 PUSH2 0x28A9 JUMP JUMPDEST PUSH2 0x28A9 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND DUP7 PUSH2 0x4D62 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 GT ISZERO PUSH2 0x28CC JUMPI PUSH1 0x40 MLOAD PUSH4 0x33AF8D2B PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xAB7 PUSH2 0x28D8 DUP3 PUSH2 0x372A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND NUMBER PUSH1 0x80 SHL OR PUSH1 0x6 SSTORE JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 LT DUP1 PUSH2 0x2915 JUMPI POP PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 GT JUMPDEST ISZERO PUSH2 0xD9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x33859E65 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x295E JUMPI PUSH1 0x40 MLOAD PUSH4 0x7615238D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2966 PUSH2 0x3297 JUMP JUMPDEST ISZERO PUSH2 0x2984 JUMPI PUSH1 0x40 MLOAD PUSH4 0xCBA1DF9B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x298D DUP2 PUSH2 0x3797 JUMP JUMPDEST ISZERO PUSH2 0x29AB JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E68B89 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2AB1 JUMPI PUSH32 0x0 DUP1 ISZERO PUSH2 0x2A10 JUMPI POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x2A2E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5AA66767 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2770A7EB PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2AAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xD9C DUP2 PUSH2 0x36CF JUMP JUMPDEST DUP2 ISZERO PUSH2 0x8FE JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x80 SHL SWAP1 SWAP2 DIV AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2B46 JUMPI PUSH2 0x2AF7 DUP4 PUSH2 0x372A JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH2 0x2B06 SWAP1 DUP4 SWAP1 PUSH2 0x4D92 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD DUP4 MLOAD SWAP1 DUP3 AND SWAP2 AND GT ISZERO SWAP1 POP PUSH2 0x2B41 JUMPI PUSH1 0x40 MLOAD PUSH4 0x33859E65 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B6B JUMP JUMPDEST PUSH2 0x2B4F DUP4 PUSH2 0x372A JUMP JUMPDEST DUP2 MLOAD DUP3 SWAP1 PUSH2 0x2B5E SWAP1 DUP4 SWAP1 PUSH2 0x4DB9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 MSTORE POP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x80 SHL MUL SWAP2 AND OR PUSH1 0x4 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP3 POP PUSH32 0x4AD424605B950D17D87835716D98C0CAC1F6FF9C38114E63304902188A690811 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 PUSH1 0x60 DUP6 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2EBC JUMPI CALLDATASIZE DUP10 DUP10 DUP4 DUP2 DUP2 LT PUSH2 0x2C64 JUMPI PUSH2 0x2C64 PUSH2 0x4DD9 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2C76 SWAP2 SWAP1 PUSH2 0x4DEF JUMP JUMPDEST SWAP1 POP PUSH1 0x4 PUSH2 0x2C87 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST SWAP1 POP LT ISZERO PUSH2 0x2CA8 JUMPI PUSH1 0x40 MLOAD PUSH4 0x71587283 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH2 0x2CB6 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x2D3A JUMPI DUP6 ISZERO PUSH2 0x2D17 JUMPI PUSH1 0x0 PUSH2 0x2CD9 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST PUSH2 0x2CE2 SWAP2 PUSH2 0x4E55 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH4 0x81314B59 PUSH1 0xE0 SHL EQ PUSH2 0x2D15 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5FB9107F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMPDEST PUSH2 0x2D30 DUP9 DUP9 PUSH2 0x2D29 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x4E0F JUMP JUMPDEST DUP10 DUP10 PUSH2 0x392D JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH2 0x2EB3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFF687543 PUSH2 0x2D78 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2DBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DE0 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ DUP1 PUSH2 0x2E32 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH2 0x2E27 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFC1A5543 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2EB1 PUSH2 0x2E60 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x4E0F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x2EA2 SWAP3 POP POP POP PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x487A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x3BED JUMP JUMPDEST POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x2C49 JUMP JUMPDEST POP DUP2 MLOAD ISZERO PUSH2 0x2ECE JUMPI PUSH2 0x2ECE DUP3 DUP7 PUSH2 0x3C31 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x60C8E8938C9A0C0D88A98D6F1C562CE68077E12BF3EDB8047378F2F736CB45B4 SWAP1 PUSH1 0x0 SWAP1 LOG1 PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH1 0x1 SWAP2 DUP4 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3016 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP JUMPDEST DUP1 DUP3 GT PUSH2 0x31DA JUMPI DUP1 DUP3 AND ISZERO PUSH2 0x31CE JUMPI PUSH1 0x40 MLOAD PUSH4 0xE75538C7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE75538C7 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3091 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30B5 SWAP2 SWAP1 PUSH2 0x4C68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3104 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3128 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x31CA JUMPI PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP12 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3184 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP8 DUP9 ADD SWAP8 SWAP1 POP PUSH2 0x31BC PUSH2 0xFFFF DUP5 AND DUP3 PUSH2 0x4C2F JUMP JUMPDEST PUSH2 0x31C6 SWAP1 DUP9 PUSH2 0x4D62 JUMP JUMPDEST SWAP7 POP POP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 DUP3 SWAP1 SHL SWAP2 POP PUSH2 0x3019 JUMP JUMPDEST POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x326E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3292 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 ISZERO PUSH2 0x3292 JUMPI POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x88 SHL SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP LT ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xEB99C2BF PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE DUP2 ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xEB99C2BF SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x334A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x336E SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3380 DUP7 PUSH2 0x3797 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x342C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1998CF9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE1998CF9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3427 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3436 PUSH2 0x31E3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34CA SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2362A2D8 PUSH1 0x0 DUP7 GT PUSH2 0x350C JUMPI DUP11 PUSH2 0x352E JUMP JUMPDEST PUSH32 0x0 JUMPDEST DUP9 PUSH2 0x353A JUMPI PUSH1 0x1 PUSH2 0x353D JUMP JUMPDEST PUSH1 0x2 JUMPDEST DUP15 CALLER DUP14 DUP14 PUSH1 0x0 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3565 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3584 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35A8 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH2 0x35B4 PUSH2 0x31E3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35C2 DUP4 DUP7 PUSH2 0x4D62 JUMP JUMPDEST DUP3 LT PUSH2 0x35CF JUMPI PUSH1 0x0 PUSH2 0x35E4 JUMP JUMPDEST DUP2 PUSH2 0x35DA DUP5 DUP8 PUSH2 0x4D62 JUMP JUMPDEST PUSH2 0x35E4 SWAP2 SWAP1 PUSH2 0x4C97 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3695 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL OR SWAP1 SSTORE PUSH2 0x3608 DUP2 PUSH2 0x372A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3623 SWAP1 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x4D92 JUMP JUMPDEST DUP3 SLOAD PUSH2 0x100 SWAP3 SWAP1 SWAP3 EXP PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 MUL NOT SWAP1 SWAP4 AND SWAP2 DUP4 AND MUL OR SWAP1 SWAP2 SSTORE PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x80 SHL DUP2 DIV DUP3 AND SWAP2 AND GT ISZERO SWAP1 POP PUSH2 0x3661 JUMPI PUSH2 0x3661 PUSH2 0x3D36 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH32 0x39B20AF1A8DA82C3D37DD7B0FE81A987532FFCA72FBD69951823F7C40511F2D SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST PUSH2 0x36A0 DUP5 PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x0 DUP7 GT DUP1 ISZERO PUSH2 0x36B0 JUMPI POP PUSH1 0x1 DUP8 GT JUMPDEST ISZERO PUSH2 0x36BF JUMPI PUSH2 0x36BF DUP12 DUP8 PUSH2 0x3DA5 JUMP JUMPDEST POP POP POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x370C JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO JUMPDEST ISZERO PUSH2 0xD9C JUMPI PUSH1 0x40 MLOAD PUSH4 0x42D83B93 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0x3793 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x32382062697473 PUSH1 0xC8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1DBD JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP1 ISZERO PUSH2 0x3873 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x100A3B77 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x4028EDDC SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x384F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3873 SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST ISZERO PUSH2 0x3928 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3922 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0x1 ADD SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP2 PUSH1 0x0 PUSH2 0x393B DUP7 DUP9 PUSH2 0x4E55 JUMP JUMPDEST SWAP1 POP PUSH4 0x7ECEB4A7 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x39A2 JUMPI DUP2 MLOAD ISZERO PUSH2 0x3975 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE61EEDF5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3982 DUP7 PUSH1 0x4 DUP2 DUP11 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x398F SWAP2 SWAP1 PUSH2 0x4F1D JUMP JUMPDEST SWAP2 POP PUSH2 0x399B DUP3 DUP10 PUSH2 0x3F5A JUMP JUMPDEST SWAP2 POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0x29A1FBF3 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3A9B JUMPI PUSH1 0x0 DUP1 DUP1 PUSH2 0x39CB DUP10 PUSH1 0x4 DUP2 DUP14 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x39D8 SWAP2 SWAP1 PUSH2 0x4936 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x3A93 DUP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x3A8A JUMPI PUSH1 0x40 MLOAD PUSH4 0x3A562DC1 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE958B704 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3A61 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3A85 SWAP2 SWAP1 PUSH2 0x4BFC JUMP JUMPDEST PUSH2 0x3A8C JUMP JUMPDEST DUP13 JUMPDEST DUP5 DUP5 PUSH2 0x2584 JUMP JUMPDEST POP POP POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0xD48384EF PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3AE6 JUMPI PUSH1 0x1 SWAP3 POP PUSH1 0x0 PUSH2 0x3AC6 DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3AD3 SWAP2 SWAP1 PUSH2 0x4FE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x4031 JUMP JUMPDEST POP PUSH2 0x3BE1 JUMP JUMPDEST PUSH4 0xD5845E09 PUSH1 0xE0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3B46 JUMPI DUP3 ISZERO PUSH2 0x3B1D JUMPI PUSH1 0x40 MLOAD PUSH4 0x18161955 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3B2C DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B39 SWAP2 SWAP1 PUSH2 0x4FE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x415E JUMP JUMPDEST PUSH4 0x1CB7B7BB PUSH1 0xE1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3B87 JUMPI PUSH1 0x0 PUSH2 0x3B6D DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B7A SWAP2 SWAP1 PUSH2 0x487A JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x42F7 JUMP JUMPDEST PUSH4 0x37076167 PUSH1 0xE2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND ADD PUSH2 0x3BC8 JUMPI PUSH1 0x0 PUSH2 0x3BAE DUP8 PUSH1 0x4 DUP2 DUP12 PUSH2 0x4E85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3BBB SWAP2 SWAP1 PUSH2 0x487A JUMP JUMPDEST SWAP1 POP PUSH2 0x3AE0 DUP11 DUP11 DUP4 PUSH2 0x43B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF4F3F3D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1C97 DUP4 DUP4 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x416464726573733A206C6F772D6C6576656C2063616C6C206661696C65640000 DUP2 MSTORE POP PUSH2 0x4495 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9F2 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3C50 JUMPI PUSH2 0x3C50 PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3C6E JUMPI PUSH2 0x3C6E PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CC1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3CE5 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST LT ISZERO PUSH2 0x3D2E JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3CFD JUMPI PUSH2 0x3CFD PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x2F42BD87 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1DBD JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3C36 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8456CB59 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E54 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0xED2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x9E38961 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 DUP5 DUP5 SUB ADD PUSH1 0x44 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x9E389610 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3EF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3F0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE2655809B4FC2A2DFFC14ECF5AAD9DBF5A9703A5BB2B19AB7AE6AFA29EF0C7C8 DUP3 PUSH1 0x40 MLOAD PUSH2 0x3F4C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4028 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x3F7C JUMPI PUSH2 0x3F7C PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3FF3 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4005 JUMPI PUSH2 0x4005 PUSH2 0x4DD9 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 DUP2 MLOAD PUSH2 0x401D SWAP2 SWAP1 PUSH2 0x4D62 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x1 ADD PUSH2 0x3F62 JUMP JUMPDEST POP SWAP3 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x405C JUMPI PUSH1 0x40 MLOAD PUSH4 0x7615238D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4065 DUP2 PUSH2 0x2832 JUMP JUMPDEST PUSH2 0x406E DUP3 PUSH2 0x4570 JUMP JUMPDEST PUSH2 0x4079 DUP2 PUSH1 0x1 PUSH2 0x2ABA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x4A67839D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x94CF073A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x40F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4118 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH2 0x4123 DUP2 PUSH2 0x28EB JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x9CAC51154CC0D835E2F9C9D1F59A9344588CEE107F4203BF58A8C797E3A58C45 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3F4C SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xC648657 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x3192195C SWAP1 PUSH1 0x24 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x41ED SWAP2 SWAP1 PUSH2 0x4CC3 JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x4A67839D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x44 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x0 AND SWAP1 PUSH4 0x94CF073A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x426A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x428E SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH2 0x4299 DUP2 PUSH2 0x28EB JUMP JUMPDEST PUSH2 0x42AD PUSH2 0x42A6 DUP3 DUP5 PUSH2 0x4C97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2ABA JUMP JUMPDEST DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x98274BF834D179EE08DC0604071B0DC90B54731BD5F725A5A96A39A86BCE025A DUP5 PUSH1 0x40 MLOAD PUSH2 0x42E8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x28F1F8B PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x51E3F160 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4362 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4376 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 POP DUP7 AND SWAP2 POP PUSH32 0xDF498AA1C340E992665D6FB4F3BE8436D452C45A630CB6D7FAB7963DA39BAC87 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6C7CE77 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP3 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD8F9CEE SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4427 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x444B SWAP2 SWAP1 PUSH2 0x4D75 JUMP JUMPDEST ISZERO PUSH2 0xED2 JUMPI DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x69DB9E9764DA61B6681B89FB0F5BE018506E0342036E56B59C3015A620D60977 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x44F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1DBD JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x4512 SWAP2 SWAP1 PUSH2 0x5024 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x454F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4554 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4565 DUP8 DUP4 DUP4 DUP8 PUSH2 0x46A8 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8991B2F1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x8991B2F1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x45DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x45FF SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9FD12B77 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4661 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4685 SWAP2 SWAP1 PUSH2 0x4CAA JUMP JUMPDEST SWAP1 POP DUP2 DUP2 AND ISZERO PUSH2 0xED2 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5754BAED PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4717 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x4710 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x4710 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1DBD JUMP JUMPDEST POP DUP2 PUSH2 0x1A55 JUMP JUMPDEST PUSH2 0x1A55 DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x472C JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DBD SWAP2 SWAP1 PUSH2 0x5036 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x477C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4787 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4797 DUP2 PUSH2 0x475B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3928 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C97 DUP3 PUSH2 0x47A2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x47E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x47FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4840 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4862 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x486E DUP8 DUP3 DUP9 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x488C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x48AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x48BA DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x48CA DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x48EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x48F8 DUP9 DUP3 DUP10 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0xD9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x492B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x4909 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x494B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x4956 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4966 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x499B DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x49AB DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x49C2 DUP2 PUSH2 0x475B JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x49DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x49E9 DUP10 DUP3 DUP11 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4A13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4A1E DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4A35 DUP2 PUSH2 0x475B JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x48EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A6C DUP4 PUSH2 0x47A2 JUMP JUMPDEST SWAP2 POP PUSH2 0x4A7A PUSH1 0x20 DUP5 ADD PUSH2 0x47A2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4A99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x4AAB DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x4ABB DUP2 PUSH2 0x4909 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x4ACB DUP2 PUSH2 0x4909 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4AEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4B00 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B27 DUP9 DUP3 DUP10 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4B3B DUP2 PUSH2 0x4909 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x4B72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B7E DUP6 DUP3 DUP7 ADD PUSH2 0x47D4 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4BA8 DUP2 PUSH2 0x4746 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4797 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C97 DUP2 PUSH2 0x475B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C97 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4C63 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4C7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x4C86 DUP2 PUSH2 0x4746 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0x4797 DUP2 PUSH2 0x4909 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4CBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4CD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x4D0F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND DUP3 MSTORE PUSH1 0xE0 DUP3 ADD SWAP1 PUSH2 0x4D32 PUSH1 0x20 DUP5 ADD DUP11 PUSH2 0x4CF1 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP8 SWAP1 SWAP8 MSTORE SWAP5 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE SWAP3 SWAP1 SWAP5 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP2 ISZERO ISZERO PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x336E JUMPI PUSH2 0x336E PUSH2 0x4C19 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4D87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C97 DUP2 PUSH2 0x475B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4DB2 JUMPI PUSH2 0x4DB2 PUSH2 0x4C19 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x4DB2 JUMPI PUSH2 0x4DB2 PUSH2 0x4C19 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH1 0x3E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E26 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x4818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x4E7D JUMPI DUP1 DUP2 DUP7 PUSH1 0x4 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x4E95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x4EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4EE7 JUMPI PUSH2 0x4EE7 PUSH2 0x4EAF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4F15 JUMPI PUSH2 0x4F15 PUSH2 0x4EAF JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x4F47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4F5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4F6D JUMPI PUSH2 0x4F6D PUSH2 0x4EAF JUMP JUMPDEST PUSH2 0x4F7B DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x4EED JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP8 DUP3 GT ISZERO PUSH2 0x4F9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH2 0x4565 JUMPI PUSH1 0x40 DUP5 DUP10 SUB SLT ISZERO PUSH2 0x4FB9 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x4FC1 PUSH2 0x4EC5 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4FCC DUP2 PUSH2 0x4746 JUMP JUMPDEST DUP2 MSTORE DUP5 DUP7 ADD CALLDATALOAD DUP7 DUP3 ADD MSTORE DUP4 MSTORE PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH2 0x4FA0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4FF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x501B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5003 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4E05 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x5000 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x5055 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x5000 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5D SWAP2 SWAP6 SMOD PUSH17 0x275E8A7F227E7315186A1D146EB499A68B 0xE6 0xC5 0xE0 CALLDATACOPY REVERT EXTCODECOPY 0x5C DIFFICULTY PUSH14 0x8B64736F6C634300081100330000 ", - "sourceMap": "3062:62081:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53942:288;;;;;;;;;;-1:-1:-1;53942:288:20;;;;;:::i;:::-;;:::i;:::-;;64541:176;;;;;;;;;;-1:-1:-1;64541:176:20;;;;;:::i;:::-;;:::i;14548:222::-;;;;;;:::i;:::-;;:::i;4836:29::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2291:32:70;;;2273:51;;2261:2;2246:18;4836:29:20;;;;;;;;59476:211;;;;;;;;;;-1:-1:-1;59476:211:20;;;;;:::i;:::-;;:::i;:::-;;;2752:14:70;;2745:22;2727:41;;2715:2;2700:18;59476:211:20;2587:187:70;22086:280:20;;;;;;:::i;:::-;;:::i;3408:33::-;;;;;;;;;;;;;;;64962:179;;;;;;;;;;-1:-1:-1;64962:179:20;;;;;:::i;:::-;;:::i;4437:36::-;;;;;;;;;;;;;;;47157:1108;;;;;;;;;;-1:-1:-1;47157:1108:20;;;;;:::i;:::-;;:::i;4015:47::-;;;;;;;;;;-1:-1:-1;4015:47:20;;;;-1:-1:-1;;;;;4015:47:20;;;;-1:-1:-1;;;4015:47:20;;;;;;;;;-1:-1:-1;;;;;4231:15:70;;;4213:34;;4283:15;;;;4278:2;4263:18;;4256:43;4133:18;4015:47:20;3986:319:70;5072:47:20;;;;;;;;;;;;5115:4;5072:47;;;;;4456:25:70;;;4444:2;4429:18;5072:47:20;4310:177:70;33337:707:20;;;;;;:::i;:::-;;:::i;18503:266::-;;;;;;:::i;:::-;;:::i;18918:280::-;;;;;;:::i;:::-;;:::i;13255:236::-;;;;;;:::i;:::-;;:::i;64168:271::-;;;;;;;;;;-1:-1:-1;64168:271:20;;;;;:::i;:::-;;:::i;8465:2152::-;;;;;;:::i;:::-;;:::i;4156:35::-;;;;;;;;;;;;;;;11409:1701;;;;;;:::i;:::-;;:::i;22522:294::-;;;;;;:::i;:::-;;:::i;3871:29::-;;;;;;;;;;-1:-1:-1;3871:29:20;;;;-1:-1:-1;;;;;3871:29:20;;;;-1:-1:-1;;;3871:29:20;;;;;4715:49;;;;;;;;;;;;;;;4569:42;;;;;;;;;;;;;;;53091:306;;;;;;;;;;-1:-1:-1;53259:20:20;;53091:306;;;-1:-1:-1;;;;;53283:3:20;53259:27;;;8640:31:70;8622:50;;-1:-1:-1;;;;;53336:40:20;;;8703:2:70;8688:18;;8681:75;8595:18;53091:306:20;8450:312:70;62747:169:20;;;;;;;;;;-1:-1:-1;62747:169:20;;;;;:::i;:::-;;:::i;64777:116::-;;;;;;;;;;;;;:::i;3638:31::-;;;;;;;;;;;;;;;63029:237;;;;;;;;;;-1:-1:-1;63029:237:20;;;;;:::i;:::-;;:::i;3302:47::-;;;;;;;;;;;;;;;56412:591;;;;;;;;;;-1:-1:-1;56412:591:20;;;;;:::i;:::-;;:::i;:::-;;;;9175:25:70;;;9231:2;9216:18;;9209:34;;;;9148:18;56412:591:20;9001:248:70;35190:742:20;;;;;;:::i;:::-;;:::i;3758:29::-;;;;;;;;;;-1:-1:-1;3758:29:20;;;;-1:-1:-1;;;;;3758:29:20;;;-1:-1:-1;;;3758:29:20;;;;;-1:-1:-1;;;3758:29:20;;;;;-1:-1:-1;;;3758:29:20;;;;;;;;;;-1:-1:-1;;;;;9983:47:70;;;9965:66;;10074:14;;10067:22;10062:2;10047:18;;10040:50;10138:12;10126:25;;;10106:18;;;10099:53;;;;10200:6;10188:19;10183:2;10168:18;;10161:47;9952:3;9937:19;3758:29:20;9744:470:70;4308:93:20;;;;;;;;;;-1:-1:-1;4308:93:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;58911:449;;;;;;;;;;-1:-1:-1;58911:449:20;;;;;:::i;:::-;;:::i;3518:47::-;;;;;;;;;;;;;;;63444:257;;;;;;;;;;-1:-1:-1;63444:257:20;;;;;:::i;:::-;;:::i;55715:333::-;;;;;;;;;;-1:-1:-1;55715:333:20;;;;;:::i;:::-;;:::i;4069:35::-;;;;;;;;;;-1:-1:-1;4069:35:20;;;;-1:-1:-1;;;;;4069:35:20;;;;-1:-1:-1;;;4069:35:20;;;;;62181:166;;;;;;;;;;-1:-1:-1;62181:166:20;;;;;:::i;:::-;;:::i;53942:288::-;2261:21:57;:19;:21::i;:::-;-1:-1:-1;;;;;54069:22:20;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;;54092:10:::1;54069:34:::0;;;;;;;;;;:42;;-1:-1:-1;;54069:42:20::1;::::0;::::1;;::::0;;::::1;::::0;;;54163:47;;2727:41:70;;;54092:10:20;;54069:22;54163:47:::1;::::0;2700:18:70;54163:47:20::1;;;;;;;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;53942:288:20;;:::o;64541:176::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;64661:10:::1;:49:::0;;-1:-1:-1;;;;;64661:49:20;;::::1;-1:-1:-1::0;;;64661:49:20::1;::::0;::::1;::::0;;;::::1;::::0;;64541:176::o;14548:222::-;2261:21:57;:19;:21::i;:::-;14718:45:20::1;14738:2;14742:13;14757:5;;14718:19;:45::i;:::-;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;14548:222:20;;;;:::o;59476:211::-;59615:38;;-1:-1:-1;;;59615:38:20;;-1:-1:-1;;;;;2291:32:70;;;59615:38:20;;;2273:51:70;59588:4:20;;;;59615:13;:28;;;;2246:18:70;;59615:38:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;59615:52:20;;;;59476:211;-1:-1:-1;;59476:211:20:o;22086:280::-;2261:21:57;:19;:21::i;:::-;22293:66:20::1;22324:8;22334:2;22338:13;22353:5;;22293:30;:66::i;:::-;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;22086:280:20;;;;;:::o;64962:179::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;65085:6:::1;:49:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;65085:49:20::1;-1:-1:-1::0;;;;65085:49:20;;::::1;::::0;;;::::1;::::0;;64962:179::o;47157:1108::-;2261:21:57;:19;:21::i;:::-;47394:11:20::1;47390:53;;;47414:29;;-1:-1:-1::0;;;47414:29:20::1;;;;;;;;;;;47390:53;47491:72;::::0;-1:-1:-1;;;47491:72:20;;47543:10:::1;47491:72;::::0;::::1;2273:51:70::0;47467:21:20::1;::::0;47491:13:::1;-1:-1:-1::0;;;;;47491:38:20::1;::::0;::::1;::::0;2246:18:70;;47491:72:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47651:10;47634:28;::::0;;;:16:::1;:28;::::0;;;;;;;-1:-1:-1;;;;;47634:32:20;::::1;::::0;;;;;;;;47467:96;;-1:-1:-1;47634:32:20::1;;47629:94;;47687:36;;-1:-1:-1::0;;;47687:36:20::1;;;;;;;;;;;47629:94;47866:19;47891:37;47914:13;47891:22;:37::i;:::-;47865:63;;;47956:14;47952:69;;;47979:42;;-1:-1:-1::0;;;47979:42:20::1;;;;;;;;;;;47952:69;48108:54;::::0;-1:-1:-1;;;48108:54:20;;48147:10:::1;48108:54;::::0;::::1;11609:34:70::0;-1:-1:-1;;;;;11679:15:70;;;11659:18;;;11652:43;48108:13:20::1;:38;::::0;::::1;::::0;11544:18:70;;48108:54:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;48214:31:20::1;::::0;-1:-1:-1;;;;;48214:31:20;::::1;::::0;-1:-1:-1;48230:10:20::1;::::0;-1:-1:-1;48214:31:20::1;::::0;;;::::1;47262:1003;;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;47157:1108:20;:::o;33337:707::-;2261:21:57;:19;:21::i;:::-;33543:10:20::1;:8;:10::i;:::-;33650:72;::::0;-1:-1:-1;;;33650:72:20;;-1:-1:-1;;;;;2291:32:70;;;33650:72:20::1;::::0;::::1;2273:51:70::0;33626:21:20::1;::::0;33650:13:::1;:38:::0;;::::1;::::0;::::1;::::0;2246:18:70;;33650:72:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33626:96;;33745:55;33759:10;33771:13;33786:5;33793:6;33745:13;:55::i;:::-;33964:58;::::0;-1:-1:-1;;;33964:58:20;;-1:-1:-1;;;;;2291:32:70;;;33964:58:20::1;::::0;::::1;2273:51:70::0;33964:13:20::1;:43;::::0;::::1;::::0;2246:18:70;;33964:58:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33480:564;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;33337:707:20;;;:::o;18503:266::-;2261:21:57;:19;:21::i;:::-;18703:59:20::1;18727:8;18737:2;18741:13;18756:5;;18703:23;:59::i;18918:280::-:0;2261:21:57;:19;:21::i;:::-;19132:59:20::1;19156:8;19166:2;19170:13;19185:5;;19132:23;:59::i;:::-;2303:20:57::0;1716:1;2809:7;:22;2629:209;2303:20;18918:280:20;;;;;;:::o;13255:236::-;2261:21:57;:19;:21::i;:::-;13439:45:20::1;13459:2;13463:13;13478:5;;13439:19;:45::i;64168:271::-:0;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;-1:-1:-1;;;;;64381:45:20;;::::1;-1:-1:-1::0;;;64381:45:20::1;64320::::0;::::1;64381;64320:6;64381:45:::0;64168:271::o;8465:2152::-;2261:21:57;:19;:21::i;:::-;8659:22:20::1;1175:3:44;8685:23:20;;::::0;::::1;:6:::0;:23:::1;:::i;:::-;8684:45;;;;:::i;:::-;8659:70;;8835:49;8869:14;8835:33;:49::i;:::-;8983:44;9012:14;8983:28;:44::i;:::-;9125:48;9162:10;9125:36;:48::i;:::-;9258:10;:8;:10::i;:::-;9377:46;9402:14;9418:4;9377:24;:46::i;:::-;9508:33;::::0;-1:-1:-1;;;9508:33:20;;9493:11:::1;9508:33;::::0;::::1;4456:25:70::0;;;9493:11:20;9508:13:::1;-1:-1:-1::0;;;;;9508:30:20::1;::::0;::::1;::::0;4429:18:70;;9508:33:20::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9490:51;;::::0;-1:-1:-1;9849:23:20::1;::::0;-1:-1:-1;9490:51:20;139:3:47::1;9849:23:20;:::i;:::-;9831:42;::::0;:14;:42:::1;:::i;:::-;9815:12;9824:3:::0;9815:6;:12:::1;:::i;:::-;:58;9811:113;;9894:30;;-1:-1:-1::0;;;9894:30:20::1;;;;;;;;;;;9811:113;10088:93;::::0;-1:-1:-1;;;10088:93:20;;::::1;::::0;::::1;13118:25:70::0;;;-1:-1:-1;;;;;13179:32:70;;;13159:18;;;13152:60;10064:21:20::1;::::0;10088:13:::1;:31:::0;;::::1;::::0;::::1;::::0;13091:18:70;;10088:93:20::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10064:117;;10366:13;-1:-1:-1::0;;;;;10311:132:20::1;10342:10;-1:-1:-1::0;;;;;10311:132:20::1;;10393:14;10421:12;10311:132;;;;;;13395:25:70::0;;;13468:6;13456:19;13451:2;13436:18;;13429:47;13383:2;13368:18;;13223:259;10311:132:20::1;;;;;;;;10538:60;10552:10;10564:13;10579:10;10591:6;10538:13;:60::i;:::-;8649:1968;;;2303:20:57::0;1716:1;2809:7;:22;2629:209;11409:1701:20;2261:21:57;:19;:21::i;:::-;11708:49:20::1;11742:14;11708:33;:49::i;:::-;11854:48;11891:10;11854:36;:48::i;:::-;12008:44;12037:14;12008:28;:44::i;:::-;12138:10;:8;:10::i;:::-;12257:46;12282:14;12298:4;12257:24;:46::i;:::-;12417:93;::::0;-1:-1:-1;;;12417:93:20;;::::1;::::0;::::1;13118:25:70::0;;;-1:-1:-1;;;;;13179:32:70;;;13159:18;;;13152:60;12393:21:20::1;::::0;12417:13:::1;:31:::0;;::::1;::::0;::::1;::::0;13091:18:70;;12417:93:20::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12393:117;;12622:13;-1:-1:-1::0;;;;;12567:132:20::1;12598:10;-1:-1:-1::0;;;;;12567:132:20::1;;12649:14;12677:12;12567:132;;;;;;13395:25:70::0;;;13468:6;13456:19;13451:2;13436:18;;13429:47;13383:2;13368:18;;13223:259;12567:132:20::1;;;;;;;;12843:17:::0;;12839:92:::1;;12874:57;12885:5;;12892:10;12904:13;12919:5;12926:4;12874:10;:57::i;:::-;13040:48;::::0;-1:-1:-1;;;13040:48:20;;-1:-1:-1;;;;;2291:32:70;;;13040:48:20::1;::::0;::::1;2273:51:70::0;13040:13:20::1;:33;::::0;::::1;::::0;2246:18:70;;13040:48:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11615:1495;2303:20:57::0;1716:1;2809:7;:22;2629:209;22522:294:20;2261:21:57;:19;:21::i;:::-;22743:66:20::1;22774:8;22784:2;22788:13;22803:5;;22743:30;:66::i;62747:169::-:0;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;62866:6:::1;:43:::0;;-1:-1:-1;;;;;;62866:43:20::1;-1:-1:-1::0;;;;;62866:43:20;;;::::1;::::0;;;::::1;::::0;;62747:169::o;64777:116::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;64850:10:::1;:36:::0;;-1:-1:-1;;;;;;64850:36:20::1;::::0;;64777:116::o;63029:237::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;-1:-1:-1;;;;;63224:35:20;;::::1;-1:-1:-1::0;;;63224:35:20::1;63166:48:::0;::::1;63224:35;63166:9;63224:35:::0;63029:237::o;56412:591::-;56521:13;56536:11;56563:26;56620:13;-1:-1:-1;;;;;56620:25:20;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56563:94;;56682:16;56700:14;56718:80;56750:11;56775:13;56718:18;:80::i;:::-;56816:48;;-1:-1:-1;;;56816:48:20;;;;;13118:25:70;;;-1:-1:-1;;;;;56853:10:20;13179:32:70;;13159:18;;;13152:60;13118:25;;-1:-1:-1;56681:117:20;;-1:-1:-1;56816:26:20;;;;;;13091:18:70;;56816:48:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56905:46;;-1:-1:-1;;;56905:46:20;;;;;13118:25:70;;;-1:-1:-1;;;;;56940:10:20;13179:32:70;;13159:18;;;13152:60;56808:56:20;;-1:-1:-1;139:3:47;;56905:26:20;;;;;13091:18:70;;56905:46:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:78;;;;:::i;:::-;56887:96;;56553:450;;;56412:591;;;:::o;35190:742::-;2261:21:57;:19;:21::i;:::-;35395:72:20::1;::::0;-1:-1:-1;;;35395:72:20;;35447:10:::1;35395:72;::::0;::::1;2273:51:70::0;35371:21:20::1;::::0;35395:13:::1;-1:-1:-1::0;;;;;35395:38:20::1;::::0;::::1;::::0;2246:18:70;;35395:72:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35371:96;;35531:10;:8;:10::i;:::-;35569:17:::0;;35565:361:::1;;35602:58;35613:5;;35620:10;35632:13;35647:5;35654::::0;35602:10:::1;:58::i;:::-;35867:48;::::0;-1:-1:-1;;;35867:48:20;;-1:-1:-1;;;;;2291:32:70;;;35867:48:20::1;::::0;::::1;2273:51:70::0;35867:13:20::1;:33;::::0;::::1;::::0;2246:18:70;;35867:48:20::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35565:361;35312:620;2303:20:57::0;1716:1;2809:7;:22;2629:209;58911:449:20;59035:10;59064:11;59079:29;59094:13;59079:14;:29::i;:::-;59179:74;;-1:-1:-1;;;59179:74:20;;-1:-1:-1;;;;;2291:32:70;;;59179:74:20;;;2273:51:70;59061:47:20;;-1:-1:-1;;;;59179:13:20;:59;;;;;;2246:18:70;;59179:74:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59131:122;-1:-1:-1;59131:122:20;;-1:-1:-1;59282:23:20;;-1:-1:-1;139:3:47;59282::20;:23;:::i;:::-;59281:59;;;;:::i;:::-;59276:64;58911:449;-1:-1:-1;;;;58911:449:20:o;63444:257::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;63564:9:::1;63559:85;;63596:37;;-1:-1:-1::0;;;63596:37:20::1;;;;;;;;;;;63559:85;63653:6;:41:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;63653:41:20::1;-1:-1:-1::0;;;;63653:41:20;;::::1;::::0;;;::::1;::::0;;63444:257::o;55715:333::-;55864:34;;-1:-1:-1;;;55864:34:20;;-1:-1:-1;;;;;2291:32:70;;;55864:34:20;;;2273:51:70;55816:12:20;;;;55864:13;:27;;;;2246:18:70;;55864:34:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55844:54;-1:-1:-1;55944:14:20;;;;;55943:85;;;56013:9;55976:13;-1:-1:-1;;;;;55976:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;:51;55943:85;55921:107;55715:333;-1:-1:-1;;;55715:333:20:o;62181:166::-;5262:13;-1:-1:-1;;;;;5262:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5248:48:20;:10;-1:-1:-1;;;;;5248:48:20;;5244:106;;5317:33;;-1:-1:-1;;;5317:33:20;;;;;;;;;;;5244:106;62302:6:::1;:38:::0;;;::::1;;-1:-1:-1::0;;;62302:38:20::1;-1:-1:-1::0;;;;62302:38:20;;::::1;::::0;;;::::1;::::0;;62181:166::o;2336:287:57:-;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:57;;14469:2:70;2460:63:57;;;14451:21:70;14508:2;14488:18;;;14481:30;14547:33;14527:18;;;14520:61;14598:18;;2460:63:57;;;;;;;;;1759:1;2598:7;:18;2336:287::o;14824:1570:20:-;15022:72;;-1:-1:-1;;;15022:72:20;;15074:10;15022:72;;;2273:51:70;14998:21:20;;15022:13;-1:-1:-1;;;;;15022:38:20;;;;2246:18:70;;15022:72:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14998:96;;15170:10;:8;:10::i;:::-;15279:17;;15275:92;;15310:57;15321:5;;15328:10;15340:13;15355:4;15361:5;15310:10;:57::i;:::-;15398:32;15433:24;:22;:24::i;:::-;15564:61;;-1:-1:-1;;;15564:61:20;;-1:-1:-1;;;;;2291:32:70;;;15564:61:20;;;2273:51:70;15398:59:20;;-1:-1:-1;;;;;15564:13:20;:46;;;;;;2246:18:70;;15564:61:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15703:208:20;;-1:-1:-1;;;15703:208:20;;15467:158;;-1:-1:-1;15467:158:20;-1:-1:-1;;;;;;15703:13:20;:32;;;;:208;;15749:10;;15773:27;;;;15749:10;;15853:2;;15869:13;;15773:27;;15703:208;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15938:31;15972:24;:22;:24::i;:::-;15938:58;-1:-1:-1;16062:51:20;16089:24;16062;:51;:::i;:::-;16024:23;:89;16007:180;;;16145:31;;-1:-1:-1;;;16145:31:20;;;;;;;;;;;16007:180;16233:47;16258:14;16274:5;16233:24;:47::i;:::-;16340:34;;-1:-1:-1;;;;;16340:34:20;;;16359:10;;16340:34;;;;;14955:1439;;;;;14824:1570;;;;:::o;22881:1730::-;23171:70;;-1:-1:-1;;;23171:70:20;;-1:-1:-1;;;;;2291:32:70;;;23171:70:20;;;2273:51:70;23147:21:20;;23171:13;:38;;;;;;2246:18:70;;23171:70:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23147:94;-1:-1:-1;;;;;;23306:16:20;;23302:51;;23331:22;;-1:-1:-1;;;23331:22:20;;;;;;;;;;;23302:51;23441:12;:10;:12::i;:::-;23436:102;;23476:34;;-1:-1:-1;;;23476:34:20;;;;;;;;;;;23436:102;23601:18;23625:29;23640:13;23625:14;:29::i;:::-;23600:54;;;23726:10;:8;:10::i;:::-;23821:25;23849:33;23877:4;23849:27;:33::i;:::-;23821:61;-1:-1:-1;23897:17:20;;23893:90;;23928:55;23939:5;;23946:8;23956:13;23971:4;23977:5;23928:10;:55::i;:::-;24011:20;24007:214;;;24090:6;:35;139:3:47;;24077:48:20;;-1:-1:-1;;;24090:35:20;;24076:86;24090:35;24077:10;:48;:::i;:::-;24076:86;;;;:::i;:::-;24047:115;;24176:34;24204:5;24176:27;:34::i;:::-;;24007:214;24231:22;24256:167;24293:10;24317:13;24344:8;24366:2;24382:13;24409:4;24256:23;:167::i;:::-;24231:192;;24551:2;-1:-1:-1;;;;;24462:129:20;24527:10;-1:-1:-1;;;;;24462:129:20;24505:8;-1:-1:-1;;;;;24462:129:20;;24567:14;24462:129;;;;4456:25:70;;4444:2;4429:18;;4310:177;24462:129:20;;;;;;;;23049:1562;;;;22881:1730;;;;;:::o;60255:1058::-;60357:19;60378:18;60412:26;60469:13;-1:-1:-1;;;;;60469:25:20;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60412:94;;60531:16;60549:14;60567:80;60599:11;60624:13;60567:18;:80::i;:::-;60717:48;;-1:-1:-1;;;60717:48:20;;;;;13118:25:70;;;-1:-1:-1;;;;;60754:10:20;13179:32:70;;13159:18;;;13152:60;13118:25;;-1:-1:-1;60530:117:20;;-1:-1:-1;60717:26:20;;;;;;13091:18:70;;60717:48:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60837:74;;-1:-1:-1;;;60837:74:20;;-1:-1:-1;;;;;2291:32:70;;;60837:74:20;;;2273:51:70;60704:61:20;;-1:-1:-1;60794:39:20;;60837:13;:59;;;;2246:18:70;;60837:74:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61077:103;;-1:-1:-1;;;61077:103:20;;;;;13118:25:70;;;-1:-1:-1;;;;;61160:10:20;13179:32:70;;13159:18;;;13152:60;13118:25;;-1:-1:-1;;;;139:3:47;;-1:-1:-1;61077:24:20;;;;;;13091:18:70;;61077:103:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:123;;;;:::i;:::-;61266:40;;;;60255:1058;;-1:-1:-1;60255:1058:20;;-1:-1:-1;;;;;60255:1058:20:o;59758:225::-;59801:9;:13;59797:180;;59836:11;-1:-1:-1;;;;;59830:26:20;;59865:9;59830:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;59904:50:20;;-1:-1:-1;;;59904:50:20;;59932:10;59904:50;;;15912:51:70;59944:9:20;15979:18:70;;;15972:34;59910:11:20;-1:-1:-1;;;;;59904:27:20;;-1:-1:-1;59904:27:20;;-1:-1:-1;15885:18:70;;;-1:-1:-1;59904:50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;59797:180::-;59758:225::o;34050:767::-;34484:46;34519:10;34484:34;:46::i;:::-;34636:69;;-1:-1:-1;;;34636:69:20;;34664:10;34636:69;;;16536:34:70;-1:-1:-1;;;;;16606:15:70;;;16586:18;;;16579:43;16658:15;;;16638:18;;;16631:43;16690:18;;;16683:34;;;34636:13:20;:27;;;;16470:19:70;;34636:69:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34783:5;-1:-1:-1;;;;;34757:40:20;34771:10;-1:-1:-1;;;;;34757:40:20;;34790:6;34757:40;;;;4456:25:70;;4444:2;4429:18;;4310:177;34757:40:20;;;;;;;;34050:767;;;;:::o;19256:1756::-;19539:70;;-1:-1:-1;;;19539:70:20;;-1:-1:-1;;;;;2291:32:70;;;19539:70:20;;;2273:51:70;19515:21:20;;19539:13;:38;;;;;;2246:18:70;;19539:70:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19515:94;-1:-1:-1;;;;;;19686:16:20;;19682:51;;19711:22;;-1:-1:-1;;;19711:22:20;;;;;;;;;;;19682:51;19861:19;19882:18;19904:59;19940:13;19904:22;:59::i;:::-;19860:103;;;;20045:14;20040:84;;20080:44;;-1:-1:-1;;;20080:44:20;;;;;;;;;;;20040:84;20201:10;:8;:10::i;:::-;20309:25;20337:33;20365:4;20337:27;:33::i;:::-;20309:61;-1:-1:-1;20385:17:20;;20381:90;;20416:55;20427:5;;20434:8;20444:13;20459:4;20465:5;20416:10;:55::i;:::-;20499:20;20495:214;;;20578:6;:35;139:3:47;;20565:48:20;;-1:-1:-1;;;20578:35:20;;20564:86;20578:35;20565:10;:48;:::i;:::-;20564:86;;;;:::i;:::-;20535:115;;20664:34;20692:5;20664:27;:34::i;:::-;;20495:214;20719:22;20744:168;20781:10;20805:13;20832:8;20854:2;20870:13;20897:5;20744:23;:168::i;:::-;20719:193;;20973:2;-1:-1:-1;;;;;20928:64:20;20961:10;-1:-1:-1;;;;;20928:64:20;20951:8;-1:-1:-1;;;;;20928:64:20;;20977:14;20928:64;;;;4456:25:70;;4444:2;4429:18;;4310:177;20928:64:20;;;;;;;;19417:1595;;;;;19256:1756;;;;;:::o;50611:1101::-;50863:11;50858:848;;50915:6;:32;-1:-1:-1;;;;;50915:32:20;;;;51121:35;;51117:579;;53259:20;;53283:3;53259:27;;;;-1:-1:-1;;;;;53336:40:20;51198:16;-1:-1:-1;;;;;51355:25:20;;51368:12;51355:25;51354:110;;51458:6;51354:110;;;51404:18;-1:-1:-1;;;;;51404:18:20;;:6;:18;:::i;:::-;51335:129;;51515:14;51504:8;:25;51500:87;;;51558:29;;-1:-1:-1;;;51558:29:20;;;;;;;;;;;51500:87;51619:49;51647:20;:8;:18;:20::i;:::-;-1:-1:-1;;;;;53652:46:20;53660:12;53676:3;53660:19;53652:46;53629:20;:69;53548:170;51865:347;52056:6;:24;-1:-1:-1;;;;;52056:24:20;52031:50;;;:116;;-1:-1:-1;52122:6:20;:24;-1:-1:-1;;;52122:24:20;;-1:-1:-1;;;;;52122:24:20;52097:50;;52031:116;52014:185;;;52165:34;;-1:-1:-1;;;52165:34:20;;;;;;;;;;;48726:1219;48898:6;:30;-1:-1:-1;;;48898:30:20;;;;48894:87;;;48949:32;;-1:-1:-1;;;48949:32:20;;;;;;;;;;;48894:87;49064:12;:10;:12::i;:::-;49060:111;;;49099:47;;-1:-1:-1;;;49099:47:20;;;;;;;;;;;49060:111;49276:26;49291:10;49276:14;:26::i;:::-;:31;49272:124;;49330:42;;-1:-1:-1;;;49330:42:20;;;;;;;;;;;49272:124;49470:8;-1:-1:-1;;;;;49470:22:20;;49466:416;;49698:11;:39;;;;-1:-1:-1;49713:10:20;-1:-1:-1;;;;;49713:24:20;;;;49698:39;49694:97;;;49762:29;;-1:-1:-1;;;49762:29:20;;;;;;;;;;;49694:97;49819:39;;-1:-1:-1;;;49819:39:20;;-1:-1:-1;;;;;15930:32:70;;;49819:39:20;;;15912:51:70;49856:1:20;15979:18:70;;;15972:34;49829:8:20;49819:24;;;;15885:18:70;;49819:39:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49466:416;49892:46;49927:10;49892:34;:46::i;52453:517::-;52542:9;;52538:426;;52567:31;;;;;;;;;52589:9;52567:31;-1:-1:-1;;;;;52567:31:20;;;;;-1:-1:-1;;;52567:31:20;;;;;;;;52613:312;;;;52670:17;:5;:15;:17::i;:::-;52647:40;;:2;;:40;;;;;:::i;:::-;-1:-1:-1;;;;;52647:40:20;;;;;;52731:17;;;;52709:19;;:39;;;;;;52705:127;;-1:-1:-1;52705:127:20;;52779:34;;-1:-1:-1;;;52779:34:20;;;;;;;;;;;52705:127;52613:312;;;52893:17;:5;:15;:17::i;:::-;52870:40;;:2;;:40;;;;;:::i;:::-;-1:-1:-1;;;;;52870:40:20;;;-1:-1:-1;52613:312:20;52939:14;;;;;;;-1:-1:-1;;;;;52939:14:20;;;-1:-1:-1;;;52939:14:20;;;;:9;:14;52453:517;;:::o;36927:3423::-;37174:63;;-1:-1:-1;;;37174:63:20;;-1:-1:-1;;;;;11627:15:70;;;37174:63:20;;;11609:34:70;37231:4:20;11659:18:70;;;11652:43;37174:13:20;:38;;;;11544:18:70;;37174:63:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37364:26:20;;-1:-1:-1;;;;;37364:26:20;;;-1:-1:-1;37364:26:20;;-1:-1:-1;37364:26:20;;;37507:33;37565:5;37551:11;37600:2193;37624:3;37620:1;:7;37600:2193;;;37645:24;37672:5;;37678:1;37672:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;37645:35;-1:-1:-1;37793:1:20;37769:14;;;;37645:35;37769:14;:::i;:::-;:21;;:25;37765:66;;;37803:28;;-1:-1:-1;;;37803:28:20;;;;;;;;;;;37765:66;37887:4;37863:12;;;;:5;:12;:::i;:::-;-1:-1:-1;;;;;37863:29:20;;37859:1864;;38016:9;38012:310;;;38049:13;38072:14;;;;:5;:14;:::i;:::-;38065:22;;;:::i;:::-;38049:38;-1:-1:-1;;;;;;;38138:89:20;;-1:-1:-1;;;38138:89:20;38109:181;;38257:33;;-1:-1:-1;;;38257:33:20;;;;;;;;;;;38109:181;38027:295;38012:310;38736:229;38787:8;38817:13;38852:14;;;;:5;:14;:::i;:::-;38888:21;38931:16;38736:29;:229::i;:::-;38634:331;;-1:-1:-1;38634:331:20;-1:-1:-1;37859:1864:20;;;39465:1;39388:13;-1:-1:-1;;;;;39388:31:20;;39420:12;;;;:5;:12;:::i;:::-;39388:45;;-1:-1:-1;;;;;;39388:45:20;;;;;;;-1:-1:-1;;;;;2291:32:70;;;39388:45:20;;;2273:51:70;2246:18;;39388:45:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39388:79:20;;:141;;;-1:-1:-1;;;;;;39515:13:20;39491:38;:12;;;;:5;:12;:::i;:::-;-1:-1:-1;;;;;39491:38:20;;39388:141;39363:227;;;39555:35;;-1:-1:-1;;;39555:35:20;;;;;;;;;;;39363:227;39654:41;39680:14;;;;:5;:14;:::i;:::-;39654:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39654:12:20;;-1:-1:-1;;;39654:12:20;;;;;:::i;:::-;-1:-1:-1;;;;;39654:25:20;;;:41::i;:::-;;37859:1864;-1:-1:-1;39765:3:20;;37600:2193;;;-1:-1:-1;39959:23:20;;:28;39955:95;;40001:49;40018:16;40036:13;40001:16;:49::i;:::-;40162:19;;;;;;;40261:63;;-1:-1:-1;;;40261:63:20;;40308:4;40261:63;;;11609:34:70;-1:-1:-1;;;;;11679:15:70;;;11659:18;;;11652:43;40261:13:20;:38;;;;11544:18:70;;40261:63:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37115:3235;;36927:3423;;;;;;:::o;57352:1058::-;57579:67;;-1:-1:-1;;;57579:67:20;;-1:-1:-1;;;;;2291:32:70;;;57579:67:20;;;2273:51:70;57476:16:20;;;;57540:1;;57476:16;;57579:13;:30;;;;2246:18:70;;57579:67:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57551:95;;57670:734;57690:17;57677:9;:30;57670:734;;57727:29;;;:34;57723:604;;57828:68;;-1:-1:-1;;;57828:68:20;;;;;4456:25:70;;;57782:13:20;;;;-1:-1:-1;;;;;57828:13:20;:57;;;;4429:18:70;;57828:68:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57932:38;;-1:-1:-1;;;57932:38:20;;-1:-1:-1;;;;;2291:32:70;;;57932:38:20;;;2273:51:70;57781:115:20;;-1:-1:-1;57781:115:20;;-1:-1:-1;57914:15:20;;57932:23;;;;;2246:18:70;;57932:38:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57914:56;;58016:1;58006:7;:11;58002:311;;;58057:40;;-1:-1:-1;;;58057:40:20;;;;;13118:25:70;;;-1:-1:-1;;;;;13179:32:70;;;13159:18;;;13152:60;58041:13:20;;58057:24;;;;;;13091:18:70;;58057:40:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58169:17;;;;58041:56;-1:-1:-1;58253:28:20;;;;58041:56;58253:28;:::i;:::-;58243:38;;;;:::i;:::-;;;58019:294;58002:311;57763:564;;;57723:604;58379:1;58366:9;:14;;58354:26;;57670:734;;;57510:900;;57352:1058;;;;;:::o;61615:124::-;61698:34;;-1:-1:-1;;;61698:34:20;;-1:-1:-1;;;;;61727:4:20;2291:32:70;;61698:34:20;;;2273:51:70;-1:-1:-1;;61705:10:20;61698:28;;;;;;2246:18:70;;61698:34:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61691:41;;61615:124;:::o;61377:167::-;61422:14;61461:9;61460:57;;;;-1:-1:-1;;61495:6:20;:21;-1:-1:-1;;;61495:21:20;;;;61476:15;:40;;;61377:167::o;52218:152::-;52308:55;;-1:-1:-1;;;52308:55:20;;52345:10;52308:55;;;18908:51:70;19002:14;;18995:22;18975:18;;;18968:50;52285:4:20;;52308:13;-1:-1:-1;;;;;52308:36:20;;;;18881:18:70;;52308:55:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52301:62;52218:152;-1:-1:-1;;52218:152:20:o;24683:2555::-;24898:22;24932:21;24956:24;24971:8;24956:14;:24::i;:::-;24932:48;-1:-1:-1;25293:17:20;;25289:126;;25326:65;;-1:-1:-1;;;25326:65:20;;-1:-1:-1;;;;;11627:15:70;;;25326:65:20;;;11609:34:70;25375:15:20;11679::70;;11659:18;;;11652:43;25326:13:20;:38;;;;11544:18:70;;25326:65:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25289:126;25425:32;25460:24;:22;:24::i;:::-;25592:61;;-1:-1:-1;;;25592:61:20;;-1:-1:-1;;;;;2291:32:70;;;25592:61:20;;;2273:51:70;25425:59:20;;-1:-1:-1;;;;;25592:13:20;:46;;;;;;2246:18:70;;25592:61:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25495:158;;;;;25776:13;-1:-1:-1;;;;;25776:32:20;;25838:1;25822:13;:17;:46;;25860:8;25822:46;;;25842:15;25822:46;25882:7;:115;;25966:31;25882:115;;;25908:39;25882:115;26011:10;26035;26059:2;26075:13;26102:5;25776:341;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25759:358;;26144:31;26178:24;:22;:24::i;:::-;26144:58;-1:-1:-1;26213:12:20;26266:51;26293:24;26266;:51;:::i;:::-;26228:23;:89;:229;;26456:1;26228:229;;;26418:23;26332:67;26375:24;26332;:67;:::i;:::-;:109;;;;:::i;:::-;26213:244;-1:-1:-1;26472:8:20;;26468:386;;26529:4;26496:37;;-1:-1:-1;;;;26496:37:20;-1:-1:-1;;;26496:37:20;;;26599:16;:4;:14;:16::i;:::-;26563:10;:52;;:32;;:52;;;;-1:-1:-1;;;;;26563:52:20;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;26563:52:20;;;;;;;;;;;;;;;26685:10;:28;-1:-1:-1;;;26685:28:20;;;;26650:32;;:63;26629:168;;-1:-1:-1;26629:168:20;;26746:21;:19;:21::i;:::-;26815:28;;4456:25:70;;;26815:28:20;;4444:2:70;4429:18;26815:28:20;;;;;;;26468:386;26900:47;26925:14;26941:5;26900:24;:47::i;:::-;27132:1;27116:13;:17;:39;;;;;27154:1;27137:14;:18;27116:39;27112:120;;;27171:50;27197:8;27207:13;27171:25;:50::i;:::-;24922:2316;;;;;;24683:2555;;;;;;;;:::o;50091:388::-;50323:10;-1:-1:-1;;;;;50323:24:20;;;;;;:81;;-1:-1:-1;50381:10:20;50364:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;50364:40:20;;;;;;;;;;;;50363:41;50323:81;50306:152;;;50422:36;;-1:-1:-1;;;50422:36:20;;;;;;;;;;;9088:192:68;9145:7;-1:-1:-1;;;;;9172:26:68;;;9164:78;;;;-1:-1:-1;;;9164:78:68;;19958:2:70;9164:78:68;;;19940:21:70;19997:2;19977:18;;;19970:30;20036:34;20016:18;;;20009:62;-1:-1:-1;;;20087:18:70;;;20080:37;20134:19;;9164:78:68;19756:403:70;9164:78:68;-1:-1:-1;9267:5:68;9088:192::o;27499:545:20:-;27588:21;27642:25;:156;;;;-1:-1:-1;27683:115:20;;-1:-1:-1;;;27683:115:20;;-1:-1:-1;;;;;27748:10:20;11627:15:70;;27683:115:20;;;11609:34:70;11679:15;;;11659:18;;;11652:43;27700:15:20;27683:47;;;;11544:18:70;;27683:115:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27625:413;;;27944:45;;-1:-1:-1;;;27944:45:20;;-1:-1:-1;;;;;27973:15:20;2291:32:70;;27944:45:20;;;2273:51:70;27951:10:20;27944:28;;;;2246:18:70;;27944:45:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28012:1;27944:69;27908:105;;27625:413;27499:545;;;:::o;40812:4508::-;41173:27;41229:22;41072:26;41278:16;41285:8;;41278:16;:::i;:::-;41262:32;-1:-1:-1;;;;;;;;;;41614:65:20;;;41610:3704;;42009:23;;:28;42005:94;;42062:37;;-1:-1:-1;;;42062:37:20;;;;;;;;;;;42005:94;42214:12;:8;42223:1;42214:8;;:12;:::i;:::-;42203:37;;;;;;;:::i;:::-;42184:56;;42351:47;42366:16;42384:13;42351:14;:47::i;:::-;42332:66;;41610:3704;;;-1:-1:-1;;;;;;;;;42488:46:20;;;42484:2830;;42598:18;;;42679:12;:8;42688:1;42679:8;;:12;:::i;:::-;42651:99;;;;;;;:::i;:::-;42597:153;;;;;;42914:251;42945:10;42987:8;-1:-1:-1;;;;;42973:22:20;:10;-1:-1:-1;;;;;42973:22:20;;:131;;43054:50;;-1:-1:-1;;;43054:50:20;;-1:-1:-1;;;;;2291:32:70;;;43054:50:20;;;2273:51:70;43054:13:20;:38;;;;2246:18:70;;43054:50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42973:131;;;43018:13;42973:131;43122:5;43145:6;42914:13;:251::i;:::-;42536:657;;;42484:2830;;;-1:-1:-1;;;;;;;;;43258:53:20;;;43254:2060;;43493:4;;-1:-1:-1;43572:14:20;43600:12;:8;43609:1;43600:8;;:12;:::i;:::-;43589:35;;;;;;;:::i;:::-;43572:52;;43651:46;43665:8;43675:13;43690:6;43651:13;:46::i;:::-;43313:408;43254:2060;;;-1:-1:-1;;;;;;;;;43786:53:20;;;43782:1532;;43952:21;43948:98;;;43998:48;;-1:-1:-1;;;43998:48:20;;;;;;;;;;;43948:98;44121:14;44149:12;:8;44158:1;44149:8;;:12;:::i;:::-;44138:35;;;;;;;:::i;:::-;44121:52;;44201:46;44215:8;44225:13;44240:6;44201:13;:46::i;43782:1532::-;-1:-1:-1;;;;;;;;;44335:52:20;;;44331:983;;44431:13;44458:12;:8;44467:1;44458:8;;:12;:::i;:::-;44447:35;;;;;;;:::i;:::-;44431:51;;44565:44;44578:8;44588:13;44603:5;44565:12;:44::i;44331:983::-;-1:-1:-1;;;;;;;;;44875:53:20;;;44871:443;;44972:13;44999:12;:8;45008:1;44999:8;;:12;:::i;:::-;44988:35;;;;;;;:::i;:::-;44972:51;;45107:45;45121:8;45131:13;45146:5;45107:13;:45::i;44871:443::-;45266:24;;-1:-1:-1;;;45266:24:20;;;;;;;;;;;44871:443;41139:4181;40812:4508;;;;;;;;;:::o;3466:185:65:-;3541:12;3572:72;3594:6;3602:4;3608:1;3572:72;;;;;;;;;;;;;;;;;:21;:72::i;46297:494:20:-;46431:15;;46417:11;46469:316;46493:3;46489:1;:7;46469:316;;;46604:8;46613:1;46604:11;;;;;;;;:::i;:::-;;;;;;;:19;;;46542:8;46551:1;46542:11;;;;;;;;:::i;:::-;;;;;;;;;;;:17;46535:50;;-1:-1:-1;;;46535:50:20;;-1:-1:-1;;;;;2291:32:70;;;46535:50:20;;;2273:51:70;46535:35:20;;;;;;2246:18:70;;46535:50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;46514:188;;;46684:8;46693:1;46684:11;;;;;;;;:::i;:::-;;;;;;;;;;;:17;46645:57;;-1:-1:-1;;;46645:57:20;;-1:-1:-1;;;;;2291:32:70;;;46645:57:20;;;2273:51:70;2246:18;;46645:57:20;2127:203:70;46514:188:20;46757:3;;46469:316;;55434:98;55502:13;-1:-1:-1;;;;;55484:39:20;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28307:638;28454:45;;-1:-1:-1;;;28454:45:20;;-1:-1:-1;;;;;28483:15:20;2291:32:70;;28454:45:20;;;2273:51:70;-1:-1:-1;;28461:10:20;28454:28;;;;;;2246:18:70;;28454:45:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28430:69;;28529:19;28513:13;:35;28509:430;;;28696:138;;-1:-1:-1;;;28696:138:20;;-1:-1:-1;;;;;28760:10:20;23676:15:70;;28696:138:20;;;23658:34:70;23728:15;;;23708:18;;;23701:43;28667:1:20;28629:35;;;:39;23760:18:70;;;23753:34;;;28629:39:20;28713:15;28696:46;;;;;;23593:18:70;;28696:138:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28898:8;-1:-1:-1;;;;;28866:49:20;;28908:6;28866:49;;;;4456:25:70;;4444:2;4429:18;;4310:177;28866:49:20;;;;;;;;28550:389;28420:525;28307:638;;:::o;45553:481::-;45720:15;;45674:16;;45706:11;45758:231;45782:3;45778:1;:7;45758:231;;;45833:8;45842:1;45833:11;;;;;;;;:::i;:::-;;;;;;;;;;;:17;45826:80;;-1:-1:-1;;;45826:80:20;;-1:-1:-1;;;;;2291:32:70;;;45826:80:20;;;2273:51:70;45826:35:20;;;;;;2246:18:70;;45826:80:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45803:8;45812:1;45803:11;;;;;;;;:::i;:::-;;;;;;;:19;;:103;;;;;;;:::i;:::-;;;-1:-1:-1;45961:3:20;;45758:231;;;-1:-1:-1;46006:8:20;;45553:481;-1:-1:-1;;;45553:481:20:o;29137:1282::-;29355:6;:30;-1:-1:-1;;;29355:30:20;;;;29351:100;;;29408:32;;-1:-1:-1;;;29408:32:20;;;;;;;;;;;29351:100;29555:41;29589:6;29555:33;:41::i;:::-;29762:36;29784:13;29762:21;:36::i;:::-;29894:38;29919:6;29927:4;29894:24;:38::i;:::-;30066:99;;-1:-1:-1;;;30066:99:20;;-1:-1:-1;;;;;24012:32:70;;;30066:99:20;;;23994:51:70;24061:18;;;24054:34;;;30151:4:20;24104:18:70;;;24097:50;30038:25:20;;30066:13;:24;;;;;;23967:18:70;;30066:99:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30038:127;;30259:47;30288:17;30259:28;:47::i;:::-;30382:8;-1:-1:-1;;;;;30359:40:20;;30392:6;30359:40;;;;4456:25:70;;4444:2;4429:18;;4310:177;32106:1006:20;32272:74;;-1:-1:-1;;;32272:74:20;;-1:-1:-1;;;;;2291:32:70;;;32272:74:20;;;2273:51:70;32236:28:20;;32272:13;:59;;;;;;2246:18:70;;32272:74:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32460:100:20;;-1:-1:-1;;;32460:100:20;;-1:-1:-1;;;;;24012:32:70;;;32460:100:20;;;23994:51:70;24061:18;;;24054:34;;;32432:25:20;24104:18:70;;;24097:50;;;32235:111:20;;-1:-1:-1;32460:13:20;:24;;;;23967:18:70;;32460:100:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32432:128;;32648:47;32677:17;32648:28;:47::i;:::-;32903:107;32941:40;32964:17;32941:20;:40;:::i;:::-;32995:5;32903:24;:107::i;:::-;33075:8;-1:-1:-1;;;;;33052:40:20;;33085:6;33052:40;;;;4456:25:70;;4444:2;4429:18;;4310:177;33052:40:20;;;;;;;;32225:887;;32106:1006;;;:::o;54421:430::-;54708:55;;-1:-1:-1;;;54708:55:20;;-1:-1:-1;;;;;11627:15:70;;;54708:55:20;;;11609:34:70;11679:15;;;11659:18;;;11652:43;54708:13:20;:33;;;;11544:18:70;;54708:55:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54815:29:20;;-1:-1:-1;;;;;54815:29:20;;;;-1:-1:-1;54815:29:20;;;-1:-1:-1;54815:29:20;;;;;54421:430;;;:::o;54990:399::-;55232:48;;-1:-1:-1;;;55232:48:20;;-1:-1:-1;;;;;11627:15:70;;;55232:48:20;;;11609:34:70;11679:15;;;11659:18;;;11652:43;55232:13:20;:26;;;;11544:18:70;;55232:48:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55228:141;;;55352:5;-1:-1:-1;;;;;55328:30:20;55342:8;-1:-1:-1;;;;;55328:30:20;;;;;;;;;;;54990:399;;;:::o;4960:446:65:-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:65;;24360:2:70;5149:81:65;;;24342:21:70;24399:2;24379:18;;;24372:30;24438:34;24418:18;;;24411:62;-1:-1:-1;;;24489:18:70;;;24482:36;24535:19;;5149:81:65;24158:402:70;5149:81:65;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:65;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:65:o;31523:387:20:-;31628:67;;-1:-1:-1;;;31628:67:20;;-1:-1:-1;;;;;2291:32:70;;;31628:67:20;;;2273:51:70;31601:24:20;;31628:13;:30;;;;;;2246:18:70;;31628:67:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31601:94;;31705:26;31734:13;-1:-1:-1;;;;;31734:32:20;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31705:63;-1:-1:-1;31783:37:20;;;:41;31779:125;;31847:46;;-1:-1:-1;;;31847:46:20;;;;;;;;;;;7466:628:65;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:65;;;7908:60;;;;-1:-1:-1;;;7908:60:65;;25314:2:70;7908:60:65;;;25296:21:70;25353:2;25333:18;;;25326:30;25392:31;25372:18;;;25365:59;25441:18;;7908:60:65;25112:353:70;7908:60:65;-1:-1:-1;8003:10:65;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:65;;;;;;;;:::i;14:131:70:-;-1:-1:-1;;;;;89:31:70;;79:42;;69:70;;135:1;132;125:12;150:118;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:70;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;660:188::-;728:20;;-1:-1:-1;;;;;777:46:70;;767:57;;757:85;;838:1;835;828:12;853:186;912:6;965:2;953:9;944:7;940:23;936:32;933:52;;;981:1;978;971:12;933:52;1004:29;1023:9;1004:29;:::i;1044:385::-;1125:8;1135:6;1189:3;1182:4;1174:6;1170:17;1166:27;1156:55;;1207:1;1204;1197:12;1156:55;-1:-1:-1;1230:20:70;;-1:-1:-1;;;;;1262:30:70;;1259:50;;;1305:1;1302;1295:12;1259:50;1342:4;1334:6;1330:17;1318:29;;1402:3;1395:4;1385:6;1382:1;1378:14;1370:6;1366:27;1362:38;1359:47;1356:67;;;1419:1;1416;1409:12;1356:67;1044:385;;;;;:::o;1434:688::-;1568:6;1576;1584;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;-1:-1:-1;1821:2:70;1806:18;;1793:32;;-1:-1:-1;1876:2:70;1861:18;;1848:32;-1:-1:-1;;;;;1892:30:70;;1889:50;;;1935:1;1932;1925:12;1889:50;1974:88;2054:7;2045:6;2034:9;2030:22;1974:88;:::i;:::-;1434:688;;;;-1:-1:-1;2081:8:70;-1:-1:-1;;;;1434:688:70:o;2335:247::-;2394:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;2502:9;2489:23;2521:31;2546:5;2521:31;:::i;2779:830::-;2922:6;2930;2938;2946;2954;3007:3;2995:9;2986:7;2982:23;2978:33;2975:53;;;3024:1;3021;3014:12;2975:53;3063:9;3050:23;3082:31;3107:5;3082:31;:::i;:::-;3132:5;-1:-1:-1;3189:2:70;3174:18;;3161:32;3202:33;3161:32;3202:33;:::i;:::-;3254:7;-1:-1:-1;3308:2:70;3293:18;;3280:32;;-1:-1:-1;3363:2:70;3348:18;;3335:32;-1:-1:-1;;;;;3379:30:70;;3376:50;;;3422:1;3419;3412:12;3376:50;3461:88;3541:7;3532:6;3521:9;3517:22;3461:88;:::i;:::-;2779:830;;;;-1:-1:-1;2779:830:70;;-1:-1:-1;3568:8:70;;3435:114;2779:830;-1:-1:-1;;;2779:830:70:o;3614:117::-;3699:6;3692:5;3688:18;3681:5;3678:29;3668:57;;3721:1;3718;3711:12;3736:245;3794:6;3847:2;3835:9;3826:7;3822:23;3818:32;3815:52;;;3863:1;3860;3853:12;3815:52;3902:9;3889:23;3921:30;3945:5;3921:30;:::i;4492:456::-;4569:6;4577;4585;4638:2;4626:9;4617:7;4613:23;4609:32;4606:52;;;4654:1;4651;4644:12;4606:52;4693:9;4680:23;4712:31;4737:5;4712:31;:::i;:::-;4762:5;-1:-1:-1;4819:2:70;4804:18;;4791:32;4832:33;4791:32;4832:33;:::i;:::-;4492:456;;4884:7;;-1:-1:-1;;;4938:2:70;4923:18;;;;4910:32;;4492:456::o;4953:966::-;5102:6;5110;5118;5126;5134;5142;5195:3;5183:9;5174:7;5170:23;5166:33;5163:53;;;5212:1;5209;5202:12;5163:53;5251:9;5238:23;5270:31;5295:5;5270:31;:::i;:::-;5320:5;-1:-1:-1;5377:2:70;5362:18;;5349:32;5390:33;5349:32;5390:33;:::i;:::-;5442:7;-1:-1:-1;5496:2:70;5481:18;;5468:32;;-1:-1:-1;5552:2:70;5537:18;;5524:32;5565:30;5524:32;5565:30;:::i;:::-;5614:7;-1:-1:-1;5672:3:70;5657:19;;5644:33;-1:-1:-1;;;;;5689:30:70;;5686:50;;;5732:1;5729;5722:12;5686:50;5771:88;5851:7;5842:6;5831:9;5827:22;5771:88;:::i;:::-;4953:966;;;;-1:-1:-1;4953:966:70;;-1:-1:-1;4953:966:70;;5878:8;;4953:966;-1:-1:-1;;;4953:966:70:o;5924:824::-;6064:6;6072;6080;6088;6096;6149:3;6137:9;6128:7;6124:23;6120:33;6117:53;;;6166:1;6163;6156:12;6117:53;6205:9;6192:23;6224:31;6249:5;6224:31;:::i;:::-;6274:5;-1:-1:-1;6326:2:70;6311:18;;6298:32;;-1:-1:-1;6382:2:70;6367:18;;6354:32;6395:30;6354:32;6395:30;:::i;:::-;6444:7;-1:-1:-1;6502:2:70;6487:18;;6474:32;-1:-1:-1;;;;;6518:30:70;;6515:50;;;6561:1;6558;6551:12;6753:260;6821:6;6829;6882:2;6870:9;6861:7;6857:23;6853:32;6850:52;;;6898:1;6895;6888:12;6850:52;6921:29;6940:9;6921:29;:::i;:::-;6911:39;;6969:38;7003:2;6992:9;6988:18;6969:38;:::i;:::-;6959:48;;6753:260;;;;;:::o;7018:594::-;7102:6;7110;7118;7126;7179:3;7167:9;7158:7;7154:23;7150:33;7147:53;;;7196:1;7193;7186:12;7147:53;7232:9;7219:23;7209:33;;7292:2;7281:9;7277:18;7264:32;7305:31;7330:5;7305:31;:::i;:::-;7355:5;-1:-1:-1;7412:2:70;7397:18;;7384:32;7425;7384;7425;:::i;:::-;7476:7;-1:-1:-1;7535:2:70;7520:18;;7507:32;7548;7507;7548;:::i;:::-;7018:594;;;;-1:-1:-1;7018:594:70;;-1:-1:-1;;7018:594:70:o;7617:828::-;7759:6;7767;7775;7783;7791;7844:3;7832:9;7823:7;7819:23;7815:33;7812:53;;;7861:1;7858;7851:12;7812:53;7897:9;7884:23;7874:33;;7957:2;7946:9;7942:18;7929:32;7970:31;7995:5;7970:31;:::i;:::-;8020:5;-1:-1:-1;8076:2:70;8061:18;;8048:32;-1:-1:-1;;;;;8092:30:70;;8089:50;;;8135:1;8132;8125:12;8089:50;8174:88;8254:7;8245:6;8234:9;8230:22;8174:88;:::i;:::-;8281:8;;-1:-1:-1;8148:114:70;-1:-1:-1;;8368:2:70;8353:18;;8340:32;8381;8340;8381;:::i;:::-;8432:7;8422:17;;;7617:828;;;;;;;;:::o;9254:485::-;9370:6;9378;9431:2;9419:9;9410:7;9406:23;9402:32;9399:52;;;9447:1;9444;9437:12;9399:52;9487:9;9474:23;-1:-1:-1;;;;;9512:6:70;9509:30;9506:50;;;9552:1;9549;9542:12;9506:50;9591:88;9671:7;9662:6;9651:9;9647:22;9591:88;:::i;:::-;9698:8;;9565:114;;-1:-1:-1;9254:485:70;-1:-1:-1;;;;9254:485:70:o;10219:388::-;10287:6;10295;10348:2;10336:9;10327:7;10323:23;10319:32;10316:52;;;10364:1;10361;10354:12;10316:52;10403:9;10390:23;10422:31;10447:5;10422:31;:::i;:::-;10472:5;-1:-1:-1;10529:2:70;10514:18;;10501:32;10542:33;10501:32;10542:33;:::i;10612:278::-;10670:6;10723:2;10711:9;10702:7;10698:23;10694:32;10691:52;;;10739:1;10736;10729:12;10691:52;10778:9;10765:23;10828:12;10821:5;10817:24;10810:5;10807:35;10797:63;;10856:1;10853;10846:12;10895:241;10951:6;11004:2;10992:9;10983:7;10979:23;10975:32;10972:52;;;11020:1;11017;11010:12;10972:52;11059:9;11046:23;11078:28;11100:5;11078:28;:::i;11141:251::-;11211:6;11264:2;11252:9;11243:7;11239:23;11235:32;11232:52;;;11280:1;11277;11270:12;11232:52;11312:9;11306:16;11331:31;11356:5;11331:31;:::i;11706:127::-;11767:10;11762:3;11758:20;11755:1;11748:31;11798:4;11795:1;11788:15;11822:4;11819:1;11812:15;11838:168;11911:9;;;11942;;11959:15;;;11953:22;;11939:37;11929:71;;11980:18;;:::i;12011:217::-;12051:1;12077;12067:132;;12121:10;12116:3;12112:20;12109:1;12102:31;12156:4;12153:1;12146:15;12184:4;12181:1;12174:15;12067:132;-1:-1:-1;12213:9:70;;12011:217::o;12423:383::-;12501:6;12509;12562:2;12550:9;12541:7;12537:23;12533:32;12530:52;;;12578:1;12575;12568:12;12530:52;12610:9;12604:16;12629:31;12654:5;12629:31;:::i;:::-;12729:2;12714:18;;12708:25;12679:5;;-1:-1:-1;12742:32:70;12708:25;12742:32;:::i;12811:128::-;12878:9;;;12899:11;;;12896:37;;;12913:18;;:::i;13767:184::-;13837:6;13890:2;13878:9;13869:7;13865:23;13861:32;13858:52;;;13906:1;13903;13896:12;13858:52;-1:-1:-1;13929:16:70;;13767:184;-1:-1:-1;13767:184:70:o;13956:306::-;14044:6;14052;14060;14113:2;14101:9;14092:7;14088:23;14084:32;14081:52;;;14129:1;14126;14119:12;14081:52;14158:9;14152:16;14142:26;;14208:2;14197:9;14193:18;14187:25;14177:35;;14252:2;14241:9;14237:18;14231:25;14221:35;;13956:306;;;;;:::o;14627:241::-;14712:1;14705:5;14702:12;14692:143;;14757:10;14752:3;14748:20;14745:1;14738:31;14792:4;14789:1;14782:15;14820:4;14817:1;14810:15;14692:143;14844:18;;14627:241::o;14873:730::-;-1:-1:-1;;;;;15263:15:70;;;15245:34;;15194:3;15179:19;;;15288:57;15341:2;15326:18;;15318:6;15288:57;:::i;:::-;15376:2;15361:18;;15354:34;;;;15424:15;;;15419:2;15404:18;;15397:43;15477:15;;;;15471:3;15456:19;;15449:44;15524:3;15509:19;;15502:35;15581:14;;15574:22;15568:3;15553:19;;;15546:51;;;;14873:730;;-1:-1:-1;;14873:730:70:o;15608:125::-;15673:9;;;15694:10;;;15691:36;;;15707:18;;:::i;16017:245::-;16084:6;16137:2;16125:9;16116:7;16112:23;16108:32;16105:52;;;16153:1;16150;16143:12;16105:52;16185:9;16179:16;16204:28;16226:5;16204:28;:::i;17015:197::-;-1:-1:-1;;;;;17137:10:70;;;17149;;;17133:27;;17172:11;;;17169:37;;;17186:18;;:::i;:::-;17169:37;17015:197;;;;:::o;17217:200::-;-1:-1:-1;;;;;17353:10:70;;;17341;;;17337:27;;17376:12;;;17373:38;;;17391:18;;:::i;17422:127::-;17483:10;17478:3;17474:20;17471:1;17464:31;17514:4;17511:1;17504:15;17538:4;17535:1;17528:15;17554:327;17650:4;17708:11;17695:25;17802:2;17798:7;17787:8;17771:14;17767:29;17763:43;17743:18;17739:68;17729:96;;17821:1;17818;17811:12;17729:96;17842:33;;;;;17554:327;-1:-1:-1;;17554:327:70:o;17886:521::-;17963:4;17969:6;18029:11;18016:25;18123:2;18119:7;18108:8;18092:14;18088:29;18084:43;18064:18;18060:68;18050:96;;18142:1;18139;18132:12;18050:96;18169:33;;18221:20;;;-1:-1:-1;;;;;;18253:30:70;;18250:50;;;18296:1;18293;18286:12;18250:50;18329:4;18317:17;;-1:-1:-1;18360:14:70;18356:27;;;18346:38;;18343:58;;;18397:1;18394;18387:12;18412:323;-1:-1:-1;;;;;;18532:19:70;;18608:11;;;;18639:1;18631:10;;18628:101;;;18716:2;18710;18703:3;18700:1;18696:11;18693:1;18689:19;18685:28;18681:2;18677:37;18673:46;18664:55;;18628:101;;;18412:323;;;;:::o;20164:331::-;20269:9;20280;20322:8;20310:10;20307:24;20304:44;;;20344:1;20341;20334:12;20304:44;20373:6;20363:8;20360:20;20357:40;;;20393:1;20390;20383:12;20357:40;-1:-1:-1;;20419:23:70;;;20464:25;;;;;-1:-1:-1;20164:331:70:o;20500:127::-;20561:10;20556:3;20552:20;20549:1;20542:31;20592:4;20589:1;20582:15;20616:4;20613:1;20606:15;20632:257;20704:4;20698:11;;;20736:17;;-1:-1:-1;;;;;20768:34:70;;20804:22;;;20765:62;20762:88;;;20830:18;;:::i;:::-;20866:4;20859:24;20632:257;:::o;20894:275::-;20965:2;20959:9;21030:2;21011:13;;-1:-1:-1;;21007:27:70;20995:40;;-1:-1:-1;;;;;21050:34:70;;21086:22;;;21047:62;21044:88;;;21112:18;;:::i;:::-;21148:2;21141:22;20894:275;;-1:-1:-1;20894:275:70:o;21174:1317::-;21284:6;21315:2;21358;21346:9;21337:7;21333:23;21329:32;21326:52;;;21374:1;21371;21364:12;21326:52;21414:9;21401:23;-1:-1:-1;;;;;21484:2:70;21476:6;21473:14;21470:34;;;21500:1;21497;21490:12;21470:34;21538:6;21527:9;21523:22;21513:32;;21583:7;21576:4;21572:2;21568:13;21564:27;21554:55;;21605:1;21602;21595:12;21554:55;21641:2;21628:16;21663:2;21659;21656:10;21653:36;;;21669:18;;:::i;:::-;21709:36;21741:2;21736;21733:1;21729:10;21725:19;21709:36;:::i;:::-;21779:15;;;21810:12;;;;-1:-1:-1;21861:1:70;21857:10;;;;21849:19;;21845:28;;;21885:19;;;21882:39;;;21917:1;21914;21907:12;21882:39;21941:11;;;;21961:500;21977:6;21972:3;21969:15;21961:500;;;22059:4;22053:3;22044:7;22040:17;22036:28;22033:118;;;22105:1;22134:2;22130;22123:14;22033:118;22177:22;;:::i;:::-;22240:3;22227:17;22257:33;22282:7;22257:33;:::i;:::-;22303:22;;22374:12;;;22361:26;22345:14;;;22338:50;22401:18;;22003:4;21994:14;;;;22439:12;;;;21961:500;;22973:180;23032:6;23085:2;23073:9;23064:7;23060:23;23056:32;23053:52;;;23101:1;23098;23091:12;23053:52;-1:-1:-1;23124:23:70;;22973:180;-1:-1:-1;22973:180:70:o;24565:250::-;24650:1;24660:113;24674:6;24671:1;24668:13;24660:113;;;24750:11;;;24744:18;24731:11;;;24724:39;24696:2;24689:10;24660:113;;;-1:-1:-1;;24807:1:70;24789:16;;24782:27;24565:250::o;24820:287::-;24949:3;24987:6;24981:13;25003:66;25062:6;25057:3;25050:4;25042:6;25038:17;25003:66;:::i;25470:396::-;25619:2;25608:9;25601:21;25582:4;25651:6;25645:13;25694:6;25689:2;25678:9;25674:18;25667:34;25710:79;25782:6;25777:2;25766:9;25762:18;25757:2;25749:6;25745:15;25710:79;:::i;:::-;25850:2;25829:15;-1:-1:-1;;25825:29:70;25810:45;;;;25857:2;25806:54;;25470:396;-1:-1:-1;;25470:396:70:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "4127800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "addCollateral(address,address,uint256)": "infinite", - "approveAccountTransfer(address,bool)": "infinite", - "blacklistHelper()": "infinite", - "calcCreditAccountHealthFactor(address)": "infinite", - "calcTotalValue(address)": "infinite", - "closeCreditAccount(address,uint256,(address,bytes)[])": "infinite", - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": "infinite", - "creditManager()": "infinite", - "degenNFT()": "infinite", - "expirable()": "infinite", - "getTotalBorrowedInBlock()": "2480", - "hasOpenedCreditAccount(address)": "infinite", - "isBlacklistableUnderlying()": "infinite", - "isTokenAllowed(address)": "infinite", - "limits()": "2461", - "liquidateCreditAccount(address,address,uint256,(address,bytes)[])": "infinite", - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": "infinite", - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": "infinite", - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": "infinite", - "lossParams()": "2439", - "multicall((address,bytes)[])": "infinite", - "openCreditAccount(uint256,address,uint16,uint16)": "infinite", - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": "infinite", - "params()": "2591", - "pool()": "infinite", - "resetCumulativeLoss()": "infinite", - "setCreditAccountLimits(uint128,uint128)": "infinite", - "setEmergencyLiquidationDiscount(uint16)": "infinite", - "setExpirationDate(uint40)": "infinite", - "setIncreaseDebtForbidden(bool)": "infinite", - "setLimitPerBlock(uint128)": "infinite", - "setMaxCumulativeLoss(uint128)": "infinite", - "setTotalDebtParams(uint128,uint128)": "infinite", - "totalDebt()": "2503", - "transferAccountOwnership(address)": "infinite", - "transfersAllowed(address,address)": "infinite", - "underlying()": "infinite", - "version()": "263", - "wethAddress()": "infinite", - "whitelisted()": "infinite" - }, - "internal": { - "_calcTotalValueUSD(contract IPriceOracleV2,address)": "infinite", - "_checkAndUpdateBorrowedBlockLimit(uint256)": "infinite", - "_checkAndUpdateTotalDebt(uint256,bool)": "infinite", - "_checkForbiddenTokens(address)": "infinite", - "_checkIfEmergencyLiquidator(bool)": "infinite", - "_closeCreditAccount(address,uint256,struct MultiCall calldata[] calldata)": "infinite", - "_closeLiquidatedAccount(uint256,address,address,address,uint256,bool)": "infinite", - "_compareBalances(struct Balance memory[] memory,address)": "infinite", - "_decreaseDebt(address,address,uint256)": "infinite", - "_disableToken(address,address,address)": "infinite", - "_enableToken(address,address,address)": "infinite", - "_getAvailableLiquidity()": "infinite", - "_increaseClaimableBalance(address,uint256)": "infinite", - "_increaseDebt(address,address,uint256)": "infinite", - "_isAccountLiquidatable(address)": "infinite", - "_isBlacklisted(address)": "infinite", - "_isExpired()": "infinite", - "_liquidateCreditAccount(address,address,uint256,struct MultiCall calldata[] calldata)": "infinite", - "_liquidateExpiredCreditAccount(address,address,uint256,struct MultiCall calldata[] calldata)": "infinite", - "_multicall(struct MultiCall calldata[] calldata,address,address,bool,bool)": "infinite", - "_pauseCreditManager()": "infinite", - "_processCreditFacadeMulticall(address,address,bytes calldata,bool,struct Balance memory[] memory)": "infinite", - "_revertIfActionOnAccountNotAllowed(address)": "infinite", - "_revertIfOpenCreditAccountNotAllowed(address)": "infinite", - "_revertIfOutOfBorrowedLimits(uint256)": "infinite", - "_storeBalances(struct Balance memory[] memory,address)": "infinite", - "_updateTotalBorrowedInBlock(uint128)": "infinite", - "_wrapETH()": "infinite", - "addCollateral(address,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "addCollateral(address,address,uint256)": "59781034", - "approveAccountTransfer(address,bool)": "00842b57", - "blacklistHelper()": "938294a9", - "calcCreditAccountHealthFactor(address)": "dfd59465", - "calcTotalValue(address)": "c7de38a6", - "closeCreditAccount(address,uint256,(address,bytes)[])": "12de90c9", - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": "5f73fbec", - "creditManager()": "c12c21c0", - "degenNFT()": "9408b63f", - "expirable()": "b1836d32", - "getTotalBorrowedInBlock()": "9b67ab30", - "hasOpenedCreditAccount(address)": "256ac915", - "isBlacklistableUnderlying()": "e1d49d7d", - "isTokenAllowed(address)": "f9eaee0d", - "limits()": "860aefcf", - "liquidateCreditAccount(address,address,uint256,(address,bytes)[])": "5c1ca80f", - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": "5d91a0e0", - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": "26aac859", - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": "82871ace", - "lossParams()": "50393109", - "multicall((address,bytes)[])": "caa5c23f", - "openCreditAccount(uint256,address,uint16,uint16)": "6c8f225d", - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": "7071b7c5", - "params()": "cff0ab96", - "pool()": "16f0115b", - "resetCumulativeLoss()": "a706efc4", - "setCreditAccountLimits(uint128,uint128)": "601d66f6", - "setEmergencyLiquidationDiscount(uint16)": "4527d9ce", - "setExpirationDate(uint40)": "eb9606df", - "setIncreaseDebtForbidden(bool)": "ffd9b907", - "setLimitPerBlock(uint128)": "9c55a054", - "setMaxCumulativeLoss(uint128)": "08c25f8f", - "setTotalDebtParams(uint128,uint128)": "b2f4d328", - "totalDebt()": "fc7b9c18", - "transferAccountOwnership(address)": "5019e20a", - "transfersAllowed(address,address)": "d9ccbec1", - "underlying()": "6f307dc3", - "version()": "54fd4d50", - "wethAddress()": "4f0e0ef3", - "whitelisted()": "3d9287fa" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_degenNFT\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_blacklistHelper\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_expirable\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccountTransferNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ActionProhibitedWithForbiddenTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"BalanceLessThanMinimumDesiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowAmountOutOfLimitsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowedBlockLimitException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateNonExpiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateWithSuchHealthFactorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantTransferLiquidatableAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedBalancesAlreadySetException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForbiddenDuringClosureException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectCallDataException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseAndDecreaseForbiddenInOneCallException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseDebtForbiddenException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquiditySanityCheckException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedForBlacklistedAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedInWhitelistedMode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedWhenNotExpirableException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OpenAccountNotAllowedAfterExpirationException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnknownMethodException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"AddCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"blacklistHelper\",\"type\":\"address\"}],\"name\":\"BlacklistHelperSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"CloseCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DecreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IncreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"IncurLossOnLiquidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateExpiredCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MultiCallFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"MultiCallStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"OpenCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"TransferAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"TransferAccountAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnderlyingSentToBlacklistHelper\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"approveAccountTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blacklistHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hf\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcTotalValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"twv\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"closeCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"closeCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"contract ICreditManagerV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"degenNFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expirable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalBorrowedInBlock\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"blockLastUpdate\",\"type\":\"uint64\"},{\"internalType\":\"uint128\",\"name\":\"borrowedInBlock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"hasOpenedCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBlacklistableUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"limits\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"minBorrowedAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"maxBorrowedAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateExpiredCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateExpiredCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lossParams\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"currentCumulativeLoss\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"maxCumulativeLoss\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"multicall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"leverageFactor\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"openCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"openCreditAccountMulticall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"maxBorrowedAmountPerBlock\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint40\",\"name\":\"expirationDate\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"emergencyLiquidationDiscount\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetCumulativeLoss\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_minBorrowedAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_maxBorrowedAmount\",\"type\":\"uint128\"}],\"name\":\"setCreditAccountLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newDiscount\",\"type\":\"uint16\"}],\"name\":\"setEmergencyLiquidationDiscount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint40\",\"name\":\"newExpirationDate\",\"type\":\"uint40\"}],\"name\":\"setExpirationDate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_mode\",\"type\":\"bool\"}],\"name\":\"setIncreaseDebtForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newLimit\",\"type\":\"uint128\"}],\"name\":\"setLimitPerBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_maxCumulativeLoss\",\"type\":\"uint128\"}],\"name\":\"setMaxCumulativeLoss\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newCurrentTotalDebt\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"newLimit\",\"type\":\"uint128\"}],\"name\":\"setTotalDebtParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDebt\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"currentTotalDebt\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalDebtLimit\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferAccountOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"transfersAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wethAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Direct interaction with the Credit Manager is forbidden, but Credit Facade provides all the needed account management functions: open / close / liquidate / addCollateral / manageDebt / multicall. The latter allows to perform multiple actions within a single transaction, followed by a single collateral check in the end.\",\"errors\":{\"AccountTransferNotAllowedException()\":[{\"details\":\"Thrown if a user attempts to transfer a CA to an address that didn't allow it\"}],\"ActionProhibitedWithForbiddenTokensException()\":[{\"details\":\"Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled\"}],\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"BalanceLessThanMinimumDesiredException(address)\":[{\"details\":\"Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called\"}],\"BorrowAmountOutOfLimitsException()\":[{\"details\":\"Thrown if the new debt principal for a CA falls outside of borrowing limits\"}],\"BorrowedBlockLimitException()\":[{\"details\":\"Thrown if too much new debt was taken within a single block\"}],\"CantLiquidateNonExpiredException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired\"}],\"CantLiquidateWithSuchHealthFactorException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account with a health factor above 1\"}],\"CantTransferLiquidatableAccountException()\":[{\"details\":\"Thrown if the account owner tries to transfer an unhealthy account\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"ExpectedBalancesAlreadySetException()\":[{\"details\":\"Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice\"}],\"ForbiddenDuringClosureException()\":[{\"details\":\"Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"IncorrectCallDataException()\":[{\"details\":\"Thrown if call data passed to a multicall is too short\"}],\"IncreaseAndDecreaseForbiddenInOneCallException()\":[{\"details\":\"Thrown if debt increase and decrease are subsequently attempted in one multicall\"}],\"IncreaseDebtForbiddenException()\":[{\"details\":\"Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on\"}],\"LiquiditySanityCheckException()\":[{\"details\":\"Thrown when the pool receives less funds than borrowAmountWithInterest on account closure\"}],\"NotAllowedForBlacklistedAddressException()\":[{\"details\":\"Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token\"}],\"NotAllowedInWhitelistedMode()\":[{\"details\":\"Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode\"}],\"NotAllowedWhenNotExpirableException()\":[{\"details\":\"Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"OpenAccountNotAllowedAfterExpirationException()\":[{\"details\":\"Thrown if a user attempts to open an account on a Credit Facade that has expired\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"UnknownMethodException()\":[{\"details\":\"Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{\"addCollateral(address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"onBehalfOf\":\"Address of the borrower whose account is funded\",\"token\":\"Address of a collateral token\"}},\"approveAccountTransfer(address,bool)\":{\"details\":\"Approves account transfer from another user to msg.sender\",\"params\":{\"from\":\"Address for which account transfers are allowed/forbidden\",\"state\":\"True is transfer is allowed, false if forbidden\"}},\"calcCreditAccountHealthFactor(address)\":{\"details\":\"Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued + fees More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\",\"params\":{\"creditAccount\":\"Credit account address\"},\"returns\":{\"hf\":\"= Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)\"}},\"calcTotalValue(address)\":{\"details\":\"Calculates total value for provided Credit Account in underlying More: https://dev.gearbox.fi/developers/credit/economy#totalUSD-value\",\"params\":{\"creditAccount\":\"Credit Account address\"},\"returns\":{\"total\":\"Total value in underlying\",\"twv\":\"Total weighted (discounted by liquidation thresholds) value in underlying\"}},\"closeCreditAccount(address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and closes the account - Wraps ETH to WETH and sends it msg.sender if value > 0 - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying in order to pay the debt. - Closes credit account: + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender. + Transfers all enabled assets with non-zero balances to the \\\"to\\\" address, unless they are marked to be skipped in skipTokenMask - Emits a CloseCreditAccount event\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before closing the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to during account closing\"}},\"closeCreditAccount(address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `closeCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"constructor\":{\"details\":\"Initializes creditFacade and connects it with CreditManager\",\"params\":{\"_blacklistHelper\":\"address of the funds recovery contract for blacklistable underlyings. Must be address(0) is the underlying is not blacklistable\",\"_creditManager\":\"address of Credit Manager\",\"_degenNFT\":\"address of the DegenNFT or address(0) if whitelisted mode is not used\",\"_expirable\":\"Whether the CreditFacade can expire and implements expiration-related logic\"}},\"getTotalBorrowedInBlock()\":{\"details\":\"Returns the last block where debt was taken, and the total amount borrowed in that block\"},\"hasOpenedCreditAccount(address)\":{\"details\":\"Returns true if the borrower has an open Credit Account\",\"params\":{\"borrower\":\"Borrower address\"}},\"isTokenAllowed(address)\":{\"details\":\"Returns true if token is a collateral token and is not forbidden, otherwise returns false\",\"params\":{\"token\":\"Token to check\"}},\"liquidateCreditAccount(address,address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and liquidates the account - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1. Total value has to be computed before the multicall, otherwise the liquidator would be able to manipulate it. - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0 - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying in order to pay the debt. - Liquidate credit account: + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees, only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower as totalValue * liquidationDiscount - amountToPool. + If borrower happens to be blacklisted in the underlying asset, sends funds to the blacklist helper and marks them as claimable by the borrower. + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator. + Transfers all enabled assets with non-zero balances to the \\\"to\\\" address, unless they are marked to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying - Emits LiquidateCreditAccount event\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before liquidating the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to after liquidation\"}},\"liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and liquidates the account when this Credit Facade is expired The general flow of liquidation is nearly the same as normal liquidations, with two main differences: - An account can be liquidated on an expired Credit Facade even with hf > 1. However, no accounts can be liquidated through this function if the Credit Facade is not expired. - Liquidation premiums and fees for liquidating expired accounts are reduced. It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade is expired.\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before liquidating the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to after liquidation\"}},\"liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"multicall((address,bytes)[])\":{\"details\":\"Executes a batch of transactions within a Multicall, to manage an existing account - Wraps ETH and sends it back to msg.sender, if value > 0 - Executes the Multicall - Performs a fullCollateralCheck to verify that hf > 1 after all actions\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute.\"}},\"openCreditAccount(uint256,address,uint16,uint16)\":{\"details\":\"Opens credit account, borrows funds from the pool and pulls collateral without any additional action. - Performs sanity checks to determine whether opening an account is allowed - Wraps ETH to WETH and sends it msg. sender is value > 0 - Requests CreditManager to open a Credit Account with a specified borrowed amount - Transfers collateral in the underlying asset from the user - Emits OpenCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account\",\"params\":{\"amount\":\"The amount of collateral provided by the borrower\",\"leverageFactor\":\"Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount as the user's own collateral, equivalent to 2x leverage.\",\"onBehalfOf\":\"The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf\",\"referralCode\":\"Referral code that is used for potential rewards. 0 if no referral code provided.\"}},\"openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)\":{\"details\":\"Opens a Credit Account and runs a batch of operations in a multicall - Opens credit account with the desired borrowed amount - Executes all operations in a multicall - Checks that the new account has enough collateral - Emits OpenCreditAccount event\",\"params\":{\"borrowedAmount\":\"Debt size\",\"calls\":\"The array of MultiCall structs encoding the required operations. Generally must have at least a call to addCollateral, as otherwise the health check at the end will fail.\",\"onBehalfOf\":\"The address to open an account for. Transfers to it have to be allowed if msg.sender != onBehalfOf\",\"referralCode\":\"Referral code which is used for potential rewards. 0 if no referral code provided\"}},\"resetCumulativeLoss()\":{\"details\":\"Resets the current cumulative loss value\"},\"setCreditAccountLimits(uint128,uint128)\":{\"details\":\"Sets borrowing limits per single Credit Account\",\"params\":{\"_maxBorrowedAmount\":\"The maximal borrowed amount per Credit Account. Used to limit exposure per a single credit account - especially relevant in whitelisted mode.\",\"_minBorrowedAmount\":\"The minimal borrowed amount per Credit Account. Minimal amount can be relevant for liquidations, since very small amounts will make liquidations unprofitable for liquidators\"}},\"setEmergencyLiquidationDiscount(uint16)\":{\"details\":\"Sets the new emergency liquidation discount value\"},\"setExpirationDate(uint40)\":{\"details\":\"Sets Credit Facade expiration date\"},\"setIncreaseDebtForbidden(bool)\":{\"details\":\"Sets the increaseDebtForbidden mode\"},\"setLimitPerBlock(uint128)\":{\"details\":\"Sets borrowing limit per single block\"},\"setMaxCumulativeLoss(uint128)\":{\"details\":\"Sets the max cumulative loss that can be accrued before pausing the Credit Manager\"},\"setTotalDebtParams(uint128,uint128)\":{\"details\":\"Sets the total debt limit and the current total debt value (used for Credit Facade migration)\"},\"transferAccountOwnership(address)\":{\"details\":\"Transfers credit account to another user By default, this action is forbidden, and the user has to approve transfers from sender to itself by calling approveAccountTransfer. This is done to prevent malicious actors from transferring compromised accounts to other users.\",\"params\":{\"to\":\"Address to transfer the account to\"}}},\"stateVariables\":{\"blacklistHelper\":{\"details\":\"Address of the BlacklistHelper if underlying is blacklistable, otherwise address(0)\"},\"creditManager\":{\"details\":\"Credit Manager connected to this Credit Facade\"},\"degenNFT\":{\"details\":\"Address of the DegenNFT that gatekeeps account openings in whitelisted mode\"},\"expirable\":{\"details\":\"Whether the Credit Facade implements expirable logic\"},\"isBlacklistableUnderlying\":{\"details\":\"Whether the Credit Manager's underlying has blacklisting\"},\"limits\":{\"details\":\"Keeps borrowing limits together for storage access optimization\"},\"lossParams\":{\"details\":\"Keeps parameters that are used to pause the system after too much bad debt over a short period\"},\"params\":{\"details\":\"Keeps frequently accessed parameters for storage access optimization\"},\"pool\":{\"details\":\"Address of the pool connected to the Credit Manager\"},\"totalBorrowedInBlock\":{\"details\":\"Stores in a compressed state the last block where borrowing happened and the total amount borrowed in that block\"},\"transfersAllowed\":{\"details\":\"A map that stores whether a user allows a transfer of an account from another user to themselves\"},\"underlying\":{\"details\":\"Address of the underlying token\"},\"version\":{\"details\":\"Contract version\"},\"wethAddress\":{\"details\":\"Address of WETH\"},\"whitelisted\":{\"details\":\"Whether the whitelisted mode is active\"}},\"title\":\"CreditFacade\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])\":{\"notice\":\"See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration\"},\"setExpirationDate(uint40)\":{\"notice\":\"See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration\"},\"setIncreaseDebtForbidden(bool)\":{\"notice\":\"increaseDebtForbidden can be used to secure pool funds without pausing the entire system. E.g., if a bug is reported that can potentially lead to loss of funds, but there is no immediate threat, new borrowing can be stopped, while other functionality (trading, closing/liquidating accounts) is retained\"},\"setLimitPerBlock(uint128)\":{\"notice\":\"Borrowing limit per block in conjunction with the monitoring system serves to minimize loss from hacks While an attacker would be able to steal, in worst case, up to (limitPerBlock * n blocks) of funds, the monitoring system would pause the contracts after detecting suspicious activity\"}},\"notice\":\"User interface for interacting with Credit Manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":\"CreditFacade\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17197, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "_status", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 5095, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "params", - "offset": 0, - "slot": "1", - "type": "t_struct(Params)5041_storage" - }, - { - "astId": 5100, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "limits", - "offset": 0, - "slot": "2", - "type": "t_struct(Limits)5048_storage" - }, - { - "astId": 5105, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "lossParams", - "offset": 0, - "slot": "3", - "type": "t_struct(CumulativeLossParams)5055_storage" - }, - { - "astId": 5109, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "totalDebt", - "offset": 0, - "slot": "4", - "type": "t_struct(TotalDebt)5062_storage" - }, - { - "astId": 5120, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "transfersAllowed", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" - }, - { - "astId": 5137, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "totalBorrowedInBlock", - "offset": 0, - "slot": "6", - "type": "t_uint256" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_bool)" - }, - "t_struct(CumulativeLossParams)5055_storage": { - "encoding": "inplace", - "label": "struct CumulativeLossParams", - "members": [ - { - "astId": 5051, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "currentCumulativeLoss", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 5054, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "maxCumulativeLoss", - "offset": 16, - "slot": "0", - "type": "t_uint128" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Limits)5048_storage": { - "encoding": "inplace", - "label": "struct Limits", - "members": [ - { - "astId": 5044, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "minBorrowedAmount", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 5047, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "maxBorrowedAmount", - "offset": 16, - "slot": "0", - "type": "t_uint128" - } - ], - "numberOfBytes": "32" - }, - "t_struct(Params)5041_storage": { - "encoding": "inplace", - "label": "struct Params", - "members": [ - { - "astId": 5031, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "maxBorrowedAmountPerBlock", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 5034, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "isIncreaseDebtForbidden", - "offset": 16, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 5037, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "expirationDate", - "offset": 17, - "slot": "0", - "type": "t_uint40" - }, - { - "astId": 5040, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "emergencyLiquidationDiscount", - "offset": 22, - "slot": "0", - "type": "t_uint16" - } - ], - "numberOfBytes": "32" - }, - "t_struct(TotalDebt)5062_storage": { - "encoding": "inplace", - "label": "struct TotalDebt", - "members": [ - { - "astId": 5058, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "currentTotalDebt", - "offset": 0, - "slot": "0", - "type": "t_uint128" - }, - { - "astId": 5061, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol:CreditFacade", - "label": "totalDebtLimit", - "offset": 16, - "slot": "0", - "type": "t_uint128" - } - ], - "numberOfBytes": "32" - }, - "t_uint128": { - "encoding": "inplace", - "label": "uint128", - "numberOfBytes": "16" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint40": { - "encoding": "inplace", - "label": "uint40", - "numberOfBytes": "5" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": { - "notice": "See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - }, - "setExpirationDate(uint40)": { - "notice": "See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - }, - "setIncreaseDebtForbidden(bool)": { - "notice": "increaseDebtForbidden can be used to secure pool funds without pausing the entire system. E.g., if a bug is reported that can potentially lead to loss of funds, but there is no immediate threat, new borrowing can be stopped, while other functionality (trading, closing/liquidating accounts) is retained" - }, - "setLimitPerBlock(uint128)": { - "notice": "Borrowing limit per block in conjunction with the monitoring system serves to minimize loss from hacks While an attacker would be able to steal, in worst case, up to (limitPerBlock * n blocks) of funds, the monitoring system would pause the contracts after detecting suspicious activity" - } - }, - "notice": "User interface for interacting with Credit Manager", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol": { - "CreditManager": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_pool", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotUnPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "ExecuteOrder", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newConfigurator", - "type": "address" - } - ], - "name": "NewConfigurator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "_accountFactory", - "outputs": [ - { - "internalType": "contract IAccountFactory", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "adapterToContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "liquidator", - "type": "address" - } - ], - "name": "addEmergencyLiquidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "addToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approveCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "enum ClosureAction", - "name": "closureActionType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterest", - "type": "uint256" - } - ], - "name": "calcClosePayments", - "outputs": [ - { - "internalType": "uint256", - "name": "amountToPool", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountAccruedInterest", - "outputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterestAndFees", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "canLiquidateWhilePaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adapter", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "changeContractAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "checkAndEnableToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "checkAndOptimizeEnabledTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "checkEmergencyPausable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "enum ClosureAction", - "name": "closureActionType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "convertWETH", - "type": "bool" - } - ], - "name": "closeCreditAccount", - "outputs": [ - { - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "collateralTokens", - "outputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenMask", - "type": "uint256" - } - ], - "name": "collateralTokensByMask", - "outputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "collateralTokensCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "contractToAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditConfigurator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditFacade", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "cumulativeDropAtFastCheckRAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "disableToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "emergencyLiquidation", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "enabledTokensMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "executeOrder", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenIn", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balanceInBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceOutBefore", - "type": "uint256" - } - ], - "name": "fastCollateralCheck", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fees", - "outputs": [ - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "forbiddenTokenMask", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "fullCollateralCheck", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountOrRevert", - "outputs": [ - { - "internalType": "address", - "name": "result", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "liquidationThresholds", - "outputs": [ - { - "internalType": "uint16", - "name": "lt", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "increase", - "type": "bool" - } - ], - "name": "manageDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "newBorrowedAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxAllowedEnabledTokenLength", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - } - ], - "name": "openCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poolService", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceOracle", - "outputs": [ - { - "internalType": "contract IPriceOracleV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "liquidator", - "type": "address" - } - ], - "name": "removeEmergencyLiquidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditConfigurator", - "type": "address" - } - ], - "name": "setConfigurator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_forbidMask", - "type": "uint256" - } - ], - "name": "setForbidMask", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "name": "setLiquidationThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "newMaxEnabledTokens", - "type": "uint8" - } - ], - "name": "setMaxEnabledTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_liquidationDiscountExpired", - "type": "uint16" - } - ], - "name": "setParams", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "tokenMasksMap", - "outputs": [ - { - "internalType": "uint256", - "name": "mask", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferAccountOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "universalAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditFacade", - "type": "address" - } - ], - "name": "upgradeCreditFacade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceOracle", - "type": "address" - } - ], - "name": "upgradePriceOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wethAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wethGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "CallerNotPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Pausable admin" - } - ], - "CallerNotUnPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Unpausable admin" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": { - "addCollateral(address,address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "creditAccount": "Address of the Credit Account", - "payer": "Address of the account which will be charged to provide additional collateral", - "token": "Collateral token to add" - } - }, - "addEmergencyLiquidator(address)": { - "details": "Adds an address to the list of emergency liquidators", - "params": { - "liquidator": "Address to add to the list" - } - }, - "addToken(address)": { - "details": "Adds a token to the list of collateral tokens", - "params": { - "token": "Address of the token to add" - } - }, - "approveCreditAccount(address,address,address,uint256)": { - "details": "Requests the Credit Account to approve a collateral token to another contract.", - "params": { - "amount": "New allowance amount", - "borrower": "Borrower's address", - "targetContract": "Spender to change allowance for", - "token": "Collateral token to approve" - } - }, - "calcClosePayments(uint256,uint8,uint256,uint256)": { - "details": "Computes amounts that must be sent to various addresses before closing an account", - "params": { - "borrowedAmount": "Credit Account's debt principal", - "borrowedAmountWithInterest": "Credit Account's debt principal + interest", - "closureActionType": "Type of account closure * CLOSE_ACCOUNT: The account is healthy and is closed normally * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)", - "totalValue": "Credit Accounts total value in underlying" - }, - "returns": { - "amountToPool": "Amount of underlying to be sent to the pool", - "loss": "Protocol's loss from bad debt (if any)", - "profit": "Protocol's profit from fees (if any)", - "remainingFunds": "Amount of underlying to be sent to the borrower (only applicable to liquidations)" - } - }, - "calcCreditAccountAccruedInterest(address)": { - "details": "Calculates the debt accrued by a Credit Account", - "params": { - "creditAccount": "Address of the Credit Account" - }, - "returns": { - "borrowedAmount": "The debt principal", - "borrowedAmountWithInterest": "The debt principal + accrued interest", - "borrowedAmountWithInterestAndFees": "The debt principal + accrued interest and protocol fees" - } - }, - "changeContractAllowance(address,address)": { - "details": "Sets the link between an adapter and its corresponding targetContract", - "params": { - "adapter": "Address of the adapter to be used to access the target contract", - "targetContract": "A 3rd-party contract for which the adapter is set" - } - }, - "checkAndEnableToken(address,address)": { - "details": "Enables a token on a Credit Account, including it into account health and total value calculations", - "params": { - "creditAccount": "Address of a Credit Account to enable the token for", - "token": "Address of the token to be enabled" - } - }, - "checkAndOptimizeEnabledTokens(address)": { - "details": "Checks that the number of enabled tokens on a Credit Account does not violate the maximal enabled token limit and tries to disable unused tokens if it does", - "params": { - "creditAccount": "Account to check enabled tokens for" - } - }, - "checkEmergencyPausable(address,bool)": { - "details": "Checks if the contract is paused; if true, checks that the caller is emergency liquidator and temporarily enables a special emergencyLiquidator mode to allow liquidation.", - "params": { - "caller": "Address of CreditFacade caller", - "state": "True to enable and false to disable emergencyLiqudation mde" - }, - "returns": { - "_0": "True if contract paused otherwise false. If the contract is not paused, there is no need to call this function to disable the emergencyLiquidation mode." - } - }, - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": { - "details": "Closes a Credit Account - covers both normal closure and liquidation - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator. Only emergency liquidators are able to liquidate account while the CM is paused. Emergency liquidations do not pay a liquidator premium or liquidation fees. - Calculates payments to various recipients on closure: + Computes amountToPool, which is the amount to be sent back to the pool. This includes the principal, interest and fees, but can't be more than total position value + Computes remainingFunds during liquidations - these are leftover funds after paying the pool and the liquidator, and are sent to the borrower + Computes protocol profit, which includes interest and liquidation fees + Computes loss if the totalValue is less than borrow amount + interest - Checks the underlying token balance: + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation - Send assets to the \"to\" address, as long as they are not included into skipTokenMask - If convertWETH is true, the function converts WETH into ETH before sending - Returns the Credit Account back to factory", - "params": { - "borrower": "Borrower address", - "closureActionType": "Whether the account is closed, liquidated or liquidated due to expiry", - "convertWETH": "If true converts WETH to ETH", - "payer": "Address which would be charged if credit account has not enough funds to cover amountToPool", - "skipTokenMask": "Tokenmask contains 1 for tokens which needed to be skipped for sending", - "to": "Address to which the leftover funds will be sent", - "totalValue": "Portfolio value for liqution, 0 for ordinary closure" - } - }, - "collateralTokens(uint256)": { - "details": "Returns the collateral token at requested index and its liquidation threshold", - "params": { - "id": "The index of token to return" - } - }, - "collateralTokensByMask(uint256)": { - "details": "Returns the collateral token with requested mask and its liquidationThreshold", - "params": { - "tokenMask": "Token mask corresponding to the token" - } - }, - "constructor": { - "details": "Constructor", - "params": { - "_pool": "Address of the pool to borrow funds from" - } - }, - "disableToken(address,address)": { - "details": "Disables a token on a credit account" - }, - "executeOrder(address,address,bytes)": { - "details": "Requests a Credit Account to make a low-level call with provided data This is the intended pathway for state-changing interactions with 3rd-party protocols", - "params": { - "borrower": "Borrower's address", - "data": "Data to pass with the call", - "targetContract": "Contract to be called" - } - }, - "fastCollateralCheck(address,address,address,uint256,uint256)": { - "details": "Optimized health check for individual swap-like operations.", - "params": { - "balanceInBefore": "Balance of tokenIn before the operation", - "balanceOutBefore": "Balance of tokenOut before the operation", - "creditAccount": "Address of the Credit Account", - "tokenIn": "Address of the token spent by the swap", - "tokenOut": "Address of the token received from the swap" - } - }, - "fees()": { - "details": "Returns the fee parameters of the Credit Manager", - "returns": { - "feeInterest": "Percentage of interest taken by the protocol as profit", - "feeLiquidation": "Percentage of account value taken by the protocol as profit during unhealthy account liquidations", - "feeLiquidationExpired": "Percentage of account value taken by the protocol as profit during expired account liquidations", - "liquidationDiscount": "Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)", - "liquidationDiscountExpired": "Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - } - }, - "fullCollateralCheck(address)": { - "details": "Performs a full health check on an account, summing up value of all enabled collateral tokens", - "params": { - "creditAccount": "Address of the Credit Account to check" - } - }, - "getCreditAccountOrRevert(address)": { - "details": "Returns the address of a borrower's Credit Account, or reverts if there is none.", - "params": { - "borrower": "Borrower's address" - } - }, - "liquidationThresholds(address)": { - "details": "Returns the liquidation threshold for the provided token", - "params": { - "token": "Token to retrieve the LT for" - } - }, - "manageDebt(address,uint256,bool)": { - "details": "Manages debt size for borrower: - Increase debt: + Increases debt by transferring funds from the pool to the credit account + Updates the cumulative index to keep interest the same. Since interest is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1), cumulativeIndexOpen needs to be updated, as the borrow amount has changed - Decrease debt: + Repays debt partially + all interest and fees accrued thus far + Updates cunulativeIndex to cumulativeIndex now", - "params": { - "amount": "Amount to increase / decrease the principal by", - "creditAccount": "Address of the Credit Account to change debt for", - "increase": "True to increase principal, false to decrease" - }, - "returns": { - "newBorrowedAmount": "The new debt principal" - } - }, - "openCreditAccount(uint256,address)": { - "details": "Opens credit account and borrows funds from the pool. - Takes Credit Account from the factory; - Requests the pool to lend underlying to the Credit Account", - "params": { - "borrowedAmount": "Amount to be borrowed by the Credit Account", - "onBehalfOf": "The owner of the newly opened Credit Account" - } - }, - "pause()": { - "details": "Pause contract" - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "priceOracle()": { - "details": "Returns the price oracle used to evaluate collateral tokens" - }, - "removeEmergencyLiquidator(address)": { - "details": "Removes an address from the list of emergency liquidators", - "params": { - "liquidator": "Address to remove from the list" - } - }, - "setConfigurator(address)": { - "details": "Sets a new Credit Configurator", - "params": { - "_creditConfigurator": "Address of the new Credit Configurator" - } - }, - "setForbidMask(uint256)": { - "details": "Sets the forbidden token mask", - "params": { - "_forbidMask": "The new bit mask encoding the tokens that are forbidden" - } - }, - "setLiquidationThreshold(address,uint16)": { - "details": "Sets the liquidation threshold for a collateral token", - "params": { - "liquidationThreshold": "The new LT", - "token": "The collateral token to set the LT for" - } - }, - "setMaxEnabledTokens(uint8)": { - "details": "Sets the maximal number of enabled tokens on a single Credit Account.", - "params": { - "newMaxEnabledTokens": "The new enabled token limit." - } - }, - "setParams(uint16,uint16,uint16,uint16,uint16)": { - "details": "Sets fees and premiums", - "params": { - "_feeInterest": "Percentage of interest taken by the protocol as profit", - "_feeLiquidation": "Percentage of account value taken by the protocol as profit during unhealthy account liquidations", - "_feeLiquidationExpired": "Percentage of account value taken by the protocol as profit during expired account liquidations", - "_liquidationDiscount": "Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)", - "_liquidationDiscountExpired": "Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - } - }, - "tokenMasksMap(address)": { - "details": "Returns the mask for the provided token", - "params": { - "token": "Token to returns the mask for" - } - }, - "transferAccountOwnership(address,address)": { - "details": "Transfers Credit Account ownership to another address", - "params": { - "from": "Address of previous owner", - "to": "Address of new owner" - } - }, - "unpause()": { - "details": "Unpause contract" - }, - "upgradeCreditFacade(address)": { - "details": "Sets the Credit Facade", - "params": { - "_creditFacade": "Address of the new Credit Facade" - } - }, - "upgradePriceOracle(address)": { - "details": "Sets the Price Oracle", - "params": { - "_priceOracle": "Address of the new Price Oracle" - } - } - }, - "stateVariables": { - "_accountFactory": { - "details": "Factory contract for Credit Accounts" - }, - "adapterToContract": { - "details": "Maps allowed adapters to their respective target contracts." - }, - "canLiquidateWhilePaused": { - "details": "Maps addresses to their status as emergency liquidator." - }, - "collateralTokensCompressed": { - "details": "Map of token's bit mask to its address and LT compressed into a single uint256" - }, - "collateralTokensCount": { - "details": "Total number of known collateral tokens." - }, - "contractToAdapter": { - "details": "Maps 3rd party contracts to their respective adapters" - }, - "creditAccounts": { - "details": "A map from borrower addresses to Credit Account addresses" - }, - "creditConfigurator": { - "details": "Address of the connected Credit Configurator" - }, - "creditFacade": { - "details": "Address of the connected Credit Facade" - }, - "cumulativeDropAtFastCheckRAY": { - "details": "Maps Credit Accounts to their current cumulative drops in value during fast checks See more details in fastCollateralCheck()" - }, - "enabledTokensMap": { - "details": "Maps Credit Accounts to bit masks encoding their enabled token sets Only enabled tokens are counted as collateral for the Credit Account" - }, - "entered": { - "details": "used to protect against reentrancy. Bool is gas-optimal, since there are other non-zero values packed into the same slot" - }, - "forbiddenTokenMask": { - "details": "Bit mask encoding a set of forbidden tokens" - }, - "maxAllowedEnabledTokenLength": { - "details": "The maximal number of enabled tokens on a single Credit Account" - }, - "pool": { - "details": "Address of the connected pool" - }, - "poolService": { - "details": "Address of the connected pool" - }, - "slot1": { - "details": "Stores fees & parameters commonly used together for gas savings" - }, - "tokenMasksMapInternal": { - "details": "Internal map of token addresses to their indidivual masks." - }, - "underlying": { - "details": "Address of the underlying asset" - }, - "universalAdapter": { - "details": "Stores address of the Universal adapter" - }, - "version": { - "details": "contract version" - }, - "wethAddress": { - "details": "Address of WETH" - }, - "wethGateway": { - "details": "Address of WETH Gateway" - } - }, - "title": "Credit Manager", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_17105": { - "entryPoint": null, - "id": 17105, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2005": { - "entryPoint": null, - "id": 2005, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_8101": { - "entryPoint": null, - "id": 8101, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_addToken_10291": { - "entryPoint": 1140, - "id": 10291, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1337, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_AddressProvider_$2931_fromMemory": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 1376, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "validator_revert_address": { - "entryPoint": 1312, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:920:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "59:86:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "82:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "108:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "113:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "104:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "117:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "100:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "89:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "89:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "79:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "79:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "72:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "72:50:70" - }, - "nodeType": "YulIf", - "src": "69:70:70" - } - ] - }, - "name": "validator_revert_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "48:5:70", - "type": "" - } - ], - "src": "14:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "231:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "277:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "286:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "279:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "279:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "279:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "252:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "261:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "248:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "248:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "244:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "244:32:70" - }, - "nodeType": "YulIf", - "src": "241:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "302:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "321:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "315:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "315:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "306:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "365:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "340:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "340:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "340:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "380:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "390:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "380:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "197:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "208:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "220:6:70", - "type": "" - } - ], - "src": "150:251:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "511:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "557:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "566:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "569:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "559:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "559:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "559:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "532:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "541:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "528:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "528:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "553:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "524:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "524:32:70" - }, - "nodeType": "YulIf", - "src": "521:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "582:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "601:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "595:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "595:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "586:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "645:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "620:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "620:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "620:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "660:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "670:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "660:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_AddressProvider_$2931_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "477:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "488:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "500:6:70", - "type": "" - } - ], - "src": "406:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "733:185:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "772:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "793:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "800:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "805:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "796:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "796:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "786:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "786:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "786:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "837:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "840:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "830:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "830:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "830:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "865:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "868:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "858:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "858:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "858:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "749:5:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "760:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "756:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "756:6:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "746:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "746:17:70" - }, - "nodeType": "YulIf", - "src": "743:140:70" - }, - { - "nodeType": "YulAssignment", - "src": "892:20:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "903:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "910:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "899:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "899:13:70" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "892:3:70" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "715:5:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "725:3:70", - "type": "" - } - ], - "src": "686:232:70" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_contract$_AddressProvider_$2931_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "6101606040526000805463ff0000001916630c0000001790553480156200002557600080fd5b506040516200498b3803806200498b833981016040819052620000489162000539565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000087573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000539565b6000805460ff191690556001600160a01b038116620000df57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000144919062000539565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c5919062000539565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000242919062000539565b6001600160a01b03811660c05290506200025c8162000474565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000539565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000340919062000539565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000539565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000539565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004ac57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004d157604051633f02862960e11b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290620005178362000560565b91905055505050565b6001600160a01b03811681146200053657600080fd5b50565b6000602082840312156200054c57600080fd5b8151620005598162000520565b9392505050565b6000600182016200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516142d6620006b56000396000818161083b01528181612c290152612ca901526000818161054f0152612bca0152600081816103f601528181610d2f01528181610d7a01528181611dcc01528181611edc015281816120e401528181612209015281816122670152818161230c015281816124080152818161249a0152612fbc015260006105c401526000818161064f01528181610c0701528181610c9801528181610cd801528181610d0e01528181610df101528181611afb015281816121e7015281816123e701528181612751015281816129ee01528181612b09015261327d01526000818161087501528181610e600152611d9c0152600081816107ee01528181610fbb0152611c3c01526142d66000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c80638456cb59116101de578063b3da9e6b1161010f578063e75538c7116100ad578063f9aa028a1161007c578063f9aa028a1461091c578063fdd576451461092f578063fe47cde714610958578063ff6875431461096b57600080fd5b8063e75538c7146108d0578063e958b704146108e3578063eb99c2bf146108f6578063f67c5bd01461090957600080fd5b8063db7ceb80116100e9578063db7ceb8014610870578063dc2b21c114610897578063dc9e0faa146108aa578063e1998cf9146108bd57600080fd5b8063b3da9e6b14610823578063c5e10eef14610836578063d48bfca71461085d57600080fd5b80639af1d35a1161017c578063a366f49611610156578063a366f496146107c3578063a460e104146107d6578063a50cf2c8146107e9578063a70bc5421461081057600080fd5b80639af1d35a146107575780639f5f86ae146107a75780639fd12b77146107ba57600080fd5b80638fe3f93f116101b85780638fe3f93f1461070b578063944ac59f1461071e57806394cf073a14610731578063953730181461074457600080fd5b80638456cb59146106d057806384edaa42146106d85780638991b2f1146106eb57600080fd5b80634f0e0ef3116102b8578063693ce7f5116102565780636f307dc3116102305780636f307dc31461064a5780637832743814610671578063830aa745146106975780638345f26e146106aa57600080fd5b8063693ce7f5146106045780636ce4074a146106175780636e98e5e41461063757600080fd5b806354fd4d501161029257806354fd4d50146105b7578063570a7af2146105bf5780635c975abb146105e6578063654a9eda146105f157600080fd5b80634f0e0ef31461054a5780635063524a1461057157806351e3f160146105a457600080fd5b80632f7a1881116103255780633e8297ca116102ff5780633e8297ca146105065780633f4ba83a14610526578063458936f51461052e57806346fb371d1461053757600080fd5b80632f7a18811461049b5780633192195c146104b557806338975bc4146104e357600080fd5b8063172c48c711610361578063172c48c7146104185780632362a2d81461044d5780632630c12f1461046e57806329df0b931461048657600080fd5b8063055ee9b5146103885780630d8f9cee146103ce57806316f0115b146103f1575b600080fd5b6103b1610396366004613b97565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e16103dc366004613bb4565b610994565b60405190151581526020016103c5565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61042b610426366004613bed565b610a7e565b604080516001600160a01b03909316835261ffff9091166020830152016103c5565b61046061045b366004613c23565b610a96565b6040519081526020016103c5565b600154600160501b90046001600160a01b03166103b1565b610499610494366004613b97565b610ed7565b005b6000546103b190600160201b90046001600160a01b031681565b6104c86104c3366004613b97565b610f39565b604080519384526020840192909252908201526060016103c5565b6103e16104f1366004613b97565b600c6020526000908152604090205460ff1681565b610460610514366004613b97565b60096020526000908152604090205481565b610499610fa6565b61046060055481565b610499610545366004613ca5565b611055565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61058461057f366004613cf6565b6111bf565b6040805194855260208501939093529183015260608201526080016103c5565b6104996105b2366004613bb4565b6113a3565b61046060d281565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff166103e1565b6104996105ff366004613d31565b611480565b610499610612366004613b97565b611808565b61062a610625366004613dfb565b611860565b6040516103c59190613ef0565b610499610645366004613bb4565b611a0b565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61068461067f366004613b97565b611af7565b60405161ffff90911681526020016103c5565b6104996106a5366004613ca5565b611b84565b6000546106be906301000000900460ff1681565b60405160ff90911681526020016103c5565b610499611c27565b6104996106e6366004613b97565b611cd4565b6104606106f9366004613b97565b60086020526000908152604090205481565b6103b1610719366004613f0a565b611d23565b61049961072c366004613f41565b611f70565b61046061073f366004613fa6565b612010565b610499610752366004613b97565b61258e565b6001546040805161ffff808416825262010000840481166020830152600160201b8404811692820192909252600160301b830482166060820152600160401b90920416608082015260a0016103c5565b6104996107b5366004613b97565b612633565b61046060075481565b6104996107d1366004613bed565b6126a8565b6104996107e4366004613b97565b6126d8565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61049961081e366004613fe8565b612724565b6000546103e19062010000900460ff1681565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61049961086b366004613b97565b612803565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b6104996108a536600461401d565b612837565b6104996108b8366004613b97565b612882565b6104996108cb366004613bb4565b6128ee565b61042b6108de366004613bed565b6129dc565b6103b16108f1366004613b97565b612a45565b6103e1610904366004614040565b612a83565b610460610917366004613b97565b612b05565b6003546103b1906001600160a01b031681565b6103b161093d366004613b97565b600b602052600090815260409020546001600160a01b031681565b600d546103b1906001600160a01b031681565b6103b1610979366004613b97565b600a602052600090815260409020546001600160a01b031681565b6000805460ff1615806109af575060005462010000900460ff165b6109d45760405162461bcd60e51b81526004016109cb9061406e565b60405180910390fd5b336000908152600a60205260409020546001600160a01b0316158015610a0c5750600054600160201b90046001600160a01b03163314155b15610a2a5760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff1615610a53576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100179055610a6c8383612b66565b6000805461ff00191690559392505050565b600080610a8d6001841b6129dc565b91509150915091565b60008054610100900460ff1615610ac0576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314610b0257604051636c01359160e11b815260040160405180910390fd5b60005460ff1615610b87576001600160a01b0385166000908152600c602052604090205460ff168015610b6157506001876003811115610b4457610b44614098565b1480610b6157506002876003811115610b5f57610b5f614098565b145b15610b6f5760039650610b87565b60405162461bcd60e51b81526004016109cb9061406e565b6000610b9289612a45565b6001600160a01b038a16600090815260026020526040812080546001600160a01b031916905590915080808080610bc886610f39565b509094509050610bda8c8e86846111bf565b6040516370a0823160e01b81526001600160a01b038b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7491906140ae565b9050610c8088876140dd565b610c8b9060016140dd565b811115610ccb57610cc6877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d612bc0565b610d08565b610d086001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301612d76565b610d56877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000896000612bc0565b6040516332a5417960e21b81526004810186905260248101859052604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ca9505e490606401600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050505050506001841115610e1957610e19837f00000000000000000000000000000000000000000000000000000000000000008d876000612bc0565b6001600160a01b038316600090815260086020526040902054861916610e4184898884612dd4565b6040516344dbbd9f60e11b81526001600160a01b0385811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b50506000805461ff001916905550949c9b505050505050505050505050565b336000908152600a60205260409020546001600160a01b0316158015610f0f5750600054600160201b90046001600160a01b03163314155b15610f2d5760405163ad40d9e960e01b815260040160405180910390fd5b610f3681612e88565b50565b6000806000806000610f4a86612eed565b9196509250905081610f5c82876140f0565b610f669190614107565b6001549094506127109061ffff16610f7e8787614129565b610f8891906140f0565b610f929190614107565b610f9c90856140dd565b9496939550505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e919061413c565b61104b5760405163081996f760e11b815260040160405180910390fd5b611053613044565b565b60005460ff16158061106f575060005462010000900460ff165b61108b5760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff16156110b4576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100178155338152600a60205260409020546001600160a01b03908116908416148015906110fe5750600054600160201b90046001600160a01b03163314155b80156111155750600d546001600160a01b03163314155b8061112757506001600160a01b038316155b156111455760405163ad40d9e960e01b815260040160405180910390fd5b61114e82612b05565b60000361116e5760405163700ca0af60e01b815260040160405180910390fd5b600061117985612a45565b9050611189838583856000613096565b6111ad5761119c83858360006001613096565b506111ab838583856001613096565b505b50506000805461ff0019169055505050565b6001546000908190819081906127109061ffff166111dd8888614129565b6111e791906140f0565b6111f19190614107565b6111fb90866140dd565b9350600187600381111561121157611211614098565b148061122e5750600287600381111561122c5761122c614098565b145b8061124a5750600387600381111561124857611248614098565b145b15611392576000600188600381111561126557611265614098565b036112c9576001546127109061128690600160201b900461ffff168b6140f0565b6112909190614107565b600154909150612710906112ae9062010000900461ffff168b6140f0565b6112b89190614107565b6112c290866140dd565b945061135c565b60028860038111156112dd576112dd614098565b0361132757600154612710906112fe90600160401b900461ffff168b6140f0565b6113089190614107565b600154909150612710906112ae90600160301b900461ffff168b6140f0565b506001548890612710906113459062010000900461ffff16836140f0565b61134f9190614107565b61135990866140dd565b94505b84811115611371576001858203039350611375565b8094505b85811061138657858503925061138c565b84860391505b50611398565b84840391505b945094509450949050565b60005460ff1615806113bd575060005462010000900460ff165b6113d95760405162461bcd60e51b81526004016109cb9061406e565b336000908152600a60205260409020546001600160a01b03161580156114115750600054600160201b90046001600160a01b03163314155b1561142f5760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff1615611458576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561147182826131a8565b50506000805461ff0019169055565b336000908152600a60205260409020546001600160a01b03161580156114b85750600054600160201b90046001600160a01b03163314155b156114d65760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff16156114ff576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561151885846131a8565b6040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611562573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158691906140ae565b6040516370a0823160e01b81526001600160a01b0388811660048301529192506000918616906370a0823190602401602060405180830381865afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f691906140ae565b6001549091506000908190600160501b90046001600160a01b0316635cecbd0e6116208689614129565b8a61162b8988614129565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03918216602484015260448301528a1660648201526084016040805180830381865afa158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a69190614159565b91509150600184116116be576116bc8989612b66565b505b6116c787611af7565b6116d59061ffff16826140f0565b90506116e088611af7565b6116ee9061ffff16836140f0565b91508181106117095761170089612e88565b505050506111ad565b6001600160a01b038916600090815260096020526040812054836117396b033b2e3c9fd0803ce8000000856140f0565b6117439190614107565b611759906b033b2e3c9fd0803ce8000000614129565b61176391906140dd565b6001549091506127109061178e906b033b2e3c9fd0803ce80000009062010000900461ffff166140f0565b6117989190614107565b81116117cc576001600160a01b038a1660009081526009602052604090208190556117c28a612e88565b50505050506111ad565b6117d58a613227565b5050506001600160a01b038716600090815260096020526040902060019055505050506000805461ff0019169055505050565b6003546001600160a01b031633146118335760405163eee4716960e01b815260040160405180910390fd5b600080546001600160a01b03909216600160201b02640100000000600160c01b0319909216919091179055565b606061186e60005460ff1690565b1580611882575060005462010000900460ff165b61189e5760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff16156118c7576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100178155338152600a60205260409020546001600160a01b0390811690841614158061190557506001600160a01b038316155b1561193557600d546001600160a01b031633146119355760405163fc1a554360e01b815260040160405180910390fd5b600061194085612a45565b9050836001600160a01b0316856001600160a01b03167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a3604051631cff79cd60e01b81526001600160a01b03821690631cff79cd906119b0908790879060040161417d565b6000604051808303816000875af11580156119cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f791908101906141a1565b6000805461ff001916905595945050505050565b6003546001600160a01b03163314611a365760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03821615611a74576001600160a01b038281166000908152600a6020526040902080546001600160a01b0319169183169190911790555b6001600160a01b03811615611ab2576001600160a01b038181166000908152600b6020526040902080546001600160a01b0319169184169190911790555b73cccccccccccccccccccccccccccccccccccccccb196001600160a01b03821601611af357600d80546001600160a01b0319166001600160a01b0384161790555b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611b45575050600154600160f01b900461ffff1690565b6000611b5083612b05565b905080600003611b735760405163700ca0af60e01b815260040160405180910390fd5b611b7c816129dc565b949350505050565b611b8c6134ef565b600054610100900460ff1615611bb5576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314611bf757604051636c01359160e11b815260040160405180910390fd5b611c0183836131a8565b611c166001600160a01b038316858584612d76565b50506000805461ff00191690555050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015611c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caf919061413c565b611ccc5760405163d794b1e760e01b815260040160405180910390fd5b611053613512565b6003546001600160a01b03163314611cff5760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000611d2d6134ef565b600054610100900460ff1615611d56576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314611d9857604051636c01359160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166321d18456857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4c91906140ae565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af1158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb3919061420f565b60405163bf28068b60e01b8152600481018690526001600160a01b0380831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b50505050611f44838261354f565b6001600160a01b038116600090815260086020526040812060019055805461ff00191690559392505050565b6003546001600160a01b03163314611f9b5760405163eee4716960e01b815260040160405180910390fd5b6001805461ffff928316600160401b0269ffff000000000000000019948416600160301b0267ffff00000000000019968516600160201b029690961667ffffffff0000000019978516620100000263ffffffff1990931694909816939093171794909416949094179190911716919091179055565b600061201a6134ef565b600054610100900460ff1615612043576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b0316331461208557604051636c01359160e11b815260040160405180910390fd5b600080600061209387612eed565b92509250925060008515612147576120ab87856140dd565b94506120bb8488848660016135ca565b60405163bf28068b60e01b8152600481018990526001600160a01b038a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050612516565b6000848461215585836140f0565b61215f9190614107565b6121699190614129565b600154909150600090612710906121849061ffff16846140f0565b61218e9190614107565b905061219a81836140dd565b89106123935788816121ac84896140dd565b6121b691906140dd565b6121c09190614129565b60405163d1660f9960e01b81529097506001600160a01b038b169063d1660f9990612233907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908e9060040161422c565b600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca9505e482848c6122a19190614129565b6122ab9190614129565b6040516001600160e01b031960e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b1580156122f257600080fd5b505af1158015612306573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238c91906140ae565b9250612513565b6001546000906123a99061ffff16612710614250565b61ffff166123b96127108c6140f0565b6123c39190614107565b905060006123d1828c614129565b90508798508b6001600160a01b031663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008e6040518463ffffffff1660e01b81526004016124469392919061422c565b600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b50506040516332a5417960e21b81526000600482018190526024820185905260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063ca9505e49150606401600060405180830381600087803b1580156124e857600080fd5b505af11580156124fc573d6000803e3d6000fd5b5050505061250e8883888a60006135ca565b945050505b50505b604051631612821160e01b815260048101869052602481018290526001600160a01b03891690631612821190604401600060405180830381600087803b15801561255f57600080fd5b505af1158015612573573d6000803e3d6000fd5b50506000805461ff0019169055509498975050505050505050565b336000908152600a60205260409020546001600160a01b03161580156125c65750600054600160201b90046001600160a01b03163314155b156125e45760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff161561260d576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561262581613227565b506000805461ff0019169055565b6003546001600160a01b0316331461265e5760405163eee4716960e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b6003546001600160a01b031633146126d35760405163eee4716960e01b815260040160405180910390fd5b600755565b6003546001600160a01b031633146127035760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6003546001600160a01b0316331461274f5760405163eee4716960e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036127a9576001805461ffff8316600160f01b026001600160f01b039091161790555050565b60006127b483612b05565b9050806000036127d75760405163700ca0af60e01b815260040160405180910390fd5b600090815260046020526040902080546001600160a01b031661ffff60a01b60a084901b161790555050565b6003546001600160a01b0316331461282e5760405163eee4716960e01b815260040160405180910390fd5b610f36816136b0565b6003546001600160a01b031633146128625760405163eee4716960e01b815260040160405180910390fd5b6000805460ff90921663010000000263ff00000019909216919091179055565b6003546001600160a01b031633146128ad5760405163eee4716960e01b815260040160405180910390fd5b600180546001600160a01b03909216600160501b027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909216919091179055565b60005460ff161580612908575060005462010000900460ff165b6129245760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff161561294d576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b0316331461298f57604051636c01359160e11b815260040160405180910390fd5b600061299a83612a45565b6001600160a01b038416600090815260026020526040902080546001600160a01b031916905590506129cc828261354f565b50506000805461ff001916905550565b60008082600103612a1e5750506001547f000000000000000000000000000000000000000000000000000000000000000092600160f01b90910461ffff169150565b600083815260046020526040902054915081612a3d60a082901c613758565b915050915091565b6001600160a01b038082166000908152600260205260409020541680612a7e5760405163b5ba4c4d60e01b815260040160405180910390fd5b919050565b60008054600160201b90046001600160a01b03163314612ab657604051636c01359160e11b815260040160405180910390fd5b60005460ff16808015612ae157506001600160a01b0384166000908152600c602052604090205460ff165b15612afc576000805462ff0000191662010000851515021790555b90505b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614612b5e576001600160a01b038216600090815260066020526040902054612aff565b600192915050565b600080612b7283612b05565b6001600160a01b038516600090815260086020526040902054909150811615612bb9576001600160a01b038416600090815260086020526040902080548219169055600191505b5092915050565b808015612bfe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15612d0c5760405163d1660f9960e01b81526001600160a01b0386169063d1660f9990612c539087907f000000000000000000000000000000000000000000000000000000000000000090879060040161422c565b600060405180830381600087803b158015612c6d57600080fd5b505af1158015612c81573d6000803e3d6000fd5b5050604051630b0d3b7560e31b81526001600160a01b038681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015612cef57600080fd5b505af1158015612d03573d6000803e3d6000fd5b50505050612d6f565b60405163d1660f9960e01b81526001600160a01b0386169063d1660f9990612d3c9087908790879060040161422c565b600060405180830381600087803b158015612d5657600080fd5b505af1158015612d6a573d6000803e3d6000fd5b505050505b5050505050565b612dce846323b872dd60e01b858585604051602401612d979392919061422c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526137bf565b50505050565b60025b818111612d6f5781811615612e80576000612df1826129dc565b506040516370a0823160e01b81526001600160a01b0388811660048301529192506000918316906370a0823190602401602060405180830381865afa158015612e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6291906140ae565b90506001811115612e7d57612e7d8783886001850389612bc0565b50505b60011b612dd7565b6001600160a01b03811660009081526008602052604081205490612eab82613891565b6000549091506301000000900460ff16811115612ee8576000612ecd836138a7565b612ed89060016140dd565b9050612dce848484600085613911565b505050565b6000806000836001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5491906140ae565b9250836001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb891906140ae565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c91906140ae565b929491935050565b61304c613a16565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b604080516001600160a01b038681166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151631cff79cd60e01b8152600092861691631cff79cd91613103918a9160040161417d565b6000604051808303816000875af192505050801561314357506040513d6000823e601f3d908101601f1916820160405261314091908101906141a1565b60015b1561317c578051158061316b575080806020019051810190613165919061413c565b15156001145b1561317a57600191505061319f565b505b811561319b57604051632f10a7f360e01b815260040160405180910390fd5b5060005b95945050505050565b60006131b382612b05565b90508015806131c55750600754811615155b156131e35760405163700ca0af60e01b815260040160405180910390fd5b6001600160a01b03831660009081526008602052604081205482169003612ee8576001600160a01b0383166000908152600860205260409020805482179055505050565b6001546001600160a01b03828116600090815260086020526040812054600160501b9093049091169190808061325c86610f39565b604051630f9a650360e41b8152612710820260048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919450908816925063f9a650309150604401602060405180830381865afa1580156132d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f691906140ae565b9250613301846138a7565b6001019150506000806000805b848110156134d55780156133275760018186031b61332a565b60015b9350868416156134cd57600080613340866129dc565b6040516370a0823160e01b81526001600160a01b038e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561338f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b391906140ae565b905060018111156134c057604051630f9a650360e41b8152600481018290526001600160a01b03848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa158015613412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343691906140ae565b61344091906140f0565b61344a90876140dd565b95508886106134bb57600061345e8b613891565b6000549091506301000000900460ff1681111561348a576134858d8c836001898e03613911565b6134ac565b85156134ac576001600160a01b038d1660009081526008602052604090208b90555b50505050505050505050505050565b6134c9565b98861898600194505b5050505b60010161330e565b506040516329973ddb60e11b815260040160405180910390fd5b60005460ff16156110535760405162461bcd60e51b81526004016109cb9061406e565b61351a6134ef565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586130793390565b6001600160a01b038216158061357e57506001600160a01b038281166000908152600260205260409020541615155b1561359c57604051634f2cb04f60e11b815260040160405180910390fd5b6001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b600081156136475760006135de86886140dd565b90506135ee86633b9aca006140f0565b84886135fe88633b9aca006140f0565b61360891906140f0565b6136129190614107565b61361c91906140dd565b633b9aca0061362b83886140f0565b61363591906140f0565b61363f9190614107565b91505061319f565b858361365787633b9aca006140f0565b61366191906140f0565b61366b9190614107565b61367985633b9aca006140f0565b6136839190614129565b8361369286633b9aca006140f0565b61369c91906140f0565b6136a69190614107565b9695505050505050565b6001600160a01b038116600090815260066020526040902054156136e757604051632e5a5c7760e01b815260040160405180910390fd5b6101006005541061370b57604051633f02862960e11b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061374f8361426b565b91905055505050565b600061ffff8211156137bb5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016109cb565b5090565b6000613814826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a5f9092919063ffffffff16565b805190915015612ee85780806020019051810190613832919061413c565b612ee85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109cb565b60005b8115612a7e57600182811c921601613894565b6000816001036138b957506000919050565b61010060015b60016138cb82846140dd565b901c92506001831b848116158015906138e65750600185851c145b156138f1575061390a565b84811061390057839250613904565b8391505b506138bf565b5050919050565b815b818110156139fc576001811b858116156139f3576000613932826129dc565b506040516370a0823160e01b81526001600160a01b038a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561397f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a391906140ae565b9050600181116139f057600054978318976000199097019660ff63010000009091041687116139f0575050506001600160a01b038616600090815260086020526040902085905550612d6f565b50505b50600101613913565b50604051630c2d525760e21b815260040160405180910390fd5b60005460ff166110535760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109cb565b6060611b7c848460008585600080866001600160a01b03168587604051613a869190614284565b60006040518083038185875af1925050503d8060008114613ac3576040519150601f19603f3d011682016040523d82523d6000602084013e613ac8565b606091505b5091509150613ad987838387613ae4565b979650505050505050565b60608315613b53578251600003613b4c576001600160a01b0385163b613b4c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109cb565b5081611b7c565b611b7c8383815115613b685781518083602001fd5b8060405162461bcd60e51b81526004016109cb9190613ef0565b6001600160a01b0381168114610f3657600080fd5b600060208284031215613ba957600080fd5b8135612afc81613b82565b60008060408385031215613bc757600080fd5b8235613bd281613b82565b91506020830135613be281613b82565b809150509250929050565b600060208284031215613bff57600080fd5b5035919050565b803560048110612a7e57600080fd5b8015158114610f3657600080fd5b600080600080600080600060e0888a031215613c3e57600080fd5b8735613c4981613b82565b9650613c5760208901613c06565b9550604088013594506060880135613c6e81613b82565b93506080880135613c7e81613b82565b925060a0880135915060c0880135613c9581613c15565b8091505092959891949750929550565b60008060008060808587031215613cbb57600080fd5b8435613cc681613b82565b93506020850135613cd681613b82565b92506040850135613ce681613b82565b9396929550929360600135925050565b60008060008060808587031215613d0c57600080fd5b84359350613d1c60208601613c06565b93969395505050506040820135916060013590565b600080600080600060a08688031215613d4957600080fd5b8535613d5481613b82565b94506020860135613d6481613b82565b93506040860135613d7481613b82565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613dcb57613dcb613d8c565b604052919050565b600067ffffffffffffffff821115613ded57613ded613d8c565b50601f01601f191660200190565b600080600060608486031215613e1057600080fd5b8335613e1b81613b82565b92506020840135613e2b81613b82565b9150604084013567ffffffffffffffff811115613e4757600080fd5b8401601f81018613613e5857600080fd5b8035613e6b613e6682613dd3565b613da2565b818152876020838501011115613e8057600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015613ebb578181015183820152602001613ea3565b50506000910152565b60008151808452613edc816020860160208601613ea0565b601f01601f19169290920160200192915050565b602081526000613f036020830184613ec4565b9392505050565b60008060408385031215613f1d57600080fd5b823591506020830135613be281613b82565b803561ffff81168114612a7e57600080fd5b600080600080600060a08688031215613f5957600080fd5b613f6286613f2f565b9450613f7060208701613f2f565b9350613f7e60408701613f2f565b9250613f8c60608701613f2f565b9150613f9a60808701613f2f565b90509295509295909350565b600080600060608486031215613fbb57600080fd5b8335613fc681613b82565b9250602084013591506040840135613fdd81613c15565b809150509250925092565b60008060408385031215613ffb57600080fd5b823561400681613b82565b915061401460208401613f2f565b90509250929050565b60006020828403121561402f57600080fd5b813560ff81168114612afc57600080fd5b6000806040838503121561405357600080fd5b823561405e81613b82565b91506020830135613be281613c15565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156140c057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115612aff57612aff6140c7565b8082028115828204841417612aff57612aff6140c7565b60008261412457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612aff57612aff6140c7565b60006020828403121561414e57600080fd5b8151612afc81613c15565b6000806040838503121561416c57600080fd5b505080516020909101519092909150565b6001600160a01b0383168152604060208201819052600090611b7c90830184613ec4565b6000602082840312156141b357600080fd5b815167ffffffffffffffff8111156141ca57600080fd5b8201601f810184136141db57600080fd5b80516141e9613e6682613dd3565b8181528560208385010111156141fe57600080fd5b61319f826020830160208601613ea0565b60006020828403121561422157600080fd5b8151612afc81613b82565b6001600160a01b039384168152919092166020820152604081019190915260600190565b61ffff818116838216019080821115612bb957612bb96140c7565b60006001820161427d5761427d6140c7565b5060010190565b60008251614296818460208701613ea0565b919091019291505056fea264697066735822122095d371064e9cf042a935a8d8f67a9e6198d638b261bc239b1406d1c2bf6ee81f64736f6c63430008110033", - "opcodes": "PUSH2 0x160 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH4 0xFF000000 NOT AND PUSH4 0xC000000 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x25 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x498B CODESIZE SUB DUP1 PUSH3 0x498B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x48 SWAP2 PUSH3 0x539 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2954018C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xAD SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xDF JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x144 SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2954018C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x19F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1C5 SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x100 DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x2495A599 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 PUSH4 0x2495A599 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x21C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x242 SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 MSTORE SWAP1 POP PUSH3 0x25C DUP2 PUSH3 0x474 JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x4C252F91 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x29B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2C1 SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x77532ED9 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x31A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x340 SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x399 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x3BF SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 ADD PUSH1 0xA PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9068A868 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x427 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x44D SWAP2 SWAP1 PUSH3 0x539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE POP PUSH3 0x588 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH3 0x4AC JUMPI PUSH1 0x40 MLOAD PUSH4 0x2E5A5C77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100 PUSH1 0x5 SLOAD LT PUSH3 0x4D1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F028629 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 SWAP1 SWAP6 SHL SWAP5 DUP6 SWAP1 SSTORE DUP5 DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE DUP3 SLOAD SWAP2 SWAP3 SWAP1 PUSH3 0x517 DUP4 PUSH3 0x560 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x536 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x54C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x559 DUP2 PUSH3 0x520 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH3 0x581 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x42D6 PUSH3 0x6B5 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x83B ADD MSTORE DUP2 DUP2 PUSH2 0x2C29 ADD MSTORE PUSH2 0x2CA9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x54F ADD MSTORE PUSH2 0x2BCA ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3F6 ADD MSTORE DUP2 DUP2 PUSH2 0xD2F ADD MSTORE DUP2 DUP2 PUSH2 0xD7A ADD MSTORE DUP2 DUP2 PUSH2 0x1DCC ADD MSTORE DUP2 DUP2 PUSH2 0x1EDC ADD MSTORE DUP2 DUP2 PUSH2 0x20E4 ADD MSTORE DUP2 DUP2 PUSH2 0x2209 ADD MSTORE DUP2 DUP2 PUSH2 0x2267 ADD MSTORE DUP2 DUP2 PUSH2 0x230C ADD MSTORE DUP2 DUP2 PUSH2 0x2408 ADD MSTORE DUP2 DUP2 PUSH2 0x249A ADD MSTORE PUSH2 0x2FBC ADD MSTORE PUSH1 0x0 PUSH2 0x5C4 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x64F ADD MSTORE DUP2 DUP2 PUSH2 0xC07 ADD MSTORE DUP2 DUP2 PUSH2 0xC98 ADD MSTORE DUP2 DUP2 PUSH2 0xCD8 ADD MSTORE DUP2 DUP2 PUSH2 0xD0E ADD MSTORE DUP2 DUP2 PUSH2 0xDF1 ADD MSTORE DUP2 DUP2 PUSH2 0x1AFB ADD MSTORE DUP2 DUP2 PUSH2 0x21E7 ADD MSTORE DUP2 DUP2 PUSH2 0x23E7 ADD MSTORE DUP2 DUP2 PUSH2 0x2751 ADD MSTORE DUP2 DUP2 PUSH2 0x29EE ADD MSTORE DUP2 DUP2 PUSH2 0x2B09 ADD MSTORE PUSH2 0x327D ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x875 ADD MSTORE DUP2 DUP2 PUSH2 0xE60 ADD MSTORE PUSH2 0x1D9C ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x7EE ADD MSTORE DUP2 DUP2 PUSH2 0xFBB ADD MSTORE PUSH2 0x1C3C ADD MSTORE PUSH2 0x42D6 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x383 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xB3DA9E6B GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE75538C7 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF9AA028A GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF9AA028A EQ PUSH2 0x91C JUMPI DUP1 PUSH4 0xFDD57645 EQ PUSH2 0x92F JUMPI DUP1 PUSH4 0xFE47CDE7 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xFF687543 EQ PUSH2 0x96B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE75538C7 EQ PUSH2 0x8D0 JUMPI DUP1 PUSH4 0xE958B704 EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xEB99C2BF EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xF67C5BD0 EQ PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDB7CEB80 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xDB7CEB80 EQ PUSH2 0x870 JUMPI DUP1 PUSH4 0xDC2B21C1 EQ PUSH2 0x897 JUMPI DUP1 PUSH4 0xDC9E0FAA EQ PUSH2 0x8AA JUMPI DUP1 PUSH4 0xE1998CF9 EQ PUSH2 0x8BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB3DA9E6B EQ PUSH2 0x823 JUMPI DUP1 PUSH4 0xC5E10EEF EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0xD48BFCA7 EQ PUSH2 0x85D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AF1D35A GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xA366F496 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xA366F496 EQ PUSH2 0x7C3 JUMPI DUP1 PUSH4 0xA460E104 EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x7E9 JUMPI DUP1 PUSH4 0xA70BC542 EQ PUSH2 0x810 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AF1D35A EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0x9F5F86AE EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0x9FD12B77 EQ PUSH2 0x7BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE3F93F GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x8FE3F93F EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x944AC59F EQ PUSH2 0x71E JUMPI DUP1 PUSH4 0x94CF073A EQ PUSH2 0x731 JUMPI DUP1 PUSH4 0x95373018 EQ PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6D0 JUMPI DUP1 PUSH4 0x84EDAA42 EQ PUSH2 0x6D8 JUMPI DUP1 PUSH4 0x8991B2F1 EQ PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F0E0EF3 GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x693CE7F5 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x6F307DC3 GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x64A JUMPI DUP1 PUSH4 0x78327438 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x830AA745 EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x8345F26E EQ PUSH2 0x6AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x693CE7F5 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x6CE4074A EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x6E98E5E4 EQ PUSH2 0x637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x570A7AF2 EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0x654A9EDA EQ PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5063524A EQ PUSH2 0x571 JUMPI DUP1 PUSH4 0x51E3F160 EQ PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F7A1881 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3E8297CA GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3E8297CA EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0x458936F5 EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0x46FB371D EQ PUSH2 0x537 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F7A1881 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x3192195C EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x38975BC4 EQ PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x172C48C7 GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x172C48C7 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x2362A2D8 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x2630C12F EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0x29DF0B93 EQ PUSH2 0x486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x55EE9B5 EQ PUSH2 0x388 JUMPI DUP1 PUSH4 0xD8F9CEE EQ PUSH2 0x3CE JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x3F1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B1 PUSH2 0x396 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3E1 PUSH2 0x3DC CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x994 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0xA7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x3C23 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x50 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3B1 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x494 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0xED7 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0xFA6 JUMP JUMPDEST PUSH2 0x460 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CA5 JUMP JUMPDEST PUSH2 0x1055 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x584 PUSH2 0x57F CALLDATASIZE PUSH1 0x4 PUSH2 0x3CF6 JUMP JUMPDEST PUSH2 0x11BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x5B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x13A3 JUMP JUMPDEST PUSH2 0x460 PUSH1 0xD2 DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x3E1 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D31 JUMP JUMPDEST PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1808 JUMP JUMPDEST PUSH2 0x62A PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DFB JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3C5 SWAP2 SWAP1 PUSH2 0x3EF0 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x645 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x1A0B JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x684 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1AF7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CA5 JUMP JUMPDEST PUSH2 0x1B84 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x6BE SWAP1 PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x6E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1CD4 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x6F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F0A JUMP JUMPDEST PUSH2 0x1D23 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x72C CALLDATASIZE PUSH1 0x4 PUSH2 0x3F41 JUMP JUMPDEST PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x73F CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA6 JUMP JUMPDEST PUSH2 0x2010 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x752 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x258E JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0xFFFF DUP1 DUP5 AND DUP3 MSTORE PUSH3 0x10000 DUP5 DIV DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x20 SHL DUP5 DIV DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x30 SHL DUP4 DIV DUP3 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SHL SWAP1 SWAP3 DIV AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2633 JUMP JUMPDEST PUSH2 0x460 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0x26A8 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x26D8 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x3FE8 JUMP JUMPDEST PUSH2 0x2724 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x3E1 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x86B CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2803 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x401D JUMP JUMPDEST PUSH2 0x2837 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2882 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8CB CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x28EE JUMP JUMPDEST PUSH2 0x42B PUSH2 0x8DE CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0x29DC JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x8F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2A45 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x4040 JUMP JUMPDEST PUSH2 0x2A83 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x93D CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x9AF JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0xA0C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0xA2A JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xA53 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xA6C DUP4 DUP4 PUSH2 0x2B66 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA8D PUSH1 0x1 DUP5 SHL PUSH2 0x29DC JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xAC0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB87 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0xB61 JUMPI POP PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB44 JUMPI PUSH2 0xB44 PUSH2 0x4098 JUMP JUMPDEST EQ DUP1 PUSH2 0xB61 JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB5F JUMPI PUSH2 0xB5F PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xB6F JUMPI PUSH1 0x3 SWAP7 POP PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB92 DUP10 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP2 POP DUP1 DUP1 DUP1 DUP1 PUSH2 0xBC8 DUP7 PUSH2 0xF39 JUMP JUMPDEST POP SWAP1 SWAP5 POP SWAP1 POP PUSH2 0xBDA DUP13 DUP15 DUP7 DUP5 PUSH2 0x11BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP4 SWAP12 POP SWAP4 SWAP9 POP SWAP1 SWAP6 POP SWAP4 POP PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC74 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH2 0xC80 DUP9 DUP8 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0xC8B SWAP1 PUSH1 0x1 PUSH2 0x40DD JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCC6 DUP8 PUSH32 0x0 DUP14 PUSH1 0x1 DUP13 DUP12 DUP8 SUB SUB SUB DUP14 PUSH2 0x2BC0 JUMP JUMPDEST PUSH2 0xD08 JUMP JUMPDEST PUSH2 0xD08 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP14 DUP10 PUSH1 0x1 DUP11 DUP14 ADD DUP7 SWAP1 SUB ADD PUSH2 0x2D76 JUMP JUMPDEST PUSH2 0xD56 DUP8 PUSH32 0x0 PUSH32 0x0 DUP10 PUSH1 0x0 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x32A54179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCA9505E4 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP PUSH1 0x1 DUP5 GT ISZERO PUSH2 0xE19 JUMPI PUSH2 0xE19 DUP4 PUSH32 0x0 DUP14 DUP8 PUSH1 0x0 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 NOT AND PUSH2 0xE41 DUP5 DUP10 DUP9 DUP5 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x44DBBD9F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x89B77B3E SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP SWAP5 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0xF0F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0xF2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF36 DUP2 PUSH2 0x2E88 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF4A DUP7 PUSH2 0x2EED JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 POP SWAP1 POP DUP2 PUSH2 0xF5C DUP3 DUP8 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0xF66 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP5 POP PUSH2 0x2710 SWAP1 PUSH2 0xFFFF AND PUSH2 0xF7E DUP8 DUP8 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0xF88 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0xF92 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0xF9C SWAP1 DUP6 PUSH2 0x40DD JUMP JUMPDEST SWAP5 SWAP7 SWAP4 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x102E SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x104B JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1053 PUSH2 0x3044 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x106F JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x108B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x10B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP5 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x10FE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1115 JUMPI POP PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST DUP1 PUSH2 0x1127 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO JUMPDEST ISZERO PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114E DUP3 PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x116E JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1179 DUP6 PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP PUSH2 0x1189 DUP4 DUP6 DUP4 DUP6 PUSH1 0x0 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x11AD JUMPI PUSH2 0x119C DUP4 DUP6 DUP4 PUSH1 0x0 PUSH1 0x1 PUSH2 0x3096 JUMP JUMPDEST POP PUSH2 0x11AB DUP4 DUP6 DUP4 DUP6 PUSH1 0x1 PUSH2 0x3096 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0xFFFF AND PUSH2 0x11DD DUP9 DUP9 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x11E7 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x11F1 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x11FB SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP4 POP PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1211 JUMPI PUSH2 0x1211 PUSH2 0x4098 JUMP JUMPDEST EQ DUP1 PUSH2 0x122E JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x122C JUMPI PUSH2 0x122C PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x124A JUMPI POP PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1248 JUMPI PUSH2 0x1248 PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x1392 JUMPI PUSH1 0x0 PUSH1 0x1 DUP9 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1265 JUMPI PUSH2 0x1265 PUSH2 0x4098 JUMP JUMPDEST SUB PUSH2 0x12C9 JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x1286 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1290 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x12AE SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x12B8 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x12C2 SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP PUSH2 0x135C JUMP JUMPDEST PUSH1 0x2 DUP9 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x4098 JUMP JUMPDEST SUB PUSH2 0x1327 JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x12FE SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1308 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x12AE SWAP1 PUSH1 0x1 PUSH1 0x30 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST POP PUSH1 0x1 SLOAD DUP9 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0x1345 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND DUP4 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x134F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x1359 SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x1371 JUMPI PUSH1 0x1 DUP6 DUP3 SUB SUB SWAP4 POP PUSH2 0x1375 JUMP JUMPDEST DUP1 SWAP5 POP JUMPDEST DUP6 DUP2 LT PUSH2 0x1386 JUMPI DUP6 DUP6 SUB SWAP3 POP PUSH2 0x138C JUMP JUMPDEST DUP5 DUP7 SUB SWAP2 POP JUMPDEST POP PUSH2 0x1398 JUMP JUMPDEST DUP5 DUP5 SUB SWAP2 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x13BD JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x13D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x1411 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x142F JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1458 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x1471 DUP3 DUP3 PUSH2 0x31A8 JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x14B8 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x14D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x14FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x1518 DUP6 DUP5 PUSH2 0x31A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1562 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1586 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15F6 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x50 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5CECBD0E PUSH2 0x1620 DUP7 DUP10 PUSH2 0x4129 JUMP JUMPDEST DUP11 PUSH2 0x162B DUP10 DUP9 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE DUP11 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A6 SWAP2 SWAP1 PUSH2 0x4159 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x1 DUP5 GT PUSH2 0x16BE JUMPI PUSH2 0x16BC DUP10 DUP10 PUSH2 0x2B66 JUMP JUMPDEST POP JUMPDEST PUSH2 0x16C7 DUP8 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x16D5 SWAP1 PUSH2 0xFFFF AND DUP3 PUSH2 0x40F0 JUMP JUMPDEST SWAP1 POP PUSH2 0x16E0 DUP9 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x16EE SWAP1 PUSH2 0xFFFF AND DUP4 PUSH2 0x40F0 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 LT PUSH2 0x1709 JUMPI PUSH2 0x1700 DUP10 PUSH2 0x2E88 JUMP JUMPDEST POP POP POP POP PUSH2 0x11AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP4 PUSH2 0x1739 PUSH12 0x33B2E3C9FD0803CE8000000 DUP6 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1743 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x1759 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x1763 SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x178E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST DUP2 GT PUSH2 0x17CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x17C2 DUP11 PUSH2 0x2E88 JUMP JUMPDEST POP POP POP POP POP PUSH2 0x11AD JUMP JUMPDEST PUSH2 0x17D5 DUP11 PUSH2 0x3227 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE POP POP POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1833 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH5 0x100000000 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x186E PUSH1 0x0 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1882 JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x189E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP5 AND EQ ISZERO DUP1 PUSH2 0x1905 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO JUMPDEST ISZERO PUSH2 0x1935 JUMPI PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1935 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFC1A5543 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1940 DUP6 PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xAED1EB34AF6ACD8C1E3911FB2EBB875A66324B03957886BD002227B17F52AB03 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 MLOAD PUSH4 0x1CFF79CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x1CFF79CD SWAP1 PUSH2 0x19B0 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x417D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x19CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x19F7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A36 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x1A74 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1AB2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH20 0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADD PUSH2 0x1AF3 JUMPI PUSH1 0xD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x1B45 JUMPI POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xF0 SHL SWAP1 DIV PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B50 DUP4 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1B73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B7C DUP2 PUSH2 0x29DC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1B8C PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1BB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1C01 DUP4 DUP4 PUSH2 0x31A8 JUMP JUMPDEST PUSH2 0x1C16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP6 DUP6 DUP5 PUSH2 0x2D76 JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CAF SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x1CCC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1053 PUSH2 0x3512 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1CFF JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1D56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D98 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x21D18456 DUP6 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E4C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB3 SWAP2 SWAP1 PUSH2 0x420F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBF28068B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xBF28068B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1F44 DUP4 DUP3 PUSH2 0x354F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 SWAP1 SSTORE DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F9B JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH10 0xFFFF0000000000000000 NOT SWAP5 DUP5 AND PUSH1 0x1 PUSH1 0x30 SHL MUL PUSH8 0xFFFF000000000000 NOT SWAP7 DUP6 AND PUSH1 0x1 PUSH1 0x20 SHL MUL SWAP7 SWAP1 SWAP7 AND PUSH8 0xFFFFFFFF00000000 NOT SWAP8 DUP6 AND PUSH3 0x10000 MUL PUSH4 0xFFFFFFFF NOT SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP9 AND SWAP4 SWAP1 SWAP4 OR OR SWAP5 SWAP1 SWAP5 AND SWAP5 SWAP1 SWAP5 OR SWAP2 SWAP1 SWAP2 OR AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x201A PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x2043 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2085 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2093 DUP8 PUSH2 0x2EED JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP6 ISZERO PUSH2 0x2147 JUMPI PUSH2 0x20AB DUP8 DUP6 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP PUSH2 0x20BB DUP5 DUP9 DUP5 DUP7 PUSH1 0x1 PUSH2 0x35CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBF28068B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xBF28068B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x212A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x213E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2516 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 PUSH2 0x2155 DUP6 DUP4 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x215F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x2169 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0x2184 SWAP1 PUSH2 0xFFFF AND DUP5 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x218E SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP1 POP PUSH2 0x219A DUP2 DUP4 PUSH2 0x40DD JUMP JUMPDEST DUP10 LT PUSH2 0x2393 JUMPI DUP9 DUP2 PUSH2 0x21AC DUP5 DUP10 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0x21B6 SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0x21C0 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2233 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x224D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2261 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCA9505E4 DUP3 DUP5 DUP13 PUSH2 0x22A1 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x22AB SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2368 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x238C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP PUSH2 0x2513 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x23A9 SWAP1 PUSH2 0xFFFF AND PUSH2 0x2710 PUSH2 0x4250 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x23B9 PUSH2 0x2710 DUP13 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x23C3 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23D1 DUP3 DUP13 PUSH2 0x4129 JUMP JUMPDEST SWAP1 POP DUP8 SWAP9 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD1660F99 PUSH32 0x0 PUSH32 0x0 DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2446 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2474 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x32A54179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH4 0xCA9505E4 SWAP2 POP PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x250E DUP9 DUP4 DUP9 DUP11 PUSH1 0x0 PUSH2 0x35CA JUMP JUMPDEST SWAP5 POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16128211 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x16128211 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x255F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x25C6 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x25E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x260D JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x2625 DUP2 PUSH2 0x3227 JUMP JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x265E JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xF62005ACEBE9B616AEFB5F248B48F5E89F28437B27D1EEBC0B2D911209F297AF SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x26D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2703 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x274F JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x27A9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF DUP4 AND PUSH1 0x1 PUSH1 0xF0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF0 SHL SUB SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27B4 DUP4 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x27D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFFFF PUSH1 0xA0 SHL PUSH1 0xA0 DUP5 SWAP1 SHL AND OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x282E JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF36 DUP2 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2862 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH4 0x1000000 MUL PUSH4 0xFF000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x50 SHL MUL PUSH32 0xFFFF0000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x2908 JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x2924 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x294D JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x298F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x299A DUP4 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 POP PUSH2 0x29CC DUP3 DUP3 PUSH2 0x354F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 SUB PUSH2 0x2A1E JUMPI POP POP PUSH1 0x1 SLOAD PUSH32 0x0 SWAP3 PUSH1 0x1 PUSH1 0xF0 SHL SWAP1 SWAP2 DIV PUSH2 0xFFFF AND SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP DUP2 PUSH2 0x2A3D PUSH1 0xA0 DUP3 SWAP1 SHR PUSH2 0x3758 JUMP JUMPDEST SWAP2 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x2A7E JUMPI PUSH1 0x40 MLOAD PUSH4 0xB5BA4C4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2AB6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP1 DUP1 ISZERO PUSH2 0x2AE1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x2AFC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 DUP6 ISZERO ISZERO MUL OR SWAP1 SSTORE JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2B5E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2AFF JUMP JUMPDEST PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B72 DUP4 PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 AND ISZERO PUSH2 0x2BB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP1 ISZERO PUSH2 0x2BFE JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x2D0C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2C53 SWAP1 DUP8 SWAP1 PUSH32 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xB0D3B75 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 AND SWAP3 POP PUSH4 0x5869DBA8 SWAP2 POP PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D03 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2D6F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2D3C SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2DCE DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2D97 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x422C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x37BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 JUMPDEST DUP2 DUP2 GT PUSH2 0x2D6F JUMPI DUP2 DUP2 AND ISZERO PUSH2 0x2E80 JUMPI PUSH1 0x0 PUSH2 0x2DF1 DUP3 PUSH2 0x29DC JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E62 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2E7D JUMPI PUSH2 0x2E7D DUP8 DUP4 DUP9 PUSH1 0x1 DUP6 SUB DUP10 PUSH2 0x2BC0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 SHL PUSH2 0x2DD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x2EAB DUP3 PUSH2 0x3891 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x2EE8 JUMPI PUSH1 0x0 PUSH2 0x2ECD DUP4 PUSH2 0x38A7 JUMP JUMPDEST PUSH2 0x2ED8 SWAP1 PUSH1 0x1 PUSH2 0x40DD JUMP JUMPDEST SWAP1 POP PUSH2 0x2DCE DUP5 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3911 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1AFBB7A4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F54 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D11A15 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FB8 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3018 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 SWAP5 SWAP2 SWAP4 POP POP JUMP JUMPDEST PUSH2 0x304C PUSH2 0x3A16 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH4 0x1CFF79CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP7 AND SWAP2 PUSH4 0x1CFF79CD SWAP2 PUSH2 0x3103 SWAP2 DUP11 SWAP2 PUSH1 0x4 ADD PUSH2 0x417D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3143 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3140 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x317C JUMPI DUP1 MLOAD ISZERO DUP1 PUSH2 0x316B JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3165 SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x317A JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x319F JUMP JUMPDEST POP JUMPDEST DUP2 ISZERO PUSH2 0x319B JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F10A7F3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B3 DUP3 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 PUSH2 0x31C5 JUMPI POP PUSH1 0x7 SLOAD DUP2 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x31E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 AND SWAP1 SUB PUSH2 0x2EE8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x50 SHL SWAP1 SWAP4 DIV SWAP1 SWAP2 AND SWAP2 SWAP1 DUP1 DUP1 PUSH2 0x325C DUP7 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x2710 DUP3 MUL PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP5 POP SWAP1 DUP9 AND SWAP3 POP PUSH4 0xF9A65030 SWAP2 POP PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32F6 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP PUSH2 0x3301 DUP5 PUSH2 0x38A7 JUMP JUMPDEST PUSH1 0x1 ADD SWAP2 POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x34D5 JUMPI DUP1 ISZERO PUSH2 0x3327 JUMPI PUSH1 0x1 DUP2 DUP7 SUB SHL PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP4 POP DUP7 DUP5 AND ISZERO PUSH2 0x34CD JUMPI PUSH1 0x0 DUP1 PUSH2 0x3340 DUP7 PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x338F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33B3 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x34C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH2 0xFFFF DUP5 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3412 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3436 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH2 0x3440 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x344A SWAP1 DUP8 PUSH2 0x40DD JUMP JUMPDEST SWAP6 POP DUP9 DUP7 LT PUSH2 0x34BB JUMPI PUSH1 0x0 PUSH2 0x345E DUP12 PUSH2 0x3891 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x348A JUMPI PUSH2 0x3485 DUP14 DUP13 DUP4 PUSH1 0x1 DUP10 DUP15 SUB PUSH2 0x3911 JUMP JUMPDEST PUSH2 0x34AC JUMP JUMPDEST DUP6 ISZERO PUSH2 0x34AC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP12 SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x34C9 JUMP JUMPDEST SWAP9 DUP7 XOR SWAP9 PUSH1 0x1 SWAP5 POP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x330E JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x29973DDB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1053 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH2 0x351A PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x3079 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0x357E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x359C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4F2CB04F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x3647 JUMPI PUSH1 0x0 PUSH2 0x35DE DUP7 DUP9 PUSH2 0x40DD JUMP JUMPDEST SWAP1 POP PUSH2 0x35EE DUP7 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST DUP5 DUP9 PUSH2 0x35FE DUP9 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3608 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3612 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x361C SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH4 0x3B9ACA00 PUSH2 0x362B DUP4 DUP9 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3635 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x363F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x319F JUMP JUMPDEST DUP6 DUP4 PUSH2 0x3657 DUP8 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3661 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x366B SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x3679 DUP6 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3683 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST DUP4 PUSH2 0x3692 DUP7 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x369C SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x36A6 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2E5A5C77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100 PUSH1 0x5 SLOAD LT PUSH2 0x370B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F028629 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 SWAP1 SWAP6 SHL SWAP5 DUP6 SWAP1 SSTORE DUP5 DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE DUP3 SLOAD SWAP2 SWAP3 SWAP1 PUSH2 0x374F DUP4 PUSH2 0x426B JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x37BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x362062697473 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9CB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3814 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A5F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2EE8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3832 SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x2EE8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND ADD PUSH2 0x3894 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 SUB PUSH2 0x38B9 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x100 PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH2 0x38CB DUP3 DUP5 PUSH2 0x40DD JUMP JUMPDEST SWAP1 SHR SWAP3 POP PUSH1 0x1 DUP4 SHL DUP5 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x38E6 JUMPI POP PUSH1 0x1 DUP6 DUP6 SHR EQ JUMPDEST ISZERO PUSH2 0x38F1 JUMPI POP PUSH2 0x390A JUMP JUMPDEST DUP5 DUP2 LT PUSH2 0x3900 JUMPI DUP4 SWAP3 POP PUSH2 0x3904 JUMP JUMPDEST DUP4 SWAP2 POP JUMPDEST POP PUSH2 0x38BF JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39FC JUMPI PUSH1 0x1 DUP2 SHL DUP6 DUP2 AND ISZERO PUSH2 0x39F3 JUMPI PUSH1 0x0 PUSH2 0x3932 DUP3 PUSH2 0x29DC JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x397F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39A3 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT PUSH2 0x39F0 JUMPI PUSH1 0x0 SLOAD SWAP8 DUP4 XOR SWAP8 PUSH1 0x0 NOT SWAP1 SWAP8 ADD SWAP7 PUSH1 0xFF PUSH4 0x1000000 SWAP1 SWAP2 DIV AND DUP8 GT PUSH2 0x39F0 JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE POP PUSH2 0x2D6F JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x3913 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0xC2D5257 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x1053 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B7C DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3A86 SWAP2 SWAP1 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3AC3 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3AC8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3AD9 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3AE4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3B53 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3B4C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3B4C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9CB JUMP JUMPDEST POP DUP2 PUSH2 0x1B7C JUMP JUMPDEST PUSH2 0x1B7C DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x3B68 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP2 SWAP1 PUSH2 0x3EF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2AFC DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3BD2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x4 DUP2 LT PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3C3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x3C49 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP7 POP PUSH2 0x3C57 PUSH1 0x20 DUP10 ADD PUSH2 0x3C06 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x3C6E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x3C7E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0x3C95 DUP2 PUSH2 0x3C15 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3CBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3CC6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3CD6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3CE6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x3D1C PUSH1 0x20 DUP7 ADD PUSH2 0x3C06 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3D54 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3D64 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3D74 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3DCB JUMPI PUSH2 0x3DCB PUSH2 0x3D8C JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3DED JUMPI PUSH2 0x3DED PUSH2 0x3D8C JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3E1B DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3E2B DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x3E58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3E6B PUSH2 0x3E66 DUP3 PUSH2 0x3DD3 JUMP JUMPDEST PUSH2 0x3DA2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP8 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x3E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EBB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3EA3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3EDC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3EA0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3F03 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3EC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F62 DUP7 PUSH2 0x3F2F JUMP JUMPDEST SWAP5 POP PUSH2 0x3F70 PUSH1 0x20 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP4 POP PUSH2 0x3F7E PUSH1 0x40 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP3 POP PUSH2 0x3F8C PUSH1 0x60 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP2 POP PUSH2 0x3F9A PUSH1 0x80 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3FBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3FC6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3FDD DUP2 PUSH2 0x3C15 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4006 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH2 0x4014 PUSH1 0x20 DUP5 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x402F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2AFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x405E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3C15 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4124 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x414E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2AFC DUP2 PUSH2 0x3C15 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x416C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1B7C SWAP1 DUP4 ADD DUP5 PUSH2 0x3EC4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x41DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x41E9 PUSH2 0x3E66 DUP3 PUSH2 0x3DD3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x41FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x319F DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3EA0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2AFC DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2BB9 JUMPI PUSH2 0x2BB9 PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x427D JUMPI PUSH2 0x427D PUSH2 0x40C7 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4296 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3EA0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 0xD3 PUSH18 0x64E9CF042A935A8D8F67A9E6198D638B261 0xBC 0x23 SWAP12 EQ MOD 0xD1 0xC2 0xBF PUSH15 0xE81F64736F6C634300081100330000 ", - "sourceMap": "2865:72740:21:-:0;;;3313:55;;;-1:-1:-1;;3313:55:21;;;;;8164:965;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8229:5;-1:-1:-1;;;;;8216:35:21;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1006:5:56;996:15;;-1:-1:-1;;996:15:56;;;-1:-1:-1;;;;;855:29:13;;851:64;;893:22;;-1:-1:-1;;;893:22:13;;;;;;;;;;;851:64;966:15;-1:-1:-1;;;;;950:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;938:54:13;;;-1:-1:-1;;;;;938:54:13;;;;;804:195;8270:32:21::1;8318:5;-1:-1:-1::0;;;;;8305:48:21::1;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8366:12:21;::::1;;::::0;;;8400:19:::1;::::0;;;8464:36:::1;::::0;;-1:-1:-1;;;8464:36:21;;;;8270:85;;-1:-1:-1;8442:19:21::1;::::0;8464:34:::1;::::0;:36:::1;::::0;;::::1;::::0;-1:-1:-1;;8464:36:21;;;;;;;;8366:12;8464:36:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8522:24:21;::::1;;::::0;8442:58;-1:-1:-1;8634:22:21::1;8442:58:::0;8634:9:::1;:22::i;:::-;8693:15;-1:-1:-1::0;;;;;8693:28:21::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8679:44:21::1;;;-1:-1:-1::0;;;;;8679:44:21::1;;;::::0;::::1;8759:15;-1:-1:-1::0;;;;;8759:30:21::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8745:46:21::1;;;-1:-1:-1::0;;;;;8745:46:21::1;;;::::0;::::1;8932:15;-1:-1:-1::0;;;;;8932:30:21::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8897:5;:17;;;:68;;;;;-1:-1:-1::0;;;;;8897:68:21::1;;;;;-1:-1:-1::0;;;;;8897:68:21::1;;;;;;9021:15;-1:-1:-1::0;;;;;9021:33:21::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8987:70:21::1;;::::0;-1:-1:-1;;9079:18:21::1;:31:::0;;-1:-1:-1;;;;;;9079:31:21::1;9100:10;9079:31;::::0;;-1:-1:-1;2865:72740:21;;68143:906;-1:-1:-1;;;;;68285:28:21;;68316:1;68285:28;;;:21;:28;;;;;;:32;68281:85;;68338:28;;-1:-1:-1;;;68338:28:21;;;;;;;;;;;68281:85;68602:3;68577:21;;:28;68573:65;;68614:24;;-1:-1:-1;;;68614:24:21;;;;;;;;;;;68573:65;68826:21;;;-1:-1:-1;;;;;68857:28:21;;68801:17;68857:28;;;:21;:28;;;;;;;;68821:1;:26;;;68857:40;;;;68920:37;;;:26;:37;;;;;:63;;;;69006:23;;68821:26;;68826:21;69006:23;;;:::i;:::-;;;;;;68186:863;68143:906;:::o;14:131:70:-;-1:-1:-1;;;;;89:31:70;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:251::-;220:6;273:2;261:9;252:7;248:23;244:32;241:52;;;289:1;286;279:12;241:52;321:9;315:16;340:31;365:5;340:31;:::i;:::-;390:5;150:251;-1:-1:-1;;;150:251:70:o;686:232::-;725:3;746:17;;;743:140;;805:10;800:3;796:20;793:1;786:31;840:4;837:1;830:15;868:4;865:1;858:15;743:140;-1:-1:-1;910:1:70;899:13;;686:232::o;:::-;2865:72740:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_accountFactory_7859": { - "entryPoint": null, - "id": 7859, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_acl_1978": { - "entryPoint": null, - "id": 1978, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_addToken_10291": { - "entryPoint": 14000, - "id": 10291, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_approve_8836": { - "entryPoint": 12438, - "id": 8836, - "parameterSlots": 5, - "returnSlots": 1 - }, - "@_calcEnabledTokens_9370": { - "entryPoint": 14481, - "id": 9370, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_calcNewCumulativeIndex_8620": { - "entryPoint": 13770, - "id": 8620, - "parameterSlots": 5, - "returnSlots": 1 - }, - "@_callOptionalReturn_18246": { - "entryPoint": 14271, - "id": 18246, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkAndEnableToken_8959": { - "entryPoint": 12712, - "id": 8959, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkAndOptimizeEnabledTokens_9343": { - "entryPoint": 11912, - "id": 9343, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_disableToken_9513": { - "entryPoint": 11110, - "id": 9513, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@_fullCollateralCheck_9289": { - "entryPoint": 12839, - "id": 9289, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_getCreditAccountParameters_10047": { - "entryPoint": 12013, - "id": 10047, - "parameterSlots": 1, - "returnSlots": 3 - }, - "@_getMaxIndex_10175": { - "entryPoint": 14503, - "id": 10175, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_optimizeEnabledTokens_9453": { - "entryPoint": 14609, - "id": 9453, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@_pause_17169": { - "entryPoint": 13586, - "id": 17169, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requireNotPaused_17142": { - "entryPoint": 13551, - "id": 17142, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requirePaused_17153": { - "entryPoint": 14870, - "id": 17153, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_revert_18719": { - "entryPoint": null, - "id": 18719, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_safeCreditAccountSet_9693": { - "entryPoint": 13647, - "id": 9693, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_safeTokenTransfer_9659": { - "entryPoint": 11200, - "id": 9659, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@_transferAssetsTo_9610": { - "entryPoint": 11732, - "id": 9610, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_unpause_17185": { - "entryPoint": 12356, - "id": 17185, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@adapterToContract_7915": { - "entryPoint": null, - "id": 7915, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addCollateral_8653": { - "entryPoint": 7044, - "id": 8653, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addEmergencyLiquidator_10516": { - "entryPoint": 7380, - "id": 10516, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@addToken_10241": { - "entryPoint": 10243, - "id": 10241, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@approveCreditAccount_8773": { - "entryPoint": 4181, - "id": 8773, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@calcClosePayments_9862": { - "entryPoint": 4543, - "id": 9862, - "parameterSlots": 4, - "returnSlots": 4 - }, - "@calcCreditAccountAccruedInterest_10010": { - "entryPoint": 3897, - "id": 10010, - "parameterSlots": 1, - "returnSlots": 3 - }, - "@canLiquidateWhilePaused_7927": { - "entryPoint": null, - "id": 7927, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@changeContractAllowance_10471": { - "entryPoint": 6667, - "id": 10471, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@checkAndEnableToken_8917": { - "entryPoint": 5027, - "id": 8917, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@checkAndOptimizeEnabledTokens_9303": { - "entryPoint": 3799, - "id": 9303, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@checkEmergencyPausable_9544": { - "entryPoint": 10883, - "id": 9544, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@closeCreditAccount_8358": { - "entryPoint": 2710, - "id": 8358, - "parameterSlots": 7, - "returnSlots": 1 - }, - "@collateralTokensByMask_9931": { - "entryPoint": 10716, - "id": 9931, - "parameterSlots": 1, - "returnSlots": 2 - }, - "@collateralTokensCount_7889": { - "entryPoint": null, - "id": 7889, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@collateralTokens_9879": { - "entryPoint": 2686, - "id": 9879, - "parameterSlots": 1, - "returnSlots": 2 - }, - "@contractToAdapter_7921": { - "entryPoint": null, - "id": 7921, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@creditAccounts_7855": { - "entryPoint": null, - "id": 7855, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@creditConfigurator_7881": { - "entryPoint": null, - "id": 7881, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@creditFacade_7845": { - "entryPoint": null, - "id": 7845, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@cumulativeDropAtFastCheckRAY_7909": { - "entryPoint": null, - "id": 7909, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@disableToken_9476": { - "entryPoint": 2452, - "id": 9476, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@emergencyLiquidation_7836": { - "entryPoint": null, - "id": 7836, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@enabledTokensMap_7904": { - "entryPoint": null, - "id": 7904, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@executeOrder_8896": { - "entryPoint": 6240, - "id": 8896, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@fastCollateralCheck_9098": { - "entryPoint": 5248, - "id": 9098, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@fees_10216": { - "entryPoint": null, - "id": 10216, - "parameterSlots": 0, - "returnSlots": 5 - }, - "@forbiddenTokenMask_7898": { - "entryPoint": null, - "id": 7898, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@fullCollateralCheck_9114": { - "entryPoint": 9614, - "id": 9114, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionCallWithValue_18544": { - "entryPoint": null, - "id": 18544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@functionCall_18480": { - "entryPoint": 14943, - "id": 18480, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getCreditAccountOrRevert_9957": { - "entryPoint": 10821, - "id": 9957, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_18408": { - "entryPoint": null, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@liquidationThresholds_10084": { - "entryPoint": 6903, - "id": 10084, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@manageDebt_8546": { - "entryPoint": 8208, - "id": 8546, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@maxAllowedEnabledTokenLength_7841": { - "entryPoint": null, - "id": 7841, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@openCreditAccount_8152": { - "entryPoint": 7459, - "id": 8152, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@pause_2038": { - "entryPoint": 7207, - "id": 2038, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@paused_17130": { - "entryPoint": null, - "id": 17130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@poolService_7867": { - "entryPoint": null, - "id": 7867, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@pool_7871": { - "entryPoint": null, - "id": 7871, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@priceOracle_10228": { - "entryPoint": null, - "id": 10228, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@removeEmergencyLiquidator_10531": { - "entryPoint": 9944, - "id": 10531, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@safeTransferFrom_18024": { - "entryPoint": 11638, - "id": 18024, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@setConfigurator_10548": { - "entryPoint": 9779, - "id": 10548, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setForbidMask_10410": { - "entryPoint": 9896, - "id": 10410, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setLiquidationThreshold_10397": { - "entryPoint": 10020, - "id": 10397, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setMaxEnabledTokens_10423": { - "entryPoint": 10295, - "id": 10423, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setParams_10338": { - "entryPoint": 8048, - "id": 10338, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@toUint16_19507": { - "entryPoint": 14168, - "id": 19507, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@tokenMasksMap_10106": { - "entryPoint": 11013, - "id": 10106, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@transferAccountOwnership_8685": { - "entryPoint": 10478, - "id": 8685, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@underlying_7863": { - "entryPoint": null, - "id": 7863, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@universalAdapter_7930": { - "entryPoint": null, - "id": 7930, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@unpause_2056": { - "entryPoint": 4006, - "id": 2056, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@upgradeCreditFacade_10484": { - "entryPoint": 6152, - "id": 10484, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradePriceOracle_10501": { - "entryPoint": 10370, - "id": 10501, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@verifyCallResultFromTarget_18675": { - "entryPoint": 15076, - "id": 18675, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@version_7935": { - "entryPoint": null, - "id": 7935, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@wethAddress_7875": { - "entryPoint": null, - "id": 7875, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@wethGateway_7878": { - "entryPoint": null, - "id": 7878, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_enum_ClosureAction": { - "entryPoint": 15366, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 15255, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 16911, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 15284, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_addresst_uint256": { - "entryPoint": 15525, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256": { - "entryPoint": 15665, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr": { - "entryPoint": 15867, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_bool": { - "entryPoint": 16448, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_enum$_ClosureAction_$11941t_uint256t_addresst_addresst_uint256t_bool": { - "entryPoint": 15395, - "id": null, - "parameterSlots": 2, - "returnSlots": 7 - }, - "abi_decode_tuple_t_addresst_uint16": { - "entryPoint": 16360, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_bool": { - "entryPoint": 16294, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 16700, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes_memory_ptr_fromMemory": { - "entryPoint": 16801, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16": { - "entryPoint": 16193, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint256": { - "entryPoint": 15341, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256_fromMemory": { - "entryPoint": 16558, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_address": { - "entryPoint": 16138, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256t_enum$_ClosureAction_$11941t_uint256t_uint256": { - "entryPoint": 15606, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint256t_uint256_fromMemory": { - "entryPoint": 16729, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint8": { - "entryPoint": 16413, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint16": { - "entryPoint": 16175, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_bytes": { - "entryPoint": 16068, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 17028, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": 16940, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 16765, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint16__to_t_address_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 16112, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IAccountFactory_$10721__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IPriceOracleV2_$12942__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_rational_0_by_1_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 16494, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__to_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 6, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_address_t_uint256_t_address__to_t_uint256_t_address_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 15778, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_allocation_size_bytes": { - "entryPoint": 15827, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_add_t_uint16": { - "entryPoint": 16976, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 16605, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 16647, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 16624, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 16681, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 16032, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 17003, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 16583, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 16536, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 15756, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 15234, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_bool": { - "entryPoint": 15381, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:20031:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "59:86:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "123:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "132:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "135:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "125:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "125:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "82:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "108:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "113:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "104:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "104:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "117:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "100:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "89:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "89:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "79:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "79:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "72:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "72:50:70" - }, - "nodeType": "YulIf", - "src": "69:70:70" - } - ] - }, - "name": "validator_revert_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "48:5:70", - "type": "" - } - ], - "src": "14:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "220:177:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "266:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "275:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "278:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "268:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "268:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "268:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "241:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "250:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "237:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "237:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "233:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "233:32:70" - }, - "nodeType": "YulIf", - "src": "230:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "291:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "317:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "304:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "304:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "295:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "361:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "336:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "336:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "336:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "376:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "386:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "376:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "186:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "197:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "209:6:70", - "type": "" - } - ], - "src": "150:247:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "503:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "513:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "525:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "536:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "521:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "521:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "513:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "555:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "570:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "586:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "591:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "582:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "582:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "595:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "578:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "578:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "566:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "566:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "548:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "548:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "548:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "472:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "483:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "494:4:70", - "type": "" - } - ], - "src": "402:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "697:301:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "743:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "752:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "755:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "745:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "745:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "745:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "718:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "727:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "714:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "714:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "739:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "710:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "710:32:70" - }, - "nodeType": "YulIf", - "src": "707:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "768:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "794:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "781:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "781:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "772:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "838:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "813:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "813:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "813:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "853:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "863:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "853:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "877:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "909:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "920:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "905:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "905:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "892:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "892:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "881:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "958:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "933:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "933:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "933:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "975:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "985:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "975:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "655:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "666:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "678:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "686:6:70", - "type": "" - } - ], - "src": "610:388:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1098:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1108:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1120:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1131:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1116:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1116:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1108:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1150:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1175:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1168:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1168:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1161:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1161:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1143:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1143:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1067:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1078:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1089:4:70", - "type": "" - } - ], - "src": "1003:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1265:110:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1311:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1320:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1323:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1313:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1313:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1313:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1286:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1295:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1282:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1282:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1307:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1278:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1278:32:70" - }, - "nodeType": "YulIf", - "src": "1275:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1336:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1359:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1346:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1346:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1336:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1231:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1242:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1254:6:70", - "type": "" - } - ], - "src": "1195:180:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1507:158:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1517:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1529:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1540:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1525:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1517:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1559:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1574:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1590:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1595:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1586:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1586:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1599:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1582:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1582:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1570:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1570:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1552:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1552:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1552:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1623:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1634:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1619:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1643:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1651:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1639:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1639:19:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1612:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1612:47:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1612:47:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint16__to_t_address_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1468:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1479:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1487:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1498:4:70", - "type": "" - } - ], - "src": "1380:285:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1730:94:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1740:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1762:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1749:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1749:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1740:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1802:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1811:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1814:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1804:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1804:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1804:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1791:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1798:1:70", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1788:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1788:12:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1781:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1781:20:70" - }, - "nodeType": "YulIf", - "src": "1778:40:70" - } - ] - }, - "name": "abi_decode_enum_ClosureAction", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1709:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1720:5:70", - "type": "" - } - ], - "src": "1670:154:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1871:76:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1925:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1934:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1937:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1927:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1927:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1927:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1894:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1915:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1908:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1908:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1901:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1901:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1891:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1891:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1884:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1884:40:70" - }, - "nodeType": "YulIf", - "src": "1881:60:70" - } - ] - }, - "name": "validator_revert_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1860:5:70", - "type": "" - } - ], - "src": "1829:118:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2140:720:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2187:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2196:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2199:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2189:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2189:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2189:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2161:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2170:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2157:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2157:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2182:3:70", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2153:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2153:33:70" - }, - "nodeType": "YulIf", - "src": "2150:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2212:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2238:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2225:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2225:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2216:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2282:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2257:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2257:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2257:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "2297:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2307:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2297:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2321:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2365:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2376:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2361:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2361:18:70" - } - ], - "functionName": { - "name": "abi_decode_enum_ClosureAction", - "nodeType": "YulIdentifier", - "src": "2331:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "2331:49:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2321:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2389:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2416:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2427:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2412:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2412:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2399:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2399:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2389:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2440:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2472:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2483:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2468:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2468:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2455:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2455:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "2444:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2521:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2496:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2496:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2496:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "2538:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2548:7:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "2538:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2564:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2596:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2607:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2592:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2592:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2579:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2579:33:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "2568:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2646:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "2621:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "2621:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2621:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "2663:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "2673:7:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "2663:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2689:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2716:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2727:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2712:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2712:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2699:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2699:33:70" - }, - "variableNames": [ - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "2689:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2741:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2773:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2784:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2769:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2769:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2756:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2756:33:70" - }, - "variables": [ - { - "name": "value_3", - "nodeType": "YulTypedName", - "src": "2745:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "2820:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "2798:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "2798:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2798:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "2837:17:70", - "value": { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "2847:7:70" - }, - "variableNames": [ - { - "name": "value6", - "nodeType": "YulIdentifier", - "src": "2837:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_enum$_ClosureAction_$11941t_uint256t_addresst_addresst_uint256t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2058:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2069:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2081:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2089:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2097:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "2105:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "2113:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "2121:6:70", - "type": "" - }, - { - "name": "value6", - "nodeType": "YulTypedName", - "src": "2129:6:70", - "type": "" - } - ], - "src": "1952:908:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2966:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2976:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2988:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2999:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2984:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2984:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2976:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3018:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3029:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3011:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3011:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3011:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2935:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2946:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2957:4:70", - "type": "" - } - ], - "src": "2865:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3172:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3182:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3194:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3205:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3190:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3190:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3182:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3224:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3239:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3255:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3260:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3251:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3251:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3264:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3247:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3247:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3235:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3217:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3217:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3217:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IPriceOracleV2_$12942__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3141:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3152:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3163:4:70", - "type": "" - } - ], - "src": "3047:227:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3436:162:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3446:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3458:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3469:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3454:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3454:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3446:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3488:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3499:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3481:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3481:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3481:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3526:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3537:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3522:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3522:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3542:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3515:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3515:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3515:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3569:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3580:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3565:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3565:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3585:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3558:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3558:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3558:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3389:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3400:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3408:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3416:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3427:4:70", - "type": "" - } - ], - "src": "3279:319:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3724:477:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3771:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3780:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3783:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3773:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3773:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3773:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3745:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3754:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3741:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3741:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3766:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3737:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3737:33:70" - }, - "nodeType": "YulIf", - "src": "3734:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3796:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3822:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3809:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3809:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3800:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3866:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3841:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3841:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3841:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "3881:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3891:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3881:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3905:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3937:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3948:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3933:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3933:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3920:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3920:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "3909:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3986:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "3961:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "3961:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3961:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "4003:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "4013:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4003:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4029:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4061:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4072:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4057:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4057:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4044:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4044:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "4033:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "4110:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "4085:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "4085:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4085:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "4127:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "4137:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4127:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4153:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4180:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4191:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4176:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4176:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4163:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4163:32:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "4153:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3666:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3677:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3689:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3697:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3705:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "3713:6:70", - "type": "" - } - ], - "src": "3603:598:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4346:281:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4393:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4402:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4405:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4395:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4395:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4395:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4367:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4376:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4363:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4363:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4388:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4359:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4359:33:70" - }, - "nodeType": "YulIf", - "src": "4356:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "4418:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4441:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4428:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4428:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4418:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4460:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4504:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4515:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4500:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4500:18:70" - } - ], - "functionName": { - "name": "abi_decode_enum_ClosureAction", - "nodeType": "YulIdentifier", - "src": "4470:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "4470:49:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4460:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4528:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4555:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4566:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4551:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4551:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4538:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4538:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4528:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4579:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4606:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4617:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4602:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4602:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4589:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4589:32:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "4579:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_enum$_ClosureAction_$11941t_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4288:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4299:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4311:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4319:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4327:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "4335:6:70", - "type": "" - } - ], - "src": "4206:421:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4817:206:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4827:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4839:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4850:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4835:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4835:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4827:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4870:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4881:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4863:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4863:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4863:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4908:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4919:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4904:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4904:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4924:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4897:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4897:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4897:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4951:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4962:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4947:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4947:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4967:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4940:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4940:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4940:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4994:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5005:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4990:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4990:18:70" - }, - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "5010:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4983:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4983:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4983:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4762:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "4773:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4781:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4789:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4797:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4808:4:70", - "type": "" - } - ], - "src": "4632:391:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5166:529:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5213:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5222:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5225:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5215:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5215:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5215:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5187:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5196:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5183:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5183:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5208:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5179:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5179:33:70" - }, - "nodeType": "YulIf", - "src": "5176:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5238:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5264:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5251:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5251:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5242:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5308:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "5283:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "5283:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5283:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "5323:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5333:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5323:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5347:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5379:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5390:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5375:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5362:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5362:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "5351:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5428:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "5403:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "5403:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5403:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "5445:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5455:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5445:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5471:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5503:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5514:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5499:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5499:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5486:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5486:32:70" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "5475:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5552:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "5527:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "5527:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5527:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "5569:17:70", - "value": { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5579:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "5569:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5595:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5622:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5633:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5618:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5618:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5605:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5605:32:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "5595:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5646:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5673:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5684:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5669:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5669:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5656:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "5656:33:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "5646:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5100:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5111:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5123:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5131:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "5139:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "5147:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "5155:6:70", - "type": "" - } - ], - "src": "5028:667:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5732:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5749:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5756:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5761:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5752:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5752:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5742:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5742:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5742:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5789:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5792:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5782:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5782:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5782:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5813:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5816:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5806:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5806:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5806:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "5700:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5877:230:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5887:19:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5903:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5897:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5897:9:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "5887:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5915:58:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "5937:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "5953:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5959:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5949:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5949:13:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5968:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "5964:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5964:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5945:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5945:27:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5933:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5933:40:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "5919:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6048:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "6050:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "6050:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6050:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "5991:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6003:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5988:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5988:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "6027:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "6039:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "6024:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6024:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "5985:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5985:62:70" - }, - "nodeType": "YulIf", - "src": "5982:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6086:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "6090:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6079:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6079:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6079:22:70" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "5857:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "5866:6:70", - "type": "" - } - ], - "src": "5832:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6169:129:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6213:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "6215:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "6215:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6215:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6185:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6193:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6182:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6182:30:70" - }, - "nodeType": "YulIf", - "src": "6179:56:70" - }, - { - "nodeType": "YulAssignment", - "src": "6244:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6264:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6272:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6260:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6260:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6281:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "6277:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6277:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6256:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6256:29:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6287:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6252:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6252:40:70" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "6244:4:70" - } - ] - } - ] - }, - "name": "array_allocation_size_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "6149:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "6160:4:70", - "type": "" - } - ], - "src": "6112:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6416:834:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6462:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6471:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6474:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6464:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6464:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6464:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6437:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6446:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6433:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6433:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6458:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6429:32:70" - }, - "nodeType": "YulIf", - "src": "6426:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6487:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6513:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6500:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6500:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6491:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6557:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "6532:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "6532:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6532:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "6572:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6582:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6572:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6596:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6628:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6639:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6624:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6624:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6611:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6611:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "6600:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "6677:7:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "6652:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "6652:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6652:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "6694:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "6704:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "6694:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6720:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6751:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6762:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6747:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6747:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6734:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6734:32:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "6724:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6809:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6818:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6821:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6811:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6811:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6811:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6781:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6789:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6778:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6778:30:70" - }, - "nodeType": "YulIf", - "src": "6775:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6834:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6848:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6859:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6844:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6844:22:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "6838:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6914:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6923:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6926:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6916:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6916:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6916:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6893:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6897:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6889:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6889:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6904:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6885:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6885:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6878:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6878:35:70" - }, - "nodeType": "YulIf", - "src": "6875:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6939:26:70", - "value": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6962:2:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6949:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "6949:16:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "6943:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6974:61:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7031:2:70" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nodeType": "YulIdentifier", - "src": "7003:27:70" - }, - "nodeType": "YulFunctionCall", - "src": "7003:31:70" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "6987:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "6987:48:70" - }, - "variables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "6978:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7051:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7058:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7044:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7044:17:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7044:17:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7107:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7116:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7119:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "7109:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7109:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7109:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7084:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7088:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7080:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7080:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7093:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7076:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7076:20:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7098:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "7073:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "7073:33:70" - }, - "nodeType": "YulIf", - "src": "7070:53:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7149:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7156:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7145:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7145:14:70" - }, - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7165:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7169:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7161:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7161:11:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7174:2:70" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "7132:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "7132:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7132:45:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7201:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "7208:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7197:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7197:14:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7213:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7193:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7193:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7218:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7186:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7186:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7186:34:70" - }, - { - "nodeType": "YulAssignment", - "src": "7229:15:70", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7239:5:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "7229:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6366:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "6377:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6389:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "6397:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "6405:6:70", - "type": "" - } - ], - "src": "6303:947:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7321:184:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7331:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7340:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "7335:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7400:63:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7425:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7430:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7421:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7421:11:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "7444:3:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7449:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7440:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7440:11:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7434:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7434:18:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7414:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7414:39:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7414:39:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7361:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7364:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "7358:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "7358:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "7372:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7374:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7383:1:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7386:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7379:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7379:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7374:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "7354:3:70", - "statements": [] - }, - "src": "7350:113:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7483:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7488:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7479:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7479:16:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7497:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7472:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7472:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7472:27:70" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "7299:3:70", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "7304:3:70", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7309:6:70", - "type": "" - } - ], - "src": "7255:250:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7559:221:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7569:26:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7589:5:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7583:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "7583:12:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7573:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7611:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7616:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7604:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7604:19:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7604:19:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7671:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7678:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7667:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7667:16:70" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7689:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7694:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7685:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7685:14:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7701:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "7632:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "7632:76:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7632:76:70" - }, - { - "nodeType": "YulAssignment", - "src": "7717:57:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7732:3:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7745:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7753:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7741:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7741:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7762:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "7758:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7758:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7737:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7737:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7728:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7728:39:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7769:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7724:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7724:50:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7717:3:70" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7536:5:70", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7543:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7551:3:70", - "type": "" - } - ], - "src": "7510:270:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7904:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7921:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7932:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7914:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7914:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7914:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "7944:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7969:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7981:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7992:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7977:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7977:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "7952:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "7952:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7944:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7873:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7884:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7895:4:70", - "type": "" - } - ], - "src": "7785:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8106:89:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8116:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8128:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8139:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8124:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8124:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8116:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8158:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8173:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8181:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8169:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8169:19:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8151:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8151:38:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8151:38:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8075:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8086:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8097:4:70", - "type": "" - } - ], - "src": "8007:188:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8297:87:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8307:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8319:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8330:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8315:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8315:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8307:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8349:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8364:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8372:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8360:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8360:17:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8342:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8342:36:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8266:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8277:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8288:4:70", - "type": "" - } - ], - "src": "8200:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8476:228:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "8522:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8531:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8534:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8524:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8524:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8524:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "8497:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8506:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8493:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8493:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8518:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "8489:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8489:32:70" - }, - "nodeType": "YulIf", - "src": "8486:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "8547:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8570:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8557:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "8557:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8547:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8589:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8619:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8630:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8615:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8615:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8602:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "8602:32:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8593:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8668:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "8643:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "8643:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8643:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "8683:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8693:5:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "8683:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8434:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "8445:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8457:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "8465:6:70", - "type": "" - } - ], - "src": "8389:315:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8757:111:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8767:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "8789:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8776:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "8776:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8767:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8846:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8855:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8858:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8848:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8848:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8848:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8818:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8829:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8836:6:70", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8825:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8825:18:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "8815:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "8815:29:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "8808:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8808:37:70" - }, - "nodeType": "YulIf", - "src": "8805:57:70" - } - ] - }, - "name": "abi_decode_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "8736:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8747:5:70", - "type": "" - } - ], - "src": "8709:159:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9006:341:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9053:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9062:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9065:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9055:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9055:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9055:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "9027:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9036:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9023:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9023:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9048:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "9019:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9019:33:70" - }, - "nodeType": "YulIf", - "src": "9016:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "9078:38:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9106:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "9088:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "9088:28:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9078:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9125:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9157:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9168:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9153:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9153:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "9135:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "9135:37:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9125:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9181:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9213:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9224:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9209:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9209:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "9191:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "9191:37:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9181:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9237:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9269:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9280:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9265:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9265:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "9247:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "9247:37:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "9237:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9293:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9325:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9336:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9321:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9321:19:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "9303:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "9303:38:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "9293:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8940:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "8951:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8963:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "8971:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "8979:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "8987:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "8995:6:70", - "type": "" - } - ], - "src": "8873:474:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9453:349:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9499:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9508:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9511:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9501:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9501:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9501:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "9474:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9483:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9470:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9470:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9495:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "9466:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9466:32:70" - }, - "nodeType": "YulIf", - "src": "9463:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9524:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9550:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "9537:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "9537:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "9528:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9594:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "9569:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "9569:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9569:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "9609:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9619:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9609:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9633:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9660:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9671:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9656:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9656:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "9643:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "9643:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9633:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9684:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9716:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9727:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9712:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9712:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "9699:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "9699:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "9688:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "9762:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "9740:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "9740:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9740:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "9779:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "9789:7:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9779:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9403:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "9414:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9426:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9434:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "9442:6:70", - "type": "" - } - ], - "src": "9352:450:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10010:320:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10020:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10032:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10043:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10028:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10028:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10020:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10056:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10066:6:70", - "type": "", - "value": "0xffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "10060:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10088:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10103:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10111:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10099:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10099:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10081:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10081:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10081:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10135:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10146:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10131:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10131:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10155:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10163:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10151:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10151:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10124:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10124:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10124:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10187:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10198:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10183:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10183:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "10207:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10215:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10203:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10203:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10176:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10176:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10176:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10239:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10250:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10235:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "10259:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10267:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10255:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10255:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10228:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10228:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10228:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10291:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10302:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10287:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10287:19:70" - }, - { - "arguments": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "10312:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10320:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10308:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10308:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10280:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10280:44:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10280:44:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__to_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9947:9:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "9958:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "9966:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "9974:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9982:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9990:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10001:4:70", - "type": "" - } - ], - "src": "9807:523:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10450:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10460:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10472:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10483:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10468:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10468:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10460:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10502:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10517:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10533:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10538:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "10529:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10529:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10542:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10525:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10513:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10513:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10495:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10495:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10495:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10419:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10430:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10441:4:70", - "type": "" - } - ], - "src": "10335:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10643:233:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "10689:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10698:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10701:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "10691:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10691:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10691:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10664:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10673:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10660:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10660:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10685:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "10656:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10656:32:70" - }, - "nodeType": "YulIf", - "src": "10653:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10714:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10740:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "10727:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "10727:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10718:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10784:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "10759:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "10759:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10759:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "10799:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10809:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10799:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "10823:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10855:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10866:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10851:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10851:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nodeType": "YulIdentifier", - "src": "10833:17:70" - }, - "nodeType": "YulFunctionCall", - "src": "10833:37:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10823:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10601:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "10612:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10624:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "10632:6:70", - "type": "" - } - ], - "src": "10557:319:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11007:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "11017:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11029:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11040:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11025:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11025:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11017:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11059:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11074:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11090:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11095:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "11086:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11086:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11099:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11082:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11082:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11070:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11070:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11052:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11052:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11052:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IAccountFactory_$10721__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10976:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10987:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10998:4:70", - "type": "" - } - ], - "src": "10881:228:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11182:201:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "11228:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11237:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11240:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11230:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11230:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11230:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "11203:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11212:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11199:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11199:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11224:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "11195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11195:32:70" - }, - "nodeType": "YulIf", - "src": "11192:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11253:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11279:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "11266:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "11266:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11257:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11337:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11346:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11349:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11339:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11339:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11339:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11311:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11322:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11329:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11318:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11318:16:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "11308:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "11308:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "11301:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11301:35:70" - }, - "nodeType": "YulIf", - "src": "11298:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "11362:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11372:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11362:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11148:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "11159:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11171:6:70", - "type": "" - } - ], - "src": "11114:269:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11472:298:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "11518:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11527:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11530:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "11520:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11520:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11520:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "11493:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11502:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11489:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11489:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11514:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "11485:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11485:32:70" - }, - "nodeType": "YulIf", - "src": "11482:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11543:36:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11569:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "11556:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "11556:23:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11547:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11613:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "11588:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "11588:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11588:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "11628:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11638:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11628:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11652:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11684:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11695:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11680:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11680:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "11667:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "11667:32:70" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "11656:7:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11730:7:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "11708:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "11708:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11708:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "11747:17:70", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11757:7:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "11747:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11430:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "11441:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11453:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "11461:6:70", - "type": "" - } - ], - "src": "11388:382:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11949:166:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11966:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11977:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11959:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11959:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11959:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12000:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12011:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11996:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11996:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12016:2:70", - "type": "", - "value": "16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11989:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11989:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11989:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12039:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12050:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12035:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12035:18:70" - }, - { - "hexValue": "5061757361626c653a20706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12055:18:70", - "type": "", - "value": "Pausable: paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12028:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12028:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12028:46:70" - }, - { - "nodeType": "YulAssignment", - "src": "12083:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12095:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12106:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12091:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12091:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12083:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11926:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11940:4:70", - "type": "" - } - ], - "src": "11775:340:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12152:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12169:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12176:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12181:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12172:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12172:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12162:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12162:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12162:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12209:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12212:4:70", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12202:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12202:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12202:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12233:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12236:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "12226:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12226:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12226:15:70" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "12120:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12333:103:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "12379:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12388:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12391:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "12381:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12381:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12381:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "12354:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12363:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12350:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12350:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12375:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "12346:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12346:32:70" - }, - "nodeType": "YulIf", - "src": "12343:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "12404:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12420:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12414:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "12414:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "12404:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12299:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "12310:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "12322:6:70", - "type": "" - } - ], - "src": "12252:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12473:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12490:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12497:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12502:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12493:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12493:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12483:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12483:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12483:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12530:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12533:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12523:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12523:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12523:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12554:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12557:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "12547:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12547:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12547:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "12441:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12621:77:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12631:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12642:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12645:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12638:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12638:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "12631:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12670:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "12672:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "12672:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12672:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12662:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "12665:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "12659:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "12659:10:70" - }, - "nodeType": "YulIf", - "src": "12656:36:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "12604:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "12607:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "12613:3:70", - "type": "" - } - ], - "src": "12573:125:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12755:116:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12765:20:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12780:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12783:1:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "12776:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12776:9:70" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "12765:7:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12843:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "12845:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "12845:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12845:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12814:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "12807:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12807:9:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12821:1:70" - }, - { - "arguments": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "12828:7:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "12837:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "12824:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12824:15:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "12818:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "12818:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "12804:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "12804:37:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "12797:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12797:45:70" - }, - "nodeType": "YulIf", - "src": "12794:71:70" - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "12734:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "12737:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "12743:7:70", - "type": "" - } - ], - "src": "12703:168:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12922:171:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "12953:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12974:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12981:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12986:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12977:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12977:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12967:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12967:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12967:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13018:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13021:4:70", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13011:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13011:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13011:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13046:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13049:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "13039:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13039:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13039:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "12942:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "12935:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12935:9:70" - }, - "nodeType": "YulIf", - "src": "12932:132:70" - }, - { - "nodeType": "YulAssignment", - "src": "13073:14:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "13082:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "13085:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "13078:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13078:9:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "13073:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "12907:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "12910:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "12916:1:70", - "type": "" - } - ], - "src": "12876:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13147:79:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13157:17:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "13169:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "13172:1:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13165:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13165:9:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "13157:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13198:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "13200:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "13200:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13200:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "13189:4:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "13195:1:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "13186:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "13186:11:70" - }, - "nodeType": "YulIf", - "src": "13183:37:70" - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "13129:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "13132:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "13138:4:70", - "type": "" - } - ], - "src": "13098:128:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13309:167:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "13355:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13364:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13367:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "13357:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13357:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13357:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "13330:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13339:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13326:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13351:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "13322:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13322:32:70" - }, - "nodeType": "YulIf", - "src": "13319:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13380:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13399:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13393:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "13393:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "13384:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13440:5:70" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nodeType": "YulIdentifier", - "src": "13418:21:70" - }, - "nodeType": "YulFunctionCall", - "src": "13418:28:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13418:28:70" - }, - { - "nodeType": "YulAssignment", - "src": "13455:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13465:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13455:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13275:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "13286:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13298:6:70", - "type": "" - } - ], - "src": "13231:245:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13666:262:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13676:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13688:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13699:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13684:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13684:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13676:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13719:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13730:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13712:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13712:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13712:25:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13746:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13764:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13769:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "13760:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13760:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13773:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "13756:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13756:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "13750:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13795:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13806:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13791:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13791:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "13815:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13823:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13811:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13811:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13784:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13784:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13784:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13847:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13858:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13843:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13843:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "13863:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13836:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13836:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13836:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13890:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13901:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13886:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13886:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "13910:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13918:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13906:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13906:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13879:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13879:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13879:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address_t_uint256_t_address__to_t_uint256_t_address_t_uint256_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13611:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "13622:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "13630:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "13638:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13646:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13657:4:70", - "type": "" - } - ], - "src": "13481:447:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14031:147:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14077:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14086:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14089:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14079:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14079:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14079:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14052:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14061:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14048:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14048:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14073:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14044:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14044:32:70" - }, - "nodeType": "YulIf", - "src": "14041:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "14102:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14118:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14112:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14112:16:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14102:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "14137:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14157:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14168:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14153:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14153:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14147:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14147:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "14137:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13989:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "14000:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14012:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "14020:6:70", - "type": "" - } - ], - "src": "13933:245:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14330:167:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14347:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14362:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14378:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14383:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "14374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14374:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14387:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14370:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14370:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "14358:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14358:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14340:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14340:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14340:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14411:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14422:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14407:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14407:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14427:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14400:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14400:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14400:30:70" - }, - { - "nodeType": "YulAssignment", - "src": "14439:52:70", - "value": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "14464:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14476:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14487:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14472:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14472:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "14447:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "14447:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14439:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14291:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "14302:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14310:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14321:4:70", - "type": "" - } - ], - "src": "14183:314:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14592:557:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14638:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14647:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14650:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14640:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14640:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14640:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14613:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14622:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14609:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14609:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14634:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14605:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14605:32:70" - }, - "nodeType": "YulIf", - "src": "14602:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "14663:30:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14683:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14677:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14677:16:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "14667:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14736:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14745:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14748:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14738:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14738:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14738:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "14708:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14716:18:70", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "14705:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "14705:30:70" - }, - "nodeType": "YulIf", - "src": "14702:50:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "14761:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14775:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "14786:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14771:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14771:22:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "14765:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14841:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14850:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14853:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14843:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14843:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14843:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "14820:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14824:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14816:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14816:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14831:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "14812:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14812:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "14805:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14805:35:70" - }, - "nodeType": "YulIf", - "src": "14802:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "14866:19:70", - "value": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "14882:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "14876:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "14876:9:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "14870:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "14894:61:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "14951:2:70" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nodeType": "YulIdentifier", - "src": "14923:27:70" - }, - "nodeType": "YulFunctionCall", - "src": "14923:31:70" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "14907:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "14907:48:70" - }, - "variables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "14898:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "14971:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "14978:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14964:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "14964:17:70" - }, - "nodeType": "YulExpressionStatement", - "src": "14964:17:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15027:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15036:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15039:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "15029:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15029:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15029:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "15004:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "15008:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15000:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15000:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15013:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14996:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "14996:20:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "15018:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "14993:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "14993:33:70" - }, - "nodeType": "YulIf", - "src": "14990:53:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "15091:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15095:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15087:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15087:11:70" - }, - { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "15104:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15111:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15100:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15100:14:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "15116:2:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "15052:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "15052:67:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15052:67:70" - }, - { - "nodeType": "YulAssignment", - "src": "15128:15:70", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "15138:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15128:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14558:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "14569:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14581:6:70", - "type": "" - } - ], - "src": "14502:647:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15283:119:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15293:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15305:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15316:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15301:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15301:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "15293:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15335:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15346:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15328:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15328:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15328:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15373:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15384:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15369:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15369:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15389:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15362:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15362:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15362:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15244:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15255:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15263:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "15274:4:70", - "type": "" - } - ], - "src": "15154:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15488:170:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "15534:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15543:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15546:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "15536:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15536:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15536:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "15509:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15518:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15505:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15505:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15530:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "15501:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15501:32:70" - }, - "nodeType": "YulIf", - "src": "15498:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "15559:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15578:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15572:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "15572:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "15563:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "15622:5:70" - } - ], - "functionName": { - "name": "validator_revert_address", - "nodeType": "YulIdentifier", - "src": "15597:24:70" - }, - "nodeType": "YulFunctionCall", - "src": "15597:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15597:31:70" - }, - { - "nodeType": "YulAssignment", - "src": "15637:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "15647:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15637:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15454:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "15465:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15477:6:70", - "type": "" - } - ], - "src": "15407:251:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15792:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "15802:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15814:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15825:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15810:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15810:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "15802:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15844:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "15855:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15837:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15837:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15837:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "15882:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15893:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "15878:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15878:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "15902:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15918:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15923:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "15914:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15914:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15927:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15910:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15910:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "15898:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "15898:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15871:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "15871:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "15871:60:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "15753:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "15764:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "15772:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "15783:4:70", - "type": "" - } - ], - "src": "15663:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16099:218:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "16109:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16121:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16132:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16117:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16117:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "16109:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "16144:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16162:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16167:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "16158:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16158:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16171:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "16154:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16154:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "16148:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16189:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16204:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16212:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16200:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16200:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16182:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16182:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16182:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16236:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16247:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16232:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16232:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16256:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16264:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16252:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16252:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16225:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16225:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16225:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16288:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16299:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16284:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16284:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "16304:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16277:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16277:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16277:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16052:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "16063:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16071:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16079:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16090:4:70", - "type": "" - } - ], - "src": "15942:375:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16487:162:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "16497:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16509:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16520:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16505:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16505:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "16497:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16539:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "16550:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16532:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16532:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16532:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16577:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16588:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16573:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16573:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "16593:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16566:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16566:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16566:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "16620:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16631:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16616:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16616:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "16636:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "16609:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "16609:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16609:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16440:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "16451:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16459:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16467:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16478:4:70", - "type": "" - } - ], - "src": "16322:327:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16701:121:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "16711:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "16721:6:70", - "type": "", - "value": "0xffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "16715:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "16736:34:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "16751:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16754:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16747:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16747:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "16763:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16766:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "16759:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16759:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "16743:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "16743:27:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "16736:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "16794:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "16796:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "16796:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "16796:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "16785:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "16790:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "16782:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "16782:11:70" - }, - "nodeType": "YulIf", - "src": "16779:37:70" - } - ] - }, - "name": "checked_add_t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "16684:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "16687:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "16693:3:70", - "type": "" - } - ], - "src": "16654:168:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17000:162:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "17010:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17022:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17033:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17018:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17018:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "17010:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17052:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "17063:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17045:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17045:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17045:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17090:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17101:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17086:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17086:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "17106:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17079:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17079:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17079:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17133:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17144:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17129:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17129:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "17149:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17122:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17122:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17122:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_rational_0_by_1_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "16953:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "16964:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "16972:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "16980:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "16991:4:70", - "type": "" - } - ], - "src": "16827:335:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17296:145:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "17306:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17318:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17329:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17314:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17314:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "17306:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17348:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "17363:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17379:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17384:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "17375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17375:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17388:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "17371:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17371:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "17359:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17359:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17341:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17341:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17341:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17412:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17423:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17408:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17408:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "17428:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17401:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17401:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17401:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "17257:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "17268:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "17276:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "17287:4:70", - "type": "" - } - ], - "src": "17167:274:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17493:88:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "17524:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "17526:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "17526:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17526:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17509:5:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17520:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "17516:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17516:6:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "17506:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "17506:17:70" - }, - "nodeType": "YulIf", - "src": "17503:43:70" - }, - { - "nodeType": "YulAssignment", - "src": "17555:20:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "17566:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17573:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17562:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17562:13:70" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "17555:3:70" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "17475:5:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "17485:3:70", - "type": "" - } - ], - "src": "17446:135:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "17760:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17777:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17788:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17770:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17770:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17770:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17811:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17822:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17807:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17807:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17827:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17800:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17800:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17800:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17850:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17861:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17846:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17846:18:70" - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031", - "kind": "string", - "nodeType": "YulLiteral", - "src": "17866:34:70", - "type": "", - "value": "SafeCast: value doesn't fit in 1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17839:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17839:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17839:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17921:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17932:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17917:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17917:18:70" - }, - { - "hexValue": "362062697473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "17937:8:70", - "type": "", - "value": "6 bits" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "17910:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "17910:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "17910:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "17955:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "17967:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "17978:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "17963:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "17963:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "17955:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "17737:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "17751:4:70", - "type": "" - } - ], - "src": "17586:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18167:232:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18184:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18195:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18177:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18177:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18177:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18218:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18229:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18214:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18214:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18234:2:70", - "type": "", - "value": "42" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18207:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18207:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18257:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18268:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18253:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18253:18:70" - }, - { - "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "18273:34:70", - "type": "", - "value": "SafeERC20: ERC20 operation did n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18246:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18246:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18246:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18328:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18339:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18324:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18324:18:70" - }, - { - "hexValue": "6f742073756363656564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "18344:12:70", - "type": "", - "value": "ot succeed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18317:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18317:40:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18317:40:70" - }, - { - "nodeType": "YulAssignment", - "src": "18366:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18378:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18389:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18374:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "18366:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "18144:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "18158:4:70", - "type": "" - } - ], - "src": "17993:406:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18578:170:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18595:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18606:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18588:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18588:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18588:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18629:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18640:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18625:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18625:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18645:2:70", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18618:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18618:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18618:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18668:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18679:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18664:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18664:18:70" - }, - { - "hexValue": "5061757361626c653a206e6f7420706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "18684:22:70", - "type": "", - "value": "Pausable: not paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18657:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18657:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18657:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "18716:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18728:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18739:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18724:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18724:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "18716:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "18555:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "18569:4:70", - "type": "" - } - ], - "src": "18404:344:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "18927:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18944:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18955:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18937:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18937:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18937:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "18978:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18989:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "18974:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "18974:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18994:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "18967:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "18967:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "18967:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19017:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19028:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19013:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19013:18:70" - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "19033:34:70", - "type": "", - "value": "Address: insufficient balance fo" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19006:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19006:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19006:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19088:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19099:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19084:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19084:18:70" - }, - { - "hexValue": "722063616c6c", - "kind": "string", - "nodeType": "YulLiteral", - "src": "19104:8:70", - "type": "", - "value": "r call" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19077:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19077:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19077:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "19122:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19134:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19145:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19130:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19130:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "19122:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "18904:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "18918:4:70", - "type": "" - } - ], - "src": "18753:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19297:150:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "19307:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "19327:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "19321:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "19321:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "19311:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "19382:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19390:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19378:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19378:17:70" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "19397:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "19402:6:70" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "19343:34:70" - }, - "nodeType": "YulFunctionCall", - "src": "19343:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19343:66:70" - }, - { - "nodeType": "YulAssignment", - "src": "19418:23:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "19429:3:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "19434:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19425:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19425:16:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "19418:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "19273:3:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19278:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "19289:3:70", - "type": "" - } - ], - "src": "19160:287:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19626:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19643:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19654:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19636:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19636:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19636:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19677:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19688:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19673:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19673:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19693:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19666:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19666:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19666:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19716:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19727:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19712:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19712:18:70" - }, - { - "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "19732:31:70", - "type": "", - "value": "Address: call to non-contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19705:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19705:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19705:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "19773:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19785:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19796:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "19781:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "19781:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "19773:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19603:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "19617:4:70", - "type": "" - } - ], - "src": "19452:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19931:98:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "19948:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19959:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "19941:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "19941:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "19941:21:70" - }, - { - "nodeType": "YulAssignment", - "src": "19971:52:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "19996:6:70" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20008:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20019:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20004:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "20004:18:70" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "19979:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "19979:44:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "19971:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19900:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19911:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "19922:4:70", - "type": "" - } - ], - "src": "19810:219:70" - } - ] - }, - "contents": "{\n { }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_address_t_uint16__to_t_address_t_uint16__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), and(value1, 0xffff))\n }\n function abi_decode_enum_ClosureAction(offset) -> value\n {\n value := calldataload(offset)\n if iszero(lt(value, 4)) { revert(0, 0) }\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_enum$_ClosureAction_$11941t_uint256t_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n {\n if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := abi_decode_enum_ClosureAction(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n let value_1 := calldataload(add(headStart, 96))\n validator_revert_address(value_1)\n value3 := value_1\n let value_2 := calldataload(add(headStart, 128))\n validator_revert_address(value_2)\n value4 := value_2\n value5 := calldataload(add(headStart, 160))\n let value_3 := calldataload(add(headStart, 192))\n validator_revert_bool(value_3)\n value6 := value_3\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_contract$_IPriceOracleV2_$12942__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n validator_revert_address(value_2)\n value2 := value_2\n value3 := calldataload(add(headStart, 96))\n }\n function abi_decode_tuple_t_uint256t_enum$_ClosureAction_$11941t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_enum_ClosureAction(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let value_2 := calldataload(add(headStart, 64))\n validator_revert_address(value_2)\n value2 := value_2\n value3 := calldataload(add(headStart, 96))\n value4 := calldataload(add(headStart, 128))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := calldataload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(array, 32), add(_1, 32), _2)\n mstore(add(add(array, _2), 32), 0)\n value2 := array\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffff))\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n validator_revert_address(value)\n value1 := value\n }\n function abi_decode_uint16(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint16t_uint16t_uint16t_uint16t_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_uint16(headStart)\n value1 := abi_decode_uint16(add(headStart, 32))\n value2 := abi_decode_uint16(add(headStart, 64))\n value3 := abi_decode_uint16(add(headStart, 96))\n value4 := abi_decode_uint16(add(headStart, 128))\n }\n function abi_decode_tuple_t_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_bool(value_1)\n value2 := value_1\n }\n function abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__to_t_uint16_t_uint16_t_uint16_t_uint16_t_uint16__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 160)\n let _1 := 0xffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), and(value2, _1))\n mstore(add(headStart, 96), and(value3, _1))\n mstore(add(headStart, 128), and(value4, _1))\n }\n function abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_addresst_uint16(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := abi_decode_uint16(add(headStart, 32))\n }\n function abi_encode_tuple_t_contract$_IAccountFactory_$10721__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n value0 := value\n }\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_bool(value_1)\n value1 := value_1\n }\n function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Pausable: paused\")\n tail := add(headStart, 96)\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n diff := sub(x, y)\n if gt(diff, x) { panic_error_0x11() }\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint256_t_address_t_uint256_t_address__to_t_uint256_t_address_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n let _1 := sub(shl(160, 1), 1)\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, _1))\n }\n function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := mload(headStart)\n value1 := mload(add(headStart, 32))\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n tail := abi_encode_bytes(value1, add(headStart, 64))\n }\n function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := mload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint256_t_address__to_t_uint256_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_uint256_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function checked_add_t_uint16(x, y) -> sum\n {\n let _1 := 0xffff\n sum := add(and(x, _1), and(y, _1))\n if gt(sum, _1) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_rational_0_by_1_t_uint256_t_rational_0_by_1__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n mstore(add(headStart, 96), \"6 bits\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n mstore(add(headStart, 96), \"ot succeed\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Pausable: not paused\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n mstore(add(headStart, 96), \"r call\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Address: call to non-contract\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1978": [ - { - "length": 32, - "start": 2030 - }, - { - "length": 32, - "start": 4027 - }, - { - "length": 32, - "start": 7228 - } - ], - "7859": [ - { - "length": 32, - "start": 2165 - }, - { - "length": 32, - "start": 3680 - }, - { - "length": 32, - "start": 7580 - } - ], - "7863": [ - { - "length": 32, - "start": 1615 - }, - { - "length": 32, - "start": 3079 - }, - { - "length": 32, - "start": 3224 - }, - { - "length": 32, - "start": 3288 - }, - { - "length": 32, - "start": 3342 - }, - { - "length": 32, - "start": 3569 - }, - { - "length": 32, - "start": 6907 - }, - { - "length": 32, - "start": 8679 - }, - { - "length": 32, - "start": 9191 - }, - { - "length": 32, - "start": 10065 - }, - { - "length": 32, - "start": 10734 - }, - { - "length": 32, - "start": 11017 - }, - { - "length": 32, - "start": 12925 - } - ], - "7867": [ - { - "length": 32, - "start": 1476 - } - ], - "7871": [ - { - "length": 32, - "start": 1014 - }, - { - "length": 32, - "start": 3375 - }, - { - "length": 32, - "start": 3450 - }, - { - "length": 32, - "start": 7628 - }, - { - "length": 32, - "start": 7900 - }, - { - "length": 32, - "start": 8420 - }, - { - "length": 32, - "start": 8713 - }, - { - "length": 32, - "start": 8807 - }, - { - "length": 32, - "start": 8972 - }, - { - "length": 32, - "start": 9224 - }, - { - "length": 32, - "start": 9370 - }, - { - "length": 32, - "start": 12220 - } - ], - "7875": [ - { - "length": 32, - "start": 1359 - }, - { - "length": 32, - "start": 11210 - } - ], - "7878": [ - { - "length": 32, - "start": 2107 - }, - { - "length": 32, - "start": 11305 - }, - { - "length": 32, - "start": 11433 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106103835760003560e01c80638456cb59116101de578063b3da9e6b1161010f578063e75538c7116100ad578063f9aa028a1161007c578063f9aa028a1461091c578063fdd576451461092f578063fe47cde714610958578063ff6875431461096b57600080fd5b8063e75538c7146108d0578063e958b704146108e3578063eb99c2bf146108f6578063f67c5bd01461090957600080fd5b8063db7ceb80116100e9578063db7ceb8014610870578063dc2b21c114610897578063dc9e0faa146108aa578063e1998cf9146108bd57600080fd5b8063b3da9e6b14610823578063c5e10eef14610836578063d48bfca71461085d57600080fd5b80639af1d35a1161017c578063a366f49611610156578063a366f496146107c3578063a460e104146107d6578063a50cf2c8146107e9578063a70bc5421461081057600080fd5b80639af1d35a146107575780639f5f86ae146107a75780639fd12b77146107ba57600080fd5b80638fe3f93f116101b85780638fe3f93f1461070b578063944ac59f1461071e57806394cf073a14610731578063953730181461074457600080fd5b80638456cb59146106d057806384edaa42146106d85780638991b2f1146106eb57600080fd5b80634f0e0ef3116102b8578063693ce7f5116102565780636f307dc3116102305780636f307dc31461064a5780637832743814610671578063830aa745146106975780638345f26e146106aa57600080fd5b8063693ce7f5146106045780636ce4074a146106175780636e98e5e41461063757600080fd5b806354fd4d501161029257806354fd4d50146105b7578063570a7af2146105bf5780635c975abb146105e6578063654a9eda146105f157600080fd5b80634f0e0ef31461054a5780635063524a1461057157806351e3f160146105a457600080fd5b80632f7a1881116103255780633e8297ca116102ff5780633e8297ca146105065780633f4ba83a14610526578063458936f51461052e57806346fb371d1461053757600080fd5b80632f7a18811461049b5780633192195c146104b557806338975bc4146104e357600080fd5b8063172c48c711610361578063172c48c7146104185780632362a2d81461044d5780632630c12f1461046e57806329df0b931461048657600080fd5b8063055ee9b5146103885780630d8f9cee146103ce57806316f0115b146103f1575b600080fd5b6103b1610396366004613b97565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e16103dc366004613bb4565b610994565b60405190151581526020016103c5565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61042b610426366004613bed565b610a7e565b604080516001600160a01b03909316835261ffff9091166020830152016103c5565b61046061045b366004613c23565b610a96565b6040519081526020016103c5565b600154600160501b90046001600160a01b03166103b1565b610499610494366004613b97565b610ed7565b005b6000546103b190600160201b90046001600160a01b031681565b6104c86104c3366004613b97565b610f39565b604080519384526020840192909252908201526060016103c5565b6103e16104f1366004613b97565b600c6020526000908152604090205460ff1681565b610460610514366004613b97565b60096020526000908152604090205481565b610499610fa6565b61046060055481565b610499610545366004613ca5565b611055565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61058461057f366004613cf6565b6111bf565b6040805194855260208501939093529183015260608201526080016103c5565b6104996105b2366004613bb4565b6113a3565b61046060d281565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff166103e1565b6104996105ff366004613d31565b611480565b610499610612366004613b97565b611808565b61062a610625366004613dfb565b611860565b6040516103c59190613ef0565b610499610645366004613bb4565b611a0b565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61068461067f366004613b97565b611af7565b60405161ffff90911681526020016103c5565b6104996106a5366004613ca5565b611b84565b6000546106be906301000000900460ff1681565b60405160ff90911681526020016103c5565b610499611c27565b6104996106e6366004613b97565b611cd4565b6104606106f9366004613b97565b60086020526000908152604090205481565b6103b1610719366004613f0a565b611d23565b61049961072c366004613f41565b611f70565b61046061073f366004613fa6565b612010565b610499610752366004613b97565b61258e565b6001546040805161ffff808416825262010000840481166020830152600160201b8404811692820192909252600160301b830482166060820152600160401b90920416608082015260a0016103c5565b6104996107b5366004613b97565b612633565b61046060075481565b6104996107d1366004613bed565b6126a8565b6104996107e4366004613b97565b6126d8565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61049961081e366004613fe8565b612724565b6000546103e19062010000900460ff1681565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b61049961086b366004613b97565b612803565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b6104996108a536600461401d565b612837565b6104996108b8366004613b97565b612882565b6104996108cb366004613bb4565b6128ee565b61042b6108de366004613bed565b6129dc565b6103b16108f1366004613b97565b612a45565b6103e1610904366004614040565b612a83565b610460610917366004613b97565b612b05565b6003546103b1906001600160a01b031681565b6103b161093d366004613b97565b600b602052600090815260409020546001600160a01b031681565b600d546103b1906001600160a01b031681565b6103b1610979366004613b97565b600a602052600090815260409020546001600160a01b031681565b6000805460ff1615806109af575060005462010000900460ff165b6109d45760405162461bcd60e51b81526004016109cb9061406e565b60405180910390fd5b336000908152600a60205260409020546001600160a01b0316158015610a0c5750600054600160201b90046001600160a01b03163314155b15610a2a5760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff1615610a53576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100179055610a6c8383612b66565b6000805461ff00191690559392505050565b600080610a8d6001841b6129dc565b91509150915091565b60008054610100900460ff1615610ac0576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314610b0257604051636c01359160e11b815260040160405180910390fd5b60005460ff1615610b87576001600160a01b0385166000908152600c602052604090205460ff168015610b6157506001876003811115610b4457610b44614098565b1480610b6157506002876003811115610b5f57610b5f614098565b145b15610b6f5760039650610b87565b60405162461bcd60e51b81526004016109cb9061406e565b6000610b9289612a45565b6001600160a01b038a16600090815260026020526040812080546001600160a01b031916905590915080808080610bc886610f39565b509094509050610bda8c8e86846111bf565b6040516370a0823160e01b81526001600160a01b038b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7491906140ae565b9050610c8088876140dd565b610c8b9060016140dd565b811115610ccb57610cc6877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d612bc0565b610d08565b610d086001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d0186900301612d76565b610d56877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000896000612bc0565b6040516332a5417960e21b81526004810186905260248101859052604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ca9505e490606401600060405180830381600087803b158015610dc657600080fd5b505af1158015610dda573d6000803e3d6000fd5b50505050505050506001841115610e1957610e19837f00000000000000000000000000000000000000000000000000000000000000008d876000612bc0565b6001600160a01b038316600090815260086020526040902054861916610e4184898884612dd4565b6040516344dbbd9f60e11b81526001600160a01b0385811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b50506000805461ff001916905550949c9b505050505050505050505050565b336000908152600a60205260409020546001600160a01b0316158015610f0f5750600054600160201b90046001600160a01b03163314155b15610f2d5760405163ad40d9e960e01b815260040160405180910390fd5b610f3681612e88565b50565b6000806000806000610f4a86612eed565b9196509250905081610f5c82876140f0565b610f669190614107565b6001549094506127109061ffff16610f7e8787614129565b610f8891906140f0565b610f929190614107565b610f9c90856140dd565b9496939550505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e919061413c565b61104b5760405163081996f760e11b815260040160405180910390fd5b611053613044565b565b60005460ff16158061106f575060005462010000900460ff165b61108b5760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff16156110b4576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100178155338152600a60205260409020546001600160a01b03908116908416148015906110fe5750600054600160201b90046001600160a01b03163314155b80156111155750600d546001600160a01b03163314155b8061112757506001600160a01b038316155b156111455760405163ad40d9e960e01b815260040160405180910390fd5b61114e82612b05565b60000361116e5760405163700ca0af60e01b815260040160405180910390fd5b600061117985612a45565b9050611189838583856000613096565b6111ad5761119c83858360006001613096565b506111ab838583856001613096565b505b50506000805461ff0019169055505050565b6001546000908190819081906127109061ffff166111dd8888614129565b6111e791906140f0565b6111f19190614107565b6111fb90866140dd565b9350600187600381111561121157611211614098565b148061122e5750600287600381111561122c5761122c614098565b145b8061124a5750600387600381111561124857611248614098565b145b15611392576000600188600381111561126557611265614098565b036112c9576001546127109061128690600160201b900461ffff168b6140f0565b6112909190614107565b600154909150612710906112ae9062010000900461ffff168b6140f0565b6112b89190614107565b6112c290866140dd565b945061135c565b60028860038111156112dd576112dd614098565b0361132757600154612710906112fe90600160401b900461ffff168b6140f0565b6113089190614107565b600154909150612710906112ae90600160301b900461ffff168b6140f0565b506001548890612710906113459062010000900461ffff16836140f0565b61134f9190614107565b61135990866140dd565b94505b84811115611371576001858203039350611375565b8094505b85811061138657858503925061138c565b84860391505b50611398565b84840391505b945094509450949050565b60005460ff1615806113bd575060005462010000900460ff165b6113d95760405162461bcd60e51b81526004016109cb9061406e565b336000908152600a60205260409020546001600160a01b03161580156114115750600054600160201b90046001600160a01b03163314155b1561142f5760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff1615611458576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561147182826131a8565b50506000805461ff0019169055565b336000908152600a60205260409020546001600160a01b03161580156114b85750600054600160201b90046001600160a01b03163314155b156114d65760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff16156114ff576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561151885846131a8565b6040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611562573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158691906140ae565b6040516370a0823160e01b81526001600160a01b0388811660048301529192506000918616906370a0823190602401602060405180830381865afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f691906140ae565b6001549091506000908190600160501b90046001600160a01b0316635cecbd0e6116208689614129565b8a61162b8988614129565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b03918216602484015260448301528a1660648201526084016040805180830381865afa158015611682573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a69190614159565b91509150600184116116be576116bc8989612b66565b505b6116c787611af7565b6116d59061ffff16826140f0565b90506116e088611af7565b6116ee9061ffff16836140f0565b91508181106117095761170089612e88565b505050506111ad565b6001600160a01b038916600090815260096020526040812054836117396b033b2e3c9fd0803ce8000000856140f0565b6117439190614107565b611759906b033b2e3c9fd0803ce8000000614129565b61176391906140dd565b6001549091506127109061178e906b033b2e3c9fd0803ce80000009062010000900461ffff166140f0565b6117989190614107565b81116117cc576001600160a01b038a1660009081526009602052604090208190556117c28a612e88565b50505050506111ad565b6117d58a613227565b5050506001600160a01b038716600090815260096020526040902060019055505050506000805461ff0019169055505050565b6003546001600160a01b031633146118335760405163eee4716960e01b815260040160405180910390fd5b600080546001600160a01b03909216600160201b02640100000000600160c01b0319909216919091179055565b606061186e60005460ff1690565b1580611882575060005462010000900460ff165b61189e5760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff16156118c7576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff001916610100178155338152600a60205260409020546001600160a01b0390811690841614158061190557506001600160a01b038316155b1561193557600d546001600160a01b031633146119355760405163fc1a554360e01b815260040160405180910390fd5b600061194085612a45565b9050836001600160a01b0316856001600160a01b03167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a3604051631cff79cd60e01b81526001600160a01b03821690631cff79cd906119b0908790879060040161417d565b6000604051808303816000875af11580156119cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119f791908101906141a1565b6000805461ff001916905595945050505050565b6003546001600160a01b03163314611a365760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03821615611a74576001600160a01b038281166000908152600a6020526040902080546001600160a01b0319169183169190911790555b6001600160a01b03811615611ab2576001600160a01b038181166000908152600b6020526040902080546001600160a01b0319169184169190911790555b73cccccccccccccccccccccccccccccccccccccccb196001600160a01b03821601611af357600d80546001600160a01b0319166001600160a01b0384161790555b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611b45575050600154600160f01b900461ffff1690565b6000611b5083612b05565b905080600003611b735760405163700ca0af60e01b815260040160405180910390fd5b611b7c816129dc565b949350505050565b611b8c6134ef565b600054610100900460ff1615611bb5576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314611bf757604051636c01359160e11b815260040160405180910390fd5b611c0183836131a8565b611c166001600160a01b038316858584612d76565b50506000805461ff00191690555050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015611c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caf919061413c565b611ccc5760405163d794b1e760e01b815260040160405180910390fd5b611053613512565b6003546001600160a01b03163314611cff5760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000611d2d6134ef565b600054610100900460ff1615611d56576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b03163314611d9857604051636c01359160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166321d18456857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4c91906140ae565b6040516001600160e01b031960e085901b168152600481019290925260248201526044016020604051808303816000875af1158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb3919061420f565b60405163bf28068b60e01b8152600481018690526001600160a01b0380831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015611f2257600080fd5b505af1158015611f36573d6000803e3d6000fd5b50505050611f44838261354f565b6001600160a01b038116600090815260086020526040812060019055805461ff00191690559392505050565b6003546001600160a01b03163314611f9b5760405163eee4716960e01b815260040160405180910390fd5b6001805461ffff928316600160401b0269ffff000000000000000019948416600160301b0267ffff00000000000019968516600160201b029690961667ffffffff0000000019978516620100000263ffffffff1990931694909816939093171794909416949094179190911716919091179055565b600061201a6134ef565b600054610100900460ff1615612043576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b0316331461208557604051636c01359160e11b815260040160405180910390fd5b600080600061209387612eed565b92509250925060008515612147576120ab87856140dd565b94506120bb8488848660016135ca565b60405163bf28068b60e01b8152600481018990526001600160a01b038a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050612516565b6000848461215585836140f0565b61215f9190614107565b6121699190614129565b600154909150600090612710906121849061ffff16846140f0565b61218e9190614107565b905061219a81836140dd565b89106123935788816121ac84896140dd565b6121b691906140dd565b6121c09190614129565b60405163d1660f9960e01b81529097506001600160a01b038b169063d1660f9990612233907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908e9060040161422c565b600060405180830381600087803b15801561224d57600080fd5b505af1158015612261573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca9505e482848c6122a19190614129565b6122ab9190614129565b6040516001600160e01b031960e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b1580156122f257600080fd5b505af1158015612306573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238c91906140ae565b9250612513565b6001546000906123a99061ffff16612710614250565b61ffff166123b96127108c6140f0565b6123c39190614107565b905060006123d1828c614129565b90508798508b6001600160a01b031663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008e6040518463ffffffff1660e01b81526004016124469392919061422c565b600060405180830381600087803b15801561246057600080fd5b505af1158015612474573d6000803e3d6000fd5b50506040516332a5417960e21b81526000600482018190526024820185905260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063ca9505e49150606401600060405180830381600087803b1580156124e857600080fd5b505af11580156124fc573d6000803e3d6000fd5b5050505061250e8883888a60006135ca565b945050505b50505b604051631612821160e01b815260048101869052602481018290526001600160a01b03891690631612821190604401600060405180830381600087803b15801561255f57600080fd5b505af1158015612573573d6000803e3d6000fd5b50506000805461ff0019169055509498975050505050505050565b336000908152600a60205260409020546001600160a01b03161580156125c65750600054600160201b90046001600160a01b03163314155b156125e45760405163ad40d9e960e01b815260040160405180910390fd5b600054610100900460ff161561260d576040516369bc183d60e01b815260040160405180910390fd5b6000805461ff00191661010017905561262581613227565b506000805461ff0019169055565b6003546001600160a01b0316331461265e5760405163eee4716960e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b6003546001600160a01b031633146126d35760405163eee4716960e01b815260040160405180910390fd5b600755565b6003546001600160a01b031633146127035760405163eee4716960e01b815260040160405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6003546001600160a01b0316331461274f5760405163eee4716960e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036127a9576001805461ffff8316600160f01b026001600160f01b039091161790555050565b60006127b483612b05565b9050806000036127d75760405163700ca0af60e01b815260040160405180910390fd5b600090815260046020526040902080546001600160a01b031661ffff60a01b60a084901b161790555050565b6003546001600160a01b0316331461282e5760405163eee4716960e01b815260040160405180910390fd5b610f36816136b0565b6003546001600160a01b031633146128625760405163eee4716960e01b815260040160405180910390fd5b6000805460ff90921663010000000263ff00000019909216919091179055565b6003546001600160a01b031633146128ad5760405163eee4716960e01b815260040160405180910390fd5b600180546001600160a01b03909216600160501b027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909216919091179055565b60005460ff161580612908575060005462010000900460ff165b6129245760405162461bcd60e51b81526004016109cb9061406e565b600054610100900460ff161561294d576040516369bc183d60e01b815260040160405180910390fd5b6000805461010061ff00199091161790819055600160201b90046001600160a01b0316331461298f57604051636c01359160e11b815260040160405180910390fd5b600061299a83612a45565b6001600160a01b038416600090815260026020526040902080546001600160a01b031916905590506129cc828261354f565b50506000805461ff001916905550565b60008082600103612a1e5750506001547f000000000000000000000000000000000000000000000000000000000000000092600160f01b90910461ffff169150565b600083815260046020526040902054915081612a3d60a082901c613758565b915050915091565b6001600160a01b038082166000908152600260205260409020541680612a7e5760405163b5ba4c4d60e01b815260040160405180910390fd5b919050565b60008054600160201b90046001600160a01b03163314612ab657604051636c01359160e11b815260040160405180910390fd5b60005460ff16808015612ae157506001600160a01b0384166000908152600c602052604090205460ff165b15612afc576000805462ff0000191662010000851515021790555b90505b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614612b5e576001600160a01b038216600090815260066020526040902054612aff565b600192915050565b600080612b7283612b05565b6001600160a01b038516600090815260086020526040902054909150811615612bb9576001600160a01b038416600090815260086020526040902080548219169055600191505b5092915050565b808015612bfe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b15612d0c5760405163d1660f9960e01b81526001600160a01b0386169063d1660f9990612c539087907f000000000000000000000000000000000000000000000000000000000000000090879060040161422c565b600060405180830381600087803b158015612c6d57600080fd5b505af1158015612c81573d6000803e3d6000fd5b5050604051630b0d3b7560e31b81526001600160a01b038681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b158015612cef57600080fd5b505af1158015612d03573d6000803e3d6000fd5b50505050612d6f565b60405163d1660f9960e01b81526001600160a01b0386169063d1660f9990612d3c9087908790879060040161422c565b600060405180830381600087803b158015612d5657600080fd5b505af1158015612d6a573d6000803e3d6000fd5b505050505b5050505050565b612dce846323b872dd60e01b858585604051602401612d979392919061422c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526137bf565b50505050565b60025b818111612d6f5781811615612e80576000612df1826129dc565b506040516370a0823160e01b81526001600160a01b0388811660048301529192506000918316906370a0823190602401602060405180830381865afa158015612e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6291906140ae565b90506001811115612e7d57612e7d8783886001850389612bc0565b50505b60011b612dd7565b6001600160a01b03811660009081526008602052604081205490612eab82613891565b6000549091506301000000900460ff16811115612ee8576000612ecd836138a7565b612ed89060016140dd565b9050612dce848484600085613911565b505050565b6000806000836001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5491906140ae565b9250836001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb891906140ae565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c91906140ae565b929491935050565b61304c613a16565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b604080516001600160a01b038681166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151631cff79cd60e01b8152600092861691631cff79cd91613103918a9160040161417d565b6000604051808303816000875af192505050801561314357506040513d6000823e601f3d908101601f1916820160405261314091908101906141a1565b60015b1561317c578051158061316b575080806020019051810190613165919061413c565b15156001145b1561317a57600191505061319f565b505b811561319b57604051632f10a7f360e01b815260040160405180910390fd5b5060005b95945050505050565b60006131b382612b05565b90508015806131c55750600754811615155b156131e35760405163700ca0af60e01b815260040160405180910390fd5b6001600160a01b03831660009081526008602052604081205482169003612ee8576001600160a01b0383166000908152600860205260409020805482179055505050565b6001546001600160a01b03828116600090815260086020526040812054600160501b9093049091169190808061325c86610f39565b604051630f9a650360e41b8152612710820260048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152919450908816925063f9a650309150604401602060405180830381865afa1580156132d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f691906140ae565b9250613301846138a7565b6001019150506000806000805b848110156134d55780156133275760018186031b61332a565b60015b9350868416156134cd57600080613340866129dc565b6040516370a0823160e01b81526001600160a01b038e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561338f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b391906140ae565b905060018111156134c057604051630f9a650360e41b8152600481018290526001600160a01b03848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa158015613412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343691906140ae565b61344091906140f0565b61344a90876140dd565b95508886106134bb57600061345e8b613891565b6000549091506301000000900460ff1681111561348a576134858d8c836001898e03613911565b6134ac565b85156134ac576001600160a01b038d1660009081526008602052604090208b90555b50505050505050505050505050565b6134c9565b98861898600194505b5050505b60010161330e565b506040516329973ddb60e11b815260040160405180910390fd5b60005460ff16156110535760405162461bcd60e51b81526004016109cb9061406e565b61351a6134ef565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586130793390565b6001600160a01b038216158061357e57506001600160a01b038281166000908152600260205260409020541615155b1561359c57604051634f2cb04f60e11b815260040160405180910390fd5b6001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b600081156136475760006135de86886140dd565b90506135ee86633b9aca006140f0565b84886135fe88633b9aca006140f0565b61360891906140f0565b6136129190614107565b61361c91906140dd565b633b9aca0061362b83886140f0565b61363591906140f0565b61363f9190614107565b91505061319f565b858361365787633b9aca006140f0565b61366191906140f0565b61366b9190614107565b61367985633b9aca006140f0565b6136839190614129565b8361369286633b9aca006140f0565b61369c91906140f0565b6136a69190614107565b9695505050505050565b6001600160a01b038116600090815260066020526040902054156136e757604051632e5a5c7760e01b815260040160405180910390fd5b6101006005541061370b57604051633f02862960e11b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929061374f8361426b565b91905055505050565b600061ffff8211156137bb5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b60648201526084016109cb565b5090565b6000613814826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a5f9092919063ffffffff16565b805190915015612ee85780806020019051810190613832919061413c565b612ee85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109cb565b60005b8115612a7e57600182811c921601613894565b6000816001036138b957506000919050565b61010060015b60016138cb82846140dd565b901c92506001831b848116158015906138e65750600185851c145b156138f1575061390a565b84811061390057839250613904565b8391505b506138bf565b5050919050565b815b818110156139fc576001811b858116156139f3576000613932826129dc565b506040516370a0823160e01b81526001600160a01b038a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561397f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a391906140ae565b9050600181116139f057600054978318976000199097019660ff63010000009091041687116139f0575050506001600160a01b038616600090815260086020526040902085905550612d6f565b50505b50600101613913565b50604051630c2d525760e21b815260040160405180910390fd5b60005460ff166110535760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016109cb565b6060611b7c848460008585600080866001600160a01b03168587604051613a869190614284565b60006040518083038185875af1925050503d8060008114613ac3576040519150601f19603f3d011682016040523d82523d6000602084013e613ac8565b606091505b5091509150613ad987838387613ae4565b979650505050505050565b60608315613b53578251600003613b4c576001600160a01b0385163b613b4c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109cb565b5081611b7c565b611b7c8383815115613b685781518083602001fd5b8060405162461bcd60e51b81526004016109cb9190613ef0565b6001600160a01b0381168114610f3657600080fd5b600060208284031215613ba957600080fd5b8135612afc81613b82565b60008060408385031215613bc757600080fd5b8235613bd281613b82565b91506020830135613be281613b82565b809150509250929050565b600060208284031215613bff57600080fd5b5035919050565b803560048110612a7e57600080fd5b8015158114610f3657600080fd5b600080600080600080600060e0888a031215613c3e57600080fd5b8735613c4981613b82565b9650613c5760208901613c06565b9550604088013594506060880135613c6e81613b82565b93506080880135613c7e81613b82565b925060a0880135915060c0880135613c9581613c15565b8091505092959891949750929550565b60008060008060808587031215613cbb57600080fd5b8435613cc681613b82565b93506020850135613cd681613b82565b92506040850135613ce681613b82565b9396929550929360600135925050565b60008060008060808587031215613d0c57600080fd5b84359350613d1c60208601613c06565b93969395505050506040820135916060013590565b600080600080600060a08688031215613d4957600080fd5b8535613d5481613b82565b94506020860135613d6481613b82565b93506040860135613d7481613b82565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613dcb57613dcb613d8c565b604052919050565b600067ffffffffffffffff821115613ded57613ded613d8c565b50601f01601f191660200190565b600080600060608486031215613e1057600080fd5b8335613e1b81613b82565b92506020840135613e2b81613b82565b9150604084013567ffffffffffffffff811115613e4757600080fd5b8401601f81018613613e5857600080fd5b8035613e6b613e6682613dd3565b613da2565b818152876020838501011115613e8057600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015613ebb578181015183820152602001613ea3565b50506000910152565b60008151808452613edc816020860160208601613ea0565b601f01601f19169290920160200192915050565b602081526000613f036020830184613ec4565b9392505050565b60008060408385031215613f1d57600080fd5b823591506020830135613be281613b82565b803561ffff81168114612a7e57600080fd5b600080600080600060a08688031215613f5957600080fd5b613f6286613f2f565b9450613f7060208701613f2f565b9350613f7e60408701613f2f565b9250613f8c60608701613f2f565b9150613f9a60808701613f2f565b90509295509295909350565b600080600060608486031215613fbb57600080fd5b8335613fc681613b82565b9250602084013591506040840135613fdd81613c15565b809150509250925092565b60008060408385031215613ffb57600080fd5b823561400681613b82565b915061401460208401613f2f565b90509250929050565b60006020828403121561402f57600080fd5b813560ff81168114612afc57600080fd5b6000806040838503121561405357600080fd5b823561405e81613b82565b91506020830135613be281613c15565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156140c057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115612aff57612aff6140c7565b8082028115828204841417612aff57612aff6140c7565b60008261412457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612aff57612aff6140c7565b60006020828403121561414e57600080fd5b8151612afc81613c15565b6000806040838503121561416c57600080fd5b505080516020909101519092909150565b6001600160a01b0383168152604060208201819052600090611b7c90830184613ec4565b6000602082840312156141b357600080fd5b815167ffffffffffffffff8111156141ca57600080fd5b8201601f810184136141db57600080fd5b80516141e9613e6682613dd3565b8181528560208385010111156141fe57600080fd5b61319f826020830160208601613ea0565b60006020828403121561422157600080fd5b8151612afc81613b82565b6001600160a01b039384168152919092166020820152604081019190915260600190565b61ffff818116838216019080821115612bb957612bb96140c7565b60006001820161427d5761427d6140c7565b5060010190565b60008251614296818460208701613ea0565b919091019291505056fea264697066735822122095d371064e9cf042a935a8d8f67a9e6198d638b261bc239b1406d1c2bf6ee81f64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x383 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0xB3DA9E6B GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xE75538C7 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xF9AA028A GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xF9AA028A EQ PUSH2 0x91C JUMPI DUP1 PUSH4 0xFDD57645 EQ PUSH2 0x92F JUMPI DUP1 PUSH4 0xFE47CDE7 EQ PUSH2 0x958 JUMPI DUP1 PUSH4 0xFF687543 EQ PUSH2 0x96B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE75538C7 EQ PUSH2 0x8D0 JUMPI DUP1 PUSH4 0xE958B704 EQ PUSH2 0x8E3 JUMPI DUP1 PUSH4 0xEB99C2BF EQ PUSH2 0x8F6 JUMPI DUP1 PUSH4 0xF67C5BD0 EQ PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDB7CEB80 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xDB7CEB80 EQ PUSH2 0x870 JUMPI DUP1 PUSH4 0xDC2B21C1 EQ PUSH2 0x897 JUMPI DUP1 PUSH4 0xDC9E0FAA EQ PUSH2 0x8AA JUMPI DUP1 PUSH4 0xE1998CF9 EQ PUSH2 0x8BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB3DA9E6B EQ PUSH2 0x823 JUMPI DUP1 PUSH4 0xC5E10EEF EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0xD48BFCA7 EQ PUSH2 0x85D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AF1D35A GT PUSH2 0x17C JUMPI DUP1 PUSH4 0xA366F496 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xA366F496 EQ PUSH2 0x7C3 JUMPI DUP1 PUSH4 0xA460E104 EQ PUSH2 0x7D6 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x7E9 JUMPI DUP1 PUSH4 0xA70BC542 EQ PUSH2 0x810 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9AF1D35A EQ PUSH2 0x757 JUMPI DUP1 PUSH4 0x9F5F86AE EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0x9FD12B77 EQ PUSH2 0x7BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8FE3F93F GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x8FE3F93F EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x944AC59F EQ PUSH2 0x71E JUMPI DUP1 PUSH4 0x94CF073A EQ PUSH2 0x731 JUMPI DUP1 PUSH4 0x95373018 EQ PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x6D0 JUMPI DUP1 PUSH4 0x84EDAA42 EQ PUSH2 0x6D8 JUMPI DUP1 PUSH4 0x8991B2F1 EQ PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F0E0EF3 GT PUSH2 0x2B8 JUMPI DUP1 PUSH4 0x693CE7F5 GT PUSH2 0x256 JUMPI DUP1 PUSH4 0x6F307DC3 GT PUSH2 0x230 JUMPI DUP1 PUSH4 0x6F307DC3 EQ PUSH2 0x64A JUMPI DUP1 PUSH4 0x78327438 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x830AA745 EQ PUSH2 0x697 JUMPI DUP1 PUSH4 0x8345F26E EQ PUSH2 0x6AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x693CE7F5 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0x6CE4074A EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x6E98E5E4 EQ PUSH2 0x637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x54FD4D50 GT PUSH2 0x292 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x5B7 JUMPI DUP1 PUSH4 0x570A7AF2 EQ PUSH2 0x5BF JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x5E6 JUMPI DUP1 PUSH4 0x654A9EDA EQ PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F0E0EF3 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0x5063524A EQ PUSH2 0x571 JUMPI DUP1 PUSH4 0x51E3F160 EQ PUSH2 0x5A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F7A1881 GT PUSH2 0x325 JUMPI DUP1 PUSH4 0x3E8297CA GT PUSH2 0x2FF JUMPI DUP1 PUSH4 0x3E8297CA EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0x458936F5 EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0x46FB371D EQ PUSH2 0x537 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F7A1881 EQ PUSH2 0x49B JUMPI DUP1 PUSH4 0x3192195C EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x38975BC4 EQ PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x172C48C7 GT PUSH2 0x361 JUMPI DUP1 PUSH4 0x172C48C7 EQ PUSH2 0x418 JUMPI DUP1 PUSH4 0x2362A2D8 EQ PUSH2 0x44D JUMPI DUP1 PUSH4 0x2630C12F EQ PUSH2 0x46E JUMPI DUP1 PUSH4 0x29DF0B93 EQ PUSH2 0x486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x55EE9B5 EQ PUSH2 0x388 JUMPI DUP1 PUSH4 0xD8F9CEE EQ PUSH2 0x3CE JUMPI DUP1 PUSH4 0x16F0115B EQ PUSH2 0x3F1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B1 PUSH2 0x396 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3E1 PUSH2 0x3DC CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x994 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x42B PUSH2 0x426 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0xA7E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND DUP4 MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x45B CALLDATASIZE PUSH1 0x4 PUSH2 0x3C23 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x50 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3B1 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x494 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0xED7 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x4F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0xFA6 JUMP JUMPDEST PUSH2 0x460 PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CA5 JUMP JUMPDEST PUSH2 0x1055 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x584 PUSH2 0x57F CALLDATASIZE PUSH1 0x4 PUSH2 0x3CF6 JUMP JUMPDEST PUSH2 0x11BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x5B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x13A3 JUMP JUMPDEST PUSH2 0x460 PUSH1 0xD2 DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x3E1 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x3D31 JUMP JUMPDEST PUSH2 0x1480 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1808 JUMP JUMPDEST PUSH2 0x62A PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x3DFB JUMP JUMPDEST PUSH2 0x1860 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3C5 SWAP2 SWAP1 PUSH2 0x3EF0 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x645 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x1A0B JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x684 PUSH2 0x67F CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1AF7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x6A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CA5 JUMP JUMPDEST PUSH2 0x1B84 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x6BE SWAP1 PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x6E6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x1CD4 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x6F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x719 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F0A JUMP JUMPDEST PUSH2 0x1D23 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x72C CALLDATASIZE PUSH1 0x4 PUSH2 0x3F41 JUMP JUMPDEST PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x73F CALLDATASIZE PUSH1 0x4 PUSH2 0x3FA6 JUMP JUMPDEST PUSH2 0x2010 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x752 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x258E JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0xFFFF DUP1 DUP5 AND DUP3 MSTORE PUSH3 0x10000 DUP5 DIV DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x20 SHL DUP5 DIV DUP2 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x30 SHL DUP4 DIV DUP3 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SHL SWAP1 SWAP3 DIV AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2633 JUMP JUMPDEST PUSH2 0x460 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0x26A8 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x7E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x26D8 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x81E CALLDATASIZE PUSH1 0x4 PUSH2 0x3FE8 JUMP JUMPDEST PUSH2 0x2724 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x3E1 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x86B CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2803 JUMP JUMPDEST PUSH2 0x3B1 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8A5 CALLDATASIZE PUSH1 0x4 PUSH2 0x401D JUMP JUMPDEST PUSH2 0x2837 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2882 JUMP JUMPDEST PUSH2 0x499 PUSH2 0x8CB CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB4 JUMP JUMPDEST PUSH2 0x28EE JUMP JUMPDEST PUSH2 0x42B PUSH2 0x8DE CALLDATASIZE PUSH1 0x4 PUSH2 0x3BED JUMP JUMPDEST PUSH2 0x29DC JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x8F1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2A45 JUMP JUMPDEST PUSH2 0x3E1 PUSH2 0x904 CALLDATASIZE PUSH1 0x4 PUSH2 0x4040 JUMP JUMPDEST PUSH2 0x2A83 JUMP JUMPDEST PUSH2 0x460 PUSH2 0x917 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x93D CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH2 0x3B1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x3B1 PUSH2 0x979 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B97 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x9AF JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x9D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0xA0C JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0xA2A JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xA53 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0xA6C DUP4 DUP4 PUSH2 0x2B66 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA8D PUSH1 0x1 DUP5 SHL PUSH2 0x29DC JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0xAC0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB87 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP1 ISZERO PUSH2 0xB61 JUMPI POP PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB44 JUMPI PUSH2 0xB44 PUSH2 0x4098 JUMP JUMPDEST EQ DUP1 PUSH2 0xB61 JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xB5F JUMPI PUSH2 0xB5F PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xB6F JUMPI PUSH1 0x3 SWAP7 POP PUSH2 0xB87 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB92 DUP10 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP2 POP DUP1 DUP1 DUP1 DUP1 PUSH2 0xBC8 DUP7 PUSH2 0xF39 JUMP JUMPDEST POP SWAP1 SWAP5 POP SWAP1 POP PUSH2 0xBDA DUP13 DUP15 DUP7 DUP5 PUSH2 0x11BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP4 SWAP12 POP SWAP4 SWAP9 POP SWAP1 SWAP6 POP SWAP4 POP PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC74 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH2 0xC80 DUP9 DUP8 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0xC8B SWAP1 PUSH1 0x1 PUSH2 0x40DD JUMP JUMPDEST DUP2 GT ISZERO PUSH2 0xCCB JUMPI PUSH2 0xCC6 DUP8 PUSH32 0x0 DUP14 PUSH1 0x1 DUP13 DUP12 DUP8 SUB SUB SUB DUP14 PUSH2 0x2BC0 JUMP JUMPDEST PUSH2 0xD08 JUMP JUMPDEST PUSH2 0xD08 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP14 DUP10 PUSH1 0x1 DUP11 DUP14 ADD DUP7 SWAP1 SUB ADD PUSH2 0x2D76 JUMP JUMPDEST PUSH2 0xD56 DUP8 PUSH32 0x0 PUSH32 0x0 DUP10 PUSH1 0x0 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x32A54179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCA9505E4 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP PUSH1 0x1 DUP5 GT ISZERO PUSH2 0xE19 JUMPI PUSH2 0xE19 DUP4 PUSH32 0x0 DUP14 DUP8 PUSH1 0x0 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP7 NOT AND PUSH2 0xE41 DUP5 DUP10 DUP9 DUP5 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x44DBBD9F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x89B77B3E SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP SWAP5 SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0xF0F JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0xF2D JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF36 DUP2 PUSH2 0x2E88 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF4A DUP7 PUSH2 0x2EED JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 POP SWAP1 POP DUP2 PUSH2 0xF5C DUP3 DUP8 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0xF66 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP5 POP PUSH2 0x2710 SWAP1 PUSH2 0xFFFF AND PUSH2 0xF7E DUP8 DUP8 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0xF88 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0xF92 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0xF9C SWAP1 DUP6 PUSH2 0x40DD JUMP JUMPDEST SWAP5 SWAP7 SWAP4 SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x102E SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x104B JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1053 PUSH2 0x3044 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x106F JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x108B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x10B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP5 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x10FE JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1115 JUMPI POP PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST DUP1 PUSH2 0x1127 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO JUMPDEST ISZERO PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x114E DUP3 PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x0 SUB PUSH2 0x116E JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1179 DUP6 PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP PUSH2 0x1189 DUP4 DUP6 DUP4 DUP6 PUSH1 0x0 PUSH2 0x3096 JUMP JUMPDEST PUSH2 0x11AD JUMPI PUSH2 0x119C DUP4 DUP6 DUP4 PUSH1 0x0 PUSH1 0x1 PUSH2 0x3096 JUMP JUMPDEST POP PUSH2 0x11AB DUP4 DUP6 DUP4 DUP6 PUSH1 0x1 PUSH2 0x3096 JUMP JUMPDEST POP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0xFFFF AND PUSH2 0x11DD DUP9 DUP9 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x11E7 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x11F1 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x11FB SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP4 POP PUSH1 0x1 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1211 JUMPI PUSH2 0x1211 PUSH2 0x4098 JUMP JUMPDEST EQ DUP1 PUSH2 0x122E JUMPI POP PUSH1 0x2 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x122C JUMPI PUSH2 0x122C PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x124A JUMPI POP PUSH1 0x3 DUP8 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1248 JUMPI PUSH2 0x1248 PUSH2 0x4098 JUMP JUMPDEST EQ JUMPDEST ISZERO PUSH2 0x1392 JUMPI PUSH1 0x0 PUSH1 0x1 DUP9 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x1265 JUMPI PUSH2 0x1265 PUSH2 0x4098 JUMP JUMPDEST SUB PUSH2 0x12C9 JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x1286 SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1290 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x12AE SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x12B8 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x12C2 SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP PUSH2 0x135C JUMP JUMPDEST PUSH1 0x2 DUP9 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x4098 JUMP JUMPDEST SUB PUSH2 0x1327 JUMPI PUSH1 0x1 SLOAD PUSH2 0x2710 SWAP1 PUSH2 0x12FE SWAP1 PUSH1 0x1 PUSH1 0x40 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1308 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x12AE SWAP1 PUSH1 0x1 PUSH1 0x30 SHL SWAP1 DIV PUSH2 0xFFFF AND DUP12 PUSH2 0x40F0 JUMP JUMPDEST POP PUSH1 0x1 SLOAD DUP9 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0x1345 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND DUP4 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x134F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x1359 SWAP1 DUP7 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x1371 JUMPI PUSH1 0x1 DUP6 DUP3 SUB SUB SWAP4 POP PUSH2 0x1375 JUMP JUMPDEST DUP1 SWAP5 POP JUMPDEST DUP6 DUP2 LT PUSH2 0x1386 JUMPI DUP6 DUP6 SUB SWAP3 POP PUSH2 0x138C JUMP JUMPDEST DUP5 DUP7 SUB SWAP2 POP JUMPDEST POP PUSH2 0x1398 JUMP JUMPDEST DUP5 DUP5 SUB SWAP2 POP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x13BD JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x13D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x1411 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x142F JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1458 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x1471 DUP3 DUP3 PUSH2 0x31A8 JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x14B8 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x14D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x14FF JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x1518 DUP6 DUP5 PUSH2 0x31A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1562 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1586 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP7 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15F6 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x1 PUSH1 0x50 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5CECBD0E PUSH2 0x1620 DUP7 DUP10 PUSH2 0x4129 JUMP JUMPDEST DUP11 PUSH2 0x162B DUP10 DUP9 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE DUP11 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1682 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16A6 SWAP2 SWAP1 PUSH2 0x4159 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x1 DUP5 GT PUSH2 0x16BE JUMPI PUSH2 0x16BC DUP10 DUP10 PUSH2 0x2B66 JUMP JUMPDEST POP JUMPDEST PUSH2 0x16C7 DUP8 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x16D5 SWAP1 PUSH2 0xFFFF AND DUP3 PUSH2 0x40F0 JUMP JUMPDEST SWAP1 POP PUSH2 0x16E0 DUP9 PUSH2 0x1AF7 JUMP JUMPDEST PUSH2 0x16EE SWAP1 PUSH2 0xFFFF AND DUP4 PUSH2 0x40F0 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 LT PUSH2 0x1709 JUMPI PUSH2 0x1700 DUP10 PUSH2 0x2E88 JUMP JUMPDEST POP POP POP POP PUSH2 0x11AD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP4 PUSH2 0x1739 PUSH12 0x33B2E3C9FD0803CE8000000 DUP6 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1743 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x1759 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x1763 SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH2 0x2710 SWAP1 PUSH2 0x178E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 SWAP1 PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST DUP2 GT PUSH2 0x17CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x17C2 DUP11 PUSH2 0x2E88 JUMP JUMPDEST POP POP POP POP POP PUSH2 0x11AD JUMP JUMPDEST PUSH2 0x17D5 DUP11 PUSH2 0x3227 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 SWAP1 SSTORE POP POP POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1833 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH5 0x100000000 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH2 0x186E PUSH1 0x0 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x1882 JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x189E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP5 AND EQ ISZERO DUP1 PUSH2 0x1905 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO JUMPDEST ISZERO PUSH2 0x1935 JUMPI PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1935 JUMPI PUSH1 0x40 MLOAD PUSH4 0xFC1A5543 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1940 DUP6 PUSH2 0x2A45 JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xAED1EB34AF6ACD8C1E3911FB2EBB875A66324B03957886BD002227B17F52AB03 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 MLOAD PUSH4 0x1CFF79CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x1CFF79CD SWAP1 PUSH2 0x19B0 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x417D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x19CF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x19F7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A36 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x1A74 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1AB2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP5 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH20 0xCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADD PUSH2 0x1AF3 JUMPI PUSH1 0xD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND OR SWAP1 SSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x1B45 JUMPI POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xF0 SHL SWAP1 DIV PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B50 DUP4 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x1B73 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1B7C DUP2 PUSH2 0x29DC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x1B8C PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1BB5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1BF7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1C01 DUP4 DUP4 PUSH2 0x31A8 JUMP JUMPDEST PUSH2 0x1C16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP6 DUP6 DUP5 PUSH2 0x2D76 JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C8B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CAF SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x1CCC JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1053 PUSH2 0x3512 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1CFF JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x1D56 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1D98 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x21D18456 DUP6 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E4C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB3 SWAP2 SWAP1 PUSH2 0x420F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBF28068B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xBF28068B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1F44 DUP4 DUP3 PUSH2 0x354F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x1 SWAP1 SSTORE DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1F9B JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF SWAP3 DUP4 AND PUSH1 0x1 PUSH1 0x40 SHL MUL PUSH10 0xFFFF0000000000000000 NOT SWAP5 DUP5 AND PUSH1 0x1 PUSH1 0x30 SHL MUL PUSH8 0xFFFF000000000000 NOT SWAP7 DUP6 AND PUSH1 0x1 PUSH1 0x20 SHL MUL SWAP7 SWAP1 SWAP7 AND PUSH8 0xFFFFFFFF00000000 NOT SWAP8 DUP6 AND PUSH3 0x10000 MUL PUSH4 0xFFFFFFFF NOT SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP9 AND SWAP4 SWAP1 SWAP4 OR OR SWAP5 SWAP1 SWAP5 AND SWAP5 SWAP1 SWAP5 OR SWAP2 SWAP1 SWAP2 OR AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x201A PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x2043 JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2085 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x2093 DUP8 PUSH2 0x2EED JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP6 ISZERO PUSH2 0x2147 JUMPI PUSH2 0x20AB DUP8 DUP6 PUSH2 0x40DD JUMP JUMPDEST SWAP5 POP PUSH2 0x20BB DUP5 DUP9 DUP5 DUP7 PUSH1 0x1 PUSH2 0x35CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xBF28068B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xBF28068B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x212A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x213E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2516 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 PUSH2 0x2155 DUP6 DUP4 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x215F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x2169 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH2 0x2710 SWAP1 PUSH2 0x2184 SWAP1 PUSH2 0xFFFF AND DUP5 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x218E SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP1 POP PUSH2 0x219A DUP2 DUP4 PUSH2 0x40DD JUMP JUMPDEST DUP10 LT PUSH2 0x2393 JUMPI DUP9 DUP2 PUSH2 0x21AC DUP5 DUP10 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0x21B6 SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH2 0x21C0 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2233 SWAP1 PUSH32 0x0 SWAP1 PUSH32 0x0 SWAP1 DUP15 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x224D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2261 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xCA9505E4 DUP3 DUP5 DUP13 PUSH2 0x22A1 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH2 0x22AB SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2368 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x238C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP PUSH2 0x2513 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x23A9 SWAP1 PUSH2 0xFFFF AND PUSH2 0x2710 PUSH2 0x4250 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH2 0x23B9 PUSH2 0x2710 DUP13 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x23C3 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23D1 DUP3 DUP13 PUSH2 0x4129 JUMP JUMPDEST SWAP1 POP DUP8 SWAP9 POP DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD1660F99 PUSH32 0x0 PUSH32 0x0 DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2446 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2474 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0x32A54179 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH4 0xCA9505E4 SWAP2 POP PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x250E DUP9 DUP4 DUP9 DUP11 PUSH1 0x0 PUSH2 0x35CA JUMP JUMPDEST SWAP5 POP POP POP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x16128211 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0x16128211 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x255F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP SWAP5 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO DUP1 ISZERO PUSH2 0x25C6 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ ISZERO JUMPDEST ISZERO PUSH2 0x25E4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAD40D9E9 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x260D JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE PUSH2 0x2625 DUP2 PUSH2 0x3227 JUMP JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x265E JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xF62005ACEBE9B616AEFB5F248B48F5E89F28437B27D1EEBC0B2D911209F297AF SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x26D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x7 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2703 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x274F JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SUB PUSH2 0x27A9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH2 0xFFFF DUP4 AND PUSH1 0x1 PUSH1 0xF0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xF0 SHL SUB SWAP1 SWAP2 AND OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27B4 DUP4 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 SUB PUSH2 0x27D7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFFFF PUSH1 0xA0 SHL PUSH1 0xA0 DUP5 SWAP1 SHL AND OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x282E JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xF36 DUP2 PUSH2 0x36B0 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2862 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF SWAP1 SWAP3 AND PUSH4 0x1000000 MUL PUSH4 0xFF000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28AD JUMPI PUSH1 0x40 MLOAD PUSH4 0xEEE47169 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x50 SHL MUL PUSH32 0xFFFF0000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO DUP1 PUSH2 0x2908 JUMPI POP PUSH1 0x0 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH1 0xFF AND JUMPDEST PUSH2 0x2924 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x294D JUMPI PUSH1 0x40 MLOAD PUSH4 0x69BC183D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x100 PUSH2 0xFF00 NOT SWAP1 SWAP2 AND OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x298F JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x299A DUP4 PUSH2 0x2A45 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 POP PUSH2 0x29CC DUP3 DUP3 PUSH2 0x354F JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH2 0xFF00 NOT AND SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH1 0x1 SUB PUSH2 0x2A1E JUMPI POP POP PUSH1 0x1 SLOAD PUSH32 0x0 SWAP3 PUSH1 0x1 PUSH1 0xF0 SHL SWAP1 SWAP2 DIV PUSH2 0xFFFF AND SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 POP DUP2 PUSH2 0x2A3D PUSH1 0xA0 DUP3 SWAP1 SHR PUSH2 0x3758 JUMP JUMPDEST SWAP2 POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x2A7E JUMPI PUSH1 0x40 MLOAD PUSH4 0xB5BA4C4D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x2AB6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6C013591 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP1 DUP1 ISZERO PUSH2 0x2AE1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x2AFC JUMPI PUSH1 0x0 DUP1 SLOAD PUSH3 0xFF0000 NOT AND PUSH3 0x10000 DUP6 ISZERO ISZERO MUL OR SWAP1 SSTORE JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x2B5E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2AFF JUMP JUMPDEST PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2B72 DUP4 PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP DUP2 AND ISZERO PUSH2 0x2BB9 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 NOT AND SWAP1 SSTORE PUSH1 0x1 SWAP2 POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 DUP1 ISZERO PUSH2 0x2BFE JUMPI POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST ISZERO PUSH2 0x2D0C JUMPI PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2C53 SWAP1 DUP8 SWAP1 PUSH32 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2C6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2C81 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH4 0xB0D3B75 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 AND SWAP3 POP PUSH4 0x5869DBA8 SWAP2 POP PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D03 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2D6F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD1660F99 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP1 PUSH4 0xD1660F99 SWAP1 PUSH2 0x2D3C SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x422C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D6A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2DCE DUP5 PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2D97 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x422C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x37BF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x2 JUMPDEST DUP2 DUP2 GT PUSH2 0x2D6F JUMPI DUP2 DUP2 AND ISZERO PUSH2 0x2E80 JUMPI PUSH1 0x0 PUSH2 0x2DF1 DUP3 PUSH2 0x29DC JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E62 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x2E7D JUMPI PUSH2 0x2E7D DUP8 DUP4 DUP9 PUSH1 0x1 DUP6 SUB DUP10 PUSH2 0x2BC0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 SHL PUSH2 0x2DD7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x2EAB DUP3 PUSH2 0x3891 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x2EE8 JUMPI PUSH1 0x0 PUSH2 0x2ECD DUP4 PUSH2 0x38A7 JUMP JUMPDEST PUSH2 0x2ED8 SWAP1 PUSH1 0x1 PUSH2 0x40DD JUMP JUMPDEST SWAP1 POP PUSH2 0x2DCE DUP5 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x3911 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x1AFBB7A4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F54 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17D11A15 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FB8 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP2 POP PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCE70FB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3018 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303C SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 SWAP5 SWAP2 SWAP4 POP POP JUMP JUMPDEST PUSH2 0x304C PUSH2 0x3A16 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD DUP7 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP3 ADD DUP4 MSTORE PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x95EA7B3 PUSH1 0xE0 SHL OR SWAP1 MSTORE SWAP2 MLOAD PUSH4 0x1CFF79CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 DUP7 AND SWAP2 PUSH4 0x1CFF79CD SWAP2 PUSH2 0x3103 SWAP2 DUP11 SWAP2 PUSH1 0x4 ADD PUSH2 0x417D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x3143 JUMPI POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3140 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x317C JUMPI DUP1 MLOAD ISZERO DUP1 PUSH2 0x316B JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3165 SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST ISZERO ISZERO PUSH1 0x1 EQ JUMPDEST ISZERO PUSH2 0x317A JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x319F JUMP JUMPDEST POP JUMPDEST DUP2 ISZERO PUSH2 0x319B JUMPI PUSH1 0x40 MLOAD PUSH4 0x2F10A7F3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31B3 DUP3 PUSH2 0x2B05 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO DUP1 PUSH2 0x31C5 JUMPI POP PUSH1 0x7 SLOAD DUP2 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x31E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x700CA0AF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 AND SWAP1 SUB PUSH2 0x2EE8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x50 SHL SWAP1 SWAP4 DIV SWAP1 SWAP2 AND SWAP2 SWAP1 DUP1 DUP1 PUSH2 0x325C DUP7 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH2 0x2710 DUP3 MUL PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 SWAP5 POP SWAP1 DUP9 AND SWAP3 POP PUSH4 0xF9A65030 SWAP2 POP PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32F6 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP3 POP PUSH2 0x3301 DUP5 PUSH2 0x38A7 JUMP JUMPDEST PUSH1 0x1 ADD SWAP2 POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x34D5 JUMPI DUP1 ISZERO PUSH2 0x3327 JUMPI PUSH1 0x1 DUP2 DUP7 SUB SHL PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 JUMPDEST SWAP4 POP DUP7 DUP5 AND ISZERO PUSH2 0x34CD JUMPI PUSH1 0x0 DUP1 PUSH2 0x3340 DUP7 PUSH2 0x29DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x338F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33B3 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x34C0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF9A6503 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH2 0xFFFF DUP5 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH4 0xF9A65030 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3412 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3436 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST PUSH2 0x3440 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x344A SWAP1 DUP8 PUSH2 0x40DD JUMP JUMPDEST SWAP6 POP DUP9 DUP7 LT PUSH2 0x34BB JUMPI PUSH1 0x0 PUSH2 0x345E DUP12 PUSH2 0x3891 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP2 POP PUSH4 0x1000000 SWAP1 DIV PUSH1 0xFF AND DUP2 GT ISZERO PUSH2 0x348A JUMPI PUSH2 0x3485 DUP14 DUP13 DUP4 PUSH1 0x1 DUP10 DUP15 SUB PUSH2 0x3911 JUMP JUMPDEST PUSH2 0x34AC JUMP JUMPDEST DUP6 ISZERO PUSH2 0x34AC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP12 SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x34C9 JUMP JUMPDEST SWAP9 DUP7 XOR SWAP9 PUSH1 0x1 SWAP5 POP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x330E JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x29973DDB PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1053 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP1 PUSH2 0x406E JUMP JUMPDEST PUSH2 0x351A PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x3079 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0x357E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x359C JUMPI PUSH1 0x40 MLOAD PUSH4 0x4F2CB04F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x3647 JUMPI PUSH1 0x0 PUSH2 0x35DE DUP7 DUP9 PUSH2 0x40DD JUMP JUMPDEST SWAP1 POP PUSH2 0x35EE DUP7 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST DUP5 DUP9 PUSH2 0x35FE DUP9 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3608 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3612 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x361C SWAP2 SWAP1 PUSH2 0x40DD JUMP JUMPDEST PUSH4 0x3B9ACA00 PUSH2 0x362B DUP4 DUP9 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3635 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x363F SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x319F JUMP JUMPDEST DUP6 DUP4 PUSH2 0x3657 DUP8 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3661 SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x366B SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST PUSH2 0x3679 DUP6 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x3683 SWAP2 SWAP1 PUSH2 0x4129 JUMP JUMPDEST DUP4 PUSH2 0x3692 DUP7 PUSH4 0x3B9ACA00 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x369C SWAP2 SWAP1 PUSH2 0x40F0 JUMP JUMPDEST PUSH2 0x36A6 SWAP2 SWAP1 PUSH2 0x4107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x36E7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2E5A5C77 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x100 PUSH1 0x5 SLOAD LT PUSH2 0x370B JUMPI PUSH1 0x40 MLOAD PUSH4 0x3F028629 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 SWAP1 SWAP6 SHL SWAP5 DUP6 SWAP1 SSTORE DUP5 DUP4 MSTORE PUSH1 0x4 SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE DUP3 SLOAD SWAP2 SWAP3 SWAP1 PUSH2 0x374F DUP4 PUSH2 0x426B JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x37BB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x362062697473 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9CB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3814 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A5F SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x2EE8 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x3832 SWAP2 SWAP1 PUSH2 0x413C JUMP JUMPDEST PUSH2 0x2EE8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 ISZERO PUSH2 0x2A7E JUMPI PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND ADD PUSH2 0x3894 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 SUB PUSH2 0x38B9 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x100 PUSH1 0x1 JUMPDEST PUSH1 0x1 PUSH2 0x38CB DUP3 DUP5 PUSH2 0x40DD JUMP JUMPDEST SWAP1 SHR SWAP3 POP PUSH1 0x1 DUP4 SHL DUP5 DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x38E6 JUMPI POP PUSH1 0x1 DUP6 DUP6 SHR EQ JUMPDEST ISZERO PUSH2 0x38F1 JUMPI POP PUSH2 0x390A JUMP JUMPDEST DUP5 DUP2 LT PUSH2 0x3900 JUMPI DUP4 SWAP3 POP PUSH2 0x3904 JUMP JUMPDEST DUP4 SWAP2 POP JUMPDEST POP PUSH2 0x38BF JUMP JUMPDEST POP POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39FC JUMPI PUSH1 0x1 DUP2 SHL DUP6 DUP2 AND ISZERO PUSH2 0x39F3 JUMPI PUSH1 0x0 PUSH2 0x3932 DUP3 PUSH2 0x29DC JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x397F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39A3 SWAP2 SWAP1 PUSH2 0x40AE JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 GT PUSH2 0x39F0 JUMPI PUSH1 0x0 SLOAD SWAP8 DUP4 XOR SWAP8 PUSH1 0x0 NOT SWAP1 SWAP8 ADD SWAP7 PUSH1 0xFF PUSH4 0x1000000 SWAP1 SWAP2 DIV AND DUP8 GT PUSH2 0x39F0 JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE POP PUSH2 0x2D6F JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x3913 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0xC2D5257 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x1053 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9CB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B7C DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x3A86 SWAP2 SWAP1 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3AC3 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x3AC8 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x3AD9 DUP8 DUP4 DUP4 DUP8 PUSH2 0x3AE4 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x3B53 JUMPI DUP3 MLOAD PUSH1 0x0 SUB PUSH2 0x3B4C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0x3B4C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x9CB JUMP JUMPDEST POP DUP2 PUSH2 0x1B7C JUMP JUMPDEST PUSH2 0x1B7C DUP4 DUP4 DUP2 MLOAD ISZERO PUSH2 0x3B68 JUMPI DUP2 MLOAD DUP1 DUP4 PUSH1 0x20 ADD REVERT JUMPDEST DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9CB SWAP2 SWAP1 PUSH2 0x3EF0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2AFC DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3BC7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3BD2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x4 DUP2 LT PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3C3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x3C49 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP7 POP PUSH2 0x3C57 PUSH1 0x20 DUP10 ADD PUSH2 0x3C06 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x3C6E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x3C7E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0x3C95 DUP2 PUSH2 0x3C15 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3CBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3CC6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3CD6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3CE6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0x3D1C PUSH1 0x20 DUP7 ADD PUSH2 0x3C06 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3D49 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3D54 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3D64 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3D74 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3DCB JUMPI PUSH2 0x3DCB PUSH2 0x3D8C JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3DED JUMPI PUSH2 0x3DED PUSH2 0x3D8C JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3E1B DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3E2B DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 ADD PUSH1 0x1F DUP2 ADD DUP7 SGT PUSH2 0x3E58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3E6B PUSH2 0x3E66 DUP3 PUSH2 0x3DD3 JUMP JUMPDEST PUSH2 0x3DA2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP8 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x3E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3EBB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3EA3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x3EDC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3EA0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3F03 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3EC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3B82 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2A7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F62 DUP7 PUSH2 0x3F2F JUMP JUMPDEST SWAP5 POP PUSH2 0x3F70 PUSH1 0x20 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP4 POP PUSH2 0x3F7E PUSH1 0x40 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP3 POP PUSH2 0x3F8C PUSH1 0x60 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP2 POP PUSH2 0x3F9A PUSH1 0x80 DUP8 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3FBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3FC6 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3FDD DUP2 PUSH2 0x3C15 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4006 DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH2 0x4014 PUSH1 0x20 DUP5 ADD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x402F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x2AFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x405E DUP2 PUSH2 0x3B82 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3BE2 DUP2 PUSH2 0x3C15 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x10 SWAP1 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x40C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4124 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP2 DUP2 SUB DUP2 DUP2 GT ISZERO PUSH2 0x2AFF JUMPI PUSH2 0x2AFF PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x414E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2AFC DUP2 PUSH2 0x3C15 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x416C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1B7C SWAP1 DUP4 ADD DUP5 PUSH2 0x3EC4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x41B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x41DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x41E9 PUSH2 0x3E66 DUP3 PUSH2 0x3DD3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x41FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x319F DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3EA0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4221 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2AFC DUP2 PUSH2 0x3B82 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH2 0xFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2BB9 JUMPI PUSH2 0x2BB9 PUSH2 0x40C7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x427D JUMPI PUSH2 0x427D PUSH2 0x40C7 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x4296 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x3EA0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 0xD3 PUSH18 0x64E9CF042A935A8D8F67A9E6198D638B261 0xBC 0x23 SWAP12 EQ MOD 0xD1 0xC2 0xBF PUSH15 0xE81F64736F6C634300081100330000 ", - "sourceMap": "2865:72740:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3645:58;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3645:58:21;;;;;;-1:-1:-1;;;;;566:32:70;;;548:51;;536:2;521:18;3645:58:21;;;;;;;;47051:293;;;;;;:::i;:::-;;:::i;:::-;;;1168:14:70;;1161:22;1143:41;;1131:2;1116:18;47051:293:21;1003:187:70;4099:38:21;;;;;59356:359;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1570:32:70;;;1552:51;;1651:6;1639:19;;;1634:2;1619:18;;1612:47;1525:18;59356:359:21;1380:285:70;12746:4715:21;;;;;;:::i;:::-;;:::i;:::-;;;3011:25:70;;;2999:2;2984:18;12746:4715:21;2865:177:70;67512:112:21;67600:5;:17;-1:-1:-1;;;67600:17:21;;-1:-1:-1;;;;;67600:17:21;67512:112;;43097:210;;;;;;:::i;:::-;;:::i;:::-;;3427:36;;;;;-1:-1:-1;;;3427:36:21;;-1:-1:-1;;;;;3427:36:21;;;61784:1199;;;;;;:::i;:::-;;:::i;:::-;;;;3481:25:70;;;3537:2;3522:18;;3515:34;;;;3565:18;;;3558:34;3469:2;3454:18;61784:1199:21;3279:319:70;6574:64:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5798:63;;;;;;:::i;:::-;;;;;;;;;;;;;;1427:161:13;;;:::i;4695:36:21:-;;;;;;27311:1416;;;;;;:::i;:::-;;:::i;4173:45::-;;;;;54263:4949;;;;;;:::i;:::-;;:::i;:::-;;;;4863:25:70;;;4919:2;4904:18;;4897:34;;;;4947:18;;;4940:34;5005:2;4990:18;;4983:34;4850:3;4835:19;54263:4949:21;4632:391:70;31817:278:21;;;;;;:::i;:::-;;:::i;6859:47::-;;6902:4;6859:47;;4004:45;;;;;1615:84:56;1662:4;1685:7;;;1615:84;;34063:3145:21;;;;;;:::i;:::-;;:::i;74171:161::-;;;;;;:::i;:::-;;:::i;30346:1140::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;73446:621::-;;;;;;:::i;:::-;;:::i;3860:44::-;;;;;64220:454;;;;;;:::i;:::-;;:::i;:::-;;;8181:6:70;8169:19;;;8151:38;;8139:2;8124:18;64220:454:21;8007:188:70;25945:511:21;;;;;;:::i;:::-;;:::i;3313:55::-;;;;;;;;;;;;;;;8372:4:70;8360:17;;;8342:36;;8330:2;8315:18;3313:55:21;8200:184:70;1239:152:13;;;:::i;74737:175:21:-;;;;;;:::i;:::-;;:::i;5585:60::-;;;;;;:::i;:::-;;;;;;;;;;;;;;9522:1162;;;;;;:::i;:::-;;:::i;69977:624::-;;;;;;:::i;:::-;;:::i;18359:4616::-;;;;;;:::i;:::-;;:::i;37397:210::-;;;;;;:::i;:::-;;:::i;66794:639::-;67108:5;:17;66794:639;;;67108:17;;;;10081:34:70;;67165:20:21;;;;;10146:2:70;10131:18;;10124:43;-1:-1:-1;;;67230:25:21;;;;10183:18:70;;;10176:43;;;;-1:-1:-1;;;67302:27:21;;;;10250:2:70;10235:18;;10228:43;-1:-1:-1;;;67381:32:21;;;;10302:3:70;10287:19;;10280:44;10043:3;10028:19;66794:639:21;9807:523:70;75351:252:21;;;;;;:::i;:::-;;:::i;5236:42::-;;;;;;72420:170;;;;;;:::i;:::-;;:::i;75047:180::-;;;;;;:::i;:::-;;:::i;685:26:13:-;;;;;71023:838:21;;;;;;:::i;:::-;;:::i;3197:32::-;;;;;;;;;;;;4262:36;;;;;67907:143;;;;;;:::i;:::-;;:::i;3760:48::-;;;;;72743:202;;;;;;:::i;:::-;;:::i;74433:179::-;;;;;;:::i;:::-;;:::i;26614:402::-;;;;;;:::i;:::-;;:::i;59875:1121::-;;;;;;:::i;:::-;;:::i;61139:282::-;;;;;;:::i;:::-;;:::i;48904:360::-;;;;;;:::i;:::-;;:::i;64784:198::-;;;;;;:::i;:::-;;:::i;4363:33::-;;;;;-1:-1:-1;;;;;4363:33:21;;;6076:61;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;6076:61:21;;;6791:31;;;;;-1:-1:-1;;;;;6791:31:21;;;5941:61;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;5941:61:21;;;47051:293;47275:4;1685:7:56;;;;7999:9:21;:33;;;-1:-1:-1;8012:20:21;;;;;;;7999:33;7991:62;;;;-1:-1:-1;;;7991:62:21;;;;;;;:::i;:::-;;;;;;;;;7402:10:::1;7425:1;7384:29:::0;;;:17:::1;:29;::::0;;;;;-1:-1:-1;;;;;7384:29:21::1;:43:::0;:85;::::1;;;-1:-1:-1::0;7457:12:21::1;::::0;-1:-1:-1;;;7457:12:21;::::1;-1:-1:-1::0;;;;;7457:12:21::1;7443:10;:26;;7384:85;7367:157;;;7487:37;;-1:-1:-1::0;;;7487:37:21::1;;;;;;;;;;;7367:157;7114:7:::2;::::0;::::2;::::0;::::2;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::2;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::2;;;::::0;;47302:35:::3;47316:13:::0;47331:5;47302:13:::3;:35::i;:::-;7235:5:::2;7225:15:::0;;-1:-1:-1;;7225:15:21::2;::::0;;47295:42;47051:293;-1:-1:-1;;;47051:293:21:o;59356:359::-;59439:13;;59677:31;59700:1;:7;;59677:22;:31::i;:::-;59670:38;;;;59356:359;;;:::o;12746:4715::-;13084:22;7114:7;;;;;;;7110:70;;;7144:25;;-1:-1:-1;;;7144:25:21;;;;;;;;;;;7110:70;7190:7;:14;;;-1:-1:-1;;7190:14:21;;;;;;;;-1:-1:-1;;;7658:12:21;::::1;-1:-1:-1::0;;;;;7658:12:21::1;7644:10;:26;7640:66;;7679:27;;-1:-1:-1::0;;;7679:27:21::1;;;;;;;;;;;7640:66;1662:4:56::0;1685:7;;;13354:428:21::2;;;-1:-1:-1::0;;;;;13403:30:21;::::2;;::::0;;;:23:::2;:30;::::0;;;;;::::2;;:208:::0;::::2;;;-1:-1:-1::0;13475:31:21::2;13454:17;:52;;;;;;;;:::i;:::-;;:156;;;-1:-1:-1::0;13571:39:21::2;13530:17;:80;;;;;;;;:::i;:::-;;13454:156;13382:377;;;13664:30;13644:50;;13382:377;;;13733:26;;-1:-1:-1::0;;;13733:26:21::2;;;;;;;:::i;13382:377::-;13858:21;13882:34;13907:8;13882:24;:34::i;:::-;-1:-1:-1::0;;;;;14391:24:21;::::2;;::::0;;;:14:::2;:24;::::0;;;;14384:31;;-1:-1:-1;;;;;;14384:31:21::2;::::0;;13858:58;;-1:-1:-1;14391:24:21;;;;14777:47:::2;13858:58:::0;14777:32:::2;:47::i;:::-;-1:-1:-1::0;14682:142:21;;-1:-1:-1;14682:142:21;-1:-1:-1;14892:170:21::2;14927:10:::0;14955:17;14682:142;;14892:17:::2;:170::i;:::-;15124:73;::::0;-1:-1:-1;;;15124:73:21;;-1:-1:-1;;;;;566:32:70;;;15124:73:21::2;::::0;::::2;548:51:70::0;14845:217:21;;-1:-1:-1;14845:217:21;;-1:-1:-1;14845:217:21;;-1:-1:-1;14845:217:21;-1:-1:-1;15096:25:21::2;::::0;15131:10:::2;15124:28:::0;;::::2;::::0;::::2;::::0;521:18:70;;15124:73:21::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15096:101:::0;-1:-1:-1;15319:29:21::2;15334:14:::0;15319:12;:29:::2;:::i;:::-;:33;::::0;15351:1:::2;15319:33;:::i;:::-;15299:17;:53;15295:826;;;15404:259;15448:13;15487:10;15523:2;15603:1;15586:14;15571:12;15551:17;:32;:49;:53;15630:11;15404:18;:259::i;:::-;15295:826;;;15866:206;-1:-1:-1::0;;;;;15873:10:21::2;15866:35;15927:5:::0;15958:13;16049:1:::2;15997:29:::0;;::::2;:49:::0;;::::2;:53;15866:35;:206::i;:::-;16186:166;16222:13;16253:10;16281:4;16303:12;16333:5;16186:18;:166::i;:::-;16626:67;::::0;-1:-1:-1;;;16626:67:21;;::::2;::::0;::::2;3481:25:70::0;;;3522:18;;;3515:34;;;3565:18;;;3558:34;;;16639:4:21::2;-1:-1:-1::0;;;;;16626:37:21::2;::::0;::::2;::::0;3454:18:70;;16626:67:21::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14566:2160;;;;16829:1;16812:14;:18;16808:237;;;16846:172;16882:13;16913:10;16941:8;16967:14;16999:5;16846:18;:172::i;:::-;-1:-1:-1::0;;;;;17162:31:21;::::2;17134:25;17162:31:::0;;;:16:::2;:31;::::0;;;;;17208:14;::::2;17162:60;17245:68;17179:13:::0;17278:2;17282:11;17162:60;17245:17:::2;:68::i;:::-;17392:50;::::0;-1:-1:-1;;;17392:50:21;;-1:-1:-1;;;;;566:32:70;;;17392:50:21::2;::::0;::::2;548:51:70::0;17392:15:21::2;:35;::::0;::::2;::::0;521:18:70;;17392:50:21::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;7235:5:21;7225:15;;-1:-1:-1;;7225:15:21;;;-1:-1:-1;12746:4715:21;;;-1:-1:-1;;;;;;;;;;;;12746:4715:21:o;43097:210::-;7402:10;7425:1;7384:29;;;:17;:29;;;;;;-1:-1:-1;;;;;7384:29:21;:43;:85;;;;-1:-1:-1;7457:12:21;;-1:-1:-1;;;7457:12:21;;-1:-1:-1;;;;;7457:12:21;7443:10;:26;;7384:85;7367:157;;;7487:37;;-1:-1:-1;;;7487:37:21;;;;;;;;;;;7367:157;43255:45:::1;43286:13;43255:30;:45::i;:::-;43097:210:::0;:::o;61784:1199::-;61924:22;61960:34;62008:41;62074:33;62117:30;62273:42;62301:13;62273:27;:42::i;:::-;62157:158;;-1:-1:-1;62157:158:21;-1:-1:-1;62157:158:21;-1:-1:-1;62157:158:21;62597:39;62157:158;;62597:39;:::i;:::-;62596:81;;;;:::i;:::-;62912:5;:17;62555:122;;-1:-1:-1;139:3:47;;62847:115:21;62912:17;62849:43;62878:14;62555:122;62849:43;:::i;:::-;62848:81;;;;:::i;:::-;62847:115;;;;:::i;:::-;62806:156;;:26;:156;:::i;:::-;61784:1199;;;;-1:-1:-1;;;;61784:1199:21:o;1427:161:13:-;1470:34;;-1:-1:-1;;;1470:34:13;;1493:10;1470:34;;;548:51:70;1470:4:13;-1:-1:-1;;;;;1470:22:13;;;;521:18:70;;1470:34:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1465:95;;1525:35;;-1:-1:-1;;;1525:35:13;;;;;;;;;;;1465:95;1571:10;:8;:10::i;:::-;1427:161::o;27311:1416:21:-;1662:4:56;1685:7;;;7999:9:21;:33;;;-1:-1:-1;8012:20:21;;;;;;;7999:33;7991:62;;;;-1:-1:-1;;;7991:62:21;;;;;;;:::i;:::-;7114:7:::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::1;;;::::0;;27757:10:::2;27739:29:::0;;:17:::2;:29;::::0;;;;;-1:-1:-1;;;;;27739:29:21;;::::2;:47:::0;;::::2;;::::0;::::2;::::0;:93:::2;;-1:-1:-1::0;27820:12:21::2;::::0;-1:-1:-1;;;27820:12:21;::::2;-1:-1:-1::0;;;;;27820:12:21::2;27806:10;:26;;27739:93;:143;;;;-1:-1:-1::0;27866:16:21::2;::::0;-1:-1:-1;;;;;27866:16:21::2;27852:10;:30;;27739:143;27738:177;;;-1:-1:-1::0;;;;;;27887:28:21;::::2;::::0;27738:177:::2;27721:289;;;27947:37;;-1:-1:-1::0;;;27947:37:21::2;;;;;;;;;;;27721:289;28174:20;28188:5;28174:13;:20::i;:::-;28198:1;28174:25:::0;28170:64:::2;;28208:26;;-1:-1:-1::0;;;28208:26:21::2;;;;;;;;;;;28170:64;28251:21;28275:34;28300:8;28275:24;:34::i;:::-;28251:58;;28498:61;28507:5;28514:14;28530:13;28545:6;28553:5;28498:8;:61::i;:::-;28493:228;;28575:55;28584:5;28591:14;28607:13;28622:1;28625:4;28575:8;:55::i;:::-;;28650:60;28659:5;28666:14;28682:13;28697:6;28705:4;28650:8;:60::i;:::-;;28493:228;-1:-1:-1::0;;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;-1:-1:-1;;;27311:1416:21:o;54263:4949::-;54956:5;:17;54516:20;;;;;;;;139:3:47;;54891:115:21;54956:17;54893:43;54922:14;54893:26;:43;:::i;:::-;54892:81;;;;:::i;:::-;54891:115;;;;:::i;:::-;54850:156;;:26;:156;:::i;:::-;54823:183;-1:-1:-1;55068:31:21;55047:17;:52;;;;;;;;:::i;:::-;;:128;;;-1:-1:-1;55136:39:21;55115:17;:60;;;;;;;;:::i;:::-;;55047:128;:195;;;-1:-1:-1;55212:30:21;55191:17;:51;;;;;;;;:::i;:::-;;55047:195;55030:4176;;;55299:18;56284:31;56263:17;:52;;;;;;;;:::i;:::-;;56259:1109;;56424:5;:25;139:3:47;;56411:38:21;;-1:-1:-1;;;56424:25:21;;56410:80;56424:25;56411:10;:38;:::i;:::-;56410:80;;;;:::i;:::-;56572:5;:20;56377:113;;-1:-1:-1;139:3:47;;56559:33:21;;56572:20;;;56558:75;56572:20;56559:10;:33;:::i;:::-;56558:75;;;;:::i;:::-;56522:111;;;;:::i;:::-;;;56259:1109;;;56709:39;56688:17;:60;;;;;;;;:::i;:::-;;56667:701;;56868:5;:32;139:3:47;;56855:45:21;;-1:-1:-1;;;56868:32:21;;56854:87;56868:32;56855:10;:45;:::i;:::-;56854:87;;;;:::i;:::-;57023:5;:27;56821:120;;-1:-1:-1;139:3:47;;57010:40:21;;-1:-1:-1;;;57023:27:21;;57009:82;57023:27;57010:10;:40;:::i;56667:701::-;-1:-1:-1;57279:5:21;:20;57187:10;;139:3:47;;57266:33:21;;57279:20;;;57265:75;57279:20;57187:10;57266:33;:::i;:::-;57265:75;;;;:::i;:::-;57229:111;;;;:::i;:::-;;;56667:701;58189:12;58176:10;:25;58172:216;;;58270:1;58255:12;58242:10;:25;:29;58225:46;;58172:216;;;58346:10;58331:25;;58172:216;58424:26;58410:10;:40;58406:258;;58498:26;58483:12;:41;58474:50;;58406:258;;;58620:12;58591:26;:41;58584:48;;58406:258;55253:3435;55030:4176;;;59142:26;59127:12;:41;59118:50;;55030:4176;54263:4949;;;;;;;;;:::o;31817:278::-;1662:4:56;1685:7;;;7999:9:21;:33;;;-1:-1:-1;8012:20:21;;;;;;;7999:33;7991:62;;;;-1:-1:-1;;;7991:62:21;;;;;;;:::i;:::-;7402:10:::1;7425:1;7384:29:::0;;;:17:::1;:29;::::0;;;;;-1:-1:-1;;;;;7384:29:21::1;:43:::0;:85;::::1;;;-1:-1:-1::0;7457:12:21::1;::::0;-1:-1:-1;;;7457:12:21;::::1;-1:-1:-1::0;;;;;7457:12:21::1;7443:10;:26;;7384:85;7367:157;;;7487:37;;-1:-1:-1::0;;;7487:37:21::1;;;;;;;;;;;7367:157;7114:7:::2;::::0;::::2;::::0;::::2;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::2;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::2;;;::::0;;32033:42:::3;32054:13:::0;32069:5;32033:20:::3;:42::i;:::-;-1:-1:-1::0;;7235:5:21::2;7225:15:::0;;-1:-1:-1;;7225:15:21::2;::::0;;31817:278::o;34063:3145::-;7402:10;7425:1;7384:29;;;:17;:29;;;;;;-1:-1:-1;;;;;7384:29:21;:43;:85;;;;-1:-1:-1;7457:12:21;;-1:-1:-1;;;7457:12:21;;-1:-1:-1;;;;;7457:12:21;7443:10;:26;;7384:85;7367:157;;;7487:37;;-1:-1:-1;;;7487:37:21;;;;;;;;;;;7367:157;7114:7:::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::1;;;::::0;;34490:45:::2;34511:13:::0;34526:8;34490:20:::2;:45::i;:::-;34582:40;::::0;-1:-1:-1;;;34582:40:21;;-1:-1:-1;;;;;566:32:70;;;34582:40:21::2;::::0;::::2;548:51:70::0;34557:22:21::2;::::0;34582:25;;::::2;::::0;::::2;::::0;521:18:70;;34582:40:21::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34672:41;::::0;-1:-1:-1;;;34672:41:21;;-1:-1:-1;;;;;566:32:70;;;34672:41:21::2;::::0;::::2;548:51:70::0;34557:65:21;;-1:-1:-1;34646:23:21::2;::::0;34672:26;::::2;::::0;::::2;::::0;521:18:70;;34672:41:21::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34798:5;:30:::0;34646:67;;-1:-1:-1;34739:26:21::2;::::0;;;-1:-1:-1;;;34798:30:21;::::2;-1:-1:-1::0;;;;;34798:30:21::2;:53;34869:32;34887:14:::0;34869:15;:32:::2;:::i;:::-;34919:7:::0;34944:34:::2;34962:16:::0;34944:15;:34:::2;:::i;:::-;34798:220;::::0;-1:-1:-1;;;;;;34798:220:21::2;::::0;;;;;;::::2;::::0;::::2;13712:25:70::0;;;;-1:-1:-1;;;;;13811:15:70;;;13791:18;;;13784:43;13843:18;;;13836:34;13906:15;;13886:18;;;13879:43;13684:19;;34798:220:21::2;::::0;::::2;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34738:280;;;;35141:1;35123:14;:19;35119:62;;35144:37;35158:13;35173:7;35144:13;:37::i;:::-;;35119:62;35610:31;35632:8;35610:21;:31::i;:::-;35587:54;::::0;::::2;;::::0;::::2;:::i;:::-;;;35686:30;35708:7;35686:21;:30::i;:::-;35664:52;::::0;::::2;;::::0;::::2;:::i;:::-;;;36053:18;36030:19;:41;36026:163;;36087:45;36118:13;36087:30;:45::i;:::-;36159:7;;;;;;36026:163;-1:-1:-1::0;;;;;36395:43:21;::::2;36284:25;36395:43:::0;;;:28:::2;:43;::::0;;;;;36361:18;36332:25:::2;219:4:44;36332:19:21::0;:25:::2;:::i;:::-;36331:48;;;;:::i;:::-;36312:68;::::0;219:4:44::2;36312:68:21;:::i;:::-;:126;;;;:::i;:::-;36664:5;:20:::0;36284:154;;-1:-1:-1;139:3:47::2;::::0;36664:26:21::2;::::0;219:4:44::2;::::0;36664:20:21;;::::2;36663:48;36664:20;:26;:::i;:::-;36663:48;;;;:::i;:::-;36630:17;:81;36613:302;;-1:-1:-1::0;;;;;36736:43:21;::::2;;::::0;;;:28:::2;:43;::::0;;;;:63;;;36826:45:::2;36765:13:::0;36826:30:::2;:45::i;:::-;36898:7;;;;;;;36613:302;37080:35;37101:13;37080:20;:35::i;:::-;-1:-1:-1::0;;;;;;;;37141:43:21;::::2;;::::0;;;:28:::2;:43;::::0;;;;37187:1:::2;37141:47:::0;;-1:-1:-1;;;;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;-1:-1:-1;;;34063:3145:21:o;74171:161::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;74297:12:::1;:28:::0;;-1:-1:-1;;;;;74297:28:21;;::::1;-1:-1:-1::0;;;74297:28:21::1;-1:-1:-1::0;;;;;;74297:28:21;;::::1;::::0;;;::::1;::::0;;74171:161::o;30346:1140::-;30576:12;8000:8;1662:4:56;1685:7;;;;1615:84;8000:8:21;7999:9;:33;;;-1:-1:-1;8012:20:21;;;;;;;7999:33;7991:62;;;;-1:-1:-1;;;7991:62:21;;;;;;;:::i;:::-;7114:7:::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::1;;;::::0;;30833:10:::2;30815:29:::0;;:17:::2;:29;::::0;;;;;-1:-1:-1;;;;;30815:29:21;;::::2;:47:::0;;::::2;;;::::0;:91:::2;;-1:-1:-1::0;;;;;;30878:28:21;::::2;::::0;30815:91:::2;30798:251;;;30949:16;::::0;-1:-1:-1;;;;;30949:16:21::2;30935:10;:30;30931:94;;30990:35;;-1:-1:-1::0;;;30990:35:21::2;;;;;;;;;;;30931:94;31059:21;31083:34;31108:8;31083:24;:34::i;:::-;31059:58;;31194:14;-1:-1:-1::0;;;;;31171:38:21::2;31184:8;-1:-1:-1::0;;;;;31171:38:21::2;;;;;;;;;;;31407:59;::::0;-1:-1:-1;;;31407:59:21;;-1:-1:-1;;;;;31407:37:21;::::2;::::0;::::2;::::0;:59:::2;::::0;31445:14;;31461:4;;31407:59:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;31407:59:21::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;:::i;:::-;7235:5:::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;31400:66;30346:1140;-1:-1:-1;;;;;30346:1140:21:o;73446:621::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;-1:-1:-1;;;;;73586:21:21;::::1;::::0;73582:108:::1;;-1:-1:-1::0;;;;;73623:26:21;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:43;;-1:-1:-1;;;;;;73623:43:21::1;::::0;;::::1;::::0;;;::::1;::::0;;73582:108:::1;-1:-1:-1::0;;;;;73703:28:21;::::1;::::0;73699:115:::1;;-1:-1:-1::0;;;;;73747:33:21;;::::1;;::::0;;;:17:::1;:33;::::0;;;;:43;;-1:-1:-1;;;;;;73747:43:21::1;::::0;;::::1;::::0;;;::::1;::::0;;73699:115:::1;-1:-1:-1::0;;;;;;;73959:36:21;::::1;::::0;73955:106:::1;;74011:16;:26:::0;;-1:-1:-1;;;;;;74011:26:21::1;-1:-1:-1::0;;;;;74011:26:21;::::1;;::::0;;73955:106:::1;73446:621:::0;;:::o;64220:454::-;64328:9;64438:10;-1:-1:-1;;;;;64429:19:21;:5;-1:-1:-1;;;;;64429:19:21;;64425:50;;-1:-1:-1;;64457:5:21;:18;-1:-1:-1;;;64457:18:21;;;;;64220:454::o;64425:50::-;64499:17;64519:20;64533:5;64519:13;:20::i;:::-;64499:40;;64553:9;64566:1;64553:14;64549:53;;64576:26;;-1:-1:-1;;;64576:26:21;;;;;;;;;;;64549:53;64621:33;64644:9;64621:22;:33::i;:::-;64612:42;64220:454;-1:-1:-1;;;;64220:454:21:o;25945:511::-;1239:19:56;:17;:19::i;:::-;7114:7:21::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;::::1;-1:-1:-1::0;;7190:14:21;;::::1;;::::0;;;;-1:-1:-1;;;7658:12:21;::::2;-1:-1:-1::0;;;;;7658:12:21::2;7644:10;:26;7640:66;;7679:27;;-1:-1:-1::0;;;7679:27:21::2;;;;;;;;;;;7640:66;26310:42:::3;26331:13;26346:5;26310:20;:42::i;:::-;26376:60;-1:-1:-1::0;;;;;26376:30:21;::::3;26407:5:::0;26414:13;26429:6;26376:30:::3;:60::i;:::-;-1:-1:-1::0;;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;-1:-1:-1;;25945:511:21:o;1239:152:13:-;1280:32;;-1:-1:-1;;;1280:32:13;;1301:10;1280:32;;;548:51:70;1280:4:13;-1:-1:-1;;;;;1280:20:13;;;;521:18:70;;1280:32:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1275:91;;1333:33;;-1:-1:-1;;;1333:33:13;;;;;;;;;;;1275:91;1376:8;:6;:8::i;74737:175:21:-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;-1:-1:-1;;;;;74863:35:21::1;;::::0;;;:23:::1;:35;::::0;;;;:42;;-1:-1:-1;;74863:42:21::1;74901:4;74863:42;::::0;;74737:175::o;9522:1162::-;9736:7;1239:19:56;:17;:19::i;:::-;7114:7:21::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;::::1;-1:-1:-1::0;;7190:14:21;;::::1;;::::0;;;;-1:-1:-1;;;7658:12:21;::::2;-1:-1:-1::0;;;;;7658:12:21::2;7644:10;:26;7640:66;;7679:27;;-1:-1:-1::0;;;7679:27:21::2;;;;;;;;;;;7640:66;9923:21:::3;9947:15;-1:-1:-1::0;;;;;9947:33:21::3;;9994:14;10035:4;-1:-1:-1::0;;;;;10022:43:21::3;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9947:130;::::0;-1:-1:-1;;;;;;9947:130:21::3;::::0;;;;;;::::3;::::0;::::3;15328:25:70::0;;;;15369:18;;;15362:34;15301:18;;9947:130:21::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10167:67;::::0;-1:-1:-1;;;10167:67:21;;::::3;::::0;::::3;15837:25:70::0;;;-1:-1:-1;;;;;15898:32:70;;;15878:18;;;15871:60;9923:154:21;;-1:-1:-1;10180:4:21::3;10167:36:::0;;::::3;::::0;::::3;::::0;15810:18:70;;10167:67:21::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;10353:48;10375:10;10387:13;10353:21;:48::i;:::-;-1:-1:-1::0;;;;;10527:31:21;::::3;;::::0;;;:16:::3;:31;::::0;;;;10561:1:::3;10527:35:::0;;7225:15;;-1:-1:-1;;7225:15:21::1;::::0;;10527:31;9522:1162;-1:-1:-1;;;9522:1162:21:o;69977:624::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;70257:5:::1;:32:::0;;::::1;70519:62:::0;;::::1;-1:-1:-1::0;;;70519:62:21::1;-1:-1:-1::0;;70444:52:21;;::::1;-1:-1:-1::0;;;70444:52:21::1;-1:-1:-1::0;;70373:48:21;;::::1;-1:-1:-1::0;;;70373:48:21::1;70444:52:::0;;;;-1:-1:-1;;70312:38:21;;::::1;::::0;::::1;-1:-1:-1::0;;70312:38:21;;;70257:32;;;::::1;70312:38:::0;;;;::::1;70444:52:::0;;;;;;;;;;;::::1;70519:62;::::0;;;::::1;::::0;;69977:624::o;18359:4616::-;18589:25;1239:19:56;:17;:19::i;:::-;7114:7:21::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;::::1;-1:-1:-1::0;;7190:14:21;;::::1;;::::0;;;;-1:-1:-1;;;7658:12:21;::::2;-1:-1:-1::0;;;;;7658:12:21::2;7644:10;:26;7640:66;;7679:27;;-1:-1:-1::0;;;7679:27:21::2;;;;;;;;;;;7640:66;18644:22:::3;18680:33:::0;18727:30:::3;18770:42;18798:13;18770:27;:42::i;:::-;18630:182;;;;;;18823:26;18863:8;18859:3900;;;18907:23;18924:6:::0;18907:14;:23:::3;:::i;:::-;18887:43;;19087:198;19128:14;19160:6;19184:22;19224:25;19267:4;19087:23;:198::i;:::-;19380:59;::::0;-1:-1:-1;;;19380:59:21;;::::3;::::0;::::3;15837:25:70::0;;;-1:-1:-1;;;;;15898:32:70;;;15878:18;;;15871:60;19066:219:21;;-1:-1:-1;19393:4:21::3;19380:36:::0;;::::3;::::0;::::3;::::0;15810:18:70;;19380:59:21::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;18859:3900;;;19537:23;19683:14:::0;19639:25;19564:55:::3;19597:22:::0;19683:14;19564:55:::3;:::i;:::-;19563:101;;;;:::i;:::-;:134;;;;:::i;:::-;19836:5;:17:::0;19537:160;;-1:-1:-1;19800:14:21::3;::::0;139:3:47::3;::::0;19818:35:21::3;::::0;19817:73:::3;19836:17;19537:160:::0;19818:35:::3;:::i;:::-;19817:73;;;;:::i;:::-;19800:90:::0;-1:-1:-1;19932:24:21::3;19800:90:::0;19932:15;:24:::3;:::i;:::-;19922:6;:34;19918:2831;;20277:6:::0;20248;20173:52:::3;20210:15:::0;20173:14;:52:::3;:::i;:::-;:81;;;;:::i;:::-;:110;;;;:::i;:::-;20354:146;::::0;-1:-1:-1;;;20354:146:21;;20133:150;;-1:-1:-1;;;;;;20354:42:21;::::3;::::0;::::3;::::0;:146:::3;::::0;20418:10:::3;::::0;20450:4:::3;::::0;20476:6;;20354:146:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;20616:4;-1:-1:-1::0;;;;;20603:37:21::3;;20689:6;20671:15;20662:6;:24;;;;:::i;:::-;:33;;;;:::i;:::-;20603:161;::::0;-1:-1:-1;;;;;;20603:161:21::3;::::0;;;;;;::::3;::::0;::::3;3481:25:70::0;;;;3522:18;;;3515:34;;;20745:1:21::3;3565:18:70::0;;;3558:34;3454:18;;20603:161:21::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;21071:4;-1:-1:-1::0;;;;;21058:64:21::3;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21037:87;;19918:2831;;;21564:5;:17:::0;21465:24:::3;::::0;21544:37:::3;::::0;21564:17:::3;;139:3:47;21544:37:21;:::i;:::-;21492:90;;21493:26;139:3:47;21493:6:21::0;:26:::3;:::i;:::-;21492:90;;;;:::i;:::-;21465:117:::0;-1:-1:-1;21600:20:21::3;21623:25;21465:117:::0;21623:6;:25:::3;:::i;:::-;21600:48;;21801:14;21781:34;;21901:13;-1:-1:-1::0;;;;;21886:42:21::3;;21950:10;21982:4;22008:6;21886:146;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;22135:57:21::3;::::0;-1:-1:-1;;;22135:57:21;;22173:1:::3;22135:57;::::0;::::3;3481:25:70::0;;;3522:18;;;3515:34;;;3565:18;;;3558:34;22148:4:21::3;-1:-1:-1::0;;;;;22135:37:21::3;::::0;-1:-1:-1;22135:37:21::3;::::0;-1:-1:-1;3454:18:70;;22135:57:21::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;22501:233;22546:14;22582:16;22620:22;22664:25;22711:5;22501:23;:233::i;:::-;22480:254;;21158:1591;;19918:2831;19469:3290;;18859:3900;22832:119;::::0;-1:-1:-1;;;22832:119:21;;::::3;::::0;::::3;15328:25:70::0;;;15369:18;;;15362:34;;;-1:-1:-1;;;;;22832:46:21;::::3;::::0;::::3;::::0;15301:18:70;;22832:119:21::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;-1:-1:-1;18359:4616:21;;;-1:-1:-1;;;;;;;;18359:4616:21:o;37397:210::-;7402:10;7425:1;7384:29;;;:17;:29;;;;;;-1:-1:-1;;;;;7384:29:21;:43;:85;;;;-1:-1:-1;7457:12:21;;-1:-1:-1;;;7457:12:21;;-1:-1:-1;;;;;7457:12:21;7443:10;:26;;7384:85;7367:157;;;7487:37;;-1:-1:-1;;;7487:37:21;;;;;;;;;;;7367:157;7114:7:::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;-1:-1:-1;;7190:14:21::1;;;::::0;;37565:35:::2;37586:13:::0;37565:20:::2;:35::i;:::-;-1:-1:-1::0;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;37397:210::o;75351:252::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;75479:18:::1;:40:::0;;-1:-1:-1;;;;;;75479:40:21::1;-1:-1:-1::0;;;;;75479:40:21;::::1;::::0;;::::1;::::0;;;75547:36:::1;::::0;::::1;::::0;-1:-1:-1;;75547:36:21::1;75351:252:::0;:::o;72420:170::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;72538:18:::1;:32:::0;72420:170::o;75047:180::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;-1:-1:-1;;;;;75177:35:21::1;75215:5;75177:35:::0;;;:23:::1;:35;::::0;;;;:43;;-1:-1:-1;;75177:43:21::1;::::0;;75047:180::o;71023:838::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;71295:10:::1;-1:-1:-1::0;;;;;71286:19:21::1;:5;-1:-1:-1::0;;;;;71286:19:21::1;::::0;71282:573:::1;;71346:5;:41:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;71346:41:21::1;-1:-1:-1::0;;;;;71346:41:21;;::::1;;::::0;;73446:621;;:::o;71282:573::-:1;71431:17;71451:20;71465:5;71451:13;:20::i;:::-;71431:40;;71506:9;71519:1;71506:14:::0;71502:53:::1;;71529:26;;-1:-1:-1::0;;;71529:26:21::1;;;;;;;;;;;71502:53;71716:37;::::0;;;:26:::1;:37;::::0;;;;;;-1:-1:-1;;;;;71716:57:21::1;-1:-1:-1::0;;;71827:3:21::1;71794:36:::0;;;;71715:116:::1;71659:172:::0;;71023:838;;:::o;67907:143::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;68014:16:::1;68024:5;68014:9;:16::i;72743:202::-:0;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;72874:28:::1;:50:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;72874:50:21;;::::1;::::0;;;::::1;::::0;;72743:202::o;74433:179::-;7849:18;;-1:-1:-1;;;;;7849:18:21;7835:10;:32;7831:90;;7888:33;;-1:-1:-1;;;7888:33:21;;;;;;;;;;;7831:90;74557:5:::1;:48:::0;;-1:-1:-1;;;;;74557:48:21;;::::1;-1:-1:-1::0;;;74557:48:21::1;::::0;;;::::1;::::0;;;::::1;::::0;;74433:179::o;26614:402::-;1662:4:56;1685:7;;;7999:9:21;:33;;;-1:-1:-1;8012:20:21;;;;;;;7999:33;7991:62;;;;-1:-1:-1;;;7991:62:21;;;;;;;:::i;:::-;7114:7:::1;::::0;::::1;::::0;::::1;;;7110:70;;;7144:25;;-1:-1:-1::0;;;7144:25:21::1;;;;;;;;;;;7110:70;7190:7;:14:::0;;::::1;-1:-1:-1::0;;7190:14:21;;::::1;;::::0;;;;-1:-1:-1;;;7658:12:21;::::2;-1:-1:-1::0;;;;;7658:12:21::2;7644:10;:26;7640:66;;7679:27;;-1:-1:-1::0;;;7679:27:21::2;;;;;;;;;;;7640:66;26825:21:::3;26849:30;26874:4;26849:24;:30::i;:::-;-1:-1:-1::0;;;;;26908:20:21;::::3;;::::0;;;:14:::3;:20;::::0;;;;26901:27;;-1:-1:-1;;;;;;26901:27:21::3;::::0;;26825:54;-1:-1:-1;26952:40:21::3;26974:2:::0;26825:54;26952:21:::3;:40::i;:::-;-1:-1:-1::0;;7235:5:21::1;7225:15:::0;;-1:-1:-1;;7225:15:21::1;::::0;;-1:-1:-1;26614:402:21:o;59875:1121::-;59988:13;60003:27;60119:9;60132:1;60119:14;60115:875;;-1:-1:-1;;60217:5:21;:18;60157:10;;-1:-1:-1;;;60217:18:21;;;;;;-1:-1:-1;59875:1121:21:o;60115:875::-;60469:33;60505:67;;;:26;:67;;;;;;;-1:-1:-1;60505:67:21;60894:72;1527:3;60895:42;;;60894:70;:72::i;:::-;60871:95;;60252:738;59875:1121;;;:::o;61139:282::-;-1:-1:-1;;;;;61292:24:21;;;61253:14;61292:24;;;:14;:24;;;;;;;;61339:62;;61372:29;;-1:-1:-1;;;61372:29:21;;;;;;;;;;;61339:62;61139:282;;;:::o;48904:360::-;49035:4;7658:12;;-1:-1:-1;;;7658:12:21;;-1:-1:-1;;;;;7658:12:21;7644:10;:26;7640:66;;7679:27;;-1:-1:-1;;;7679:27:21;;;;;;;;;;;7640:66;49055:13:::1;1685:7:56::0;;;;49107:43:21;::::1;;;-1:-1:-1::0;;;;;;49119:31:21;::::1;;::::0;;;:23:::1;:31;::::0;;;;;::::1;;49107:43;49103:116;;;49166:20;:28:::0;;-1:-1:-1;;49166:28:21::1;::::0;;::::1;;;;::::0;;49103:116:::1;49235:8:::0;-1:-1:-1;7716:1:21::1;48904:360:::0;;;;:::o;64784:198::-;64884:12;64929:10;-1:-1:-1;;;;;64920:19:21;:5;-1:-1:-1;;;;;64920:19:21;;64919:56;;-1:-1:-1;;;;;64947:28:21;;;;;;:21;:28;;;;;;64919:56;;;64943:1;64912:63;64784:198;-1:-1:-1;;64784:198:21:o;47392:486::-;47487:15;47654:17;47674:20;47688:5;47674:13;:20::i;:::-;-1:-1:-1;;;;;47708:31:21;;;;;;:16;:31;;;;;;47654:40;;-1:-1:-1;47708:43:21;;:48;47704:168;;-1:-1:-1;;;;;47772:31:21;;;;;;:16;:31;;;;;:45;;47807:10;;47772:45;;;-1:-1:-1;;;47704:168:21;47508:370;47392:486;;;;:::o;51993:576::-;52175:12;:36;;;;;52200:11;-1:-1:-1;;;;;52191:20:21;:5;-1:-1:-1;;;;;52191:20:21;;52175:36;52171:392;;;52227:132;;-1:-1:-1;;;52227:132:21;;-1:-1:-1;;;;;52227:42:21;;;;;:132;;52287:5;;52310:11;;52339:6;;52227:132;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52386:48:21;;-1:-1:-1;;;52386:48:21;;-1:-1:-1;;;;;17359:32:70;;;52386:48:21;;;17341:51:70;17408:18;;;17401:34;;;52399:11:21;52386:36;;-1:-1:-1;52386:36:21;;-1:-1:-1;17314:18:70;;52386:48:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52171:392;;;52478:61;;-1:-1:-1;;;52478:61:21;;-1:-1:-1;;;;;52478:42:21;;;;;:61;;52521:5;;52528:2;;52532:6;;52478:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52171:392;51993:576;;;;;:::o;974:241:62:-;1112:96;1132:5;1162:27;;;1191:4;1197:2;1201:5;1139:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1139:68:62;;;;;;;;;;;;;;-1:-1:-1;;;;;1139:68:62;-1:-1:-1;;;;;;1139:68:62;;;;;;;;;;1112:19;:96::i;:::-;974:241;;;;:::o;49818:1842:21:-;50164:1;50377:1277;50397:17;50384:9;:30;50377:1277;;50550:29;;;:34;50546:918;;50605:13;50624:33;50647:9;50624:22;:33::i;:::-;-1:-1:-1;50705:38:21;;-1:-1:-1;;;50705:38:21;;-1:-1:-1;;;;;566:32:70;;;50705:38:21;;;548:51:70;50604:53:21;;-1:-1:-1;50688:14:21;;50705:23;;;;;521:18:70;;50705:38:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50688:55;;50787:1;50778:6;:10;50774:676;;;51161:235;51209:13;51252:5;51287:2;51328:1;51319:6;:10;51359:11;51161:18;:235::i;:::-;50586:878;;50546:918;51629:1;51616:14;50377:1277;;43372:562;-1:-1:-1;;;;;43481:31:21;;43454:24;43481:31;;;:16;:31;;;;;;;43551:36;43481:31;43551:18;:36::i;:::-;43623:28;;43522:65;;-1:-1:-1;43623:28:21;;;;;43602:49;;43598:330;;;43667:16;43686:30;43699:16;43686:12;:30::i;:::-;:34;;43719:1;43686:34;:::i;:::-;43667:53;;43735:182;43775:13;43806:16;43840:18;43876:1;43895:8;43735:22;:182::i;43598:330::-;43444:490;;43372:562;:::o;63534:560::-;63654:22;63690:33;63737:30;63824:13;-1:-1:-1;;;;;63809:44:21;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63792:63;;63924:13;-1:-1:-1;;;;;63909:64:21;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63881:94;;64039:4;-1:-1:-1;;;;;64026:43:21;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63534:560;;;;-1:-1:-1;;63534:560:21:o;2433:117:56:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:15:::0;;-1:-1:-1;;2491:15:56::1;::::0;;2521:22:::1;719:10:66::0;2530:12:56::1;2521:22;::::0;-1:-1:-1;;;;;566:32:70;;;548:51;;536:2;521:18;2521:22:56::1;;;;;;;2433:117::o:0;28954:1067:21:-;29423:149;;;-1:-1:-1;;;;;17359:32:70;;;29423:149:21;;;17341:51:70;17408:18;;;;17401:34;;;29423:149:21;;;;;;;;;;17314:18:70;;;;29423:149:21;;;;;;;-1:-1:-1;;;;;29423:149:21;-1:-1:-1;;;29423:149:21;;;29345:241;;-1:-1:-1;;;29345:241:21;;-1:-1:-1;;29345:37:21;;;;;:241;;29400:5;;29345:241;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29345:241:21;;;;;;;;;;;;:::i;:::-;;;29329:419;;;29643:13;;:18;;:56;;;29676:6;29665:26;;;;;;;;;;;;:::i;:::-;:34;;29695:4;29665:34;29643:56;29639:89;;;29724:4;29717:11;;;;;29639:89;29595:144;29329:419;29943:14;29939:53;;;29966:26;;-1:-1:-1;;;29966:26:21;;;;;;;;;;;29939:53;-1:-1:-1;30009:5:21;28954:1067;;;;;;;;:::o;32287:653::-;32386:17;32406:20;32420:5;32406:13;:20::i;:::-;32386:40;-1:-1:-1;32575:14:21;;;:53;;-1:-1:-1;32593:18:21;;:30;;:35;;32575:53;32571:104;;;32649:26;;-1:-1:-1;;;32649:26:21;;;;;;;;;;;32571:104;-1:-1:-1;;;;;32814:31:21;;;;;;:16;:31;;;;;;:43;;:48;;32810:110;;-1:-1:-1;;;;;32876:31:21;;;;;;:16;:31;;;;;:44;;;;;;32376:564;32287:653;;:::o;37730:5101::-;37832:5;:17;-1:-1:-1;;;;;37887:31:21;;;37802:27;37887:31;;;:16;:31;;;;;;-1:-1:-1;;;37832:17:21;;;;;;;37887:31;37802:27;;38282:47;37887:31;38282:32;:47::i;:::-;38378:138;;-1:-1:-1;;;38378:138:21;;139:3:47;38421:53:21;;38378:138;;;15837:25:70;-1:-1:-1;;;;;38492:10:21;15898:32:70;;15878:18;;;15871:60;38421:53:21;;-1:-1:-1;38378:25:21;;;;-1:-1:-1;38378:25:21;;-1:-1:-1;15810:18:70;;38378:138:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38344:172;;38537:30;38550:16;38537:12;:30::i;:::-;38570:1;38537:34;38531:40;;37998:584;38592:17;38619:14;38643:31;38690:9;38685:4093;38705:3;38701:1;:7;38685:4093;;;39108:6;;:27;;39121:1;39127:7;;;39121:14;39108:27;;;39117:1;39108:27;39096:39;-1:-1:-1;39232:28:21;;;:33;39228:3480;;39307:13;39342:27;39390:33;39413:9;39390:22;:33::i;:::-;39459:38;;-1:-1:-1;;;39459:38:21;;-1:-1:-1;;;;;566:32:70;;;39459:38:21;;;548:51:70;39285:138:21;;-1:-1:-1;39285:138:21;;-1:-1:-1;39441:15:21;;39459:23;;;;;521:18:70;;39459:38:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39441:56;;39618:1;39608:7;:11;39604:3090;;;39677:41;;-1:-1:-1;;;39677:41:21;;;;;15837:25:70;;;-1:-1:-1;;;;;15898:32:70;;;15878:18;;;15871:60;39677:88:21;;;;:25;;;;;;15810:18:70;;39677:41:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:88;;;;:::i;:::-;39643:122;;;;:::i;:::-;;;40096:31;40086:6;:41;40082:2194;;40732:26;40761:90;40809:16;40761:18;:90::i;:::-;40902:28;;40732:119;;-1:-1:-1;40902:28:21;;;;;40881:49;;40877:1331;;;41006:740;41066:13;41117:16;41171:18;41403:1;41711;41705:3;:7;41006:22;:740::i;:::-;40877:1331;;;41956:26;41952:230;;;-1:-1:-1;;;;;42018:101:21;;;;;;:16;:101;;;;;:120;;;41952:230;42234:7;;;;;;;;;;;;37730:5101;:::o;40082:2194::-;39604:3090;;;42565:29;;;;42658:4;;-1:-1:-1;39604:3090:21;39267:3441;;;39228:3480;42750:3;;38685:4093;;;;42794:30;;-1:-1:-1;;;42794:30:21;;;;;;;;;;;1767:106:56;1662:4;1685:7;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:56;;;;;;;:::i;2186:115::-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:56::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:66::0;;640:96;52803:318:21;-1:-1:-1;;;;;52910:22:21;;;;:64;;-1:-1:-1;;;;;;52936:24:21;;;52972:1;52936:24;;;:14;:24;;;;;;;:38;;52910:64;52906:134;;;52995:45;;-1:-1:-1;;;52995:45:21;;;;;;;;;;;52906:134;-1:-1:-1;;;;;53062:24:21;;;;;;;:14;:24;;;;;:40;;-1:-1:-1;;;;;;53062:40:21;;;;;;;;52803:318::o;23956:1686::-;24171:26;24213:10;24209:1427;;;24600:25;24628:22;24645:5;24628:14;:22;:::i;:::-;24600:50;-1:-1:-1;24917:43:21;24955:5;1567;24917:43;:::i;:::-;24875:19;24837:14;24798:36;24816:18;1567:5;24798:36;:::i;:::-;:53;;;;:::i;:::-;24797:97;;;;:::i;:::-;:163;;;;:::i;:::-;1567:5;24688:54;24725:17;24688:18;:54;:::i;:::-;:88;;;;:::i;:::-;24687:274;;;;:::i;:::-;24665:297;;24225:748;24209:1427;;;25610:14;25567:19;25541:23;25559:5;1567;25541:23;:::i;:::-;:45;;;;:::i;:::-;25540:84;;;;:::i;:::-;25461:56;25499:18;1567:5;25461:56;:::i;:::-;:163;;;;:::i;:::-;25421:19;25382:36;25400:18;1567:5;25382:36;:::i;:::-;:58;;;;:::i;:::-;25381:244;;;;:::i;:::-;25344:281;23956:1686;-1:-1:-1;;;;;;23956:1686:21:o;68143:906::-;-1:-1:-1;;;;;68285:28:21;;68316:1;68285:28;;;:21;:28;;;;;;:32;68281:85;;68338:28;;-1:-1:-1;;;68338:28:21;;;;;;;;;;;68281:85;68602:3;68577:21;;:28;68573:65;;68614:24;;-1:-1:-1;;;68614:24:21;;;;;;;;;;;68573:65;68826:21;;;-1:-1:-1;;;;;68857:28:21;;68801:17;68857:28;;;:21;:28;;;;;;;;68821:1;:26;;;68857:40;;;;68920:37;;;:26;:37;;;;;:63;;;;69006:23;;68821:26;;68826:21;69006:23;;;:::i;:::-;;;;;;68186:863;68143:906;:::o;16288:187:68:-;16344:6;16379:16;16370:25;;;16362:76;;;;-1:-1:-1;;;16362:76:68;;17788:2:70;16362:76:68;;;17770:21:70;17827:2;17807:18;;;17800:30;17866:34;17846:18;;;17839:62;-1:-1:-1;;;17917:18:70;;;17910:36;17963:19;;16362:76:68;17586:402:70;16362:76:68;-1:-1:-1;16462:5:68;16288:187::o;3747:706:62:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:62;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:62;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:62;;18195:2:70;4351:85:62;;;18177:21:70;18234:2;18214:18;;;18207:30;18273:34;18253:18;;;18246:62;-1:-1:-1;;;18324:18:70;;;18317:40;18374:19;;4351:85:62;17993:406:70;44114:764:21;44215:26;44700:162;44707:20;;44700:162;;44788:1;44826:21;;;;44769:20;44747:42;44700:162;;65194:646;65253:13;65282:4;65290:1;65282:9;65278:23;;-1:-1:-1;65300:1:21;;65194:646;-1:-1:-1;65194:646:21:o;65278:23::-;65488:3;65515:1;65527:307;65578:1;65563:10;65570:3;65563:4;:10;:::i;:::-;65562:17;;;-1:-1:-1;65612:1:21;:10;;65641:15;;;:20;;;;:44;;-1:-1:-1;65683:1:21;65666:13;;;:18;65641:44;65637:55;;;65687:5;;;65637:55;65723:4;65711:8;:16;65707:117;;65754:5;65747:12;;65707:117;;;65804:5;65798:11;;65707:117;65540:294;65527:307;;;65268:572;;65194:646;;;:::o;45437:1356::-;45952:8;45935:794;45966:8;45962:1;:12;45935:794;;;46016:1;:6;;46044:28;;;:33;46040:653;;46102:13;46121:33;46144:9;46121:22;:33::i;:::-;-1:-1:-1;46194:38:21;;-1:-1:-1;;;46194:38:21;;-1:-1:-1;;;;;566:32:70;;;46194:38:21;;;548:51:70;46101:53:21;;-1:-1:-1;46176:15:21;;46194:23;;;;;521:18:70;;46194:38:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46176:56;;46270:1;46259:7;:12;46255:420;;46455:28;;46299:29;;;;-1:-1:-1;;46354:20:21;;;;46455:28;;;;;;46433:50;;46400:253;;-1:-1:-1;;;;;;;;46540:31:21;;;;;;:16;:31;;;;;:50;;;-1:-1:-1;46620:7:21;;46400:253;46079:614;;46040:653;-1:-1:-1;46711:3:21;;45935:794;;;;46755:31;;-1:-1:-1;;;46755:31:21;;;;;;;;;;;1945:106:56;1662:4;1685:7;;;2003:41;;;;-1:-1:-1;;;2003:41:56;;18606:2:70;2003:41:56;;;18588:21:70;18645:2;18625:18;;;18618:30;-1:-1:-1;;;18664:18:70;;;18657:50;18724:18;;2003:41:56;18404:344:70;3873:223:65;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4006;5241;5255:23;5282:6;-1:-1:-1;;;;;5282:11:65;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:65:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:10;:17;7722:1;7701:22;7697:286;;-1:-1:-1;;;;;1465:19:65;;;7908:60;;;;-1:-1:-1;;;7908:60:65;;19654:2:70;7908:60:65;;;19636:21:70;19693:2;19673:18;;;19666:30;19732:31;19712:18;;;19705:59;19781:18;;7908:60:65;19452:353:70;7908:60:65;-1:-1:-1;8003:10:65;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:65;;;;;;;;:::i;14:131:70:-;-1:-1:-1;;;;;89:31:70;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;610:388::-;678:6;686;739:2;727:9;718:7;714:23;710:32;707:52;;;755:1;752;745:12;707:52;794:9;781:23;813:31;838:5;813:31;:::i;:::-;863:5;-1:-1:-1;920:2:70;905:18;;892:32;933:33;892:32;933:33;:::i;:::-;985:7;975:17;;;610:388;;;;;:::o;1195:180::-;1254:6;1307:2;1295:9;1286:7;1282:23;1278:32;1275:52;;;1323:1;1320;1313:12;1275:52;-1:-1:-1;1346:23:70;;1195:180;-1:-1:-1;1195:180:70:o;1670:154::-;1749:20;;1798:1;1788:12;;1778:40;;1814:1;1811;1804:12;1829:118;1915:5;1908:13;1901:21;1894:5;1891:32;1881:60;;1937:1;1934;1927:12;1952:908;2081:6;2089;2097;2105;2113;2121;2129;2182:3;2170:9;2161:7;2157:23;2153:33;2150:53;;;2199:1;2196;2189:12;2150:53;2238:9;2225:23;2257:31;2282:5;2257:31;:::i;:::-;2307:5;-1:-1:-1;2331:49:70;2376:2;2361:18;;2331:49;:::i;:::-;2321:59;;2427:2;2416:9;2412:18;2399:32;2389:42;;2483:2;2472:9;2468:18;2455:32;2496:33;2521:7;2496:33;:::i;:::-;2548:7;-1:-1:-1;2607:3:70;2592:19;;2579:33;2621;2579;2621;:::i;:::-;2673:7;-1:-1:-1;2727:3:70;2712:19;;2699:33;;-1:-1:-1;2784:3:70;2769:19;;2756:33;2798:30;2756:33;2798:30;:::i;:::-;2847:7;2837:17;;;1952:908;;;;;;;;;;:::o;3603:598::-;3689:6;3697;3705;3713;3766:3;3754:9;3745:7;3741:23;3737:33;3734:53;;;3783:1;3780;3773:12;3734:53;3822:9;3809:23;3841:31;3866:5;3841:31;:::i;:::-;3891:5;-1:-1:-1;3948:2:70;3933:18;;3920:32;3961:33;3920:32;3961:33;:::i;:::-;4013:7;-1:-1:-1;4072:2:70;4057:18;;4044:32;4085:33;4044:32;4085:33;:::i;:::-;3603:598;;;;-1:-1:-1;4137:7:70;;4191:2;4176:18;4163:32;;-1:-1:-1;;3603:598:70:o;4206:421::-;4311:6;4319;4327;4335;4388:3;4376:9;4367:7;4363:23;4359:33;4356:53;;;4405:1;4402;4395:12;4356:53;4441:9;4428:23;4418:33;;4470:49;4515:2;4504:9;4500:18;4470:49;:::i;:::-;4206:421;;4460:59;;-1:-1:-1;;;;4566:2:70;4551:18;;4538:32;;4617:2;4602:18;4589:32;;4206:421::o;5028:667::-;5123:6;5131;5139;5147;5155;5208:3;5196:9;5187:7;5183:23;5179:33;5176:53;;;5225:1;5222;5215:12;5176:53;5264:9;5251:23;5283:31;5308:5;5283:31;:::i;:::-;5333:5;-1:-1:-1;5390:2:70;5375:18;;5362:32;5403:33;5362:32;5403:33;:::i;:::-;5455:7;-1:-1:-1;5514:2:70;5499:18;;5486:32;5527:33;5486:32;5527:33;:::i;:::-;5028:667;;;;-1:-1:-1;5579:7:70;;5633:2;5618:18;;5605:32;;-1:-1:-1;5684:3:70;5669:19;5656:33;;5028:667;-1:-1:-1;;5028:667:70:o;5700:127::-;5761:10;5756:3;5752:20;5749:1;5742:31;5792:4;5789:1;5782:15;5816:4;5813:1;5806:15;5832:275;5903:2;5897:9;5968:2;5949:13;;-1:-1:-1;;5945:27:70;5933:40;;6003:18;5988:34;;6024:22;;;5985:62;5982:88;;;6050:18;;:::i;:::-;6086:2;6079:22;5832:275;;-1:-1:-1;5832:275:70:o;6112:186::-;6160:4;6193:18;6185:6;6182:30;6179:56;;;6215:18;;:::i;:::-;-1:-1:-1;6281:2:70;6260:15;-1:-1:-1;;6256:29:70;6287:4;6252:40;;6112:186::o;6303:947::-;6389:6;6397;6405;6458:2;6446:9;6437:7;6433:23;6429:32;6426:52;;;6474:1;6471;6464:12;6426:52;6513:9;6500:23;6532:31;6557:5;6532:31;:::i;:::-;6582:5;-1:-1:-1;6639:2:70;6624:18;;6611:32;6652:33;6611:32;6652:33;:::i;:::-;6704:7;-1:-1:-1;6762:2:70;6747:18;;6734:32;6789:18;6778:30;;6775:50;;;6821:1;6818;6811:12;6775:50;6844:22;;6897:4;6889:13;;6885:27;-1:-1:-1;6875:55:70;;6926:1;6923;6916:12;6875:55;6962:2;6949:16;6987:48;7003:31;7031:2;7003:31;:::i;:::-;6987:48;:::i;:::-;7058:2;7051:5;7044:17;7098:7;7093:2;7088;7084;7080:11;7076:20;7073:33;7070:53;;;7119:1;7116;7109:12;7070:53;7174:2;7169;7165;7161:11;7156:2;7149:5;7145:14;7132:45;7218:1;7213:2;7208;7201:5;7197:14;7193:23;7186:34;7239:5;7229:15;;;;;6303:947;;;;;:::o;7255:250::-;7340:1;7350:113;7364:6;7361:1;7358:13;7350:113;;;7440:11;;;7434:18;7421:11;;;7414:39;7386:2;7379:10;7350:113;;;-1:-1:-1;;7497:1:70;7479:16;;7472:27;7255:250::o;7510:270::-;7551:3;7589:5;7583:12;7616:6;7611:3;7604:19;7632:76;7701:6;7694:4;7689:3;7685:14;7678:4;7671:5;7667:16;7632:76;:::i;:::-;7762:2;7741:15;-1:-1:-1;;7737:29:70;7728:39;;;;7769:4;7724:50;;7510:270;-1:-1:-1;;7510:270:70:o;7785:217::-;7932:2;7921:9;7914:21;7895:4;7952:44;7992:2;7981:9;7977:18;7969:6;7952:44;:::i;:::-;7944:52;7785:217;-1:-1:-1;;;7785:217:70:o;8389:315::-;8457:6;8465;8518:2;8506:9;8497:7;8493:23;8489:32;8486:52;;;8534:1;8531;8524:12;8486:52;8570:9;8557:23;8547:33;;8630:2;8619:9;8615:18;8602:32;8643:31;8668:5;8643:31;:::i;8709:159::-;8776:20;;8836:6;8825:18;;8815:29;;8805:57;;8858:1;8855;8848:12;8873:474;8963:6;8971;8979;8987;8995;9048:3;9036:9;9027:7;9023:23;9019:33;9016:53;;;9065:1;9062;9055:12;9016:53;9088:28;9106:9;9088:28;:::i;:::-;9078:38;;9135:37;9168:2;9157:9;9153:18;9135:37;:::i;:::-;9125:47;;9191:37;9224:2;9213:9;9209:18;9191:37;:::i;:::-;9181:47;;9247:37;9280:2;9269:9;9265:18;9247:37;:::i;:::-;9237:47;;9303:38;9336:3;9325:9;9321:19;9303:38;:::i;:::-;9293:48;;8873:474;;;;;;;;:::o;9352:450::-;9426:6;9434;9442;9495:2;9483:9;9474:7;9470:23;9466:32;9463:52;;;9511:1;9508;9501:12;9463:52;9550:9;9537:23;9569:31;9594:5;9569:31;:::i;:::-;9619:5;-1:-1:-1;9671:2:70;9656:18;;9643:32;;-1:-1:-1;9727:2:70;9712:18;;9699:32;9740:30;9699:32;9740:30;:::i;:::-;9789:7;9779:17;;;9352:450;;;;;:::o;10557:319::-;10624:6;10632;10685:2;10673:9;10664:7;10660:23;10656:32;10653:52;;;10701:1;10698;10691:12;10653:52;10740:9;10727:23;10759:31;10784:5;10759:31;:::i;:::-;10809:5;-1:-1:-1;10833:37:70;10866:2;10851:18;;10833:37;:::i;:::-;10823:47;;10557:319;;;;;:::o;11114:269::-;11171:6;11224:2;11212:9;11203:7;11199:23;11195:32;11192:52;;;11240:1;11237;11230:12;11192:52;11279:9;11266:23;11329:4;11322:5;11318:16;11311:5;11308:27;11298:55;;11349:1;11346;11339:12;11388:382;11453:6;11461;11514:2;11502:9;11493:7;11489:23;11485:32;11482:52;;;11530:1;11527;11520:12;11482:52;11569:9;11556:23;11588:31;11613:5;11588:31;:::i;:::-;11638:5;-1:-1:-1;11695:2:70;11680:18;;11667:32;11708:30;11667:32;11708:30;:::i;11775:340::-;11977:2;11959:21;;;12016:2;11996:18;;;11989:30;-1:-1:-1;;;12050:2:70;12035:18;;12028:46;12106:2;12091:18;;11775:340::o;12120:127::-;12181:10;12176:3;12172:20;12169:1;12162:31;12212:4;12209:1;12202:15;12236:4;12233:1;12226:15;12252:184;12322:6;12375:2;12363:9;12354:7;12350:23;12346:32;12343:52;;;12391:1;12388;12381:12;12343:52;-1:-1:-1;12414:16:70;;12252:184;-1:-1:-1;12252:184:70:o;12441:127::-;12502:10;12497:3;12493:20;12490:1;12483:31;12533:4;12530:1;12523:15;12557:4;12554:1;12547:15;12573:125;12638:9;;;12659:10;;;12656:36;;;12672:18;;:::i;12703:168::-;12776:9;;;12807;;12824:15;;;12818:22;;12804:37;12794:71;;12845:18;;:::i;12876:217::-;12916:1;12942;12932:132;;12986:10;12981:3;12977:20;12974:1;12967:31;13021:4;13018:1;13011:15;13049:4;13046:1;13039:15;12932:132;-1:-1:-1;13078:9:70;;12876:217::o;13098:128::-;13165:9;;;13186:11;;;13183:37;;;13200:18;;:::i;13231:245::-;13298:6;13351:2;13339:9;13330:7;13326:23;13322:32;13319:52;;;13367:1;13364;13357:12;13319:52;13399:9;13393:16;13418:28;13440:5;13418:28;:::i;13933:245::-;14012:6;14020;14073:2;14061:9;14052:7;14048:23;14044:32;14041:52;;;14089:1;14086;14079:12;14041:52;-1:-1:-1;;14112:16:70;;14168:2;14153:18;;;14147:25;14112:16;;14147:25;;-1:-1:-1;13933:245:70:o;14183:314::-;-1:-1:-1;;;;;14358:32:70;;14340:51;;14427:2;14422;14407:18;;14400:30;;;-1:-1:-1;;14447:44:70;;14472:18;;14464:6;14447:44;:::i;14502:647::-;14581:6;14634:2;14622:9;14613:7;14609:23;14605:32;14602:52;;;14650:1;14647;14640:12;14602:52;14683:9;14677:16;14716:18;14708:6;14705:30;14702:50;;;14748:1;14745;14738:12;14702:50;14771:22;;14824:4;14816:13;;14812:27;-1:-1:-1;14802:55:70;;14853:1;14850;14843:12;14802:55;14882:2;14876:9;14907:48;14923:31;14951:2;14923:31;:::i;14907:48::-;14978:2;14971:5;14964:17;15018:7;15013:2;15008;15004;15000:11;14996:20;14993:33;14990:53;;;15039:1;15036;15029:12;14990:53;15052:67;15116:2;15111;15104:5;15100:14;15095:2;15091;15087:11;15052:67;:::i;15407:251::-;15477:6;15530:2;15518:9;15509:7;15505:23;15501:32;15498:52;;;15546:1;15543;15536:12;15498:52;15578:9;15572:16;15597:31;15622:5;15597:31;:::i;15942:375::-;-1:-1:-1;;;;;16200:15:70;;;16182:34;;16252:15;;;;16247:2;16232:18;;16225:43;16299:2;16284:18;;16277:34;;;;16132:2;16117:18;;15942:375::o;16654:168::-;16721:6;16747:10;;;16759;;;16743:27;;16782:11;;;16779:37;;;16796:18;;:::i;17446:135::-;17485:3;17506:17;;;17503:43;;17526:18;;:::i;:::-;-1:-1:-1;17573:1:70;17562:13;;17446:135::o;19160:287::-;19289:3;19327:6;19321:13;19343:66;19402:6;19397:3;19390:4;19382:6;19378:17;19343:66;:::i;:::-;19425:16;;;;;19160:287;-1:-1:-1;;19160:287:70:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "3422000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "_accountFactory()": "infinite", - "_acl()": "infinite", - "adapterToContract(address)": "2677", - "addCollateral(address,address,address,uint256)": "infinite", - "addEmergencyLiquidator(address)": "26839", - "addToken(address)": "infinite", - "approveCreditAccount(address,address,address,uint256)": "infinite", - "calcClosePayments(uint256,uint8,uint256,uint256)": "infinite", - "calcCreditAccountAccruedInterest(address)": "infinite", - "canLiquidateWhilePaused(address)": "2642", - "changeContractAllowance(address,address)": "infinite", - "checkAndEnableToken(address,address)": "infinite", - "checkAndOptimizeEnabledTokens(address)": "infinite", - "checkEmergencyPausable(address,bool)": "infinite", - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": "infinite", - "collateralTokens(uint256)": "infinite", - "collateralTokensByMask(uint256)": "infinite", - "collateralTokensCount()": "2407", - "contractToAdapter(address)": "2633", - "creditAccounts(address)": "2615", - "creditConfigurator()": "2392", - "creditFacade()": "2412", - "cumulativeDropAtFastCheckRAY(address)": "2585", - "disableToken(address,address)": "infinite", - "emergencyLiquidation()": "2389", - "enabledTokensMap(address)": "2630", - "executeOrder(address,address,bytes)": "infinite", - "fastCollateralCheck(address,address,address,uint256,uint256)": "infinite", - "fees()": "2515", - "forbiddenTokenMask()": "2407", - "fullCollateralCheck(address)": "infinite", - "getCreditAccountOrRevert(address)": "2677", - "liquidationThresholds(address)": "infinite", - "manageDebt(address,uint256,bool)": "infinite", - "maxAllowedEnabledTokenLength()": "2457", - "openCreditAccount(uint256,address)": "infinite", - "pause()": "infinite", - "paused()": "2416", - "pool()": "infinite", - "poolService()": "infinite", - "priceOracle()": "2450", - "removeEmergencyLiquidator(address)": "26831", - "setConfigurator(address)": "27938", - "setForbidMask(uint256)": "24531", - "setLiquidationThreshold(address,uint16)": "infinite", - "setMaxEnabledTokens(uint8)": "26744", - "setParams(uint16,uint16,uint16,uint16,uint16)": "infinite", - "tokenMasksMap(address)": "infinite", - "transferAccountOwnership(address,address)": "infinite", - "underlying()": "infinite", - "universalAdapter()": "2436", - "unpause()": "infinite", - "upgradeCreditFacade(address)": "26794", - "upgradePriceOracle(address)": "26822", - "version()": "263", - "wethAddress()": "infinite", - "wethGateway()": "infinite" - }, - "internal": { - "_addToken(address)": "infinite", - "_approve(address,address,address,uint256,bool)": "infinite", - "_calcEnabledTokens(uint256)": "infinite", - "_calcNewCumulativeIndex(uint256,uint256,uint256,uint256,bool)": "infinite", - "_checkAndEnableToken(address,address)": "infinite", - "_checkAndOptimizeEnabledTokens(address)": "infinite", - "_disableToken(address,address)": "infinite", - "_fullCollateralCheck(address)": "infinite", - "_getCreditAccountParameters(address)": "infinite", - "_getMaxIndex(uint256)": "infinite", - "_optimizeEnabledTokens(address,uint256,uint256,uint256,uint256)": "infinite", - "_safeCreditAccountSet(address,address)": "infinite", - "_safeTokenTransfer(address,address,address,uint256,bool)": "infinite", - "_transferAssetsTo(address,address,bool,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "_accountFactory()": "db7ceb80", - "_acl()": "a50cf2c8", - "adapterToContract(address)": "ff687543", - "addCollateral(address,address,address,uint256)": "830aa745", - "addEmergencyLiquidator(address)": "84edaa42", - "addToken(address)": "d48bfca7", - "approveCreditAccount(address,address,address,uint256)": "46fb371d", - "calcClosePayments(uint256,uint8,uint256,uint256)": "5063524a", - "calcCreditAccountAccruedInterest(address)": "3192195c", - "canLiquidateWhilePaused(address)": "38975bc4", - "changeContractAllowance(address,address)": "6e98e5e4", - "checkAndEnableToken(address,address)": "51e3f160", - "checkAndOptimizeEnabledTokens(address)": "29df0b93", - "checkEmergencyPausable(address,bool)": "eb99c2bf", - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": "2362a2d8", - "collateralTokens(uint256)": "172c48c7", - "collateralTokensByMask(uint256)": "e75538c7", - "collateralTokensCount()": "458936f5", - "contractToAdapter(address)": "fdd57645", - "creditAccounts(address)": "055ee9b5", - "creditConfigurator()": "f9aa028a", - "creditFacade()": "2f7a1881", - "cumulativeDropAtFastCheckRAY(address)": "3e8297ca", - "disableToken(address,address)": "0d8f9cee", - "emergencyLiquidation()": "b3da9e6b", - "enabledTokensMap(address)": "8991b2f1", - "executeOrder(address,address,bytes)": "6ce4074a", - "fastCollateralCheck(address,address,address,uint256,uint256)": "654a9eda", - "fees()": "9af1d35a", - "forbiddenTokenMask()": "9fd12b77", - "fullCollateralCheck(address)": "95373018", - "getCreditAccountOrRevert(address)": "e958b704", - "liquidationThresholds(address)": "78327438", - "manageDebt(address,uint256,bool)": "94cf073a", - "maxAllowedEnabledTokenLength()": "8345f26e", - "openCreditAccount(uint256,address)": "8fe3f93f", - "pause()": "8456cb59", - "paused()": "5c975abb", - "pool()": "16f0115b", - "poolService()": "570a7af2", - "priceOracle()": "2630c12f", - "removeEmergencyLiquidator(address)": "a460e104", - "setConfigurator(address)": "9f5f86ae", - "setForbidMask(uint256)": "a366f496", - "setLiquidationThreshold(address,uint16)": "a70bc542", - "setMaxEnabledTokens(uint8)": "dc2b21c1", - "setParams(uint16,uint16,uint16,uint16,uint16)": "944ac59f", - "tokenMasksMap(address)": "f67c5bd0", - "transferAccountOwnership(address,address)": "e1998cf9", - "underlying()": "6f307dc3", - "universalAdapter()": "fe47cde7", - "unpause()": "3f4ba83a", - "upgradeCreditFacade(address)": "693ce7f5", - "upgradePriceOracle(address)": "dc9e0faa", - "version()": "54fd4d50", - "wethAddress()": "4f0e0ef3", - "wethGateway()": "c5e10eef" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotUnPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"ExecuteOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newConfigurator\",\"type\":\"address\"}],\"name\":\"NewConfigurator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_accountFactory\",\"outputs\":[{\"internalType\":\"contract IAccountFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"adapterToContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"addEmergencyLiquidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"enum ClosureAction\",\"name\":\"closureActionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterest\",\"type\":\"uint256\"}],\"name\":\"calcClosePayments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToPool\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountAccruedInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterestAndFees\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canLiquidateWhilePaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"changeContractAllowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkAndEnableToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"checkAndOptimizeEnabledTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"checkEmergencyPausable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"enum ClosureAction\",\"name\":\"closureActionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"convertWETH\",\"type\":\"bool\"}],\"name\":\"closeCreditAccount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"collateralTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenMask\",\"type\":\"uint256\"}],\"name\":\"collateralTokensByMask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"contractToAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditFacade\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"cumulativeDropAtFastCheckRAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"disableToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emergencyLiquidation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"enabledTokensMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeOrder\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balanceInBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceOutBefore\",\"type\":\"uint256\"}],\"name\":\"fastCollateralCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forbiddenTokenMask\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"fullCollateralCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountOrRevert\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"result\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"liquidationThresholds\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"lt\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"increase\",\"type\":\"bool\"}],\"name\":\"manageDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBorrowedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllowedEnabledTokenLength\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"openCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"contract IPriceOracleV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"removeEmergencyLiquidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditConfigurator\",\"type\":\"address\"}],\"name\":\"setConfigurator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_forbidMask\",\"type\":\"uint256\"}],\"name\":\"setForbidMask\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"name\":\"setLiquidationThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newMaxEnabledTokens\",\"type\":\"uint8\"}],\"name\":\"setMaxEnabledTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_liquidationDiscountExpired\",\"type\":\"uint16\"}],\"name\":\"setParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"tokenMasksMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"mask\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferAccountOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"universalAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditFacade\",\"type\":\"address\"}],\"name\":\"upgradeCreditFacade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceOracle\",\"type\":\"address\"}],\"name\":\"upgradePriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wethAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wethGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"CallerNotPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Pausable admin\"}],\"CallerNotUnPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Unpausable admin\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{\"addCollateral(address,address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"creditAccount\":\"Address of the Credit Account\",\"payer\":\"Address of the account which will be charged to provide additional collateral\",\"token\":\"Collateral token to add\"}},\"addEmergencyLiquidator(address)\":{\"details\":\"Adds an address to the list of emergency liquidators\",\"params\":{\"liquidator\":\"Address to add to the list\"}},\"addToken(address)\":{\"details\":\"Adds a token to the list of collateral tokens\",\"params\":{\"token\":\"Address of the token to add\"}},\"approveCreditAccount(address,address,address,uint256)\":{\"details\":\"Requests the Credit Account to approve a collateral token to another contract.\",\"params\":{\"amount\":\"New allowance amount\",\"borrower\":\"Borrower's address\",\"targetContract\":\"Spender to change allowance for\",\"token\":\"Collateral token to approve\"}},\"calcClosePayments(uint256,uint8,uint256,uint256)\":{\"details\":\"Computes amounts that must be sent to various addresses before closing an account\",\"params\":{\"borrowedAmount\":\"Credit Account's debt principal\",\"borrowedAmountWithInterest\":\"Credit Account's debt principal + interest\",\"closureActionType\":\"Type of account closure * CLOSE_ACCOUNT: The account is healthy and is closed normally * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)\",\"totalValue\":\"Credit Accounts total value in underlying\"},\"returns\":{\"amountToPool\":\"Amount of underlying to be sent to the pool\",\"loss\":\"Protocol's loss from bad debt (if any)\",\"profit\":\"Protocol's profit from fees (if any)\",\"remainingFunds\":\"Amount of underlying to be sent to the borrower (only applicable to liquidations)\"}},\"calcCreditAccountAccruedInterest(address)\":{\"details\":\"Calculates the debt accrued by a Credit Account\",\"params\":{\"creditAccount\":\"Address of the Credit Account\"},\"returns\":{\"borrowedAmount\":\"The debt principal\",\"borrowedAmountWithInterest\":\"The debt principal + accrued interest\",\"borrowedAmountWithInterestAndFees\":\"The debt principal + accrued interest and protocol fees\"}},\"changeContractAllowance(address,address)\":{\"details\":\"Sets the link between an adapter and its corresponding targetContract\",\"params\":{\"adapter\":\"Address of the adapter to be used to access the target contract\",\"targetContract\":\"A 3rd-party contract for which the adapter is set\"}},\"checkAndEnableToken(address,address)\":{\"details\":\"Enables a token on a Credit Account, including it into account health and total value calculations\",\"params\":{\"creditAccount\":\"Address of a Credit Account to enable the token for\",\"token\":\"Address of the token to be enabled\"}},\"checkAndOptimizeEnabledTokens(address)\":{\"details\":\"Checks that the number of enabled tokens on a Credit Account does not violate the maximal enabled token limit and tries to disable unused tokens if it does\",\"params\":{\"creditAccount\":\"Account to check enabled tokens for\"}},\"checkEmergencyPausable(address,bool)\":{\"details\":\"Checks if the contract is paused; if true, checks that the caller is emergency liquidator and temporarily enables a special emergencyLiquidator mode to allow liquidation.\",\"params\":{\"caller\":\"Address of CreditFacade caller\",\"state\":\"True to enable and false to disable emergencyLiqudation mde\"},\"returns\":{\"_0\":\"True if contract paused otherwise false. If the contract is not paused, there is no need to call this function to disable the emergencyLiquidation mode.\"}},\"closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)\":{\"details\":\"Closes a Credit Account - covers both normal closure and liquidation - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator. Only emergency liquidators are able to liquidate account while the CM is paused. Emergency liquidations do not pay a liquidator premium or liquidation fees. - Calculates payments to various recipients on closure: + Computes amountToPool, which is the amount to be sent back to the pool. This includes the principal, interest and fees, but can't be more than total position value + Computes remainingFunds during liquidations - these are leftover funds after paying the pool and the liquidator, and are sent to the borrower + Computes protocol profit, which includes interest and liquidation fees + Computes loss if the totalValue is less than borrow amount + interest - Checks the underlying token balance: + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation - Send assets to the \\\"to\\\" address, as long as they are not included into skipTokenMask - If convertWETH is true, the function converts WETH into ETH before sending - Returns the Credit Account back to factory\",\"params\":{\"borrower\":\"Borrower address\",\"closureActionType\":\"Whether the account is closed, liquidated or liquidated due to expiry\",\"convertWETH\":\"If true converts WETH to ETH\",\"payer\":\"Address which would be charged if credit account has not enough funds to cover amountToPool\",\"skipTokenMask\":\"Tokenmask contains 1 for tokens which needed to be skipped for sending\",\"to\":\"Address to which the leftover funds will be sent\",\"totalValue\":\"Portfolio value for liqution, 0 for ordinary closure\"}},\"collateralTokens(uint256)\":{\"details\":\"Returns the collateral token at requested index and its liquidation threshold\",\"params\":{\"id\":\"The index of token to return\"}},\"collateralTokensByMask(uint256)\":{\"details\":\"Returns the collateral token with requested mask and its liquidationThreshold\",\"params\":{\"tokenMask\":\"Token mask corresponding to the token\"}},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_pool\":\"Address of the pool to borrow funds from\"}},\"disableToken(address,address)\":{\"details\":\"Disables a token on a credit account\"},\"executeOrder(address,address,bytes)\":{\"details\":\"Requests a Credit Account to make a low-level call with provided data This is the intended pathway for state-changing interactions with 3rd-party protocols\",\"params\":{\"borrower\":\"Borrower's address\",\"data\":\"Data to pass with the call\",\"targetContract\":\"Contract to be called\"}},\"fastCollateralCheck(address,address,address,uint256,uint256)\":{\"details\":\"Optimized health check for individual swap-like operations.\",\"params\":{\"balanceInBefore\":\"Balance of tokenIn before the operation\",\"balanceOutBefore\":\"Balance of tokenOut before the operation\",\"creditAccount\":\"Address of the Credit Account\",\"tokenIn\":\"Address of the token spent by the swap\",\"tokenOut\":\"Address of the token received from the swap\"}},\"fees()\":{\"details\":\"Returns the fee parameters of the Credit Manager\",\"returns\":{\"feeInterest\":\"Percentage of interest taken by the protocol as profit\",\"feeLiquidation\":\"Percentage of account value taken by the protocol as profit during unhealthy account liquidations\",\"feeLiquidationExpired\":\"Percentage of account value taken by the protocol as profit during expired account liquidations\",\"liquidationDiscount\":\"Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\",\"liquidationDiscountExpired\":\"Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)\"}},\"fullCollateralCheck(address)\":{\"details\":\"Performs a full health check on an account, summing up value of all enabled collateral tokens\",\"params\":{\"creditAccount\":\"Address of the Credit Account to check\"}},\"getCreditAccountOrRevert(address)\":{\"details\":\"Returns the address of a borrower's Credit Account, or reverts if there is none.\",\"params\":{\"borrower\":\"Borrower's address\"}},\"liquidationThresholds(address)\":{\"details\":\"Returns the liquidation threshold for the provided token\",\"params\":{\"token\":\"Token to retrieve the LT for\"}},\"manageDebt(address,uint256,bool)\":{\"details\":\"Manages debt size for borrower: - Increase debt: + Increases debt by transferring funds from the pool to the credit account + Updates the cumulative index to keep interest the same. Since interest is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1), cumulativeIndexOpen needs to be updated, as the borrow amount has changed - Decrease debt: + Repays debt partially + all interest and fees accrued thus far + Updates cunulativeIndex to cumulativeIndex now\",\"params\":{\"amount\":\"Amount to increase / decrease the principal by\",\"creditAccount\":\"Address of the Credit Account to change debt for\",\"increase\":\"True to increase principal, false to decrease\"},\"returns\":{\"newBorrowedAmount\":\"The new debt principal\"}},\"openCreditAccount(uint256,address)\":{\"details\":\"Opens credit account and borrows funds from the pool. - Takes Credit Account from the factory; - Requests the pool to lend underlying to the Credit Account\",\"params\":{\"borrowedAmount\":\"Amount to be borrowed by the Credit Account\",\"onBehalfOf\":\"The owner of the newly opened Credit Account\"}},\"pause()\":{\"details\":\"Pause contract\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"priceOracle()\":{\"details\":\"Returns the price oracle used to evaluate collateral tokens\"},\"removeEmergencyLiquidator(address)\":{\"details\":\"Removes an address from the list of emergency liquidators\",\"params\":{\"liquidator\":\"Address to remove from the list\"}},\"setConfigurator(address)\":{\"details\":\"Sets a new Credit Configurator\",\"params\":{\"_creditConfigurator\":\"Address of the new Credit Configurator\"}},\"setForbidMask(uint256)\":{\"details\":\"Sets the forbidden token mask\",\"params\":{\"_forbidMask\":\"The new bit mask encoding the tokens that are forbidden\"}},\"setLiquidationThreshold(address,uint16)\":{\"details\":\"Sets the liquidation threshold for a collateral token\",\"params\":{\"liquidationThreshold\":\"The new LT\",\"token\":\"The collateral token to set the LT for\"}},\"setMaxEnabledTokens(uint8)\":{\"details\":\"Sets the maximal number of enabled tokens on a single Credit Account.\",\"params\":{\"newMaxEnabledTokens\":\"The new enabled token limit.\"}},\"setParams(uint16,uint16,uint16,uint16,uint16)\":{\"details\":\"Sets fees and premiums\",\"params\":{\"_feeInterest\":\"Percentage of interest taken by the protocol as profit\",\"_feeLiquidation\":\"Percentage of account value taken by the protocol as profit during unhealthy account liquidations\",\"_feeLiquidationExpired\":\"Percentage of account value taken by the protocol as profit during expired account liquidations\",\"_liquidationDiscount\":\"Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\",\"_liquidationDiscountExpired\":\"Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)\"}},\"tokenMasksMap(address)\":{\"details\":\"Returns the mask for the provided token\",\"params\":{\"token\":\"Token to returns the mask for\"}},\"transferAccountOwnership(address,address)\":{\"details\":\"Transfers Credit Account ownership to another address\",\"params\":{\"from\":\"Address of previous owner\",\"to\":\"Address of new owner\"}},\"unpause()\":{\"details\":\"Unpause contract\"},\"upgradeCreditFacade(address)\":{\"details\":\"Sets the Credit Facade\",\"params\":{\"_creditFacade\":\"Address of the new Credit Facade\"}},\"upgradePriceOracle(address)\":{\"details\":\"Sets the Price Oracle\",\"params\":{\"_priceOracle\":\"Address of the new Price Oracle\"}}},\"stateVariables\":{\"_accountFactory\":{\"details\":\"Factory contract for Credit Accounts\"},\"adapterToContract\":{\"details\":\"Maps allowed adapters to their respective target contracts.\"},\"canLiquidateWhilePaused\":{\"details\":\"Maps addresses to their status as emergency liquidator.\"},\"collateralTokensCompressed\":{\"details\":\"Map of token's bit mask to its address and LT compressed into a single uint256\"},\"collateralTokensCount\":{\"details\":\"Total number of known collateral tokens.\"},\"contractToAdapter\":{\"details\":\"Maps 3rd party contracts to their respective adapters\"},\"creditAccounts\":{\"details\":\"A map from borrower addresses to Credit Account addresses\"},\"creditConfigurator\":{\"details\":\"Address of the connected Credit Configurator\"},\"creditFacade\":{\"details\":\"Address of the connected Credit Facade\"},\"cumulativeDropAtFastCheckRAY\":{\"details\":\"Maps Credit Accounts to their current cumulative drops in value during fast checks See more details in fastCollateralCheck()\"},\"enabledTokensMap\":{\"details\":\"Maps Credit Accounts to bit masks encoding their enabled token sets Only enabled tokens are counted as collateral for the Credit Account\"},\"entered\":{\"details\":\"used to protect against reentrancy. Bool is gas-optimal, since there are other non-zero values packed into the same slot\"},\"forbiddenTokenMask\":{\"details\":\"Bit mask encoding a set of forbidden tokens\"},\"maxAllowedEnabledTokenLength\":{\"details\":\"The maximal number of enabled tokens on a single Credit Account\"},\"pool\":{\"details\":\"Address of the connected pool\"},\"poolService\":{\"details\":\"Address of the connected pool\"},\"slot1\":{\"details\":\"Stores fees & parameters commonly used together for gas savings\"},\"tokenMasksMapInternal\":{\"details\":\"Internal map of token addresses to their indidivual masks.\"},\"underlying\":{\"details\":\"Address of the underlying asset\"},\"universalAdapter\":{\"details\":\"Stores address of the Universal adapter\"},\"version\":{\"details\":\"contract version\"},\"wethAddress\":{\"details\":\"Address of WETH\"},\"wethGateway\":{\"details\":\"Address of WETH Gateway\"}},\"title\":\"Credit Manager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canLiquidateWhilePaused(address)\":{\"notice\":\"Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately.\"},\"changeContractAllowance(address,address)\":{\"notice\":\"The function can be called with (adapter, address(0)) and (address(0), targetContract) to disallow a particular target or adapter, since this would set values in respective mappings to address(0).\"},\"checkEmergencyPausable(address,bool)\":{\"notice\":\"Some whenNotPausedOrEmergency functions in CreditManager need to be executable to perform multicalls during liquidations. emergencyLiquidation mode is enabled temporarily (for the span of a single multicall) to override the paused state and allow a special privileged role to liquidate unhealthy positions, if the contracts are paused due to an emergency.To save gas, emergency liquidation setting is skipped when the CM is not paused.\"},\"disableToken(address,address)\":{\"notice\":\"Usually called by adapters to disable spent tokens during a multicall, but can also be called separately from the Credit Facade to remove unwanted tokens\"},\"enabledTokensMap(address)\":{\"notice\":\"An enabled token mask encodes an enabled token by setting the bit at the position equal to token's index to 1\"},\"fastCollateralCheck(address,address,address,uint256,uint256)\":{\"notice\":\"Fast health check assumes that only two tokens (input and output) participate in the operation and computes a % change in weighted value between inbound and outbound collateral. The cumulative negative change across several swaps in sequence cannot be larger than feeLiquidation (a fee that the protocol is ready to waive if needed). Since this records a % change between just two tokens, the corresponding % change in TWV will always be smaller, which makes this check safe. More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection\"},\"poolService()\":{\"notice\":\"[DEPRECATED]: use pool() instead.\"},\"setForbidMask(uint256)\":{\"notice\":\"Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled or received as a result of adapter operation anymore. This means that a token can never be acquired through adapter operations after being forbidden. Accounts that have enabled forbidden tokens also can't borrow any additional funds until they disable those tokens.\"},\"setLiquidationThreshold(address,uint16)\":{\"notice\":\"Liquidation thresholds are weights used to compute TWV with. They denote the risk of the token, with more volatile and unpredictable tokens having lower LTs.\"},\"universalAdapter()\":{\"notice\":\"See more at https://dev.gearbox.fi/docs/documentation/integrations/universal\"}},\"notice\":\"Encapsulates the business logic for managing Credit Accounts More info: https://dev.gearbox.fi/developers/credit/credit_manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":\"CreditManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 7834, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "entered", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 7836, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "emergencyLiquidation", - "offset": 2, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 7841, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "maxAllowedEnabledTokenLength", - "offset": 3, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 7845, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "creditFacade", - "offset": 4, - "slot": "0", - "type": "t_address" - }, - { - "astId": 7849, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "slot1", - "offset": 0, - "slot": "1", - "type": "t_struct(Slot1)7816_storage" - }, - { - "astId": 7855, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "creditAccounts", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 7881, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "creditConfigurator", - "offset": 0, - "slot": "3", - "type": "t_address" - }, - { - "astId": 7886, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "collateralTokensCompressed", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 7889, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "collateralTokensCount", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 7894, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "tokenMasksMapInternal", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 7898, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "forbiddenTokenMask", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 7904, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "enabledTokensMap", - "offset": 0, - "slot": "8", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 7909, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "cumulativeDropAtFastCheckRAY", - "offset": 0, - "slot": "9", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 7915, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "adapterToContract", - "offset": 0, - "slot": "10", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 7921, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "contractToAdapter", - "offset": 0, - "slot": "11", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 7927, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "canLiquidateWhilePaused", - "offset": 0, - "slot": "12", - "type": "t_mapping(t_address,t_bool)" - }, - { - "astId": 7930, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "universalAdapter", - "offset": 0, - "slot": "13", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IPriceOracleV2)12942": { - "encoding": "inplace", - "label": "contract IPriceOracleV2", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_struct(Slot1)7816_storage": { - "encoding": "inplace", - "label": "struct Slot1", - "members": [ - { - "astId": 7796, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "feeInterest", - "offset": 0, - "slot": "0", - "type": "t_uint16" - }, - { - "astId": 7799, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "feeLiquidation", - "offset": 2, - "slot": "0", - "type": "t_uint16" - }, - { - "astId": 7802, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "liquidationDiscount", - "offset": 4, - "slot": "0", - "type": "t_uint16" - }, - { - "astId": 7805, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "feeLiquidationExpired", - "offset": 6, - "slot": "0", - "type": "t_uint16" - }, - { - "astId": 7808, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "liquidationDiscountExpired", - "offset": 8, - "slot": "0", - "type": "t_uint16" - }, - { - "astId": 7812, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "priceOracle", - "offset": 10, - "slot": "0", - "type": "t_contract(IPriceOracleV2)12942" - }, - { - "astId": 7815, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol:CreditManager", - "label": "ltUnderlying", - "offset": 30, - "slot": "0", - "type": "t_uint16" - } - ], - "numberOfBytes": "32" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "canLiquidateWhilePaused(address)": { - "notice": "Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately." - }, - "changeContractAllowance(address,address)": { - "notice": "The function can be called with (adapter, address(0)) and (address(0), targetContract) to disallow a particular target or adapter, since this would set values in respective mappings to address(0)." - }, - "checkEmergencyPausable(address,bool)": { - "notice": "Some whenNotPausedOrEmergency functions in CreditManager need to be executable to perform multicalls during liquidations. emergencyLiquidation mode is enabled temporarily (for the span of a single multicall) to override the paused state and allow a special privileged role to liquidate unhealthy positions, if the contracts are paused due to an emergency.To save gas, emergency liquidation setting is skipped when the CM is not paused." - }, - "disableToken(address,address)": { - "notice": "Usually called by adapters to disable spent tokens during a multicall, but can also be called separately from the Credit Facade to remove unwanted tokens" - }, - "enabledTokensMap(address)": { - "notice": "An enabled token mask encodes an enabled token by setting the bit at the position equal to token's index to 1" - }, - "fastCollateralCheck(address,address,address,uint256,uint256)": { - "notice": "Fast health check assumes that only two tokens (input and output) participate in the operation and computes a % change in weighted value between inbound and outbound collateral. The cumulative negative change across several swaps in sequence cannot be larger than feeLiquidation (a fee that the protocol is ready to waive if needed). Since this records a % change between just two tokens, the corresponding % change in TWV will always be smaller, which makes this check safe. More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection" - }, - "poolService()": { - "notice": "[DEPRECATED]: use pool() instead." - }, - "setForbidMask(uint256)": { - "notice": "Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled or received as a result of adapter operation anymore. This means that a token can never be acquired through adapter operations after being forbidden. Accounts that have enabled forbidden tokens also can't borrow any additional funds until they disable those tokens." - }, - "setLiquidationThreshold(address,uint16)": { - "notice": "Liquidation thresholds are weights used to compute TWV with. They denote the risk of the token, with more volatile and unpredictable tokens having lower LTs." - }, - "universalAdapter()": { - "notice": "See more at https://dev.gearbox.fi/docs/documentation/integrations/universal" - } - }, - "notice": "Encapsulates the business logic for managing Credit Accounts More info: https://dev.gearbox.fi/developers/credit/credit_manager", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol": { - "IACL": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotPausableAdminException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotUnpausableAdminException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "PausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "PausableAdminRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "UnpausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "UnpausableAdminRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isConfigurator", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isPausableAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isUnpausableAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AddressNotPausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a pausable admin" - } - ], - "AddressNotUnpausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a unpausable admin" - } - ] - }, - "kind": "dev", - "methods": { - "isConfigurator(address)": { - "details": "Returns true if an address has configurator rights", - "params": { - "account": "Address to check" - } - }, - "isPausableAdmin(address)": { - "details": "Returns true if the address is a pausable admin and false if not", - "params": { - "addr": "Address to check" - } - }, - "isUnpausableAdmin(address)": { - "details": "Returns true if the address is unpausable admin and false if not", - "params": { - "addr": "Address to check" - } - }, - "owner()": { - "details": "Returns address of configurator" - }, - "version()": { - "details": "Returns contract version" - } - }, - "title": "ACL interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "isConfigurator(address)": "5f259aba", - "isPausableAdmin(address)": "3a41ec64", - "isUnpausableAdmin(address)": "d4eb5db0", - "owner()": "8da5cb5b", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotUnpausableAdminException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"PausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"PausableAdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isConfigurator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isPausableAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isUnpausableAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressNotPausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a pausable admin\"}],\"AddressNotUnpausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a unpausable admin\"}]},\"kind\":\"dev\",\"methods\":{\"isConfigurator(address)\":{\"details\":\"Returns true if an address has configurator rights\",\"params\":{\"account\":\"Address to check\"}},\"isPausableAdmin(address)\":{\"details\":\"Returns true if the address is a pausable admin and false if not\",\"params\":{\"addr\":\"Address to check\"}},\"isUnpausableAdmin(address)\":{\"details\":\"Returns true if the address is unpausable admin and false if not\",\"params\":{\"addr\":\"Address to check\"}},\"owner()\":{\"details\":\"Returns address of configurator\"},\"version()\":{\"details\":\"Returns contract version\"}},\"title\":\"ACL interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":\"IACL\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IACLEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "PausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "PausableAdminRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "UnpausableAdminAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "UnpausableAdminRemoved", - "type": "event" - } - ], - "devdoc": { - "events": { - "PausableAdminAdded(address)": { - "details": "Emits when a new admin is added that can pause contracts" - }, - "PausableAdminRemoved(address)": { - "details": "Emits when a Pausable admin is removed" - }, - "UnpausableAdminAdded(address)": { - "details": "Emits when a new admin is added that can unpause contracts" - }, - "UnpausableAdminRemoved(address)": { - "details": "Emits when an Unpausable admin is removed" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"PausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"PausableAdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UnpausableAdminRemoved\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"PausableAdminAdded(address)\":{\"details\":\"Emits when a new admin is added that can pause contracts\"},\"PausableAdminRemoved(address)\":{\"details\":\"Emits when a Pausable admin is removed\"},\"UnpausableAdminAdded(address)\":{\"details\":\"Emits when a new admin is added that can unpause contracts\"},\"UnpausableAdminRemoved(address)\":{\"details\":\"Emits when an Unpausable admin is removed\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":\"IACLEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IACLExceptions": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotPausableAdminException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "AddressNotUnpausableAdminException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "AddressNotPausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a pausable admin" - } - ], - "AddressNotUnpausableAdminException(address)": [ - { - "details": "Thrown when attempting to delete an address from a set that is not a unpausable admin" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddressNotUnpausableAdminException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AddressNotPausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a pausable admin\"}],\"AddressNotUnpausableAdminException(address)\":[{\"details\":\"Thrown when attempting to delete an address from a set that is not a unpausable admin\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":\"IACLExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol": { - "IAccountFactory": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "miner", - "type": "address" - } - ], - "name": "AccountMinerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "InitializeCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "ReturnCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "TakeForever", - "type": "event" - }, - { - "inputs": [], - "name": "countCreditAccounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "countCreditAccountsInStock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "getNext", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "head", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "usedAccount", - "type": "address" - } - ], - "name": "returnCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tail", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "takeCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "countCreditAccounts()": { - "details": "Returns the number of deployed credit accounts" - }, - "countCreditAccountsInStock()": { - "details": "Returns the number of unused credit accounts in stock" - }, - "creditAccounts(uint256)": { - "details": "Returns the credit account address under the passed id", - "params": { - "id": "The index of the requested CA" - } - }, - "getNext(address)": { - "details": "Gets the next available credit account after the passed one, or address(0) if the passed account is the tail", - "params": { - "creditAccount": "Credit Account previous to the one to retrieve" - } - }, - "head()": { - "details": "Head of CA linked list" - }, - "returnCreditAccount(address)": { - "details": "Retrieves the Credit Account from the Credit Manager and adds it to the stock", - "params": { - "usedAccount": "Address of returned credit account" - } - }, - "tail()": { - "details": "Tail of CA linked list" - }, - "takeCreditAccount(uint256,uint256)": { - "details": "Provides a new credit account to a Credit Manager" - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "countCreditAccounts()": "b60e8518", - "countCreditAccountsInStock()": "b1939763", - "creditAccounts(uint256)": "e3ba9ace", - "getNext(address)": "765e0159", - "head()": "8f7dcfa3", - "returnCreditAccount(address)": "89b77b3e", - "tail()": "13d8c840", - "takeCreditAccount(uint256,uint256)": "21d18456", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"miner\",\"type\":\"address\"}],\"name\":\"AccountMinerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"InitializeCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ReturnCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"TakeForever\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"countCreditAccounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"countCreditAccountsInStock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"getNext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"head\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"usedAccount\",\"type\":\"address\"}],\"name\":\"returnCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tail\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"takeCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"countCreditAccounts()\":{\"details\":\"Returns the number of deployed credit accounts\"},\"countCreditAccountsInStock()\":{\"details\":\"Returns the number of unused credit accounts in stock\"},\"creditAccounts(uint256)\":{\"details\":\"Returns the credit account address under the passed id\",\"params\":{\"id\":\"The index of the requested CA\"}},\"getNext(address)\":{\"details\":\"Gets the next available credit account after the passed one, or address(0) if the passed account is the tail\",\"params\":{\"creditAccount\":\"Credit Account previous to the one to retrieve\"}},\"head()\":{\"details\":\"Head of CA linked list\"},\"returnCreditAccount(address)\":{\"details\":\"Retrieves the Credit Account from the Credit Manager and adds it to the stock\",\"params\":{\"usedAccount\":\"Address of returned credit account\"}},\"tail()\":{\"details\":\"Tail of CA linked list\"},\"takeCreditAccount(uint256,uint256)\":{\"details\":\"Provides a new credit account to a Credit Manager\"},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"events\":{\"AccountMinerChanged(address)\":{\"notice\":\"Not applicable to factories deployed after V2\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":\"IAccountFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "events": { - "AccountMinerChanged(address)": { - "notice": "Not applicable to factories deployed after V2" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IAccountFactoryEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "miner", - "type": "address" - } - ], - "name": "AccountMinerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "InitializeCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "NewCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "ReturnCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "TakeForever", - "type": "event" - } - ], - "devdoc": { - "events": { - "AccountMinerChanged(address)": { - "details": "Emits when the account mining contract is changed" - }, - "InitializeCreditAccount(address,address)": { - "details": "Emits when a Credit Manager takes an account from the factory" - }, - "NewCreditAccount(address)": { - "details": "Emits when a new Credit Account is created" - }, - "ReturnCreditAccount(address)": { - "details": "Emits when a Credit Manager returns an account to the factory" - }, - "TakeForever(address,address)": { - "details": "Emits when a Credit Account is taking out of the factory forever by root" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"miner\",\"type\":\"address\"}],\"name\":\"AccountMinerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"InitializeCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"NewCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"ReturnCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"TakeForever\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AccountMinerChanged(address)\":{\"details\":\"Emits when the account mining contract is changed\"},\"InitializeCreditAccount(address,address)\":{\"details\":\"Emits when a Credit Manager takes an account from the factory\"},\"NewCreditAccount(address)\":{\"details\":\"Emits when a new Credit Account is created\"},\"ReturnCreditAccount(address)\":{\"details\":\"Emits when a Credit Manager returns an account to the factory\"},\"TakeForever(address,address)\":{\"details\":\"Emits when a Credit Account is taking out of the factory forever by root\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AccountMinerChanged(address)\":{\"notice\":\"Not applicable to factories deployed after V2\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":\"IAccountFactoryEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "events": { - "AccountMinerChanged(address)": { - "notice": "Not applicable to factories deployed after V2" - } - }, - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IAccountFactoryGetters": { - "abi": [ - { - "inputs": [], - "name": "countCreditAccounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "countCreditAccountsInStock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "getNext", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "head", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tail", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "countCreditAccounts()": { - "details": "Returns the number of deployed credit accounts" - }, - "countCreditAccountsInStock()": { - "details": "Returns the number of unused credit accounts in stock" - }, - "creditAccounts(uint256)": { - "details": "Returns the credit account address under the passed id", - "params": { - "id": "The index of the requested CA" - } - }, - "getNext(address)": { - "details": "Gets the next available credit account after the passed one, or address(0) if the passed account is the tail", - "params": { - "creditAccount": "Credit Account previous to the one to retrieve" - } - }, - "head()": { - "details": "Head of CA linked list" - }, - "tail()": { - "details": "Tail of CA linked list" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "countCreditAccounts()": "b60e8518", - "countCreditAccountsInStock()": "b1939763", - "creditAccounts(uint256)": "e3ba9ace", - "getNext(address)": "765e0159", - "head()": "8f7dcfa3", - "tail()": "13d8c840" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"countCreditAccounts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"countCreditAccountsInStock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"getNext\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"head\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tail\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"countCreditAccounts()\":{\"details\":\"Returns the number of deployed credit accounts\"},\"countCreditAccountsInStock()\":{\"details\":\"Returns the number of unused credit accounts in stock\"},\"creditAccounts(uint256)\":{\"details\":\"Returns the credit account address under the passed id\",\"params\":{\"id\":\"The index of the requested CA\"}},\"getNext(address)\":{\"details\":\"Gets the next available credit account after the passed one, or address(0) if the passed account is the tail\",\"params\":{\"creditAccount\":\"Credit Account previous to the one to retrieve\"}},\"head()\":{\"details\":\"Head of CA linked list\"},\"tail()\":{\"details\":\"Tail of CA linked list\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":\"IAccountFactoryGetters\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol": { - "IAddressProvider": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "service", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "AddressSet", - "type": "event" - }, - { - "inputs": [], - "name": "getACL", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAccountFactory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractsRegister", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDataCompressor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGearToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLeveragedActions", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPriceOracle", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTreasuryContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWETHGateway", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWethToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getACL()": { - "returns": { - "_0": "Address of ACL contract" - } - }, - "getAccountFactory()": { - "returns": { - "_0": "Address of AccountFactory" - } - }, - "getContractsRegister()": { - "returns": { - "_0": "Address of ContractsRegister" - } - }, - "getDataCompressor()": { - "returns": { - "_0": "Address of DataCompressor" - } - }, - "getGearToken()": { - "returns": { - "_0": "Address of GEAR token" - } - }, - "getLeveragedActions()": { - "returns": { - "_0": "Address of PathFinder" - } - }, - "getPriceOracle()": { - "returns": { - "_0": "Address of PriceOracle" - } - }, - "getTreasuryContract()": { - "returns": { - "_0": "Address of DAO Treasury Multisig" - } - }, - "getWETHGateway()": { - "returns": { - "_0": "Address of WETH Gateway" - } - }, - "getWethToken()": { - "returns": { - "_0": "Address of WETH token" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "title": "Optimised for front-end Address Provider interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getACL()": "08737695", - "getAccountFactory()": "9068a868", - "getContractsRegister()": "c513c9bb", - "getDataCompressor()": "060678c2", - "getGearToken()": "affd9243", - "getLeveragedActions()": "44b88563", - "getPriceOracle()": "fca513a8", - "getTreasuryContract()": "26c74fc3", - "getWETHGateway()": "77532ed9", - "getWethToken()": "4c252f91", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"service\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getACL\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAccountFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getContractsRegister\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataCompressor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGearToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLeveragedActions\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETHGateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWethToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getACL()\":{\"returns\":{\"_0\":\"Address of ACL contract\"}},\"getAccountFactory()\":{\"returns\":{\"_0\":\"Address of AccountFactory\"}},\"getContractsRegister()\":{\"returns\":{\"_0\":\"Address of ContractsRegister\"}},\"getDataCompressor()\":{\"returns\":{\"_0\":\"Address of DataCompressor\"}},\"getGearToken()\":{\"returns\":{\"_0\":\"Address of GEAR token\"}},\"getLeveragedActions()\":{\"returns\":{\"_0\":\"Address of PathFinder\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"Address of PriceOracle\"}},\"getTreasuryContract()\":{\"returns\":{\"_0\":\"Address of DAO Treasury Multisig\"}},\"getWETHGateway()\":{\"returns\":{\"_0\":\"Address of WETH Gateway\"}},\"getWethToken()\":{\"returns\":{\"_0\":\"Address of WETH token\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"title\":\"Optimised for front-end Address Provider interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":\"IAddressProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IAddressProviderEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "service", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "AddressSet", - "type": "event" - } - ], - "devdoc": { - "events": { - "AddressSet(bytes32,address)": { - "details": "Emits when an address is set for a contract role" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"service\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AddressSet(bytes32,address)\":{\"details\":\"Emits when an address is set for a contract role\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":\"IAddressProviderEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol": { - "IBlacklistHelper": { - "abi": [ - { - "inputs": [], - "name": "CreditFacadeNonBlacklistable", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "NothingToClaimException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimableAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Claimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditFacade", - "type": "address" - } - ], - "name": "CreditFacadeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditFacade", - "type": "address" - } - ], - "name": "CreditFacadeRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addClaimable", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "holder", - "type": "address" - } - ], - "name": "claimable", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isBlacklisted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CreditFacadeNonBlacklistable()": [ - { - "details": "Thrown when attempting to add a Credit Facade that has non-blacklistable underlying" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown when an access-restricted function is called by non-CreditFacade" - } - ], - "NothingToClaimException()": [ - { - "details": "Thrown when attempting to claim funds without having anything claimable" - } - ] - }, - "kind": "dev", - "methods": { - "addClaimable(address,address,uint256)": { - "details": "Increases the underlying balance available to claim by the account", - "params": { - "amount": "Amount to increase claimable claimable for", - "holder": "Account to increase claimable for", - "underlying": "Underlying to increase claimable for" - } - }, - "claim(address,address)": { - "details": "Transfers the sender's claimable balance of underlying to the specified address", - "params": { - "to": "Recipient address", - "underlying": "Underlying to transfer" - } - }, - "claimable(address,address)": { - "details": "Returns the amount claimable by an account", - "params": { - "holder": "Acccount to get the amount for", - "underlying": "Underlying to get the amount for" - } - }, - "isBlacklisted(address,address)": { - "details": "Returns whether the account is blacklisted for a particular underlying", - "params": { - "account": "Account to check", - "underlying": "Underlying token to check" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addClaimable(address,address,uint256)": "9e389610", - "claim(address,address)": "21c0b342", - "claimable(address,address)": "d4570c1c", - "isBlacklisted(address,address)": "4028eddc", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CreditFacadeNonBlacklistable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NothingToClaimException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimableAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addClaimable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"}],\"name\":\"claimable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CreditFacadeNonBlacklistable()\":[{\"details\":\"Thrown when attempting to add a Credit Facade that has non-blacklistable underlying\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown when an access-restricted function is called by non-CreditFacade\"}],\"NothingToClaimException()\":[{\"details\":\"Thrown when attempting to claim funds without having anything claimable\"}]},\"kind\":\"dev\",\"methods\":{\"addClaimable(address,address,uint256)\":{\"details\":\"Increases the underlying balance available to claim by the account\",\"params\":{\"amount\":\"Amount to increase claimable claimable for\",\"holder\":\"Account to increase claimable for\",\"underlying\":\"Underlying to increase claimable for\"}},\"claim(address,address)\":{\"details\":\"Transfers the sender's claimable balance of underlying to the specified address\",\"params\":{\"to\":\"Recipient address\",\"underlying\":\"Underlying to transfer\"}},\"claimable(address,address)\":{\"details\":\"Returns the amount claimable by an account\",\"params\":{\"holder\":\"Acccount to get the amount for\",\"underlying\":\"Underlying to get the amount for\"}},\"isBlacklisted(address,address)\":{\"details\":\"Returns whether the account is blacklisted for a particular underlying\",\"params\":{\"account\":\"Account to check\",\"underlying\":\"Underlying token to check\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":\"IBlacklistHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IBlacklistHelperEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "ClaimableAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Claimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditFacade", - "type": "address" - } - ], - "name": "CreditFacadeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditFacade", - "type": "address" - } - ], - "name": "CreditFacadeRemoved", - "type": "event" - } - ], - "devdoc": { - "events": { - "ClaimableAdded(address,address,uint256)": { - "details": "Emitted when a borrower's claimable balance is increased" - }, - "Claimed(address,address,address,uint256)": { - "details": "Emitted when a borrower claims their tokens" - }, - "CreditFacadeAdded(address)": { - "details": "Emitted when a Credit Facade is added to BlacklistHelper" - }, - "CreditFacadeRemoved(address)": { - "details": "Emitted when a Credit Facade is removed from BlacklistHelper" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ClaimableAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeRemoved\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"ClaimableAdded(address,address,uint256)\":{\"details\":\"Emitted when a borrower's claimable balance is increased\"},\"Claimed(address,address,address,uint256)\":{\"details\":\"Emitted when a borrower claims their tokens\"},\"CreditFacadeAdded(address)\":{\"details\":\"Emitted when a Credit Facade is added to BlacklistHelper\"},\"CreditFacadeRemoved(address)\":{\"details\":\"Emitted when a Credit Facade is removed from BlacklistHelper\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":\"IBlacklistHelperEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IBlacklistHelperExceptions": { - "abi": [ - { - "inputs": [], - "name": "CreditFacadeNonBlacklistable", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "NothingToClaimException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "CreditFacadeNonBlacklistable()": [ - { - "details": "Thrown when attempting to add a Credit Facade that has non-blacklistable underlying" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown when an access-restricted function is called by non-CreditFacade" - } - ], - "NothingToClaimException()": [ - { - "details": "Thrown when attempting to claim funds without having anything claimable" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CreditFacadeNonBlacklistable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NothingToClaimException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"CreditFacadeNonBlacklistable()\":[{\"details\":\"Thrown when attempting to add a Credit Facade that has non-blacklistable underlying\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown when an access-restricted function is called by non-CreditFacade\"}],\"NothingToClaimException()\":[{\"details\":\"Thrown when attempting to claim funds without having anything claimable\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":\"IBlacklistHelperExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol": { - "IContractsRegister": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "NewCreditManagerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "NewPoolAdded", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "i", - "type": "uint256" - } - ], - "name": "creditManagers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagersCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPools", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPoolsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isCreditManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isPool", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "i", - "type": "uint256" - } - ], - "name": "pools", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "creditManagers(uint256)": { - "details": "Returns a Credit Manager's address from the list under the passed index", - "params": { - "i": "Index of the Credit Manager to retrieve" - } - }, - "getCreditManagers()": { - "details": "Returns the array of registered Credit Managers" - }, - "getCreditManagersCount()": { - "returns": { - "_0": "Returns the number of registered Credit Managers" - } - }, - "getPools()": { - "details": "Returns the array of registered pools" - }, - "getPoolsCount()": { - "returns": { - "_0": "Returns the number of registered pools" - } - }, - "isCreditManager(address)": { - "details": "Returns true if the passed address is a Credit Manager" - }, - "isPool(address)": { - "details": "Returns true if the passed address is a pool" - }, - "pools(uint256)": { - "details": "Returns a pool address from the list under the passed index", - "params": { - "i": "Index of the pool to retrieve" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "creditManagers(uint256)": "1e16e4fc", - "getCreditManagers()": "94144856", - "getCreditManagersCount()": "c29277cd", - "getPools()": "673a2a1f", - "getPoolsCount()": "b4ac6860", - "isCreditManager(address)": "6fbc6f6b", - "isPool(address)": "5b16ebb7", - "pools(uint256)": "ac4afa38", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"NewCreditManagerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"NewPoolAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"}],\"name\":\"creditManagers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagersCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isCreditManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"}],\"name\":\"pools\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"creditManagers(uint256)\":{\"details\":\"Returns a Credit Manager's address from the list under the passed index\",\"params\":{\"i\":\"Index of the Credit Manager to retrieve\"}},\"getCreditManagers()\":{\"details\":\"Returns the array of registered Credit Managers\"},\"getCreditManagersCount()\":{\"returns\":{\"_0\":\"Returns the number of registered Credit Managers\"}},\"getPools()\":{\"details\":\"Returns the array of registered pools\"},\"getPoolsCount()\":{\"returns\":{\"_0\":\"Returns the number of registered pools\"}},\"isCreditManager(address)\":{\"details\":\"Returns true if the passed address is a Credit Manager\"},\"isPool(address)\":{\"details\":\"Returns true if the passed address is a pool\"},\"pools(uint256)\":{\"details\":\"Returns a pool address from the list under the passed index\",\"params\":{\"i\":\"Index of the pool to retrieve\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":\"IContractsRegister\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IContractsRegisterEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "NewCreditManagerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "pool", - "type": "address" - } - ], - "name": "NewPoolAdded", - "type": "event" - } - ], - "devdoc": { - "events": { - "NewCreditManagerAdded(address)": { - "details": "Emits when a new Credit Manager is registered in the system" - }, - "NewPoolAdded(address)": { - "details": "Emits when a new pool is registered in the system" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"NewCreditManagerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"NewPoolAdded\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"NewCreditManagerAdded(address)\":{\"details\":\"Emits when a new Credit Manager is registered in the system\"},\"NewPoolAdded(address)\":{\"details\":\"Emits when a new pool is registered in the system\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":\"IContractsRegisterEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol": { - "ICrediAccountExceptions": { - "abi": [ - { - "inputs": [], - "name": "CallerNotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotFactoryException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "CallerNotCreditManagerException()": [ - { - "details": "throws if the caller is not the connected Credit Manager" - } - ], - "CallerNotFactoryException()": [ - { - "details": "throws if the caller is not the factory" - } - ] - }, - "kind": "dev", - "methods": {}, - "title": "Credit Account", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerNotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotFactoryException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"CallerNotCreditManagerException()\":[{\"details\":\"throws if the caller is not the connected Credit Manager\"}],\"CallerNotFactoryException()\":[{\"details\":\"throws if the caller is not the factory\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Credit Account\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":\"ICrediAccountExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Implements generic credit account logic: - Holds collateral assets - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized - Transfers assets - Executes financial orders by calling connected protocols on its behalf More: https://dev.gearbox.fi/developers/credit/credit_account", - "version": 1 - } - }, - "ICreditAccount": { - "abi": [ - { - "inputs": [], - "name": "CallerNotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotFactoryException", - "type": "error" - }, - { - "inputs": [], - "name": "borrowedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "cancelAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "connectTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "cumulativeIndexAtOpen", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "safeTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "since", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cumulativeIndexAtOpen", - "type": "uint256" - } - ], - "name": "updateParameters", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CallerNotCreditManagerException()": [ - { - "details": "throws if the caller is not the connected Credit Manager" - } - ], - "CallerNotFactoryException()": [ - { - "details": "throws if the caller is not the factory" - } - ] - }, - "kind": "dev", - "methods": { - "borrowedAmount()": { - "details": "Returns the principal amount borrowed from the pool" - }, - "cancelAllowance(address,address)": { - "details": "Removes allowance for a token to a 3rd-party contract. Restricted to factory only.", - "params": { - "targetContract": "Target contract to revoke allowance to.", - "token": "ERC20 token to remove allowance for." - } - }, - "connectTo(address,uint256,uint256)": { - "details": "Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.", - "params": { - "_borrowedAmount": "The amount borrowed at Credit Account opening", - "_creditManager": "Credit manager address", - "_cumulativeIndexAtOpen": "The interest index at Credit Account opening" - } - }, - "creditManager()": { - "details": "Returns the address of the currently connected Credit Manager" - }, - "cumulativeIndexAtOpen()": { - "details": "Returns the cumulative interest index since the last Credit Account's debt update" - }, - "execute(address,bytes)": { - "details": "Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.", - "params": { - "data": "Data to call the contract with.", - "destination": "Contract address to be called." - } - }, - "factory()": { - "details": "Address of the Credit Account factory" - }, - "initialize()": { - "details": "Called on new Credit Account creation." - }, - "safeTransfer(address,address,uint256)": { - "details": "Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.", - "params": { - "amount": "Amount to be transferred.", - "to": "Address of the recipient.", - "token": "Token to be transferred from the Credit Account." - } - }, - "since()": { - "details": "Returns the block at which the contract was last taken from the factory" - }, - "updateParameters(uint256,uint256)": { - "details": "Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.", - "params": { - "_borrowedAmount": "The amount currently lent to the Credit Account", - "_cumulativeIndexAtOpen": "New cumulative index to calculate interest from" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "borrowedAmount()": "1afbb7a4", - "cancelAllowance(address,address)": "19a16039", - "connectTo(address,uint256,uint256)": "c75b5a71", - "creditManager()": "c12c21c0", - "cumulativeIndexAtOpen()": "17d11a15", - "execute(address,bytes)": "1cff79cd", - "factory()": "c45a0155", - "initialize()": "8129fc1c", - "safeTransfer(address,address,uint256)": "d1660f99", - "since()": "3dc54b40", - "updateParameters(uint256,uint256)": "16128211", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CallerNotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotFactoryException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"borrowedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"cancelAllowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"connectTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cumulativeIndexAtOpen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"safeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"since\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cumulativeIndexAtOpen\",\"type\":\"uint256\"}],\"name\":\"updateParameters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerNotCreditManagerException()\":[{\"details\":\"throws if the caller is not the connected Credit Manager\"}],\"CallerNotFactoryException()\":[{\"details\":\"throws if the caller is not the factory\"}]},\"kind\":\"dev\",\"methods\":{\"borrowedAmount()\":{\"details\":\"Returns the principal amount borrowed from the pool\"},\"cancelAllowance(address,address)\":{\"details\":\"Removes allowance for a token to a 3rd-party contract. Restricted to factory only.\",\"params\":{\"targetContract\":\"Target contract to revoke allowance to.\",\"token\":\"ERC20 token to remove allowance for.\"}},\"connectTo(address,uint256,uint256)\":{\"details\":\"Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.\",\"params\":{\"_borrowedAmount\":\"The amount borrowed at Credit Account opening\",\"_creditManager\":\"Credit manager address\",\"_cumulativeIndexAtOpen\":\"The interest index at Credit Account opening\"}},\"creditManager()\":{\"details\":\"Returns the address of the currently connected Credit Manager\"},\"cumulativeIndexAtOpen()\":{\"details\":\"Returns the cumulative interest index since the last Credit Account's debt update\"},\"execute(address,bytes)\":{\"details\":\"Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\",\"params\":{\"data\":\"Data to call the contract with.\",\"destination\":\"Contract address to be called.\"}},\"factory()\":{\"details\":\"Address of the Credit Account factory\"},\"initialize()\":{\"details\":\"Called on new Credit Account creation.\"},\"safeTransfer(address,address,uint256)\":{\"details\":\"Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\",\"params\":{\"amount\":\"Amount to be transferred.\",\"to\":\"Address of the recipient.\",\"token\":\"Token to be transferred from the Credit Account.\"}},\"since()\":{\"details\":\"Returns the block at which the contract was last taken from the factory\"},\"updateParameters(uint256,uint256)\":{\"details\":\"Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.\",\"params\":{\"_borrowedAmount\":\"The amount currently lent to the Credit Account\",\"_cumulativeIndexAtOpen\":\"New cumulative index to calculate interest from\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize()\":{\"notice\":\"Initialize is used instead of constructor, since the contract is cloned.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":\"ICreditAccount\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "initialize()": { - "notice": "Initialize is used instead of constructor, since the contract is cloned." - } - }, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol": { - "ICreditConfigurator": { - "abi": [ - { - "inputs": [], - "name": "AdapterUsedTwiceException", - "type": "error" - }, - { - "inputs": [], - "name": "ContractIsNotAnAllowedAdapterException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditManagerOrFacadeUsedAsTargetContractsException", - "type": "error" - }, - { - "inputs": [], - "name": "IncompatibleContractException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectExpirationDateException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectFeesException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectLimitsException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectLiquidationThresholdException", - "type": "error" - }, - { - "inputs": [], - "name": "SetLTForUnderlyingException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "AdapterForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "AddedToUpgradeable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "ContractAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - } - ], - "name": "ContractForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newCreditConfigurator", - "type": "address" - } - ], - "name": "CreditConfiguratorUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newCreditFacade", - "type": "address" - } - ], - "name": "CreditFacadeUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "CumulativeLossReset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "EmergencyLiquidatorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "EmergencyLiquidatorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint40", - "name": "", - "type": "uint40" - } - ], - "name": "ExpirationDateUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidationPremium", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidationPremiumExpired", - "type": "uint16" - } - ], - "name": "FeesUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "name": "IncreaseDebtForbiddenModeChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "LimitPerBlockUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "minBorrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxBorrowedAmount", - "type": "uint256" - } - ], - "name": "LimitsUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "name": "MaxEnabledTokensUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "name": "NewEmergencyLiquidationDiscount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "NewMaxCumulativeLoss", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "NewTotalDebtLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPriceOracle", - "type": "address" - } - ], - "name": "PriceOracleUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "RemovedFromUpgradeable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidityThreshold", - "type": "uint16" - } - ], - "name": "TokenLiquidationThresholdUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "name": "addCollateralToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "liquidator", - "type": "address" - } - ], - "name": "addEmergencyLiquidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract IAddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "allowContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "allowToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "allowedContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditFacade", - "outputs": [ - { - "internalType": "contract CreditFacade", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "contract CreditManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "forbidAdapter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "forbidContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "forbidToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "liquidator", - "type": "address" - } - ], - "name": "removeEmergencyLiquidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint40", - "name": "newExpirationDate", - "type": "uint40" - } - ], - "name": "setExpirationDate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_liquidationPremium", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "_liquidationPremiumExpired", - "type": "uint16" - } - ], - "name": "setFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_mode", - "type": "bool" - } - ], - "name": "setIncreaseDebtForbidden", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "newLimit", - "type": "uint128" - } - ], - "name": "setLimitPerBlock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_minBorrowedAmount", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "_maxBorrowedAmount", - "type": "uint128" - } - ], - "name": "setLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "name": "setLiquidationThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "maxEnabledTokens", - "type": "uint8" - } - ], - "name": "setMaxEnabledTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditConfigurator", - "type": "address" - } - ], - "name": "upgradeCreditConfigurator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditFacade", - "type": "address" - }, - { - "internalType": "bool", - "name": "migrateParams", - "type": "bool" - } - ], - "name": "upgradeCreditFacade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "upgradePriceOracle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AdapterUsedTwiceException()": [ - { - "details": "Thrown if an adapter that is already linked to a contract is being connected to another" - } - ], - "ContractIsNotAnAllowedAdapterException()": [ - { - "details": "Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager" - } - ], - "CreditManagerOrFacadeUsedAsTargetContractsException()": [ - { - "details": "Thrown if address of CreditManager or CreditFacade are being set as a target for an adapter" - } - ], - "IncompatibleContractException()": [ - { - "details": "Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager or retrieving the Credit Manager from it fails" - } - ], - "IncorrectExpirationDateException()": [ - { - "details": "Thrown if the new expiration date is less than the current expiration date or block.timestamp" - } - ], - "IncorrectFeesException()": [ - { - "details": "Thrown if feeInterest or (liquidationPremium + feeLiquidation) is out of [0%..100%] range (encoded as [0..10000])" - } - ], - "IncorrectLimitsException()": [ - { - "details": "Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit" - } - ], - "IncorrectLiquidationThresholdException()": [ - { - "details": "Thrown if the newly set LT if zero or greater than the underlying's LT" - } - ], - "SetLTForUnderlyingException()": [ - { - "details": "Thrown if the underlying's LT is set directly" - } - ] - }, - "kind": "dev", - "methods": { - "addCollateralToken(address,uint16)": { - "details": "Adds token to the list of allowed collateral tokens, and sets the LT", - "params": { - "liquidationThreshold": "Liquidation threshold for account health calculations", - "token": "Address of token to be added" - } - }, - "addEmergencyLiquidator(address)": { - "details": "Adds an address to the list of emergency liquidators", - "params": { - "liquidator": "The address to add to the list" - } - }, - "addressProvider()": { - "details": "Address provider (needed for upgrading the Price Oracle)" - }, - "allowContract(address,address)": { - "details": "Adds pair [contract <-> adapter] to the list of allowed contracts or updates adapter address if a contract already has a connected adapter", - "params": { - "adapter": "Adapter address", - "targetContract": "Address of allowed contract" - } - }, - "allowToken(address)": { - "details": "Allow a known collateral token if it was forbidden before.", - "params": { - "token": "Address of collateral token" - } - }, - "allowedContracts()": { - "details": "Returns all allowed contracts" - }, - "creditFacade()": { - "details": "Returns the Credit Facade currently connected to the Credit Manager" - }, - "creditManager()": { - "details": "Address of the Credit Manager" - }, - "forbidAdapter(address)": { - "details": "Forbids adapter (and only the adapter - the target contract is not affected)", - "params": { - "adapter": "Address of adapter to disable" - } - }, - "forbidContract(address)": { - "details": "Forbids contract as a target for calls from Credit Accounts", - "params": { - "targetContract": "Address of a contract to be forbidden" - } - }, - "forbidToken(address)": { - "details": "Forbids a collateral token. Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled or received as a result of adapter operation anymore. This means that a token can never be acquired through adapter operations after being forbidden.", - "params": { - "token": "Address of collateral token to forbid" - } - }, - "removeEmergencyLiquidator(address)": { - "details": "Removex an address frp, the list of emergency liquidators", - "params": { - "liquidator": "The address to remove from the list" - } - }, - "setExpirationDate(uint40)": { - "details": "Sets expiration date in a CreditFacade connected To a CreditManager with an expirable pool", - "params": { - "newExpirationDate": "The timestamp of the next expiration" - } - }, - "setFees(uint16,uint16,uint16,uint16,uint16)": { - "details": "Sets fees for creditManager", - "params": { - "_feeInterest": "Percent which protocol charges additionally for interest rate", - "_feeLiquidation": "The fee that is paid to the pool from liquidation", - "_feeLiquidationExpired": "The fee that is paid to the pool from liquidation when liquidating an expired account", - "_liquidationPremium": "Discount for totalValue which is given to liquidator", - "_liquidationPremiumExpired": "Discount for totalValue which is given to liquidator when liquidating an expired account" - } - }, - "setIncreaseDebtForbidden(bool)": { - "details": "Enables or disables borrowing In Credit Facade (and, consequently, the Credit Manager)", - "params": { - "_mode": "Prohibits borrowing if true, and allows borrowing otherwise" - } - }, - "setLimitPerBlock(uint128)": { - "details": "Sets the maximal borrowed amount per block", - "params": { - "newLimit": "The new max borrowed amount per block" - } - }, - "setLimits(uint128,uint128)": { - "details": "Sets borrowed amount limits in Credit Facade", - "params": { - "_maxBorrowedAmount": "Maximum borrowed amount", - "_minBorrowedAmount": "Minimum borrowed amount" - } - }, - "setLiquidationThreshold(address,uint16)": { - "details": "Sets a liquidation threshold for any token except the underlying", - "params": { - "liquidationThreshold": "in PERCENTAGE_FORMAT (100% = 10000)", - "token": "Token address" - } - }, - "setMaxEnabledTokens(uint8)": { - "details": "Sets the maximal amount of enabled tokens per Credit Account", - "params": { - "maxEnabledTokens": "The new maximal number of enabled tokens" - } - }, - "underlying()": { - "details": "Address of the Credit Manager's underlying asset" - }, - "upgradeCreditConfigurator(address)": { - "details": "Upgrades the Credit Configurator for a connected Credit Manager", - "params": { - "_creditConfigurator": "New Credit Configurator's address" - } - }, - "upgradeCreditFacade(address,bool)": { - "details": "Upgrades the Credit Facade corresponding to the Credit Manager", - "params": { - "_creditFacade": "address of the new CreditFacade", - "migrateParams": "Whether the previous CreditFacade's parameter need to be copied" - } - }, - "upgradePriceOracle()": { - "details": "Upgrades the price oracle in the Credit Manager, taking the address from the address provider" - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCollateralToken(address,uint16)": "3e7c88d6", - "addEmergencyLiquidator(address)": "84edaa42", - "addressProvider()": "2954018c", - "allowContract(address,address)": "7bccacee", - "allowToken(address)": "b53472ef", - "allowedContracts()": "373c8f62", - "creditFacade()": "2f7a1881", - "creditManager()": "c12c21c0", - "forbidAdapter(address)": "1495c7d2", - "forbidContract(address)": "52438e54", - "forbidToken(address)": "24147708", - "removeEmergencyLiquidator(address)": "a460e104", - "setExpirationDate(uint40)": "eb9606df", - "setFees(uint16,uint16,uint16,uint16,uint16)": "f206d32a", - "setIncreaseDebtForbidden(bool)": "ffd9b907", - "setLimitPerBlock(uint128)": "9c55a054", - "setLimits(uint128,uint128)": "9f1c5069", - "setLiquidationThreshold(address,uint16)": "a70bc542", - "setMaxEnabledTokens(uint8)": "dc2b21c1", - "underlying()": "6f307dc3", - "upgradeCreditConfigurator(address)": "456e0742", - "upgradeCreditFacade(address,bool)": "526a41e8", - "upgradePriceOracle()": "f0527ac6", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AdapterUsedTwiceException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractIsNotAnAllowedAdapterException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditManagerOrFacadeUsedAsTargetContractsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleContractException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectExpirationDateException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectFeesException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectLimitsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectLiquidationThresholdException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetLTForUnderlyingException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"AdapterForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"AddedToUpgradeable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"ContractAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"}],\"name\":\"ContractForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newCreditConfigurator\",\"type\":\"address\"}],\"name\":\"CreditConfiguratorUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newCreditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CumulativeLossReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"EmergencyLiquidatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"EmergencyLiquidatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"name\":\"ExpirationDateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidationPremium\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidationPremiumExpired\",\"type\":\"uint16\"}],\"name\":\"FeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"IncreaseDebtForbiddenModeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"LimitPerBlockUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minBorrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxBorrowedAmount\",\"type\":\"uint256\"}],\"name\":\"LimitsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"MaxEnabledTokensUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"NewEmergencyLiquidationDiscount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"NewMaxCumulativeLoss\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"NewTotalDebtLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"PriceOracleUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"RemovedFromUpgradeable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidityThreshold\",\"type\":\"uint16\"}],\"name\":\"TokenLiquidationThresholdUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"name\":\"addCollateralToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"addEmergencyLiquidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"allowContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowedContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditFacade\",\"outputs\":[{\"internalType\":\"contract CreditFacade\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"contract CreditManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"forbidAdapter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"forbidContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"forbidToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"}],\"name\":\"removeEmergencyLiquidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint40\",\"name\":\"newExpirationDate\",\"type\":\"uint40\"}],\"name\":\"setExpirationDate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_liquidationPremium\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"_liquidationPremiumExpired\",\"type\":\"uint16\"}],\"name\":\"setFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_mode\",\"type\":\"bool\"}],\"name\":\"setIncreaseDebtForbidden\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newLimit\",\"type\":\"uint128\"}],\"name\":\"setLimitPerBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_minBorrowedAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"_maxBorrowedAmount\",\"type\":\"uint128\"}],\"name\":\"setLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"name\":\"setLiquidationThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maxEnabledTokens\",\"type\":\"uint8\"}],\"name\":\"setMaxEnabledTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditConfigurator\",\"type\":\"address\"}],\"name\":\"upgradeCreditConfigurator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditFacade\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"migrateParams\",\"type\":\"bool\"}],\"name\":\"upgradeCreditFacade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgradePriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AdapterUsedTwiceException()\":[{\"details\":\"Thrown if an adapter that is already linked to a contract is being connected to another\"}],\"ContractIsNotAnAllowedAdapterException()\":[{\"details\":\"Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager\"}],\"CreditManagerOrFacadeUsedAsTargetContractsException()\":[{\"details\":\"Thrown if address of CreditManager or CreditFacade are being set as a target for an adapter\"}],\"IncompatibleContractException()\":[{\"details\":\"Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager or retrieving the Credit Manager from it fails\"}],\"IncorrectExpirationDateException()\":[{\"details\":\"Thrown if the new expiration date is less than the current expiration date or block.timestamp\"}],\"IncorrectFeesException()\":[{\"details\":\"Thrown if feeInterest or (liquidationPremium + feeLiquidation) is out of [0%..100%] range (encoded as [0..10000])\"}],\"IncorrectLimitsException()\":[{\"details\":\"Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit\"}],\"IncorrectLiquidationThresholdException()\":[{\"details\":\"Thrown if the newly set LT if zero or greater than the underlying's LT\"}],\"SetLTForUnderlyingException()\":[{\"details\":\"Thrown if the underlying's LT is set directly\"}]},\"kind\":\"dev\",\"methods\":{\"addCollateralToken(address,uint16)\":{\"details\":\"Adds token to the list of allowed collateral tokens, and sets the LT\",\"params\":{\"liquidationThreshold\":\"Liquidation threshold for account health calculations\",\"token\":\"Address of token to be added\"}},\"addEmergencyLiquidator(address)\":{\"details\":\"Adds an address to the list of emergency liquidators\",\"params\":{\"liquidator\":\"The address to add to the list\"}},\"addressProvider()\":{\"details\":\"Address provider (needed for upgrading the Price Oracle)\"},\"allowContract(address,address)\":{\"details\":\"Adds pair [contract <-> adapter] to the list of allowed contracts or updates adapter address if a contract already has a connected adapter\",\"params\":{\"adapter\":\"Adapter address\",\"targetContract\":\"Address of allowed contract\"}},\"allowToken(address)\":{\"details\":\"Allow a known collateral token if it was forbidden before.\",\"params\":{\"token\":\"Address of collateral token\"}},\"allowedContracts()\":{\"details\":\"Returns all allowed contracts\"},\"creditFacade()\":{\"details\":\"Returns the Credit Facade currently connected to the Credit Manager\"},\"creditManager()\":{\"details\":\"Address of the Credit Manager\"},\"forbidAdapter(address)\":{\"details\":\"Forbids adapter (and only the adapter - the target contract is not affected)\",\"params\":{\"adapter\":\"Address of adapter to disable\"}},\"forbidContract(address)\":{\"details\":\"Forbids contract as a target for calls from Credit Accounts\",\"params\":{\"targetContract\":\"Address of a contract to be forbidden\"}},\"forbidToken(address)\":{\"details\":\"Forbids a collateral token. Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled or received as a result of adapter operation anymore. This means that a token can never be acquired through adapter operations after being forbidden.\",\"params\":{\"token\":\"Address of collateral token to forbid\"}},\"removeEmergencyLiquidator(address)\":{\"details\":\"Removex an address frp, the list of emergency liquidators\",\"params\":{\"liquidator\":\"The address to remove from the list\"}},\"setExpirationDate(uint40)\":{\"details\":\"Sets expiration date in a CreditFacade connected To a CreditManager with an expirable pool\",\"params\":{\"newExpirationDate\":\"The timestamp of the next expiration\"}},\"setFees(uint16,uint16,uint16,uint16,uint16)\":{\"details\":\"Sets fees for creditManager\",\"params\":{\"_feeInterest\":\"Percent which protocol charges additionally for interest rate\",\"_feeLiquidation\":\"The fee that is paid to the pool from liquidation\",\"_feeLiquidationExpired\":\"The fee that is paid to the pool from liquidation when liquidating an expired account\",\"_liquidationPremium\":\"Discount for totalValue which is given to liquidator\",\"_liquidationPremiumExpired\":\"Discount for totalValue which is given to liquidator when liquidating an expired account\"}},\"setIncreaseDebtForbidden(bool)\":{\"details\":\"Enables or disables borrowing In Credit Facade (and, consequently, the Credit Manager)\",\"params\":{\"_mode\":\"Prohibits borrowing if true, and allows borrowing otherwise\"}},\"setLimitPerBlock(uint128)\":{\"details\":\"Sets the maximal borrowed amount per block\",\"params\":{\"newLimit\":\"The new max borrowed amount per block\"}},\"setLimits(uint128,uint128)\":{\"details\":\"Sets borrowed amount limits in Credit Facade\",\"params\":{\"_maxBorrowedAmount\":\"Maximum borrowed amount\",\"_minBorrowedAmount\":\"Minimum borrowed amount\"}},\"setLiquidationThreshold(address,uint16)\":{\"details\":\"Sets a liquidation threshold for any token except the underlying\",\"params\":{\"liquidationThreshold\":\"in PERCENTAGE_FORMAT (100% = 10000)\",\"token\":\"Token address\"}},\"setMaxEnabledTokens(uint8)\":{\"details\":\"Sets the maximal amount of enabled tokens per Credit Account\",\"params\":{\"maxEnabledTokens\":\"The new maximal number of enabled tokens\"}},\"underlying()\":{\"details\":\"Address of the Credit Manager's underlying asset\"},\"upgradeCreditConfigurator(address)\":{\"details\":\"Upgrades the Credit Configurator for a connected Credit Manager\",\"params\":{\"_creditConfigurator\":\"New Credit Configurator's address\"}},\"upgradeCreditFacade(address,bool)\":{\"details\":\"Upgrades the Credit Facade corresponding to the Credit Manager\",\"params\":{\"_creditFacade\":\"address of the new CreditFacade\",\"migrateParams\":\"Whether the previous CreditFacade's parameter need to be copied\"}},\"upgradePriceOracle()\":{\"details\":\"Upgrades the price oracle in the Credit Manager, taking the address from the address provider\"},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SetLTForUnderlyingException()\":[{\"notice\":\"Underlying LT is derived from fee parameters and is set automatically on updating fees\"}]},\"kind\":\"user\",\"methods\":{\"addEmergencyLiquidator(address)\":{\"notice\":\"Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately.\"},\"forbidAdapter(address)\":{\"notice\":\"Used to clean up orphaned adapters\"},\"setMaxEnabledTokens(uint8)\":{\"notice\":\"A large number of enabled collateral tokens on a Credit Account can make liquidations and health checks prohibitively expensive in terms of gas, hence the number is limited\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":\"ICreditConfigurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "errors": { - "SetLTForUnderlyingException()": [ - { - "notice": "Underlying LT is derived from fee parameters and is set automatically on updating fees" - } - ] - }, - "kind": "user", - "methods": { - "addEmergencyLiquidator(address)": { - "notice": "Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately." - }, - "forbidAdapter(address)": { - "notice": "Used to clean up orphaned adapters" - }, - "setMaxEnabledTokens(uint8)": { - "notice": "A large number of enabled collateral tokens on a Credit Account can make liquidations and health checks prohibitively expensive in terms of gas, hence the number is limited" - } - }, - "version": 1 - } - }, - "ICreditConfiguratorEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "AdapterForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "AddedToUpgradeable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "ContractAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - } - ], - "name": "ContractForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newCreditConfigurator", - "type": "address" - } - ], - "name": "CreditConfiguratorUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newCreditFacade", - "type": "address" - } - ], - "name": "CreditFacadeUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "CumulativeLossReset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "EmergencyLiquidatorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "EmergencyLiquidatorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint40", - "name": "", - "type": "uint40" - } - ], - "name": "ExpirationDateUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidationPremium", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidationPremiumExpired", - "type": "uint16" - } - ], - "name": "FeesUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "name": "IncreaseDebtForbiddenModeChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "LimitPerBlockUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "minBorrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxBorrowedAmount", - "type": "uint256" - } - ], - "name": "LimitsUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "name": "MaxEnabledTokensUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "name": "NewEmergencyLiquidationDiscount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "NewMaxCumulativeLoss", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "name": "NewTotalDebtLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPriceOracle", - "type": "address" - } - ], - "name": "PriceOracleUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "RemovedFromUpgradeable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "liquidityThreshold", - "type": "uint16" - } - ], - "name": "TokenLiquidationThresholdUpdated", - "type": "event" - } - ], - "devdoc": { - "events": { - "AdapterForbidden(address)": { - "details": "Emits when a particular adapter for a target contract is forbidden" - }, - "AddedToUpgradeable(address)": { - "details": "Emits when an address is added to the upgradeable contract list" - }, - "ContractAllowed(address,address)": { - "details": "Emits when a contract <> adapter pair is linked for a Credit Manager" - }, - "ContractForbidden(address)": { - "details": "Emits when a 3rd-party contract is forbidden" - }, - "CreditConfiguratorUpgraded(address)": { - "details": "Emits when a new Credit Configurator is connected to the Credit Manager" - }, - "CreditFacadeUpgraded(address)": { - "details": "Emits when a new Credit Facade is connected to the Credit Manager" - }, - "CumulativeLossReset()": { - "details": "Emits when the current cumulative loss in Credit Facade is reset" - }, - "EmergencyLiquidatorAdded(address)": { - "details": "Emits when an address is added to the list of emergency liquidators" - }, - "EmergencyLiquidatorRemoved(address)": { - "details": "Emits when an address is removed from the list of emergency liquidators" - }, - "ExpirationDateUpdated(uint40)": { - "details": "Emits when the expiration date is updated in an expirable Credit Facade" - }, - "FeesUpdated(uint16,uint16,uint16,uint16,uint16)": { - "details": "Emits when Credit Manager's fee parameters are updated" - }, - "IncreaseDebtForbiddenModeChanged(bool)": { - "details": "Emits when the status of the debt increase restriction is changed" - }, - "LimitPerBlockUpdated(uint128)": { - "details": "Emits when the borrowing limit per block is changed" - }, - "LimitsUpdated(uint256,uint256)": { - "details": "Emits when debt principal limits are changed" - }, - "MaxEnabledTokensUpdated(uint8)": { - "details": "Emits when the enabled token limit is updated" - }, - "NewEmergencyLiquidationDiscount(uint16)": { - "details": "Emits when the emergency liquidation premium is set" - }, - "NewMaxCumulativeLoss(uint128)": { - "details": "Emits when new max cumulative loss is set" - }, - "NewTotalDebtLimit(uint128)": { - "details": "Emits when a new total debt limit is set" - }, - "PriceOracleUpgraded(address)": { - "details": "Emits when a new Price Oracle is connected to the Credit Manager" - }, - "RemovedFromUpgradeable(address)": { - "details": "Emits when an address is removed from the upgradeable contract list" - }, - "TokenAllowed(address)": { - "details": "Emits when a new or a previously forbidden token is allowed" - }, - "TokenForbidden(address)": { - "details": "Emits when a collateral token is forbidden" - }, - "TokenLiquidationThresholdUpdated(address,uint16)": { - "details": "Emits when a collateral token's liquidation threshold is changed" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"AdapterForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"AddedToUpgradeable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"ContractAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"}],\"name\":\"ContractForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newCreditConfigurator\",\"type\":\"address\"}],\"name\":\"CreditConfiguratorUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newCreditFacade\",\"type\":\"address\"}],\"name\":\"CreditFacadeUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CumulativeLossReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"EmergencyLiquidatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"EmergencyLiquidatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"name\":\"ExpirationDateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidationPremium\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidationPremiumExpired\",\"type\":\"uint16\"}],\"name\":\"FeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"IncreaseDebtForbiddenModeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"LimitPerBlockUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minBorrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxBorrowedAmount\",\"type\":\"uint256\"}],\"name\":\"LimitsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"MaxEnabledTokensUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"name\":\"NewEmergencyLiquidationDiscount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"NewMaxCumulativeLoss\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"name\":\"NewTotalDebtLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"PriceOracleUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"RemovedFromUpgradeable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"liquidityThreshold\",\"type\":\"uint16\"}],\"name\":\"TokenLiquidationThresholdUpdated\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AdapterForbidden(address)\":{\"details\":\"Emits when a particular adapter for a target contract is forbidden\"},\"AddedToUpgradeable(address)\":{\"details\":\"Emits when an address is added to the upgradeable contract list\"},\"ContractAllowed(address,address)\":{\"details\":\"Emits when a contract <> adapter pair is linked for a Credit Manager\"},\"ContractForbidden(address)\":{\"details\":\"Emits when a 3rd-party contract is forbidden\"},\"CreditConfiguratorUpgraded(address)\":{\"details\":\"Emits when a new Credit Configurator is connected to the Credit Manager\"},\"CreditFacadeUpgraded(address)\":{\"details\":\"Emits when a new Credit Facade is connected to the Credit Manager\"},\"CumulativeLossReset()\":{\"details\":\"Emits when the current cumulative loss in Credit Facade is reset\"},\"EmergencyLiquidatorAdded(address)\":{\"details\":\"Emits when an address is added to the list of emergency liquidators\"},\"EmergencyLiquidatorRemoved(address)\":{\"details\":\"Emits when an address is removed from the list of emergency liquidators\"},\"ExpirationDateUpdated(uint40)\":{\"details\":\"Emits when the expiration date is updated in an expirable Credit Facade\"},\"FeesUpdated(uint16,uint16,uint16,uint16,uint16)\":{\"details\":\"Emits when Credit Manager's fee parameters are updated\"},\"IncreaseDebtForbiddenModeChanged(bool)\":{\"details\":\"Emits when the status of the debt increase restriction is changed\"},\"LimitPerBlockUpdated(uint128)\":{\"details\":\"Emits when the borrowing limit per block is changed\"},\"LimitsUpdated(uint256,uint256)\":{\"details\":\"Emits when debt principal limits are changed\"},\"MaxEnabledTokensUpdated(uint8)\":{\"details\":\"Emits when the enabled token limit is updated\"},\"NewEmergencyLiquidationDiscount(uint16)\":{\"details\":\"Emits when the emergency liquidation premium is set\"},\"NewMaxCumulativeLoss(uint128)\":{\"details\":\"Emits when new max cumulative loss is set\"},\"NewTotalDebtLimit(uint128)\":{\"details\":\"Emits when a new total debt limit is set\"},\"PriceOracleUpgraded(address)\":{\"details\":\"Emits when a new Price Oracle is connected to the Credit Manager\"},\"RemovedFromUpgradeable(address)\":{\"details\":\"Emits when an address is removed from the upgradeable contract list\"},\"TokenAllowed(address)\":{\"details\":\"Emits when a new or a previously forbidden token is allowed\"},\"TokenForbidden(address)\":{\"details\":\"Emits when a collateral token is forbidden\"},\"TokenLiquidationThresholdUpdated(address,uint16)\":{\"details\":\"Emits when a collateral token's liquidation threshold is changed\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":\"ICreditConfiguratorEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "ICreditConfiguratorExceptions": { - "abi": [ - { - "inputs": [], - "name": "AdapterUsedTwiceException", - "type": "error" - }, - { - "inputs": [], - "name": "ContractIsNotAnAllowedAdapterException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditManagerOrFacadeUsedAsTargetContractsException", - "type": "error" - }, - { - "inputs": [], - "name": "IncompatibleContractException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectExpirationDateException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectFeesException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectLimitsException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectLiquidationThresholdException", - "type": "error" - }, - { - "inputs": [], - "name": "SetLTForUnderlyingException", - "type": "error" - } - ], - "devdoc": { - "details": "CreditConfigurator Exceptions", - "errors": { - "AdapterUsedTwiceException()": [ - { - "details": "Thrown if an adapter that is already linked to a contract is being connected to another" - } - ], - "ContractIsNotAnAllowedAdapterException()": [ - { - "details": "Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager" - } - ], - "CreditManagerOrFacadeUsedAsTargetContractsException()": [ - { - "details": "Thrown if address of CreditManager or CreditFacade are being set as a target for an adapter" - } - ], - "IncompatibleContractException()": [ - { - "details": "Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager or retrieving the Credit Manager from it fails" - } - ], - "IncorrectExpirationDateException()": [ - { - "details": "Thrown if the new expiration date is less than the current expiration date or block.timestamp" - } - ], - "IncorrectFeesException()": [ - { - "details": "Thrown if feeInterest or (liquidationPremium + feeLiquidation) is out of [0%..100%] range (encoded as [0..10000])" - } - ], - "IncorrectLimitsException()": [ - { - "details": "Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit" - } - ], - "IncorrectLiquidationThresholdException()": [ - { - "details": "Thrown if the newly set LT if zero or greater than the underlying's LT" - } - ], - "SetLTForUnderlyingException()": [ - { - "details": "Thrown if the underlying's LT is set directly" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AdapterUsedTwiceException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractIsNotAnAllowedAdapterException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditManagerOrFacadeUsedAsTargetContractsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompatibleContractException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectExpirationDateException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectFeesException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectLimitsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectLiquidationThresholdException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SetLTForUnderlyingException\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"CreditConfigurator Exceptions\",\"errors\":{\"AdapterUsedTwiceException()\":[{\"details\":\"Thrown if an adapter that is already linked to a contract is being connected to another\"}],\"ContractIsNotAnAllowedAdapterException()\":[{\"details\":\"Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager\"}],\"CreditManagerOrFacadeUsedAsTargetContractsException()\":[{\"details\":\"Thrown if address of CreditManager or CreditFacade are being set as a target for an adapter\"}],\"IncompatibleContractException()\":[{\"details\":\"Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager or retrieving the Credit Manager from it fails\"}],\"IncorrectExpirationDateException()\":[{\"details\":\"Thrown if the new expiration date is less than the current expiration date or block.timestamp\"}],\"IncorrectFeesException()\":[{\"details\":\"Thrown if feeInterest or (liquidationPremium + feeLiquidation) is out of [0%..100%] range (encoded as [0..10000])\"}],\"IncorrectLimitsException()\":[{\"details\":\"Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit\"}],\"IncorrectLiquidationThresholdException()\":[{\"details\":\"Thrown if the newly set LT if zero or greater than the underlying's LT\"}],\"SetLTForUnderlyingException()\":[{\"details\":\"Thrown if the underlying's LT is set directly\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"SetLTForUnderlyingException()\":[{\"notice\":\"Underlying LT is derived from fee parameters and is set automatically on updating fees\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":\"ICreditConfiguratorExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "errors": { - "SetLTForUnderlyingException()": [ - { - "notice": "Underlying LT is derived from fee parameters and is set automatically on updating fees" - } - ] - }, - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol": { - "ICreditFacade": { - "abi": [ - { - "inputs": [], - "name": "AccountTransferNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "ActionProhibitedWithForbiddenTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "BalanceLessThanMinimumDesiredException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowAmountOutOfLimitsException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowedBlockLimitException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateNonExpiredException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateWithSuchHealthFactorException", - "type": "error" - }, - { - "inputs": [], - "name": "CantTransferLiquidatableAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedBalancesAlreadySetException", - "type": "error" - }, - { - "inputs": [], - "name": "ForbiddenDuringClosureException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCallDataException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseDebtForbiddenException", - "type": "error" - }, - { - "inputs": [], - "name": "LiquiditySanityCheckException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedForBlacklistedAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedInWhitelistedMode", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedWhenNotExpirableException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "OpenAccountNotAllowedAfterExpirationException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "UnknownMethodException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "AddCollateral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "blacklistHelper", - "type": "address" - } - ], - "name": "BlacklistHelperSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "CloseCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "DecreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "IncreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "IncurLossOnLiquidation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateExpiredCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "MultiCallFinished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "MultiCallStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "OpenCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "TransferAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "TransferAccountAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "UnderlyingSentToBlacklistHelper", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "approveAccountTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "blacklistHelper", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountHealthFactor", - "outputs": [ - { - "internalType": "uint256", - "name": "hf", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcTotalValue", - "outputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "twv", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "closeCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "convertWETH", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "closeCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "creditManager", - "outputs": [ - { - "internalType": "contract ICreditManagerV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "degenNFT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "hasOpenedCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isBlacklistableUnderlying", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "isTokenAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "limits", - "outputs": [ - { - "internalType": "uint128", - "name": "minBorrowedAmount", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "maxBorrowedAmount", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "convertWETH", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateExpiredCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "convertWETH", - "type": "bool" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "liquidateExpiredCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "lossParams", - "outputs": [ - { - "internalType": "uint128", - "name": "currentCumulativeLoss", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "maxCumulativeLoss", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - } - ], - "name": "multicall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "uint16", - "name": "leverageFactor", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "openCreditAccount", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct MultiCall[]", - "name": "calls", - "type": "tuple[]" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "openCreditAccountMulticall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "maxBorrowedAmountPerBlock", - "type": "uint128" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint40", - "name": "expirationDate", - "type": "uint40" - }, - { - "internalType": "uint16", - "name": "emergencyLiquidationDiscount", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDebt", - "outputs": [ - { - "internalType": "uint128", - "name": "currentTotalDebt", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "totalDebtLimit", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferAccountOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transfersAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AccountTransferNotAllowedException()": [ - { - "details": "Thrown if a user attempts to transfer a CA to an address that didn't allow it" - } - ], - "ActionProhibitedWithForbiddenTokensException()": [ - { - "details": "Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled" - } - ], - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "BalanceLessThanMinimumDesiredException(address)": [ - { - "details": "Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called" - } - ], - "BorrowAmountOutOfLimitsException()": [ - { - "details": "Thrown if the new debt principal for a CA falls outside of borrowing limits" - } - ], - "BorrowedBlockLimitException()": [ - { - "details": "Thrown if too much new debt was taken within a single block" - } - ], - "CantLiquidateNonExpiredException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired" - } - ], - "CantLiquidateWithSuchHealthFactorException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account with a health factor above 1" - } - ], - "CantTransferLiquidatableAccountException()": [ - { - "details": "Thrown if the account owner tries to transfer an unhealthy account" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "ExpectedBalancesAlreadySetException()": [ - { - "details": "Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice" - } - ], - "ForbiddenDuringClosureException()": [ - { - "details": "Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "IncorrectCallDataException()": [ - { - "details": "Thrown if call data passed to a multicall is too short" - } - ], - "IncreaseAndDecreaseForbiddenInOneCallException()": [ - { - "details": "Thrown if debt increase and decrease are subsequently attempted in one multicall" - } - ], - "IncreaseDebtForbiddenException()": [ - { - "details": "Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on" - } - ], - "LiquiditySanityCheckException()": [ - { - "details": "Thrown when the pool receives less funds than borrowAmountWithInterest on account closure" - } - ], - "NotAllowedForBlacklistedAddressException()": [ - { - "details": "Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token" - } - ], - "NotAllowedInWhitelistedMode()": [ - { - "details": "Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode" - } - ], - "NotAllowedWhenNotExpirableException()": [ - { - "details": "Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "OpenAccountNotAllowedAfterExpirationException()": [ - { - "details": "Thrown if a user attempts to open an account on a Credit Facade that has expired" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "UnknownMethodException()": [ - { - "details": "Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": { - "addCollateral(address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "onBehalfOf": "Address of the borrower whose account is funded", - "token": "Address of a collateral token" - } - }, - "approveAccountTransfer(address,bool)": { - "details": "Approves account transfer from another user to msg.sender", - "params": { - "from": "Address for which account transfers are allowed/forbidden", - "state": "True is transfer is allowed, false if forbidden" - } - }, - "blacklistHelper()": { - "details": "Address of the blacklist helper or address(0), if underlying is not blacklistable" - }, - "calcCreditAccountHealthFactor(address)": { - "details": "Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued + fees More info: https://dev.gearbox.fi/developers/credit/economy#health-factor", - "params": { - "creditAccount": "Credit account address" - }, - "returns": { - "hf": "= Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)" - } - }, - "calcTotalValue(address)": { - "details": "Calculates total value for provided Credit Account in underlying", - "params": { - "creditAccount": "Credit Account address" - }, - "returns": { - "total": "Total value in underlying", - "twv": "Total weighted (discounted by liquidation thresholds) value in underlying" - } - }, - "closeCreditAccount(address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and closes the account - Wraps ETH to WETH and sends it msg.sender if value > 0 - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying in order to pay the debt. - Closes credit account: + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender. + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked to be skipped in skipTokenMask - Emits a CloseCreditAccount event", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before closing the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to during account closing" - } - }, - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": { - "details": "A version of `closeCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "creditManager()": { - "details": "Returns the CreditManager connected to this Credit Facade" - }, - "degenNFT()": { - "details": "Address of the DegenNFT that gatekeeps account openings in whitelisted mode" - }, - "hasOpenedCreditAccount(address)": { - "details": "Returns true if the borrower has an open Credit Account", - "params": { - "borrower": "Borrower address" - } - }, - "isBlacklistableUnderlying()": { - "details": "Whether the underlying of connected Credit Manager is blacklistable" - }, - "isTokenAllowed(address)": { - "details": "Returns true if token is a collateral token and is not forbidden, otherwise returns false", - "params": { - "token": "Token to check" - } - }, - "limits()": { - "returns": { - "maxBorrowedAmount": "Maximal borrowed amount per credit account", - "minBorrowedAmount": "Minimal borrowed amount per credit account" - } - }, - "liquidateCreditAccount(address,address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and liquidates the account - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1. Total value has to be computed before the multicall, otherwise the liquidator would be able to manipulate it. - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0 - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying in order to pay the debt. - Liquidate credit account: + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees, only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower as totalValue * liquidationDiscount - amountToPool. + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator. + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying - Emits LiquidateCreditAccount event", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before liquidating the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to after liquidation" - } - }, - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": { - "details": "A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": { - "details": "Runs a batch of transactions within a multicall and liquidates the account when this Credit Facade is expired The general flow of liquidation is nearly the same as normal liquidations, with two main differences: - An account can be liquidated on an expired Credit Facade even with hf > 1. However, no accounts can be liquidated through this function if the Credit Facade is not expired. - Liquidation premiums and fees for liquidating expired accounts are reduced. It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade is expired.", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute before liquidating the account.", - "skipTokenMask": "Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred", - "to": "Address to send funds to after liquidation" - } - }, - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": { - "details": "A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility." - }, - "multicall((address,bytes)[])": { - "details": "Executes a batch of transactions within a Multicall, to manage an existing account - Wraps ETH and sends it back to msg.sender, if value > 0 - Executes the Multicall - Performs a fullCollateralCheck to verify that hf > 1 after all actions", - "params": { - "calls": "The array of MultiCall structs encoding the operations to execute." - } - }, - "openCreditAccount(uint256,address,uint16,uint16)": { - "details": "Opens credit account, borrows funds from the pool and pulls collateral without any additional action.", - "params": { - "amount": "The amount of collateral provided by the borrower", - "leverageFactor": "Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount as the user's own collateral, equivalent to 2x leverage.", - "onBehalfOf": "The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf", - "referralCode": "Referral code that is used for potential rewards. 0 if no referral code provided." - } - }, - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": { - "details": "Opens a Credit Account and runs a batch of operations in a multicall", - "params": { - "borrowedAmount": "Debt size", - "calls": "The array of MultiCall structs encoding the required operations. Generally must have at least a call to addCollateral, as otherwise the health check at the end will fail.", - "onBehalfOf": "The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf", - "referralCode": "Referral code which is used for potential rewards. 0 if no referral code provided" - } - }, - "params()": { - "returns": { - "emergencyLiquidationDiscount": "Premium for liquidations when the system is paused", - "expirationDate": "Timestamp of the next expiration (for expirable Credit Facades only)", - "isIncreaseDebtForbidden": "True if increasing debt is forbidden", - "maxBorrowedAmountPerBlock": "Maximal amount of new debt that can be taken per block" - } - }, - "transferAccountOwnership(address)": { - "details": "Transfers credit account to another user By default, this action is forbidden, and the user has to approve transfers from sender to itself by calling approveAccountTransfer. This is done to prevent malicious actors from transferring compromised accounts to other users.", - "params": { - "to": "Address to transfer the account to" - } - }, - "transfersAllowed(address,address)": { - "details": "Returns true if 'from' is allowed to transfer Credit Accounts to 'to'", - "params": { - "from": "Sender address to check allowance for", - "to": "Receiver address to check allowance for" - } - }, - "underlying()": { - "details": "Address of the underlying asset" - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCollateral(address,address,uint256)": "59781034", - "approveAccountTransfer(address,bool)": "00842b57", - "blacklistHelper()": "938294a9", - "calcCreditAccountHealthFactor(address)": "dfd59465", - "calcTotalValue(address)": "c7de38a6", - "closeCreditAccount(address,uint256,(address,bytes)[])": "12de90c9", - "closeCreditAccount(address,uint256,bool,(address,bytes)[])": "5f73fbec", - "creditManager()": "c12c21c0", - "degenNFT()": "9408b63f", - "hasOpenedCreditAccount(address)": "256ac915", - "isBlacklistableUnderlying()": "e1d49d7d", - "isTokenAllowed(address)": "f9eaee0d", - "limits()": "860aefcf", - "liquidateCreditAccount(address,address,uint256,(address,bytes)[])": "5c1ca80f", - "liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])": "5d91a0e0", - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": "26aac859", - "liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])": "82871ace", - "lossParams()": "50393109", - "multicall((address,bytes)[])": "caa5c23f", - "openCreditAccount(uint256,address,uint16,uint16)": "6c8f225d", - "openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)": "7071b7c5", - "params()": "cff0ab96", - "totalDebt()": "fc7b9c18", - "transferAccountOwnership(address)": "5019e20a", - "transfersAllowed(address,address)": "d9ccbec1", - "underlying()": "6f307dc3", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountTransferNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ActionProhibitedWithForbiddenTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"BalanceLessThanMinimumDesiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowAmountOutOfLimitsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowedBlockLimitException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateNonExpiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateWithSuchHealthFactorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantTransferLiquidatableAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedBalancesAlreadySetException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForbiddenDuringClosureException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectCallDataException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseAndDecreaseForbiddenInOneCallException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseDebtForbiddenException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquiditySanityCheckException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedForBlacklistedAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedInWhitelistedMode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedWhenNotExpirableException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OpenAccountNotAllowedAfterExpirationException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnknownMethodException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"AddCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"blacklistHelper\",\"type\":\"address\"}],\"name\":\"BlacklistHelperSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"CloseCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DecreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IncreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"IncurLossOnLiquidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateExpiredCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MultiCallFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"MultiCallStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"OpenCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"TransferAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"TransferAccountAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnderlyingSentToBlacklistHelper\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"approveAccountTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blacklistHelper\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hf\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcTotalValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"twv\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"closeCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"convertWETH\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"closeCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManager\",\"outputs\":[{\"internalType\":\"contract ICreditManagerV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"degenNFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"hasOpenedCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBlacklistableUnderlying\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"limits\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"minBorrowedAmount\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"maxBorrowedAmount\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"convertWETH\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateExpiredCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"convertWETH\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"liquidateExpiredCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lossParams\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"currentCumulativeLoss\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"maxCumulativeLoss\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"multicall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"leverageFactor\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"openCreditAccount\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct MultiCall[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"openCreditAccountMulticall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"maxBorrowedAmountPerBlock\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint40\",\"name\":\"expirationDate\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"emergencyLiquidationDiscount\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDebt\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"currentTotalDebt\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"totalDebtLimit\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferAccountOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfersAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccountTransferNotAllowedException()\":[{\"details\":\"Thrown if a user attempts to transfer a CA to an address that didn't allow it\"}],\"ActionProhibitedWithForbiddenTokensException()\":[{\"details\":\"Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled\"}],\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"BalanceLessThanMinimumDesiredException(address)\":[{\"details\":\"Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called\"}],\"BorrowAmountOutOfLimitsException()\":[{\"details\":\"Thrown if the new debt principal for a CA falls outside of borrowing limits\"}],\"BorrowedBlockLimitException()\":[{\"details\":\"Thrown if too much new debt was taken within a single block\"}],\"CantLiquidateNonExpiredException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired\"}],\"CantLiquidateWithSuchHealthFactorException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account with a health factor above 1\"}],\"CantTransferLiquidatableAccountException()\":[{\"details\":\"Thrown if the account owner tries to transfer an unhealthy account\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"ExpectedBalancesAlreadySetException()\":[{\"details\":\"Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice\"}],\"ForbiddenDuringClosureException()\":[{\"details\":\"Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"IncorrectCallDataException()\":[{\"details\":\"Thrown if call data passed to a multicall is too short\"}],\"IncreaseAndDecreaseForbiddenInOneCallException()\":[{\"details\":\"Thrown if debt increase and decrease are subsequently attempted in one multicall\"}],\"IncreaseDebtForbiddenException()\":[{\"details\":\"Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on\"}],\"LiquiditySanityCheckException()\":[{\"details\":\"Thrown when the pool receives less funds than borrowAmountWithInterest on account closure\"}],\"NotAllowedForBlacklistedAddressException()\":[{\"details\":\"Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token\"}],\"NotAllowedInWhitelistedMode()\":[{\"details\":\"Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode\"}],\"NotAllowedWhenNotExpirableException()\":[{\"details\":\"Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"OpenAccountNotAllowedAfterExpirationException()\":[{\"details\":\"Thrown if a user attempts to open an account on a Credit Facade that has expired\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"UnknownMethodException()\":[{\"details\":\"Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{\"addCollateral(address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"onBehalfOf\":\"Address of the borrower whose account is funded\",\"token\":\"Address of a collateral token\"}},\"approveAccountTransfer(address,bool)\":{\"details\":\"Approves account transfer from another user to msg.sender\",\"params\":{\"from\":\"Address for which account transfers are allowed/forbidden\",\"state\":\"True is transfer is allowed, false if forbidden\"}},\"blacklistHelper()\":{\"details\":\"Address of the blacklist helper or address(0), if underlying is not blacklistable\"},\"calcCreditAccountHealthFactor(address)\":{\"details\":\"Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued + fees More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\",\"params\":{\"creditAccount\":\"Credit account address\"},\"returns\":{\"hf\":\"= Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)\"}},\"calcTotalValue(address)\":{\"details\":\"Calculates total value for provided Credit Account in underlying\",\"params\":{\"creditAccount\":\"Credit Account address\"},\"returns\":{\"total\":\"Total value in underlying\",\"twv\":\"Total weighted (discounted by liquidation thresholds) value in underlying\"}},\"closeCreditAccount(address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and closes the account - Wraps ETH to WETH and sends it msg.sender if value > 0 - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying in order to pay the debt. - Closes credit account: + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender. + Transfers all enabled assets with non-zero balances to the \\\"to\\\" address, unless they are marked to be skipped in skipTokenMask - Emits a CloseCreditAccount event\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before closing the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to during account closing\"}},\"closeCreditAccount(address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `closeCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"creditManager()\":{\"details\":\"Returns the CreditManager connected to this Credit Facade\"},\"degenNFT()\":{\"details\":\"Address of the DegenNFT that gatekeeps account openings in whitelisted mode\"},\"hasOpenedCreditAccount(address)\":{\"details\":\"Returns true if the borrower has an open Credit Account\",\"params\":{\"borrower\":\"Borrower address\"}},\"isBlacklistableUnderlying()\":{\"details\":\"Whether the underlying of connected Credit Manager is blacklistable\"},\"isTokenAllowed(address)\":{\"details\":\"Returns true if token is a collateral token and is not forbidden, otherwise returns false\",\"params\":{\"token\":\"Token to check\"}},\"limits()\":{\"returns\":{\"maxBorrowedAmount\":\"Maximal borrowed amount per credit account\",\"minBorrowedAmount\":\"Minimal borrowed amount per credit account\"}},\"liquidateCreditAccount(address,address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and liquidates the account - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1. Total value has to be computed before the multicall, otherwise the liquidator would be able to manipulate it. - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0 - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying in order to pay the debt. - Liquidate credit account: + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees, only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower as totalValue * liquidationDiscount - amountToPool. + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator. + Transfers all enabled assets with non-zero balances to the \\\"to\\\" address, unless they are marked to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying - Emits LiquidateCreditAccount event\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before liquidating the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to after liquidation\"}},\"liquidateCreditAccount(address,address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])\":{\"details\":\"Runs a batch of transactions within a multicall and liquidates the account when this Credit Facade is expired The general flow of liquidation is nearly the same as normal liquidations, with two main differences: - An account can be liquidated on an expired Credit Facade even with hf > 1. However, no accounts can be liquidated through this function if the Credit Facade is not expired. - Liquidation premiums and fees for liquidating expired accounts are reduced. It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade is expired.\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute before liquidating the account.\",\"skipTokenMask\":\"Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\",\"to\":\"Address to send funds to after liquidation\"}},\"liquidateExpiredCreditAccount(address,address,uint256,bool,(address,bytes)[])\":{\"details\":\"A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored. Used for backward compatibility.\"},\"multicall((address,bytes)[])\":{\"details\":\"Executes a batch of transactions within a Multicall, to manage an existing account - Wraps ETH and sends it back to msg.sender, if value > 0 - Executes the Multicall - Performs a fullCollateralCheck to verify that hf > 1 after all actions\",\"params\":{\"calls\":\"The array of MultiCall structs encoding the operations to execute.\"}},\"openCreditAccount(uint256,address,uint16,uint16)\":{\"details\":\"Opens credit account, borrows funds from the pool and pulls collateral without any additional action.\",\"params\":{\"amount\":\"The amount of collateral provided by the borrower\",\"leverageFactor\":\"Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount as the user's own collateral, equivalent to 2x leverage.\",\"onBehalfOf\":\"The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf\",\"referralCode\":\"Referral code that is used for potential rewards. 0 if no referral code provided.\"}},\"openCreditAccountMulticall(uint256,address,(address,bytes)[],uint16)\":{\"details\":\"Opens a Credit Account and runs a batch of operations in a multicall\",\"params\":{\"borrowedAmount\":\"Debt size\",\"calls\":\"The array of MultiCall structs encoding the required operations. Generally must have at least a call to addCollateral, as otherwise the health check at the end will fail.\",\"onBehalfOf\":\"The address to open an account for. Transfers to it have to be allowed if msg.sender != obBehalfOf\",\"referralCode\":\"Referral code which is used for potential rewards. 0 if no referral code provided\"}},\"params()\":{\"returns\":{\"emergencyLiquidationDiscount\":\"Premium for liquidations when the system is paused\",\"expirationDate\":\"Timestamp of the next expiration (for expirable Credit Facades only)\",\"isIncreaseDebtForbidden\":\"True if increasing debt is forbidden\",\"maxBorrowedAmountPerBlock\":\"Maximal amount of new debt that can be taken per block\"}},\"transferAccountOwnership(address)\":{\"details\":\"Transfers credit account to another user By default, this action is forbidden, and the user has to approve transfers from sender to itself by calling approveAccountTransfer. This is done to prevent malicious actors from transferring compromised accounts to other users.\",\"params\":{\"to\":\"Address to transfer the account to\"}},\"transfersAllowed(address,address)\":{\"details\":\"Returns true if 'from' is allowed to transfer Credit Accounts to 'to'\",\"params\":{\"from\":\"Sender address to check allowance for\",\"to\":\"Receiver address to check allowance for\"}},\"underlying()\":{\"details\":\"Address of the underlying asset\"},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])\":{\"notice\":\"See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":\"ICreditFacade\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "liquidateExpiredCreditAccount(address,address,uint256,(address,bytes)[])": { - "notice": "See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - } - }, - "version": 1 - } - }, - "ICreditFacadeEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "AddCollateral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "blacklistHelper", - "type": "address" - } - ], - "name": "BlacklistHelperSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "CloseCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "DecreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "IncreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "IncurLossOnLiquidation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateExpiredCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "MultiCallFinished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "MultiCallStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "OpenCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenEnabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "TransferAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "TransferAccountAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "UnderlyingSentToBlacklistHelper", - "type": "event" - } - ], - "devdoc": { - "events": { - "AddCollateral(address,address,uint256)": { - "details": "Emits when the account owner add new collateral to a CA" - }, - "BlacklistHelperSet(address)": { - "details": "Emits when Blacklist Helper is set for the Credit Facade upon creation" - }, - "CloseCreditAccount(address,address)": { - "details": "Emits when the account owner closes their CA normally" - }, - "DecreaseBorrowedAmount(address,uint256)": { - "details": "Emits when the account owner reduces CA's debt" - }, - "IncreaseBorrowedAmount(address,uint256)": { - "details": "Emits when the account owner increases CA's debt" - }, - "IncurLossOnLiquidation(uint256)": { - "details": "Emits when pool incurs loss on account liquidation and facade forbids borrowing" - }, - "LiquidateCreditAccount(address,address,address,uint256)": { - "details": "Emits when a Credit Account is liquidated due to low health factor" - }, - "LiquidateExpiredCreditAccount(address,address,address,uint256)": { - "details": "Emits when a Credit Account is liquidated due to expiry" - }, - "MultiCallFinished()": { - "details": "Emits when a multicall is finished" - }, - "MultiCallStarted(address)": { - "details": "Emits when a multicall is started" - }, - "OpenCreditAccount(address,address,uint256,uint16)": { - "details": "Emits when a new Credit Account is opened through the Credit Facade" - }, - "TokenDisabled(address,address)": { - "details": "Emits when the account owner disables a token on their CA" - }, - "TokenEnabled(address,address)": { - "details": "Emits when the account owner enables a token on their CA" - }, - "TransferAccount(address,address)": { - "details": "Emits when Credit Account ownership is transferred" - }, - "TransferAccountAllowed(address,address,bool)": { - "details": "Emits when the user changes approval for account transfers to itself from another address" - }, - "UnderlyingSentToBlacklistHelper(address,uint256)": { - "details": "Emits when remaining funds in underlying currency are sent to the blacklist helper upon blacklisted borrower liquidation" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"AddCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"blacklistHelper\",\"type\":\"address\"}],\"name\":\"BlacklistHelperSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"CloseCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"DecreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IncreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"IncurLossOnLiquidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateExpiredCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MultiCallFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"MultiCallStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"OpenCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"TransferAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"TransferAccountAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"UnderlyingSentToBlacklistHelper\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AddCollateral(address,address,uint256)\":{\"details\":\"Emits when the account owner add new collateral to a CA\"},\"BlacklistHelperSet(address)\":{\"details\":\"Emits when Blacklist Helper is set for the Credit Facade upon creation\"},\"CloseCreditAccount(address,address)\":{\"details\":\"Emits when the account owner closes their CA normally\"},\"DecreaseBorrowedAmount(address,uint256)\":{\"details\":\"Emits when the account owner reduces CA's debt\"},\"IncreaseBorrowedAmount(address,uint256)\":{\"details\":\"Emits when the account owner increases CA's debt\"},\"IncurLossOnLiquidation(uint256)\":{\"details\":\"Emits when pool incurs loss on account liquidation and facade forbids borrowing\"},\"LiquidateCreditAccount(address,address,address,uint256)\":{\"details\":\"Emits when a Credit Account is liquidated due to low health factor\"},\"LiquidateExpiredCreditAccount(address,address,address,uint256)\":{\"details\":\"Emits when a Credit Account is liquidated due to expiry\"},\"MultiCallFinished()\":{\"details\":\"Emits when a multicall is finished\"},\"MultiCallStarted(address)\":{\"details\":\"Emits when a multicall is started\"},\"OpenCreditAccount(address,address,uint256,uint16)\":{\"details\":\"Emits when a new Credit Account is opened through the Credit Facade\"},\"TokenDisabled(address,address)\":{\"details\":\"Emits when the account owner disables a token on their CA\"},\"TokenEnabled(address,address)\":{\"details\":\"Emits when the account owner enables a token on their CA\"},\"TransferAccount(address,address)\":{\"details\":\"Emits when Credit Account ownership is transferred\"},\"TransferAccountAllowed(address,address,bool)\":{\"details\":\"Emits when the user changes approval for account transfers to itself from another address\"},\"UnderlyingSentToBlacklistHelper(address,uint256)\":{\"details\":\"Emits when remaining funds in underlying currency are sent to the blacklist helper upon blacklisted borrower liquidation\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":\"ICreditFacadeEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "ICreditFacadeExceptions": { - "abi": [ - { - "inputs": [], - "name": "AccountTransferNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "ActionProhibitedWithForbiddenTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "BalanceLessThanMinimumDesiredException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowAmountOutOfLimitsException", - "type": "error" - }, - { - "inputs": [], - "name": "BorrowedBlockLimitException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateNonExpiredException", - "type": "error" - }, - { - "inputs": [], - "name": "CantLiquidateWithSuchHealthFactorException", - "type": "error" - }, - { - "inputs": [], - "name": "CantTransferLiquidatableAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "ExpectedBalancesAlreadySetException", - "type": "error" - }, - { - "inputs": [], - "name": "ForbiddenDuringClosureException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectCallDataException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "type": "error" - }, - { - "inputs": [], - "name": "IncreaseDebtForbiddenException", - "type": "error" - }, - { - "inputs": [], - "name": "LiquiditySanityCheckException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedForBlacklistedAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedInWhitelistedMode", - "type": "error" - }, - { - "inputs": [], - "name": "NotAllowedWhenNotExpirableException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "OpenAccountNotAllowedAfterExpirationException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "UnknownMethodException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "AccountTransferNotAllowedException()": [ - { - "details": "Thrown if a user attempts to transfer a CA to an address that didn't allow it" - } - ], - "ActionProhibitedWithForbiddenTokensException()": [ - { - "details": "Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled" - } - ], - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "BalanceLessThanMinimumDesiredException(address)": [ - { - "details": "Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called" - } - ], - "BorrowAmountOutOfLimitsException()": [ - { - "details": "Thrown if the new debt principal for a CA falls outside of borrowing limits" - } - ], - "BorrowedBlockLimitException()": [ - { - "details": "Thrown if too much new debt was taken within a single block" - } - ], - "CantLiquidateNonExpiredException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired" - } - ], - "CantLiquidateWithSuchHealthFactorException()": [ - { - "details": "Thrown if a liquidator tries to liquidate an account with a health factor above 1" - } - ], - "CantTransferLiquidatableAccountException()": [ - { - "details": "Thrown if the account owner tries to transfer an unhealthy account" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "ExpectedBalancesAlreadySetException()": [ - { - "details": "Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice" - } - ], - "ForbiddenDuringClosureException()": [ - { - "details": "Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "IncorrectCallDataException()": [ - { - "details": "Thrown if call data passed to a multicall is too short" - } - ], - "IncreaseAndDecreaseForbiddenInOneCallException()": [ - { - "details": "Thrown if debt increase and decrease are subsequently attempted in one multicall" - } - ], - "IncreaseDebtForbiddenException()": [ - { - "details": "Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on" - } - ], - "LiquiditySanityCheckException()": [ - { - "details": "Thrown when the pool receives less funds than borrowAmountWithInterest on account closure" - } - ], - "NotAllowedForBlacklistedAddressException()": [ - { - "details": "Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token" - } - ], - "NotAllowedInWhitelistedMode()": [ - { - "details": "Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode" - } - ], - "NotAllowedWhenNotExpirableException()": [ - { - "details": "Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "OpenAccountNotAllowedAfterExpirationException()": [ - { - "details": "Thrown if a user attempts to open an account on a Credit Facade that has expired" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "UnknownMethodException()": [ - { - "details": "Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccountTransferNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ActionProhibitedWithForbiddenTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"BalanceLessThanMinimumDesiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowAmountOutOfLimitsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BorrowedBlockLimitException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateNonExpiredException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantLiquidateWithSuchHealthFactorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CantTransferLiquidatableAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedBalancesAlreadySetException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ForbiddenDuringClosureException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectCallDataException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseAndDecreaseForbiddenInOneCallException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncreaseDebtForbiddenException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquiditySanityCheckException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedForBlacklistedAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedInWhitelistedMode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAllowedWhenNotExpirableException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OpenAccountNotAllowedAfterExpirationException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnknownMethodException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AccountTransferNotAllowedException()\":[{\"details\":\"Thrown if a user attempts to transfer a CA to an address that didn't allow it\"}],\"ActionProhibitedWithForbiddenTokensException()\":[{\"details\":\"Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action that is not allowed with any forbidden tokens enabled\"}],\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"BalanceLessThanMinimumDesiredException(address)\":[{\"details\":\"Thrown if one of the balances on a Credit Account is less than expected at the end of a multicall, if revertIfReceivedLessThan was called\"}],\"BorrowAmountOutOfLimitsException()\":[{\"details\":\"Thrown if the new debt principal for a CA falls outside of borrowing limits\"}],\"BorrowedBlockLimitException()\":[{\"details\":\"Thrown if too much new debt was taken within a single block\"}],\"CantLiquidateNonExpiredException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired\"}],\"CantLiquidateWithSuchHealthFactorException()\":[{\"details\":\"Thrown if a liquidator tries to liquidate an account with a health factor above 1\"}],\"CantTransferLiquidatableAccountException()\":[{\"details\":\"Thrown if the account owner tries to transfer an unhealthy account\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"ExpectedBalancesAlreadySetException()\":[{\"details\":\"Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice\"}],\"ForbiddenDuringClosureException()\":[{\"details\":\"Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing an account\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"IncorrectCallDataException()\":[{\"details\":\"Thrown if call data passed to a multicall is too short\"}],\"IncreaseAndDecreaseForbiddenInOneCallException()\":[{\"details\":\"Thrown if debt increase and decrease are subsequently attempted in one multicall\"}],\"IncreaseDebtForbiddenException()\":[{\"details\":\"Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on\"}],\"LiquiditySanityCheckException()\":[{\"details\":\"Thrown when the pool receives less funds than borrowAmountWithInterest on account closure\"}],\"NotAllowedForBlacklistedAddressException()\":[{\"details\":\"Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token\"}],\"NotAllowedInWhitelistedMode()\":[{\"details\":\"Thrown if whitelisted mode is enabled, and an action is attempted that is not allowed in whitelisted mode\"}],\"NotAllowedWhenNotExpirableException()\":[{\"details\":\"Thrown if the CreditFacade is not expirable, and an aciton is attempted that requires expirability\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"OpenAccountNotAllowedAfterExpirationException()\":[{\"details\":\"Thrown if a user attempts to open an account on a Credit Facade that has expired\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"UnknownMethodException()\":[{\"details\":\"Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade during a multicall\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":\"ICreditFacadeExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "ICreditFacadeExtended": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "decreaseDebt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "disableToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "enableToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "increaseDebt", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct Balance[]", - "name": "expected", - "type": "tuple[]" - } - ], - "name": "revertIfReceivedLessThan", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addCollateral(address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "onBehalfOf": "Address of the borrower whose account is funded", - "token": "Address of a collateral token" - } - }, - "decreaseDebt(uint256)": { - "details": "Decrease debt - Decreases the debt by paying the requested amount + accrued interest + fees back to the pool - It's also include to this payment interest accrued at the moment and fees - Updates cunulativeIndex to cumulativeIndex now", - "params": { - "amount": "Amount to increase borrowed amount" - } - }, - "disableToken(address)": { - "details": "Disables a token on the caller's Credit Account", - "params": { - "token": "Token to disable" - } - }, - "enableToken(address)": { - "details": "Enables token in enabledTokenMask for the Credit Account of msg.sender", - "params": { - "token": "Address of token to enable" - } - }, - "increaseDebt(uint256)": { - "details": "Increases debt for msg.sender's Credit Account - Borrows the requested amount from the pool - Updates the CA's borrowAmount / cumulativeIndexOpen to correctly compute interest going forward - Performs a full collateral check", - "params": { - "amount": "Amount to borrow" - } - }, - "revertIfReceivedLessThan((address,uint256)[])": { - "details": "Stores expected balances (computed as current balance + passed delta) and compare with actual balances at the end of a multicall, reverts if at least one is less than expected", - "params": { - "expected": "Array of expected balance changes" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addCollateral(address,address,uint256)": "59781034", - "decreaseDebt(uint256)": "2a7ba1f7", - "disableToken(address)": "23e27a64", - "enableToken(address)": "c690908a", - "increaseDebt(uint256)": "2b7c7b11", - "revertIfReceivedLessThan((address,uint256)[])": "81314b59" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"disableToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"enableToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"increaseDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Balance[]\",\"name\":\"expected\",\"type\":\"tuple[]\"}],\"name\":\"revertIfReceivedLessThan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addCollateral(address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"onBehalfOf\":\"Address of the borrower whose account is funded\",\"token\":\"Address of a collateral token\"}},\"decreaseDebt(uint256)\":{\"details\":\"Decrease debt - Decreases the debt by paying the requested amount + accrued interest + fees back to the pool - It's also include to this payment interest accrued at the moment and fees - Updates cunulativeIndex to cumulativeIndex now\",\"params\":{\"amount\":\"Amount to increase borrowed amount\"}},\"disableToken(address)\":{\"details\":\"Disables a token on the caller's Credit Account\",\"params\":{\"token\":\"Token to disable\"}},\"enableToken(address)\":{\"details\":\"Enables token in enabledTokenMask for the Credit Account of msg.sender\",\"params\":{\"token\":\"Address of token to enable\"}},\"increaseDebt(uint256)\":{\"details\":\"Increases debt for msg.sender's Credit Account - Borrows the requested amount from the pool - Updates the CA's borrowAmount / cumulativeIndexOpen to correctly compute interest going forward - Performs a full collateral check\",\"params\":{\"amount\":\"Amount to borrow\"}},\"revertIfReceivedLessThan((address,uint256)[])\":{\"details\":\"Stores expected balances (computed as current balance + passed delta) and compare with actual balances at the end of a multicall, reverts if at least one is less than expected\",\"params\":{\"expected\":\"Array of expected balance changes\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableToken(address)\":{\"notice\":\"This is an extenstion function that does not exist in the Credit Facade itself and can only be used within a multicall\"},\"revertIfReceivedLessThan((address,uint256)[])\":{\"notice\":\"This is an extenstion function that does not exist in the Credit Facade itself and can only be used within a multicall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":\"ICreditFacadeExtended\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "disableToken(address)": { - "notice": "This is an extenstion function that does not exist in the Credit Facade itself and can only be used within a multicall" - }, - "revertIfReceivedLessThan((address,uint256)[])": { - "notice": "This is an extenstion function that does not exist in the Credit Facade itself and can only be used within a multicall" - } - }, - "version": 1 - } - }, - "ICreditFacadeV2": { - "abi": [ - { - "inputs": [], - "name": "params", - "outputs": [ - { - "internalType": "uint128", - "name": "maxBorrowedAmountPerBlock", - "type": "uint128" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint40", - "name": "expirationDate", - "type": "uint40" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "params()": { - "returns": { - "expirationDate": "Timestamp of the next expiration (for expirable Credit Facades only)", - "isIncreaseDebtForbidden": "True if increasing debt is forbidden", - "maxBorrowedAmountPerBlock": "Maximal amount of new debt that can be taken per block" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "params()": "cff0ab96" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"maxBorrowedAmountPerBlock\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint40\",\"name\":\"expirationDate\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"params()\":{\"returns\":{\"expirationDate\":\"Timestamp of the next expiration (for expirable Credit Facades only)\",\"isIncreaseDebtForbidden\":\"True if increasing debt is forbidden\",\"maxBorrowedAmountPerBlock\":\"Maximal amount of new debt that can be taken per block\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":\"ICreditFacadeV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol": { - "ICreditManagerV2": { - "abi": [ - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "ExecuteOrder", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newConfigurator", - "type": "address" - } - ], - "name": "NewConfigurator", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "adapterToContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approveCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "enum ClosureAction", - "name": "closureActionType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterest", - "type": "uint256" - } - ], - "name": "calcClosePayments", - "outputs": [ - { - "internalType": "uint256", - "name": "amountToPool", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountAccruedInterest", - "outputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountWithInterestAndFees", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "canLiquidateWhilePaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "checkAndEnableToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "checkAndOptimizeEnabledTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "checkEmergencyPausable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "enum ClosureAction", - "name": "closureActionType", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "address", - "name": "payer", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "skipTokenMask", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "convertWETH", - "type": "bool" - } - ], - "name": "closeCreditAccount", - "outputs": [ - { - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "collateralTokens", - "outputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenMask", - "type": "uint256" - } - ], - "name": "collateralTokensByMask", - "outputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint16", - "name": "liquidationThreshold", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "collateralTokensCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "contractToAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditConfigurator", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditFacade", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "cumulativeDropAtFastCheckRAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "disableToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "enabledTokensMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "executeOrder", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenIn", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balanceInBefore", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "balanceOutBefore", - "type": "uint256" - } - ], - "name": "fastCollateralCheck", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fees", - "outputs": [ - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "forbiddenTokenMask", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "fullCollateralCheck", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountOrRevert", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "liquidationThresholds", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "increase", - "type": "bool" - } - ], - "name": "manageDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "newBorrowedAmount", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxAllowedEnabledTokenLength", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - } - ], - "name": "openCreditAccount", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poolService", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceOracle", - "outputs": [ - { - "internalType": "contract IPriceOracleV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "tokenMasksMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transferAccountOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "universalAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wethAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": { - "adapterToContract(address)": { - "details": "Maps allowed adapters to their respective target contracts." - }, - "addCollateral(address,address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "creditAccount": "Address of the Credit Account", - "payer": "Address of the account which will be charged to provide additional collateral", - "token": "Collateral token to add" - } - }, - "approveCreditAccount(address,address,address,uint256)": { - "details": "Requests the Credit Account to approve a collateral token to another contract.", - "params": { - "amount": "New allowance amount", - "borrower": "Borrower's address", - "targetContract": "Spender to change allowance for", - "token": "Collateral token to approve" - } - }, - "calcClosePayments(uint256,uint8,uint256,uint256)": { - "details": "Computes amounts that must be sent to various addresses before closing an account", - "params": { - "borrowedAmount": "Credit Account's debt principal", - "borrowedAmountWithInterest": "Credit Account's debt principal + interest", - "closureActionType": "Type of account closure * CLOSE_ACCOUNT: The account is healthy and is closed normally * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)", - "totalValue": "Credit Accounts total value in underlying" - }, - "returns": { - "amountToPool": "Amount of underlying to be sent to the pool", - "loss": "Protocol's loss from bad debt (if any)", - "profit": "Protocol's profit from fees (if any)", - "remainingFunds": "Amount of underlying to be sent to the borrower (only applicable to liquidations)" - } - }, - "calcCreditAccountAccruedInterest(address)": { - "details": "Calculates the debt accrued by a Credit Account", - "params": { - "creditAccount": "Address of the Credit Account" - }, - "returns": { - "borrowedAmount": "The debt principal", - "borrowedAmountWithInterest": "The debt principal + accrued interest", - "borrowedAmountWithInterestAndFees": "The debt principal + accrued interest and protocol fees" - } - }, - "canLiquidateWhilePaused(address)": { - "details": "Maps addresses to their status as emergency liquidator." - }, - "checkAndEnableToken(address,address)": { - "details": "Enables a token on a Credit Account, including it into account health and total value calculations", - "params": { - "creditAccount": "Address of a Credit Account to enable the token for", - "token": "Address of the token to be enabled" - } - }, - "checkAndOptimizeEnabledTokens(address)": { - "details": "Checks that the number of enabled tokens on a Credit Account does not violate the maximal enabled token limit and tries to disable unused tokens if it does", - "params": { - "creditAccount": "Account to check enabled tokens for" - } - }, - "checkEmergencyPausable(address,bool)": { - "details": "Paused() state" - }, - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": { - "details": "Closes a Credit Account - covers both normal closure and liquidation - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator. Only emergency liquidators are able to liquidate account while the CM is paused. Emergency liquidations do not pay a liquidator premium or liquidation fees. - Calculates payments to various recipients on closure: + Computes amountToPool, which is the amount to be sent back to the pool. This includes the principal, interest and fees, but can't be more than total position value + Computes remainingFunds during liquidations - these are leftover funds after paying the pool and the liquidator, and are sent to the borrower + Computes protocol profit, which includes interest and liquidation fees + Computes loss if the totalValue is less than borrow amount + interest - Checks the underlying token balance: + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation - Send assets to the \"to\" address, as long as they are not included into skipTokenMask - If convertWETH is true, the function converts WETH into ETH before sending - Returns the Credit Account back to factory", - "params": { - "borrower": "Borrower address", - "closureActionType": "Whether the account is closed, liquidated or liquidated due to expiry", - "convertWETH": "If true converts WETH to ETH", - "payer": "Address which would be charged if credit account has not enough funds to cover amountToPool", - "skipTokenMask": "Tokenmask contains 1 for tokens which needed to be skipped for sending", - "to": "Address to which the leftover funds will be sent", - "totalValue": "Portfolio value for liqution, 0 for ordinary closure" - } - }, - "collateralTokens(uint256)": { - "details": "Returns the collateral token at requested index and its liquidation threshold", - "params": { - "id": "The index of token to return" - } - }, - "collateralTokensByMask(uint256)": { - "details": "Returns the collateral token with requested mask and its liquidationThreshold", - "params": { - "tokenMask": "Token mask corresponding to the token" - } - }, - "collateralTokensCount()": { - "details": "Total number of known collateral tokens." - }, - "contractToAdapter(address)": { - "details": "Maps 3rd party contracts to their respective adapters" - }, - "creditAccounts(address)": { - "details": "A map from borrower addresses to Credit Account addresses" - }, - "creditConfigurator()": { - "details": "Address of the connected Credit Configurator" - }, - "creditFacade()": { - "details": "Address of the connected Credit Facade" - }, - "cumulativeDropAtFastCheckRAY(address)": { - "details": "Maps the Credit Account to its current percentage drop across all swaps since the last full check, in RAY format" - }, - "disableToken(address,address)": { - "details": "Disables a token on a credit account", - "returns": { - "_0": "True if token mask was change otherwise False" - } - }, - "enabledTokensMap(address)": { - "details": "Maps Credit Accounts to bit masks encoding their enabled token sets Only enabled tokens are counted as collateral for the Credit Account" - }, - "executeOrder(address,address,bytes)": { - "details": "Requests a Credit Account to make a low-level call with provided data This is the intended pathway for state-changing interactions with 3rd-party protocols", - "params": { - "borrower": "Borrower's address", - "data": "Data to pass with the call", - "targetContract": "Contract to be called" - } - }, - "fastCollateralCheck(address,address,address,uint256,uint256)": { - "details": "Optimized health check for individual swap-like operations.", - "params": { - "balanceInBefore": "Balance of tokenIn before the operation", - "balanceOutBefore": "Balance of tokenOut before the operation", - "creditAccount": "Address of the Credit Account", - "tokenIn": "Address of the token spent by the swap", - "tokenOut": "Address of the token received from the swap" - } - }, - "fees()": { - "details": "Returns the fee parameters of the Credit Manager", - "returns": { - "feeInterest": "Percentage of interest taken by the protocol as profit", - "feeLiquidation": "Percentage of account value taken by the protocol as profit during unhealthy account liquidations", - "feeLiquidationExpired": "Percentage of account value taken by the protocol as profit during expired account liquidations", - "liquidationDiscount": "Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)", - "liquidationDiscountExpired": "Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - } - }, - "forbiddenTokenMask()": { - "details": "Bit mask encoding a set of forbidden tokens" - }, - "fullCollateralCheck(address)": { - "details": "Performs a full health check on an account, summing up value of all enabled collateral tokens", - "params": { - "creditAccount": "Address of the Credit Account to check" - } - }, - "getCreditAccountOrRevert(address)": { - "details": "Returns the address of a borrower's Credit Account, or reverts if there is none.", - "params": { - "borrower": "Borrower's address" - } - }, - "liquidationThresholds(address)": { - "details": "Returns the liquidation threshold for the provided token", - "params": { - "token": "Token to retrieve the LT for" - } - }, - "manageDebt(address,uint256,bool)": { - "details": "Manages debt size for borrower: - Increase debt: + Increases debt by transferring funds from the pool to the credit account + Updates the cumulative index to keep interest the same. Since interest is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1), cumulativeIndexOpen needs to be updated, as the borrow amount has changed - Decrease debt: + Repays debt partially + all interest and fees accrued thus far + Updates cunulativeIndex to cumulativeIndex now", - "params": { - "amount": "Amount to increase / decrease the principal by", - "creditAccount": "Address of the Credit Account to change debt for", - "increase": "True to increase principal, false to decrease" - }, - "returns": { - "newBorrowedAmount": "The new debt principal" - } - }, - "maxAllowedEnabledTokenLength()": { - "details": "The maximal number of enabled tokens on a single Credit Account" - }, - "openCreditAccount(uint256,address)": { - "details": "Opens credit account and borrows funds from the pool. - Takes Credit Account from the factory; - Requests the pool to lend underlying to the Credit Account", - "params": { - "borrowedAmount": "Amount to be borrowed by the Credit Account", - "onBehalfOf": "The owner of the newly opened Credit Account" - } - }, - "pool()": { - "details": "Address of the connected pool" - }, - "poolService()": { - "details": "Address of the connected pool" - }, - "priceOracle()": { - "details": "Address of the connected Price Oracle" - }, - "tokenMasksMap(address)": { - "details": "Returns the mask for the provided token", - "params": { - "token": "Token to returns the mask for" - } - }, - "transferAccountOwnership(address,address)": { - "details": "Transfers Credit Account ownership to another address", - "params": { - "from": "Address of previous owner", - "to": "Address of new owner" - } - }, - "underlying()": { - "details": "Address of the underlying asset" - }, - "universalAdapter()": { - "details": "Address of the universal adapter" - }, - "version()": { - "details": "Contract's version" - }, - "wethAddress()": { - "details": "Address of WETH" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "adapterToContract(address)": "ff687543", - "addCollateral(address,address,address,uint256)": "830aa745", - "approveCreditAccount(address,address,address,uint256)": "46fb371d", - "calcClosePayments(uint256,uint8,uint256,uint256)": "5063524a", - "calcCreditAccountAccruedInterest(address)": "3192195c", - "canLiquidateWhilePaused(address)": "38975bc4", - "checkAndEnableToken(address,address)": "51e3f160", - "checkAndOptimizeEnabledTokens(address)": "29df0b93", - "checkEmergencyPausable(address,bool)": "eb99c2bf", - "closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)": "2362a2d8", - "collateralTokens(uint256)": "172c48c7", - "collateralTokensByMask(uint256)": "e75538c7", - "collateralTokensCount()": "458936f5", - "contractToAdapter(address)": "fdd57645", - "creditAccounts(address)": "055ee9b5", - "creditConfigurator()": "f9aa028a", - "creditFacade()": "2f7a1881", - "cumulativeDropAtFastCheckRAY(address)": "3e8297ca", - "disableToken(address,address)": "0d8f9cee", - "enabledTokensMap(address)": "8991b2f1", - "executeOrder(address,address,bytes)": "6ce4074a", - "fastCollateralCheck(address,address,address,uint256,uint256)": "654a9eda", - "fees()": "9af1d35a", - "forbiddenTokenMask()": "9fd12b77", - "fullCollateralCheck(address)": "95373018", - "getCreditAccountOrRevert(address)": "e958b704", - "liquidationThresholds(address)": "78327438", - "manageDebt(address,uint256,bool)": "94cf073a", - "maxAllowedEnabledTokenLength()": "8345f26e", - "openCreditAccount(uint256,address)": "8fe3f93f", - "pool()": "16f0115b", - "poolService()": "570a7af2", - "priceOracle()": "2630c12f", - "tokenMasksMap(address)": "f67c5bd0", - "transferAccountOwnership(address,address)": "e1998cf9", - "underlying()": "6f307dc3", - "universalAdapter()": "fe47cde7", - "version()": "54fd4d50", - "wethAddress()": "4f0e0ef3" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"ExecuteOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newConfigurator\",\"type\":\"address\"}],\"name\":\"NewConfigurator\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"adapterToContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"enum ClosureAction\",\"name\":\"closureActionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterest\",\"type\":\"uint256\"}],\"name\":\"calcClosePayments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToPool\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountAccruedInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountWithInterestAndFees\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canLiquidateWhilePaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkAndEnableToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"checkAndOptimizeEnabledTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"checkEmergencyPausable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"enum ClosureAction\",\"name\":\"closureActionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"payer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"skipTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"convertWETH\",\"type\":\"bool\"}],\"name\":\"closeCreditAccount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"collateralTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenMask\",\"type\":\"uint256\"}],\"name\":\"collateralTokensByMask\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collateralTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"contractToAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditFacade\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"cumulativeDropAtFastCheckRAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"disableToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"enabledTokensMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeOrder\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balanceInBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceOutBefore\",\"type\":\"uint256\"}],\"name\":\"fastCollateralCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forbiddenTokenMask\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"fullCollateralCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountOrRevert\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"liquidationThresholds\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"increase\",\"type\":\"bool\"}],\"name\":\"manageDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBorrowedAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAllowedEnabledTokenLength\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"openCreditAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"contract IPriceOracleV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"tokenMasksMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferAccountOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlying\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"universalAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wethAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{\"adapterToContract(address)\":{\"details\":\"Maps allowed adapters to their respective target contracts.\"},\"addCollateral(address,address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"creditAccount\":\"Address of the Credit Account\",\"payer\":\"Address of the account which will be charged to provide additional collateral\",\"token\":\"Collateral token to add\"}},\"approveCreditAccount(address,address,address,uint256)\":{\"details\":\"Requests the Credit Account to approve a collateral token to another contract.\",\"params\":{\"amount\":\"New allowance amount\",\"borrower\":\"Borrower's address\",\"targetContract\":\"Spender to change allowance for\",\"token\":\"Collateral token to approve\"}},\"calcClosePayments(uint256,uint8,uint256,uint256)\":{\"details\":\"Computes amounts that must be sent to various addresses before closing an account\",\"params\":{\"borrowedAmount\":\"Credit Account's debt principal\",\"borrowedAmountWithInterest\":\"Credit Account's debt principal + interest\",\"closureActionType\":\"Type of account closure * CLOSE_ACCOUNT: The account is healthy and is closed normally * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)\",\"totalValue\":\"Credit Accounts total value in underlying\"},\"returns\":{\"amountToPool\":\"Amount of underlying to be sent to the pool\",\"loss\":\"Protocol's loss from bad debt (if any)\",\"profit\":\"Protocol's profit from fees (if any)\",\"remainingFunds\":\"Amount of underlying to be sent to the borrower (only applicable to liquidations)\"}},\"calcCreditAccountAccruedInterest(address)\":{\"details\":\"Calculates the debt accrued by a Credit Account\",\"params\":{\"creditAccount\":\"Address of the Credit Account\"},\"returns\":{\"borrowedAmount\":\"The debt principal\",\"borrowedAmountWithInterest\":\"The debt principal + accrued interest\",\"borrowedAmountWithInterestAndFees\":\"The debt principal + accrued interest and protocol fees\"}},\"canLiquidateWhilePaused(address)\":{\"details\":\"Maps addresses to their status as emergency liquidator.\"},\"checkAndEnableToken(address,address)\":{\"details\":\"Enables a token on a Credit Account, including it into account health and total value calculations\",\"params\":{\"creditAccount\":\"Address of a Credit Account to enable the token for\",\"token\":\"Address of the token to be enabled\"}},\"checkAndOptimizeEnabledTokens(address)\":{\"details\":\"Checks that the number of enabled tokens on a Credit Account does not violate the maximal enabled token limit and tries to disable unused tokens if it does\",\"params\":{\"creditAccount\":\"Account to check enabled tokens for\"}},\"checkEmergencyPausable(address,bool)\":{\"details\":\"Paused() state\"},\"closeCreditAccount(address,uint8,uint256,address,address,uint256,bool)\":{\"details\":\"Closes a Credit Account - covers both normal closure and liquidation - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator. Only emergency liquidators are able to liquidate account while the CM is paused. Emergency liquidations do not pay a liquidator premium or liquidation fees. - Calculates payments to various recipients on closure: + Computes amountToPool, which is the amount to be sent back to the pool. This includes the principal, interest and fees, but can't be more than total position value + Computes remainingFunds during liquidations - these are leftover funds after paying the pool and the liquidator, and are sent to the borrower + Computes protocol profit, which includes interest and liquidation fees + Computes loss if the totalValue is less than borrow amount + interest - Checks the underlying token balance: + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation - Send assets to the \\\"to\\\" address, as long as they are not included into skipTokenMask - If convertWETH is true, the function converts WETH into ETH before sending - Returns the Credit Account back to factory\",\"params\":{\"borrower\":\"Borrower address\",\"closureActionType\":\"Whether the account is closed, liquidated or liquidated due to expiry\",\"convertWETH\":\"If true converts WETH to ETH\",\"payer\":\"Address which would be charged if credit account has not enough funds to cover amountToPool\",\"skipTokenMask\":\"Tokenmask contains 1 for tokens which needed to be skipped for sending\",\"to\":\"Address to which the leftover funds will be sent\",\"totalValue\":\"Portfolio value for liqution, 0 for ordinary closure\"}},\"collateralTokens(uint256)\":{\"details\":\"Returns the collateral token at requested index and its liquidation threshold\",\"params\":{\"id\":\"The index of token to return\"}},\"collateralTokensByMask(uint256)\":{\"details\":\"Returns the collateral token with requested mask and its liquidationThreshold\",\"params\":{\"tokenMask\":\"Token mask corresponding to the token\"}},\"collateralTokensCount()\":{\"details\":\"Total number of known collateral tokens.\"},\"contractToAdapter(address)\":{\"details\":\"Maps 3rd party contracts to their respective adapters\"},\"creditAccounts(address)\":{\"details\":\"A map from borrower addresses to Credit Account addresses\"},\"creditConfigurator()\":{\"details\":\"Address of the connected Credit Configurator\"},\"creditFacade()\":{\"details\":\"Address of the connected Credit Facade\"},\"cumulativeDropAtFastCheckRAY(address)\":{\"details\":\"Maps the Credit Account to its current percentage drop across all swaps since the last full check, in RAY format\"},\"disableToken(address,address)\":{\"details\":\"Disables a token on a credit account\",\"returns\":{\"_0\":\"True if token mask was change otherwise False\"}},\"enabledTokensMap(address)\":{\"details\":\"Maps Credit Accounts to bit masks encoding their enabled token sets Only enabled tokens are counted as collateral for the Credit Account\"},\"executeOrder(address,address,bytes)\":{\"details\":\"Requests a Credit Account to make a low-level call with provided data This is the intended pathway for state-changing interactions with 3rd-party protocols\",\"params\":{\"borrower\":\"Borrower's address\",\"data\":\"Data to pass with the call\",\"targetContract\":\"Contract to be called\"}},\"fastCollateralCheck(address,address,address,uint256,uint256)\":{\"details\":\"Optimized health check for individual swap-like operations.\",\"params\":{\"balanceInBefore\":\"Balance of tokenIn before the operation\",\"balanceOutBefore\":\"Balance of tokenOut before the operation\",\"creditAccount\":\"Address of the Credit Account\",\"tokenIn\":\"Address of the token spent by the swap\",\"tokenOut\":\"Address of the token received from the swap\"}},\"fees()\":{\"details\":\"Returns the fee parameters of the Credit Manager\",\"returns\":{\"feeInterest\":\"Percentage of interest taken by the protocol as profit\",\"feeLiquidation\":\"Percentage of account value taken by the protocol as profit during unhealthy account liquidations\",\"feeLiquidationExpired\":\"Percentage of account value taken by the protocol as profit during expired account liquidations\",\"liquidationDiscount\":\"Multiplier that reduces the effective totalValue during unhealthy account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\",\"liquidationDiscountExpired\":\"Multiplier that reduces the effective totalValue during expired account liquidations, allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)\"}},\"forbiddenTokenMask()\":{\"details\":\"Bit mask encoding a set of forbidden tokens\"},\"fullCollateralCheck(address)\":{\"details\":\"Performs a full health check on an account, summing up value of all enabled collateral tokens\",\"params\":{\"creditAccount\":\"Address of the Credit Account to check\"}},\"getCreditAccountOrRevert(address)\":{\"details\":\"Returns the address of a borrower's Credit Account, or reverts if there is none.\",\"params\":{\"borrower\":\"Borrower's address\"}},\"liquidationThresholds(address)\":{\"details\":\"Returns the liquidation threshold for the provided token\",\"params\":{\"token\":\"Token to retrieve the LT for\"}},\"manageDebt(address,uint256,bool)\":{\"details\":\"Manages debt size for borrower: - Increase debt: + Increases debt by transferring funds from the pool to the credit account + Updates the cumulative index to keep interest the same. Since interest is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1), cumulativeIndexOpen needs to be updated, as the borrow amount has changed - Decrease debt: + Repays debt partially + all interest and fees accrued thus far + Updates cunulativeIndex to cumulativeIndex now\",\"params\":{\"amount\":\"Amount to increase / decrease the principal by\",\"creditAccount\":\"Address of the Credit Account to change debt for\",\"increase\":\"True to increase principal, false to decrease\"},\"returns\":{\"newBorrowedAmount\":\"The new debt principal\"}},\"maxAllowedEnabledTokenLength()\":{\"details\":\"The maximal number of enabled tokens on a single Credit Account\"},\"openCreditAccount(uint256,address)\":{\"details\":\"Opens credit account and borrows funds from the pool. - Takes Credit Account from the factory; - Requests the pool to lend underlying to the Credit Account\",\"params\":{\"borrowedAmount\":\"Amount to be borrowed by the Credit Account\",\"onBehalfOf\":\"The owner of the newly opened Credit Account\"}},\"pool()\":{\"details\":\"Address of the connected pool\"},\"poolService()\":{\"details\":\"Address of the connected pool\"},\"priceOracle()\":{\"details\":\"Address of the connected Price Oracle\"},\"tokenMasksMap(address)\":{\"details\":\"Returns the mask for the provided token\",\"params\":{\"token\":\"Token to returns the mask for\"}},\"transferAccountOwnership(address,address)\":{\"details\":\"Transfers Credit Account ownership to another address\",\"params\":{\"from\":\"Address of previous owner\",\"to\":\"Address of new owner\"}},\"underlying()\":{\"details\":\"Address of the underlying asset\"},\"universalAdapter()\":{\"details\":\"Address of the universal adapter\"},\"version()\":{\"details\":\"Contract's version\"},\"wethAddress()\":{\"details\":\"Address of WETH\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canLiquidateWhilePaused(address)\":{\"notice\":\"Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately.\"},\"disableToken(address,address)\":{\"notice\":\"Usually called by adapters to disable spent tokens during a multicall, but can also be called separately from the Credit Facade to remove unwanted tokens\"},\"enabledTokensMap(address)\":{\"notice\":\"An enabled token mask encodes an enabled token by setting the bit at the position equal to token's index to 1\"},\"fastCollateralCheck(address,address,address,uint256,uint256)\":{\"notice\":\"Fast health check assumes that only two tokens (input and output) participate in the operation and computes a % change in weighted value between inbound and outbound collateral. The cumulative negative change across several swaps in sequence cannot be larger than feeLiquidation (a fee that the protocol is ready to waive if needed). Since this records a % change between just two tokens, the corresponding % change in TWV will always be smaller, which makes this check safe. More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection\"},\"poolService()\":{\"notice\":\"[DEPRECATED]: use pool() instead.\"}},\"notice\":\"All Credit Manager functions are access-restricted and can only be called by the Credit Facade or allowed adapters. Users are not allowed to interact with the Credit Manager directly\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":\"ICreditManagerV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "canLiquidateWhilePaused(address)": { - "notice": "Emergency liquidators are trusted addresses that are able to liquidate positions while the contracts are paused, e.g. when there is a risk of bad debt while an exploit is being patched. In the interest of fairness, emergency liquidators do not receive a premium And are compensated by the Gearbox DAO separately." - }, - "disableToken(address,address)": { - "notice": "Usually called by adapters to disable spent tokens during a multicall, but can also be called separately from the Credit Facade to remove unwanted tokens" - }, - "enabledTokensMap(address)": { - "notice": "An enabled token mask encodes an enabled token by setting the bit at the position equal to token's index to 1" - }, - "fastCollateralCheck(address,address,address,uint256,uint256)": { - "notice": "Fast health check assumes that only two tokens (input and output) participate in the operation and computes a % change in weighted value between inbound and outbound collateral. The cumulative negative change across several swaps in sequence cannot be larger than feeLiquidation (a fee that the protocol is ready to waive if needed). Since this records a % change between just two tokens, the corresponding % change in TWV will always be smaller, which makes this check safe. More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection" - }, - "poolService()": { - "notice": "[DEPRECATED]: use pool() instead." - } - }, - "notice": "All Credit Manager functions are access-restricted and can only be called by the Credit Facade or allowed adapters. Users are not allowed to interact with the Credit Manager directly", - "version": 1 - } - }, - "ICreditManagerV2Events": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "ExecuteOrder", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newConfigurator", - "type": "address" - } - ], - "name": "NewConfigurator", - "type": "event" - } - ], - "devdoc": { - "events": { - "ExecuteOrder(address,address)": { - "details": "Emits when a call to an external contract is made through the Credit Manager" - }, - "NewConfigurator(address)": { - "details": "Emits when a configurator is upgraded" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"ExecuteOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newConfigurator\",\"type\":\"address\"}],\"name\":\"NewConfigurator\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"ExecuteOrder(address,address)\":{\"details\":\"Emits when a call to an external contract is made through the Credit Manager\"},\"NewConfigurator(address)\":{\"details\":\"Emits when a configurator is upgraded\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":\"ICreditManagerV2Events\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "ICreditManagerV2Exceptions": { - "abi": [ - { - "inputs": [], - "name": "AdaptersOrCreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "AllowanceFailedException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "CreditFacadeOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "HasNoOpenedAccountException", - "type": "error" - }, - { - "inputs": [], - "name": "NotEnoughCollateralException", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrancyLockException", - "type": "error" - }, - { - "inputs": [], - "name": "TargetContractNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenAlreadyAddedException", - "type": "error" - }, - { - "inputs": [], - "name": "TokenNotAllowedException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyEnabledTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "TooManyTokensException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "AdaptersOrCreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter" - } - ], - "AllowanceFailedException()": [ - { - "details": "Thrown if an attempt to approve a collateral token to a target contract failed" - } - ], - "CreditConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator" - } - ], - "CreditFacadeOnlyException()": [ - { - "details": "Thrown if an access-restricted function is called by an address that is not the connected Credit Facade" - } - ], - "HasNoOpenedAccountException()": [ - { - "details": "Thrown on attempting to perform an action for an address that owns no Credit Account" - } - ], - "NotEnoughCollateralException()": [ - { - "details": "Thrown on failing a full collateral check after an operation" - } - ], - "ReentrancyLockException()": [ - { - "details": "Thrown when a reentrancy into the contract is attempted" - } - ], - "TargetContractNotAllowedException()": [ - { - "details": "Thrown on attempting to execute an order to an address that is not an allowed target contract" - } - ], - "TokenAlreadyAddedException()": [ - { - "details": "Thrown on attempting to add a token that is already in a collateral list" - } - ], - "TokenNotAllowedException()": [ - { - "details": "Thrown on attempting to receive a token that is not a collateral token or was forbidden" - } - ], - "TooManyEnabledTokensException()": [ - { - "details": "Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable" - } - ], - "TooManyTokensException()": [ - { - "details": "Thrown on configurator attempting to add more than 256 collateral tokens" - } - ], - "ZeroAddressOrUserAlreadyHasAccountException()": [ - { - "details": "Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AdaptersOrCreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowanceFailedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CreditFacadeOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HasNoOpenedAccountException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughCollateralException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyLockException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetContractNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenAlreadyAddedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenNotAllowedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyEnabledTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTokensException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressOrUserAlreadyHasAccountException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AdaptersOrCreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade, or an allowed adapter\"}],\"AllowanceFailedException()\":[{\"details\":\"Thrown if an attempt to approve a collateral token to a target contract failed\"}],\"CreditConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Configurator\"}],\"CreditFacadeOnlyException()\":[{\"details\":\"Thrown if an access-restricted function is called by an address that is not the connected Credit Facade\"}],\"HasNoOpenedAccountException()\":[{\"details\":\"Thrown on attempting to perform an action for an address that owns no Credit Account\"}],\"NotEnoughCollateralException()\":[{\"details\":\"Thrown on failing a full collateral check after an operation\"}],\"ReentrancyLockException()\":[{\"details\":\"Thrown when a reentrancy into the contract is attempted\"}],\"TargetContractNotAllowedException()\":[{\"details\":\"Thrown on attempting to execute an order to an address that is not an allowed target contract\"}],\"TokenAlreadyAddedException()\":[{\"details\":\"Thrown on attempting to add a token that is already in a collateral list\"}],\"TokenNotAllowedException()\":[{\"details\":\"Thrown on attempting to receive a token that is not a collateral token or was forbidden\"}],\"TooManyEnabledTokensException()\":[{\"details\":\"Thrown if more than the maximal number of tokens were enabled on a Credit Account, and there are not enough unused token to disable\"}],\"TooManyTokensException()\":[{\"details\":\"Thrown on configurator attempting to add more than 256 collateral tokens\"}],\"ZeroAddressOrUserAlreadyHasAccountException()\":[{\"details\":\"Thrown on attempting to open a Credit Account for or transfer a Credit Account to the zero address or an address that already owns a Credit Account\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":\"ICreditManagerV2Exceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol": { - "IDataCompressor": { - "abi": [ - { - "inputs": [], - "name": "NotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "NotPoolException", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_allowedContract", - "type": "address" - } - ], - "name": "getAdapter", - "outputs": [ - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "bool", - "name": "inUse", - "type": "bool" - }, - { - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterestAndFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "healthFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isAllowed", - "type": "bool" - }, - { - "internalType": "bool", - "name": "isEnabled", - "type": "bool" - } - ], - "internalType": "struct TokenBalance[]", - "name": "balances", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "liquidationAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "canBeClosed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndexAtOpen", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "since", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "enabledTokenMask", - "type": "uint256" - } - ], - "internalType": "struct CreditAccountData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "bool", - "name": "inUse", - "type": "bool" - }, - { - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterest", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowedAmountPlusInterestAndFees", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "healthFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isAllowed", - "type": "bool" - }, - { - "internalType": "bool", - "name": "isEnabled", - "type": "bool" - } - ], - "internalType": "struct TokenBalance[]", - "name": "balances", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "repayAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "liquidationAmount", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "canBeClosed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndexAtOpen", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "since", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "enabledTokenMask", - "type": "uint256" - } - ], - "internalType": "struct CreditAccountData[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_creditManager", - "type": "address" - } - ], - "name": "getCreditManagerData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "bool", - "name": "canBorrow", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxLeverageFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "collateralTokens", - "type": "address[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "allowedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "internalType": "struct ContractAdapter[]", - "name": "adapters", - "type": "tuple[]" - }, - { - "internalType": "uint256[]", - "name": "liquidationThresholds", - "type": "uint256[]" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "address", - "name": "creditFacade", - "type": "address" - }, - { - "internalType": "address", - "name": "creditConfigurator", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDegenMode", - "type": "bool" - }, - { - "internalType": "address", - "name": "degenNFT", - "type": "address" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "forbiddenTokenMask", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "maxEnabledTokensLength", - "type": "uint8" - }, - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "internalType": "struct CreditManagerData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCreditManagersList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "bool", - "name": "canBorrow", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "borrowRate", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxLeverageFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "collateralTokens", - "type": "address[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "allowedContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "internalType": "struct ContractAdapter[]", - "name": "adapters", - "type": "tuple[]" - }, - { - "internalType": "uint256[]", - "name": "liquidationThresholds", - "type": "uint256[]" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "address", - "name": "creditFacade", - "type": "address" - }, - { - "internalType": "address", - "name": "creditConfigurator", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDegenMode", - "type": "bool" - }, - { - "internalType": "address", - "name": "degenNFT", - "type": "address" - }, - { - "internalType": "bool", - "name": "isIncreaseDebtForbidden", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "forbiddenTokenMask", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "maxEnabledTokensLength", - "type": "uint8" - }, - { - "internalType": "uint16", - "name": "feeInterest", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidation", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscount", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "feeLiquidationExpired", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "liquidationDiscountExpired", - "type": "uint16" - } - ], - "internalType": "struct CreditManagerData[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_pool", - "type": "address" - } - ], - "name": "getPoolData", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "dieselToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "linearCumulativeIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidityLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalBorrowed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "dieselRate_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndex_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestampLU", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "internalType": "struct PoolData", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPoolsList", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bool", - "name": "isWETH", - "type": "bool" - }, - { - "internalType": "address", - "name": "underlying", - "type": "address" - }, - { - "internalType": "address", - "name": "dieselToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "linearCumulativeIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "availableLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidity", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLiquidityLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalBorrowed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "borrowAPY_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "dieselRate_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "withdrawFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "cumulativeIndex_RAY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestampLU", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "internalType": "struct PoolData[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "hasOpenedCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "NotCreditManagerException()": [ - { - "details": "Thrown if attempting to get data on a contract that is not a registered Credit Manager" - } - ], - "NotPoolException()": [ - { - "details": "Thrown if attempting the get data on a contract that is not a registered pool" - } - ] - }, - "kind": "dev", - "methods": { - "getAdapter(address,address)": { - "details": "Returns the adapter address for a particular creditManager and targetContract" - }, - "getCreditAccountData(address,address)": { - "details": "Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower", - "params": { - "_creditManager": "Credit manager address", - "borrower": "Borrower address" - } - }, - "getCreditAccountList(address)": { - "details": "Returns CreditAccountData for all opened accounts for particular borrower", - "params": { - "borrower": "Borrower address" - } - }, - "getCreditManagerData(address)": { - "details": "Returns CreditManagerData for a particular _creditManager", - "params": { - "_creditManager": "CreditManager address" - } - }, - "getCreditManagersList()": { - "details": "Returns CreditManagerData for all Credit Managers" - }, - "getPoolData(address)": { - "details": "Returns PoolData for a particular pool", - "params": { - "_pool": "Pool address" - } - }, - "getPoolsList()": { - "details": "Returns PoolData for all registered pools" - }, - "hasOpenedCreditAccount(address,address)": { - "details": "Returns whether the borrower has an open credit account with the credit manager", - "params": { - "borrower": "Borrower to check", - "creditManager": "Credit manager to check" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getAdapter(address,address)": "4c472fc9", - "getCreditAccountData(address,address)": "0dbd616d", - "getCreditAccountList(address)": "a80deda3", - "getCreditManagerData(address)": "ae093f3f", - "getCreditManagersList()": "663b8fdb", - "getPoolData(address)": "13d21cdf", - "getPoolsList()": "1bcd8fc0", - "hasOpenedCreditAccount(address,address)": "fc9914cb", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPoolException\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_allowedContract\",\"type\":\"address\"}],\"name\":\"getAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"inUse\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterestAndFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct TokenBalance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canBeClosed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndexAtOpen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"since\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"enabledTokenMask\",\"type\":\"uint256\"}],\"internalType\":\"struct CreditAccountData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"inUse\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterest\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmountPlusInterestAndFees\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct TokenBalance[]\",\"name\":\"balances\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canBeClosed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndexAtOpen\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"since\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"enabledTokenMask\",\"type\":\"uint256\"}],\"internalType\":\"struct CreditAccountData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_creditManager\",\"type\":\"address\"}],\"name\":\"getCreditManagerData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"canBorrow\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxLeverageFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"collateralTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"allowedContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"internalType\":\"struct ContractAdapter[]\",\"name\":\"adapters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"liquidationThresholds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditConfigurator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDegenMode\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"degenNFT\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"forbiddenTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"maxEnabledTokensLength\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"internalType\":\"struct CreditManagerData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreditManagersList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"canBorrow\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxLeverageFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"collateralTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"allowedContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"internalType\":\"struct ContractAdapter[]\",\"name\":\"adapters\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"liquidationThresholds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"creditFacade\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditConfigurator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDegenMode\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"degenNFT\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isIncreaseDebtForbidden\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"forbiddenTokenMask\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"maxEnabledTokensLength\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"feeInterest\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidation\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscount\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"feeLiquidationExpired\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationDiscountExpired\",\"type\":\"uint16\"}],\"internalType\":\"struct CreditManagerData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dieselToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"linearCumulativeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidityLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dieselRate_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndex_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampLU\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolsList\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWETH\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dieselToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"linearCumulativeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expectedLiquidityLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrowed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowAPY_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dieselRate_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeIndex_RAY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampLU\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"internalType\":\"struct PoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"hasOpenedCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"NotCreditManagerException()\":[{\"details\":\"Thrown if attempting to get data on a contract that is not a registered Credit Manager\"}],\"NotPoolException()\":[{\"details\":\"Thrown if attempting the get data on a contract that is not a registered pool\"}]},\"kind\":\"dev\",\"methods\":{\"getAdapter(address,address)\":{\"details\":\"Returns the adapter address for a particular creditManager and targetContract\"},\"getCreditAccountData(address,address)\":{\"details\":\"Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower\",\"params\":{\"_creditManager\":\"Credit manager address\",\"borrower\":\"Borrower address\"}},\"getCreditAccountList(address)\":{\"details\":\"Returns CreditAccountData for all opened accounts for particular borrower\",\"params\":{\"borrower\":\"Borrower address\"}},\"getCreditManagerData(address)\":{\"details\":\"Returns CreditManagerData for a particular _creditManager\",\"params\":{\"_creditManager\":\"CreditManager address\"}},\"getCreditManagersList()\":{\"details\":\"Returns CreditManagerData for all Credit Managers\"},\"getPoolData(address)\":{\"details\":\"Returns PoolData for a particular pool\",\"params\":{\"_pool\":\"Pool address\"}},\"getPoolsList()\":{\"details\":\"Returns PoolData for all registered pools\"},\"hasOpenedCreditAccount(address,address)\":{\"details\":\"Returns whether the borrower has an open credit account with the credit manager\",\"params\":{\"borrower\":\"Borrower to check\",\"creditManager\":\"Credit manager to check\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":\"IDataCompressor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":{\"keccak256\":\"0xe1410055319adc7ecf394fb8544d529db28b529b1d1294d6dcfeeb99f4321a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1eae0a83069a64c7ebd3af145566e31693a0d902dfcc4412cd6c49f48e653b83\",\"dweb:/ipfs/QmaAHy5YqbSLdWSXfGRHiVZxwMuVs5ZgMeZ1qkTKSSd5fr\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol\":{\"keccak256\":\"0x1c6c6e6078da902a7551eaaf696cd91295559959966b5a9ccd790266128f86e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c26ab3e22c4acd8d91d546a4a5c0f7b3da268f328da93ca33d6b92f453d0d846\",\"dweb:/ipfs/QmQsQhx3bp3pzwkTqdYQ8th2XaYhxk7xSRFaqY2iij1ViP\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IDataCompressorExceptions": { - "abi": [ - { - "inputs": [], - "name": "NotCreditManagerException", - "type": "error" - }, - { - "inputs": [], - "name": "NotPoolException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "NotCreditManagerException()": [ - { - "details": "Thrown if attempting to get data on a contract that is not a registered Credit Manager" - } - ], - "NotPoolException()": [ - { - "details": "Thrown if attempting the get data on a contract that is not a registered pool" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NotCreditManagerException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPoolException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"NotCreditManagerException()\":[{\"details\":\"Thrown if attempting to get data on a contract that is not a registered Credit Manager\"}],\"NotPoolException()\":[{\"details\":\"Thrown if attempting the get data on a contract that is not a registered pool\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":\"IDataCompressorExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":{\"keccak256\":\"0xe1410055319adc7ecf394fb8544d529db28b529b1d1294d6dcfeeb99f4321a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1eae0a83069a64c7ebd3af145566e31693a0d902dfcc4412cd6c49f48e653b83\",\"dweb:/ipfs/QmaAHy5YqbSLdWSXfGRHiVZxwMuVs5ZgMeZ1qkTKSSd5fr\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol\":{\"keccak256\":\"0x1c6c6e6078da902a7551eaaf696cd91295559959966b5a9ccd790266128f86e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c26ab3e22c4acd8d91d546a4a5c0f7b3da268f328da93ca33d6b92f453d0d846\",\"dweb:/ipfs/QmQsQhx3bp3pzwkTqdYQ8th2XaYhxk7xSRFaqY2iij1ViP\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol": { - "IDegenNFT": { - "abi": [ - { - "inputs": [], - "name": "CreditFacadeOrConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalanceException", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCreditFacadeException", - "type": "error" - }, - { - "inputs": [], - "name": "MinterOnlyException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewCreditFacadeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewCreditFacadeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewMinterSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "minter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "CreditFacadeOrConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function was called by non-CreditFacade" - } - ], - "InsufficientBalanceException()": [ - { - "details": "Thrown if the account's balance is not sufficient for an action (usually a burn)" - } - ], - "InvalidCreditFacadeException()": [ - { - "details": "Thrown if trying to add a burner address that is not a correct Credit Facade" - } - ], - "MinterOnlyException()": [ - { - "details": "Thrown if an access-restricted function was called by non-minter" - } - ] - }, - "kind": "dev", - "methods": { - "approve(address,uint256)": { - "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the number of tokens in ``owner``'s account." - }, - "baseURI()": { - "details": "Stores the base URI for NFT metadata" - }, - "burn(address,uint256)": { - "details": "Burns a number of tokens from a specified address", - "params": { - "amount": "The number of tokens to burn", - "from": "The address a token will be burnt from" - } - }, - "getApproved(uint256)": { - "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist." - }, - "isApprovedForAll(address,address)": { - "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}" - }, - "mint(address,uint256)": { - "details": "Mints a specified amount of tokens to the address", - "params": { - "amount": "The number of tokens to mint", - "to": "Address the tokens are minted to" - } - }, - "minter()": { - "details": "address of the current minter" - }, - "name()": { - "details": "Returns the token collection name." - }, - "ownerOf(uint256)": { - "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist." - }, - "safeTransferFrom(address,address,uint256)": { - "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "safeTransferFrom(address,address,uint256,bytes)": { - "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "setApprovalForAll(address,bool)": { - "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event." - }, - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - }, - "symbol()": { - "details": "Returns the token collection symbol." - }, - "tokenURI(uint256)": { - "details": "Returns the Uniform Resource Identifier (URI) for `tokenId` token." - }, - "totalSupply()": { - "details": "Stores the total number of tokens on holder accounts" - }, - "transferFrom(address,address,uint256)": { - "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event." - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "baseURI()": "6c0360eb", - "burn(address,uint256)": "9dc29fac", - "getApproved(uint256)": "081812fc", - "isApprovedForAll(address,address)": "e985e9c5", - "mint(address,uint256)": "40c10f19", - "minter()": "07546172", - "name()": "06fdde03", - "ownerOf(uint256)": "6352211e", - "safeTransferFrom(address,address,uint256)": "42842e0e", - "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde", - "setApprovalForAll(address,bool)": "a22cb465", - "supportsInterface(bytes4)": "01ffc9a7", - "symbol()": "95d89b41", - "tokenURI(uint256)": "c87b56dd", - "totalSupply()": "18160ddd", - "transferFrom(address,address,uint256)": "23b872dd", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CreditFacadeOrConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalanceException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCreditFacadeException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinterOnlyException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewCreditFacadeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewCreditFacadeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewMinterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CreditFacadeOrConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function was called by non-CreditFacade\"}],\"InsufficientBalanceException()\":[{\"details\":\"Thrown if the account's balance is not sufficient for an action (usually a burn)\"}],\"InvalidCreditFacadeException()\":[{\"details\":\"Thrown if trying to add a burner address that is not a correct Credit Facade\"}],\"MinterOnlyException()\":[{\"details\":\"Thrown if an access-restricted function was called by non-minter\"}]},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"baseURI()\":{\"details\":\"Stores the base URI for NFT metadata\"},\"burn(address,uint256)\":{\"details\":\"Burns a number of tokens from a specified address\",\"params\":{\"amount\":\"The number of tokens to burn\",\"from\":\"The address a token will be burnt from\"}},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"mint(address,uint256)\":{\"details\":\"Mints a specified amount of tokens to the address\",\"params\":{\"amount\":\"The number of tokens to mint\",\"to\":\"Address the tokens are minted to\"}},\"minter()\":{\"details\":\"address of the current minter\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"totalSupply()\":{\"details\":\"Stores the total number of tokens on holder accounts\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":\"IDegenNFT\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IDegenNFTEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewCreditFacadeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewCreditFacadeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "NewMinterSet", - "type": "event" - } - ], - "devdoc": { - "events": { - "NewCreditFacadeAdded(address)": { - "details": "Minted each time when new credit facade added" - }, - "NewCreditFacadeRemoved(address)": { - "details": "Minted each time when new credit facade added" - }, - "NewMinterSet(address)": { - "details": "Minted when new minter set" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewCreditFacadeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewCreditFacadeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"NewMinterSet\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"NewCreditFacadeAdded(address)\":{\"details\":\"Minted each time when new credit facade added\"},\"NewCreditFacadeRemoved(address)\":{\"details\":\"Minted each time when new credit facade added\"},\"NewMinterSet(address)\":{\"details\":\"Minted when new minter set\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":\"IDegenNFTEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IDegenNFTExceptions": { - "abi": [ - { - "inputs": [], - "name": "CreditFacadeOrConfiguratorOnlyException", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalanceException", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidCreditFacadeException", - "type": "error" - }, - { - "inputs": [], - "name": "MinterOnlyException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "CreditFacadeOrConfiguratorOnlyException()": [ - { - "details": "Thrown if an access-restricted function was called by non-CreditFacade" - } - ], - "InsufficientBalanceException()": [ - { - "details": "Thrown if the account's balance is not sufficient for an action (usually a burn)" - } - ], - "InvalidCreditFacadeException()": [ - { - "details": "Thrown if trying to add a burner address that is not a correct Credit Facade" - } - ], - "MinterOnlyException()": [ - { - "details": "Thrown if an access-restricted function was called by non-minter" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CreditFacadeOrConfiguratorOnlyException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalanceException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCreditFacadeException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinterOnlyException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"CreditFacadeOrConfiguratorOnlyException()\":[{\"details\":\"Thrown if an access-restricted function was called by non-CreditFacade\"}],\"InsufficientBalanceException()\":[{\"details\":\"Thrown if the account's balance is not sufficient for an action (usually a burn)\"}],\"InvalidCreditFacadeException()\":[{\"details\":\"Thrown if trying to add a burner address that is not a correct Credit Facade\"}],\"MinterOnlyException()\":[{\"details\":\"Thrown if an access-restricted function was called by non-minter\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":\"IDegenNFTExceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol": { - "IPausable": { - "abi": [ - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "pause()": "8456cb59" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":\"IPausable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol": { - "IPoolService": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "referralCode", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Borrow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "BorrowForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "NewCreditManagerConnected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "NewExpectedLiquidityLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newInterestRateModel", - "type": "address" - } - ], - "name": "NewInterestRateModel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "Repay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "UncoveredLoss", - "type": "event" - }, - { - "inputs": [], - "name": "_cumulativeIndex_RAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_timestampLU", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "uint256", - "name": "referralCode", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract AddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "availableLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "borrowAPY_RAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "calcLinearCumulative_RAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "creditManagers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "id", - "type": "address" - } - ], - "name": "creditManagersCanBorrow", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditManagersCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dieselToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "expectedLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "expectedLiquidityLimit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "fromDiesel", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getDieselRate_RAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "lendCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "repayCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "toDiesel", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBorrowed", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "underlyingToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "_cumulativeIndex_RAY()": { - "details": "Returns the interest index at the last pool update" - }, - "_timestampLU()": { - "details": "Returns the timestamp of the pool's last update" - }, - "addLiquidity(uint256,address,uint256)": { - "details": "Adds liquidity to pool - transfers the underlying to the pool - mints Diesel (LP) tokens to onBehalfOf", - "params": { - "amount": "Amount of tokens to be deposited", - "onBehalfOf": "The address that will receive the dToken", - "referralCode": "Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without a facilitator." - } - }, - "addressProvider()": { - "details": "Returns the address provider" - }, - "availableLiquidity()": { - "details": "Returns the available liquidity, which is expectedLiquidity - totalBorrowed" - }, - "borrowAPY_RAY()": { - "details": "Calculates the current borrow rate, RAY format" - }, - "calcLinearCumulative_RAY()": { - "details": "Calculates the current interest index, RAY format" - }, - "creditManagers(uint256)": { - "details": "Returns the address of a Credit Manager by its id" - }, - "creditManagersCanBorrow(address)": { - "details": "Maps Credit Manager addresses to their status as a borrower. Returns false if borrowing is not allowed." - }, - "creditManagersCount()": { - "details": "Returns the number of known Credit Managers" - }, - "dieselToken()": { - "details": "Returns the address of the diesel token" - }, - "expectedLiquidity()": { - "details": "Returns the total amount of liquidity in the pool, including borrowed and available funds" - }, - "expectedLiquidityLimit()": { - "details": "Returns the limit on total liquidity" - }, - "fromDiesel(uint256)": { - "details": "Converts a quantity of Diesel tokens to the underlying" - }, - "lendCreditAccount(uint256,address)": { - "details": "Lends pool funds to a Credit Account", - "params": { - "borrowedAmount": "Credit Account's debt principal", - "creditAccount": "Credit Account's address" - } - }, - "removeLiquidity(uint256,address)": { - "details": "Removes liquidity from pool - burns LP's Diesel (LP) tokens - returns the equivalent amount of underlying to 'to'", - "params": { - "amount": "Amount of Diesel tokens to burn", - "to": "Address to transfer the underlying to" - } - }, - "repayCreditAccount(uint256,uint256,uint256)": { - "details": "Repays the Credit Account's debt", - "params": { - "borrowedAmount": "Amount of principal ro repay", - "loss": "Amount of underlying that the CA wan't able to repay", - "profit": "The treasury profit from repayment" - } - }, - "toDiesel(uint256)": { - "details": "Converts a quantity of the underlying to Diesel tokens" - }, - "totalBorrowed()": { - "details": "Returns the total borrowed amount (includes principal only)" - }, - "underlyingToken()": { - "details": "Returns the address of the underlying" - }, - "version()": { - "details": "Returns contract version" - }, - "withdrawFee()": { - "details": "Returns the withdrawal fee" - } - }, - "title": "Pool Service Interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "_cumulativeIndex_RAY()": "dbcb313b", - "_timestampLU()": "609ae317", - "addLiquidity(uint256,address,uint256)": "9aa5d462", - "addressProvider()": "2954018c", - "availableLiquidity()": "74375359", - "borrowAPY_RAY()": "45d31f9d", - "calcLinearCumulative_RAY()": "0fce70fb", - "creditManagers(uint256)": "1e16e4fc", - "creditManagersCanBorrow(address)": "2e97ca21", - "creditManagersCount()": "a4e8273e", - "dieselToken()": "36dda7d5", - "expectedLiquidity()": "fe14112d", - "expectedLiquidityLimit()": "ef8d9603", - "fromDiesel(uint256)": "5427c938", - "getDieselRate_RAY()": "788c6bfe", - "lendCreditAccount(uint256,address)": "bf28068b", - "removeLiquidity(uint256,address)": "05fe138b", - "repayCreditAccount(uint256,uint256,uint256)": "ca9505e4", - "toDiesel(uint256)": "4d778ad1", - "totalBorrowed()": "4c19386c", - "underlyingToken()": "2495a599", - "version()": "54fd4d50", - "withdrawFee()": "e941fa78" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"referralCode\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"BorrowForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"NewCreditManagerConnected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"NewExpectedLiquidityLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"NewWithdrawFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"UncoveredLoss\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_cumulativeIndex_RAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_timestampLU\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"referralCode\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract AddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"availableLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"borrowAPY_RAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calcLinearCumulative_RAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"creditManagers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"id\",\"type\":\"address\"}],\"name\":\"creditManagersCanBorrow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditManagersCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dieselToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedLiquidityLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"fromDiesel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDieselRate_RAY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"lendCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"repayCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"toDiesel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBorrowed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"_cumulativeIndex_RAY()\":{\"details\":\"Returns the interest index at the last pool update\"},\"_timestampLU()\":{\"details\":\"Returns the timestamp of the pool's last update\"},\"addLiquidity(uint256,address,uint256)\":{\"details\":\"Adds liquidity to pool - transfers the underlying to the pool - mints Diesel (LP) tokens to onBehalfOf\",\"params\":{\"amount\":\"Amount of tokens to be deposited\",\"onBehalfOf\":\"The address that will receive the dToken\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without a facilitator.\"}},\"addressProvider()\":{\"details\":\"Returns the address provider\"},\"availableLiquidity()\":{\"details\":\"Returns the available liquidity, which is expectedLiquidity - totalBorrowed\"},\"borrowAPY_RAY()\":{\"details\":\"Calculates the current borrow rate, RAY format\"},\"calcLinearCumulative_RAY()\":{\"details\":\"Calculates the current interest index, RAY format\"},\"creditManagers(uint256)\":{\"details\":\"Returns the address of a Credit Manager by its id\"},\"creditManagersCanBorrow(address)\":{\"details\":\"Maps Credit Manager addresses to their status as a borrower. Returns false if borrowing is not allowed.\"},\"creditManagersCount()\":{\"details\":\"Returns the number of known Credit Managers\"},\"dieselToken()\":{\"details\":\"Returns the address of the diesel token\"},\"expectedLiquidity()\":{\"details\":\"Returns the total amount of liquidity in the pool, including borrowed and available funds\"},\"expectedLiquidityLimit()\":{\"details\":\"Returns the limit on total liquidity\"},\"fromDiesel(uint256)\":{\"details\":\"Converts a quantity of Diesel tokens to the underlying\"},\"lendCreditAccount(uint256,address)\":{\"details\":\"Lends pool funds to a Credit Account\",\"params\":{\"borrowedAmount\":\"Credit Account's debt principal\",\"creditAccount\":\"Credit Account's address\"}},\"removeLiquidity(uint256,address)\":{\"details\":\"Removes liquidity from pool - burns LP's Diesel (LP) tokens - returns the equivalent amount of underlying to 'to'\",\"params\":{\"amount\":\"Amount of Diesel tokens to burn\",\"to\":\"Address to transfer the underlying to\"}},\"repayCreditAccount(uint256,uint256,uint256)\":{\"details\":\"Repays the Credit Account's debt\",\"params\":{\"borrowedAmount\":\"Amount of principal ro repay\",\"loss\":\"Amount of underlying that the CA wan't able to repay\",\"profit\":\"The treasury profit from repayment\"}},\"toDiesel(uint256)\":{\"details\":\"Converts a quantity of the underlying to Diesel tokens\"},\"totalBorrowed()\":{\"details\":\"Returns the total borrowed amount (includes principal only)\"},\"underlyingToken()\":{\"details\":\"Returns the address of the underlying\"},\"version()\":{\"details\":\"Returns contract version\"},\"withdrawFee()\":{\"details\":\"Returns the withdrawal fee\"}},\"title\":\"Pool Service Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getDieselRate_RAY()\":{\"notice\":\"\\u00e7*\"},\"repayCreditAccount(uint256,uint256,uint256)\":{\"notice\":\"Assumes that the underlying (including principal + interest + fees) was already transferred\"}},\"notice\":\"Implements business logic: - Adding/removing pool liquidity - Managing diesel tokens & diesel rates - Taking/repaying Credit Manager debt More: https://dev.gearbox.fi/developers/pool/abstractpoolservice\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":\"IPoolService\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "getDieselRate_RAY()": { - "notice": "ç*" - }, - "repayCreditAccount(uint256,uint256,uint256)": { - "notice": "Assumes that the underlying (including principal + interest + fees) was already transferred" - } - }, - "notice": "Implements business logic: - Adding/removing pool liquidity - Managing diesel tokens & diesel rates - Taking/repaying Credit Manager debt More: https://dev.gearbox.fi/developers/pool/abstractpoolservice", - "version": 1 - } - }, - "IPoolServiceEvents": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "referralCode", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Borrow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "BorrowForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - } - ], - "name": "NewCreditManagerConnected", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newLimit", - "type": "uint256" - } - ], - "name": "NewExpectedLiquidityLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newInterestRateModel", - "type": "address" - } - ], - "name": "NewInterestRateModel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowedAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "Repay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "creditManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "name": "UncoveredLoss", - "type": "event" - } - ], - "devdoc": { - "events": { - "AddLiquidity(address,address,uint256,uint256)": { - "details": "Emits on new liquidity being added to the pool" - }, - "Borrow(address,address,uint256)": { - "details": "Emits on a Credit Manager borrowing funds for a Credit Account" - }, - "BorrowForbidden(address)": { - "details": "Emits when a Credit Manager is forbidden to borrow" - }, - "NewCreditManagerConnected(address)": { - "details": "Emits on connecting a new Credit Manager" - }, - "NewExpectedLiquidityLimit(uint256)": { - "details": "Emits when the liquidity limit is changed" - }, - "NewInterestRateModel(address)": { - "details": "Emits on updating the interest rate model" - }, - "NewWithdrawFee(uint256)": { - "details": "Emits when the withdrawal fee is changed" - }, - "RemoveLiquidity(address,address,uint256)": { - "details": "Emits on liquidity being removed to the pool" - }, - "Repay(address,uint256,uint256,uint256)": { - "details": "Emits on repayment of a Credit Account's debt" - }, - "UncoveredLoss(address,uint256)": { - "details": "Emitted when loss is incurred that can't be covered by treasury funds" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"referralCode\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"BorrowForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"}],\"name\":\"NewCreditManagerConnected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"NewExpectedLiquidityLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newInterestRateModel\",\"type\":\"address\"}],\"name\":\"NewInterestRateModel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"NewWithdrawFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowedAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"name\":\"UncoveredLoss\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"AddLiquidity(address,address,uint256,uint256)\":{\"details\":\"Emits on new liquidity being added to the pool\"},\"Borrow(address,address,uint256)\":{\"details\":\"Emits on a Credit Manager borrowing funds for a Credit Account\"},\"BorrowForbidden(address)\":{\"details\":\"Emits when a Credit Manager is forbidden to borrow\"},\"NewCreditManagerConnected(address)\":{\"details\":\"Emits on connecting a new Credit Manager\"},\"NewExpectedLiquidityLimit(uint256)\":{\"details\":\"Emits when the liquidity limit is changed\"},\"NewInterestRateModel(address)\":{\"details\":\"Emits on updating the interest rate model\"},\"NewWithdrawFee(uint256)\":{\"details\":\"Emits when the withdrawal fee is changed\"},\"RemoveLiquidity(address,address,uint256)\":{\"details\":\"Emits on liquidity being removed to the pool\"},\"Repay(address,uint256,uint256,uint256)\":{\"details\":\"Emits on repayment of a Credit Account's debt\"},\"UncoveredLoss(address,uint256)\":{\"details\":\"Emitted when loss is incurred that can't be covered by treasury funds\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":\"IPoolServiceEvents\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol": { - "IPriceFeedType": { - "abi": [ - { - "inputs": [], - "name": "priceFeedType", - "outputs": [ - { - "internalType": "enum PriceFeedType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "skipPriceCheck", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "priceFeedType()": { - "details": "Returns the price feed type" - }, - "skipPriceCheck()": { - "details": "Returns whether sanity checks on price feed result should be skipped" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "priceFeedType()": "3fd0875f", - "skipPriceCheck()": "d62ada11" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"priceFeedType\",\"outputs\":[{\"internalType\":\"enum PriceFeedType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"skipPriceCheck\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"priceFeedType()\":{\"details\":\"Returns the price feed type\"},\"skipPriceCheck()\":{\"details\":\"Returns whether sanity checks on price feed result should be skipped\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol\":\"IPriceFeedType\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol\":{\"keccak256\":\"0x59e6767df59b43511a7b1d37115b67bef0cc3d4fa044855add4b632df75b38b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e3d489de1808b3f7c963bb0f96877efc4735edfe051f334847a0ea8fbb43b0d\",\"dweb:/ipfs/QmaLifTCHF2TfHKReXBviLKnp846oEPChxWSpZuxY1s5kq\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol": { - "IPriceOracleV2": { - "abi": [ - { - "inputs": [], - "name": "ChainPriceStaleException", - "type": "error" - }, - { - "inputs": [], - "name": "PriceOracleNotExistsException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroPriceException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "NewPriceFeed", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "convert", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertFromUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertToUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountFrom", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountTo", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "fastCheck", - "outputs": [ - { - "internalType": "uint256", - "name": "collateralFrom", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collateralTo", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeeds", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeedsWithFlags", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "bool", - "name": "skipCheck", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "ChainPriceStaleException()": [ - { - "details": "Thrown if the last recorded result was not updated in the last round" - } - ], - "PriceOracleNotExistsException()": [ - { - "details": "Thrown on attempting to get a result for a token that does not have a price feed" - } - ], - "ZeroPriceException()": [ - { - "details": "Thrown if a price feed returns 0" - } - ] - }, - "kind": "dev", - "methods": { - "convert(uint256,address,address)": { - "details": "Converts one asset into another", - "params": { - "amount": "Amount to convert", - "tokenFrom": "Address of the token to convert from", - "tokenTo": "Address of the token to convert to" - } - }, - "convertFromUSD(uint256,address)": { - "details": "Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset", - "params": { - "amount": "Amount to convert", - "token": "Address of the token converted to" - } - }, - "convertToUSD(uint256,address)": { - "details": "Converts a quantity of an asset to USD (decimals = 8).", - "params": { - "amount": "Amount to convert", - "token": "Address of the token to be converted" - } - }, - "fastCheck(uint256,address,uint256,address)": { - "details": "Returns collateral values for two tokens, required for a fast check", - "params": { - "amountFrom": "Amount of the outbound token", - "amountTo": "Amount of the inbound token", - "tokenFrom": "Address of the outbound token", - "tokenTo": "Address of the inbound token" - }, - "returns": { - "collateralFrom": "Value of the outbound token amount in USD", - "collateralTo": "Value of the inbound token amount in USD" - } - }, - "getPrice(address)": { - "details": "Returns token's price in USD (8 decimals)", - "params": { - "token": "The token to compute the price for" - } - }, - "priceFeeds(address)": { - "details": "Returns the price feed address for the passed token", - "params": { - "token": "Token to get the price feed for" - } - }, - "priceFeedsWithFlags(address)": { - "details": "Returns the price feed for the passed token, with additional parameters", - "params": { - "token": "Token to get the price feed for" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "title": "Price oracle interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "convert(uint256,address,address)": "b66102df", - "convertFromUSD(uint256,address)": "7afb0104", - "convertToUSD(uint256,address)": "f9a65030", - "fastCheck(uint256,address,uint256,address)": "5cecbd0e", - "getPrice(address)": "41976e09", - "priceFeeds(address)": "9dcb511a", - "priceFeedsWithFlags(address)": "f190e5fa", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ChainPriceStaleException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceOracleNotExistsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPriceException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"NewPriceFeed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertFromUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertToUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountFrom\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountTo\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"fastCheck\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"collateralFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateralTo\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeeds\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeedsWithFlags\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"skipCheck\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ChainPriceStaleException()\":[{\"details\":\"Thrown if the last recorded result was not updated in the last round\"}],\"PriceOracleNotExistsException()\":[{\"details\":\"Thrown on attempting to get a result for a token that does not have a price feed\"}],\"ZeroPriceException()\":[{\"details\":\"Thrown if a price feed returns 0\"}]},\"kind\":\"dev\",\"methods\":{\"convert(uint256,address,address)\":{\"details\":\"Converts one asset into another\",\"params\":{\"amount\":\"Amount to convert\",\"tokenFrom\":\"Address of the token to convert from\",\"tokenTo\":\"Address of the token to convert to\"}},\"convertFromUSD(uint256,address)\":{\"details\":\"Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token converted to\"}},\"convertToUSD(uint256,address)\":{\"details\":\"Converts a quantity of an asset to USD (decimals = 8).\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token to be converted\"}},\"fastCheck(uint256,address,uint256,address)\":{\"details\":\"Returns collateral values for two tokens, required for a fast check\",\"params\":{\"amountFrom\":\"Amount of the outbound token\",\"amountTo\":\"Amount of the inbound token\",\"tokenFrom\":\"Address of the outbound token\",\"tokenTo\":\"Address of the inbound token\"},\"returns\":{\"collateralFrom\":\"Value of the outbound token amount in USD\",\"collateralTo\":\"Value of the inbound token amount in USD\"}},\"getPrice(address)\":{\"details\":\"Returns token's price in USD (8 decimals)\",\"params\":{\"token\":\"The token to compute the price for\"}},\"priceFeeds(address)\":{\"details\":\"Returns the price feed address for the passed token\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"priceFeedsWithFlags(address)\":{\"details\":\"Returns the price feed for the passed token, with additional parameters\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"title\":\"Price oracle interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":\"IPriceOracleV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IPriceOracleV2Events": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "NewPriceFeed", - "type": "event" - } - ], - "devdoc": { - "events": { - "NewPriceFeed(address,address)": { - "details": "Emits when a new price feed is added" - } - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"NewPriceFeed\",\"type\":\"event\"}],\"devdoc\":{\"events\":{\"NewPriceFeed(address,address)\":{\"details\":\"Emits when a new price feed is added\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":\"IPriceOracleV2Events\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IPriceOracleV2Exceptions": { - "abi": [ - { - "inputs": [], - "name": "ChainPriceStaleException", - "type": "error" - }, - { - "inputs": [], - "name": "PriceOracleNotExistsException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroPriceException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "ChainPriceStaleException()": [ - { - "details": "Thrown if the last recorded result was not updated in the last round" - } - ], - "PriceOracleNotExistsException()": [ - { - "details": "Thrown on attempting to get a result for a token that does not have a price feed" - } - ], - "ZeroPriceException()": [ - { - "details": "Thrown if a price feed returns 0" - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ChainPriceStaleException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceOracleNotExistsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPriceException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"ChainPriceStaleException()\":[{\"details\":\"Thrown if the last recorded result was not updated in the last round\"}],\"PriceOracleNotExistsException()\":[{\"details\":\"Thrown on attempting to get a result for a token that does not have a price feed\"}],\"ZeroPriceException()\":[{\"details\":\"Thrown if a price feed returns 0\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":\"IPriceOracleV2Exceptions\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - }, - "IPriceOracleV2Ext": { - "abi": [ - { - "inputs": [], - "name": "ChainPriceStaleException", - "type": "error" - }, - { - "inputs": [], - "name": "PriceOracleNotExistsException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroPriceException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "NewPriceFeed", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "addPriceFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "convert", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertFromUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertToUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountFrom", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountTo", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "fastCheck", - "outputs": [ - { - "internalType": "uint256", - "name": "collateralFrom", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collateralTo", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeeds", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeedsWithFlags", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "bool", - "name": "skipCheck", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "ChainPriceStaleException()": [ - { - "details": "Thrown if the last recorded result was not updated in the last round" - } - ], - "PriceOracleNotExistsException()": [ - { - "details": "Thrown on attempting to get a result for a token that does not have a price feed" - } - ], - "ZeroPriceException()": [ - { - "details": "Thrown if a price feed returns 0" - } - ] - }, - "kind": "dev", - "methods": { - "addPriceFeed(address,address)": { - "details": "Sets a price feed if it doesn't exist, or updates an existing one", - "params": { - "priceFeed": "Address of a USD price feed adhering to Chainlink's interface", - "token": "Address of the token to set the price feed for" - } - }, - "convert(uint256,address,address)": { - "details": "Converts one asset into another", - "params": { - "amount": "Amount to convert", - "tokenFrom": "Address of the token to convert from", - "tokenTo": "Address of the token to convert to" - } - }, - "convertFromUSD(uint256,address)": { - "details": "Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset", - "params": { - "amount": "Amount to convert", - "token": "Address of the token converted to" - } - }, - "convertToUSD(uint256,address)": { - "details": "Converts a quantity of an asset to USD (decimals = 8).", - "params": { - "amount": "Amount to convert", - "token": "Address of the token to be converted" - } - }, - "fastCheck(uint256,address,uint256,address)": { - "details": "Returns collateral values for two tokens, required for a fast check", - "params": { - "amountFrom": "Amount of the outbound token", - "amountTo": "Amount of the inbound token", - "tokenFrom": "Address of the outbound token", - "tokenTo": "Address of the inbound token" - }, - "returns": { - "collateralFrom": "Value of the outbound token amount in USD", - "collateralTo": "Value of the inbound token amount in USD" - } - }, - "getPrice(address)": { - "details": "Returns token's price in USD (8 decimals)", - "params": { - "token": "The token to compute the price for" - } - }, - "priceFeeds(address)": { - "details": "Returns the price feed address for the passed token", - "params": { - "token": "Token to get the price feed for" - } - }, - "priceFeedsWithFlags(address)": { - "details": "Returns the price feed for the passed token, with additional parameters", - "params": { - "token": "Token to get the price feed for" - } - }, - "version()": { - "details": "Returns contract version" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addPriceFeed(address,address)": "e8a97a3e", - "convert(uint256,address,address)": "b66102df", - "convertFromUSD(uint256,address)": "7afb0104", - "convertToUSD(uint256,address)": "f9a65030", - "fastCheck(uint256,address,uint256,address)": "5cecbd0e", - "getPrice(address)": "41976e09", - "priceFeeds(address)": "9dcb511a", - "priceFeedsWithFlags(address)": "f190e5fa", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ChainPriceStaleException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceOracleNotExistsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPriceException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"NewPriceFeed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"addPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertFromUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertToUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountFrom\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountTo\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"fastCheck\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"collateralFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateralTo\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeeds\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeedsWithFlags\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"skipCheck\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ChainPriceStaleException()\":[{\"details\":\"Thrown if the last recorded result was not updated in the last round\"}],\"PriceOracleNotExistsException()\":[{\"details\":\"Thrown on attempting to get a result for a token that does not have a price feed\"}],\"ZeroPriceException()\":[{\"details\":\"Thrown if a price feed returns 0\"}]},\"kind\":\"dev\",\"methods\":{\"addPriceFeed(address,address)\":{\"details\":\"Sets a price feed if it doesn't exist, or updates an existing one\",\"params\":{\"priceFeed\":\"Address of a USD price feed adhering to Chainlink's interface\",\"token\":\"Address of the token to set the price feed for\"}},\"convert(uint256,address,address)\":{\"details\":\"Converts one asset into another\",\"params\":{\"amount\":\"Amount to convert\",\"tokenFrom\":\"Address of the token to convert from\",\"tokenTo\":\"Address of the token to convert to\"}},\"convertFromUSD(uint256,address)\":{\"details\":\"Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token converted to\"}},\"convertToUSD(uint256,address)\":{\"details\":\"Converts a quantity of an asset to USD (decimals = 8).\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token to be converted\"}},\"fastCheck(uint256,address,uint256,address)\":{\"details\":\"Returns collateral values for two tokens, required for a fast check\",\"params\":{\"amountFrom\":\"Amount of the outbound token\",\"amountTo\":\"Amount of the inbound token\",\"tokenFrom\":\"Address of the outbound token\",\"tokenTo\":\"Address of the inbound token\"},\"returns\":{\"collateralFrom\":\"Value of the outbound token amount in USD\",\"collateralTo\":\"Value of the inbound token amount in USD\"}},\"getPrice(address)\":{\"details\":\"Returns token's price in USD (8 decimals)\",\"params\":{\"token\":\"The token to compute the price for\"}},\"priceFeeds(address)\":{\"details\":\"Returns the price feed address for the passed token\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"priceFeedsWithFlags(address)\":{\"details\":\"Returns the price feed for the passed token, with additional parameters\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"version()\":{\"details\":\"Returns contract version\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":\"IPriceOracleV2Ext\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol": { - "IVersion": { - "abi": [ - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Declares a version function which returns the contract's version", - "kind": "dev", - "methods": { - "version()": { - "details": "Returns contract version" - } - }, - "title": "IVersion", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Declares a version function which returns the contract's version\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"Returns contract version\"}},\"title\":\"IVersion\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol": { - "IWETHGateway": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "uint16", - "name": "referralCode", - "type": "uint16" - } - ], - "name": "addLiquidityETH", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "to", - "type": "address" - } - ], - "name": "removeLiquidityETH", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapWETH", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addLiquidityETH(address,address,uint16)": { - "details": "Converts ETH to WETH and add liqudity to the pool", - "params": { - "onBehalfOf": "The address that will receive the diesel token.", - "pool": "Address of PoolService contract to add liquidity to. This pool must have WETH as an underlying.", - "referralCode": "Code used to log the transaction facilitator, for potential rewards. 0 if non-applicable." - } - }, - "removeLiquidityETH(address,uint256,address)": { - "details": "Removes liquidity from the pool and converts WETH to ETH - burns lp's diesel (LP) tokens - unwraps WETH to ETH and sends to the LP", - "params": { - "amount": "Amount of Diesel tokens to send.", - "pool": "Address of PoolService contract to withdraw liquidity from. This pool must have WETH as an underlying.", - "to": "Address to transfer ETH to." - } - }, - "unwrapWETH(address,uint256)": { - "details": "Converts WETH to ETH, and sends to the passed address", - "params": { - "amount": "Amount of WETH to unwrap", - "to": "Address to send ETH to" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "addLiquidityETH(address,address,uint16)": "deecfbc9", - "removeLiquidityETH(address,uint256,address)": "e79a4089", - "unwrapWETH(address,uint256)": "5869dba8" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"addLiquidityETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"removeLiquidityETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unwrapWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityETH(address,address,uint16)\":{\"details\":\"Converts ETH to WETH and add liqudity to the pool\",\"params\":{\"onBehalfOf\":\"The address that will receive the diesel token.\",\"pool\":\"Address of PoolService contract to add liquidity to. This pool must have WETH as an underlying.\",\"referralCode\":\"Code used to log the transaction facilitator, for potential rewards. 0 if non-applicable.\"}},\"removeLiquidityETH(address,uint256,address)\":{\"details\":\"Removes liquidity from the pool and converts WETH to ETH - burns lp's diesel (LP) tokens - unwraps WETH to ETH and sends to the LP\",\"params\":{\"amount\":\"Amount of Diesel tokens to send.\",\"pool\":\"Address of PoolService contract to withdraw liquidity from. This pool must have WETH as an underlying.\",\"to\":\"Address to transfer ETH to.\"}},\"unwrapWETH(address,uint256)\":{\"details\":\"Converts WETH to ETH, and sends to the passed address\",\"params\":{\"amount\":\"Amount of WETH to unwrap\",\"to\":\"Address to send ETH to\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":\"IWETHGateway\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol": { - "ICreditFilter": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "ContractAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - } - ], - "name": "ContractForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "chiThreshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fastCheckDelay", - "type": "uint256" - } - ], - "name": "NewFastCheckParameters", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPriceOracle", - "type": "address" - } - ], - "name": "PriceOracleUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityThreshold", - "type": "uint256" - } - ], - "name": "TokenAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TokenForbidden", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "TransferAccountAllowed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "plugin", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "TransferPluginAllowed", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "address", - "name": "adapter", - "type": "address" - } - ], - "name": "allowContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "liquidationThreshold", - "type": "uint256" - } - ], - "name": "allowToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "allowanceForAccountTransfers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "allowedContracts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allowedContractsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "allowedTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allowedTokensCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "bool", - "name": "state", - "type": "bool" - } - ], - "name": "approveAccountTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountAccruedInterest", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcCreditAccountHealthFactor", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcThresholdWeightedValue", - "outputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "calcTotalValue", - "outputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "checkAndEnableToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenIn", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "checkCollateralChange", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "amountIn", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amountOut", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "tokenIn", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "tokenOut", - "type": "address[]" - } - ], - "name": "checkMultiTokenCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "poolService", - "type": "address" - } - ], - "name": "connectCreditManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "allowedContract", - "type": "address" - } - ], - "name": "contractToAdapter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "enabledTokens", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - } - ], - "name": "forbidContract", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "getCreditAccountTokenById", - "outputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tv", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "twv", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "initEnabledTokens", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "isTokenAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "liquidationThresholds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceOracle", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "onwer", - "type": "address" - }, - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - } - ], - "name": "revertIfAccountTransferIsNotAllowed", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minHealthFactor", - "type": "uint256" - } - ], - "name": "revertIfCantIncreaseBorrowing", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "revertIfTokenNotAllowed", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "underlyingToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "updateUnderlyingTokenLiquidationThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "events": { - "ContractAllowed(address,address)": { - "details": "Emits when a 3rd-party contract / adapter pair is allowed" - }, - "ContractForbidden(address)": { - "details": "Emits when a 3rd-party contract" - }, - "NewFastCheckParameters(uint256,uint256)": { - "details": "Emits when fast check parameters are updated" - }, - "PriceOracleUpdated(address)": { - "details": "Emits when a new price oracle address is set" - }, - "TokenAllowed(address,uint256)": { - "details": "Emits when a token is allowed or a liquidtion threshold is changed" - }, - "TokenForbidden(address)": { - "details": "Emits when a token is forbidden" - }, - "TransferAccountAllowed(address,address,bool)": { - "details": "Emits when account transfer allowance status is changed between two addresses" - }, - "TransferPluginAllowed(address,bool)": { - "details": "Emits when a priviledged address that can transfer accounts to anyone, is allowed" - } - }, - "kind": "dev", - "methods": { - "allowContract(address,address)": { - "details": "Allows an adapter <> 3rd-party contract to be used with the connected Credit Manager", - "params": { - "adapter": "Adapter contract address", - "targetContract": "Address of contract to be allowed" - } - }, - "allowToken(address,uint256)": { - "details": "Adds a token to the list of allowed tokens", - "params": { - "liquidationThreshold": "A constant determining the maximal allowed ratio of Loan-To-Value for the allowed token.", - "token": "Address of allowed token" - } - }, - "allowedContracts(uint256)": { - "details": "Returns of contract address from the allowed list by its id" - }, - "allowedContractsCount()": { - "details": "Returns quantity of contracts in allowed list" - }, - "allowedTokens(uint256)": { - "details": "Returns of token address from allowed list by its id" - }, - "allowedTokensCount()": { - "details": "Returns quantity of tokens in allowed list" - }, - "calcCreditAccountAccruedInterest(address)": { - "details": "Calculates credit account interest accrued More: https://dev.gearbox.fi/developers/credit/economy#interest-rate-accrued", - "params": { - "creditAccount": "Credit account address" - } - }, - "calcCreditAccountHealthFactor(address)": { - "details": "Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued More info: https://dev.gearbox.fi/developers/credit/economy#health-factor", - "params": { - "creditAccount": "Credit account address" - }, - "returns": { - "_0": "Health factor in percents (see PERCENTAGE FACTOR in PercentageMath.sol)" - } - }, - "calcThresholdWeightedValue(address)": { - "details": "Calculates Threshold Weighted Total Value More: https://dev.gearbox.fi/developers/credit/economy#threshold-weighted-value", - "params": { - "creditAccount": "Credit account address" - } - }, - "calcTotalValue(address)": { - "details": "Calculates total value for provided address More: https://dev.gearbox.fi/developers/credit/economy#total-value", - "params": { - "creditAccount": "Token creditAccount address" - } - }, - "checkCollateralChange(address,address,address,uint256,uint256)": { - "details": "Checks financial order and reverts if tokens aren't in list or collateral protection alerts", - "params": { - "amountIn": "Amount of tokens in", - "amountOut": "Amount of tokens out", - "creditAccount": "Address of credit account", - "tokenIn": "Address of token In in swap operation", - "tokenOut": "Address of token Out in swap operation" - } - }, - "connectCreditManager(address)": { - "details": "Connects credit managaer, hecks that all needed price feeds exists and finalize config" - }, - "enabledTokens(address)": { - "details": "Return enabled tokens - token masks where each bit is \"1\" is token is enabled" - }, - "forbidContract(address)": { - "details": "Forbids contract and removes it from the list of allowed contracts", - "params": { - "targetContract": "Address of allowed contract" - } - }, - "getCreditAccountTokenById(address,uint256)": { - "details": "Returns address & balance of token by the id of allowed token in the list", - "params": { - "creditAccount": "Credit account address", - "id": "Id of token in allowed list" - }, - "returns": { - "balance": "Token balance", - "token": "Address of token" - } - }, - "initEnabledTokens(address)": { - "details": "Sets collateral protection for new credit accounts" - }, - "isTokenAllowed(address)": { - "details": "Returns true if token is in allowed list otherwise false" - }, - "revertIfTokenNotAllowed(address)": { - "details": "Reverts if token isn't in token allowed list" - }, - "underlyingToken()": { - "details": "Returns address of underlying token" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowContract(address,address)": "7bccacee", - "allowToken(address,uint256)": "a147c6c6", - "allowanceForAccountTransfers(address,address)": "5a29be45", - "allowedContracts(uint256)": "5094cb4f", - "allowedContractsCount()": "50e036ff", - "allowedTokens(uint256)": "5e5f2e26", - "allowedTokensCount()": "20a05ff7", - "approveAccountTransfer(address,bool)": "00842b57", - "calcCreditAccountAccruedInterest(address)": "3192195c", - "calcCreditAccountHealthFactor(address)": "dfd59465", - "calcThresholdWeightedValue(address)": "90b1300a", - "calcTotalValue(address)": "c7de38a6", - "checkAndEnableToken(address,address)": "51e3f160", - "checkCollateralChange(address,address,address,uint256,uint256)": "e1c8ef0d", - "checkMultiTokenCollateral(address,uint256[],uint256[],address[],address[])": "7e4a6863", - "connectCreditManager(address)": "cf33d955", - "contractToAdapter(address)": "fdd57645", - "enabledTokens(address)": "b451cecc", - "forbidContract(address)": "52438e54", - "getCreditAccountTokenById(address,uint256)": "af0a6502", - "initEnabledTokens(address)": "e54fe9c8", - "isTokenAllowed(address)": "f9eaee0d", - "liquidationThresholds(address)": "78327438", - "priceOracle()": "2630c12f", - "revertIfAccountTransferIsNotAllowed(address,address)": "3b00ae70", - "revertIfCantIncreaseBorrowing(address,uint256)": "a5757517", - "revertIfTokenNotAllowed(address)": "7dd0ba82", - "underlyingToken()": "2495a599", - "updateUnderlyingTokenLiquidationThreshold()": "40631828" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"ContractAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocol\",\"type\":\"address\"}],\"name\":\"ContractForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chiThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fastCheckDelay\",\"type\":\"uint256\"}],\"name\":\"NewFastCheckParameters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"PriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityThreshold\",\"type\":\"uint256\"}],\"name\":\"TokenAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenForbidden\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"TransferAccountAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"plugin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"TransferPluginAllowed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"adapter\",\"type\":\"address\"}],\"name\":\"allowContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"}],\"name\":\"allowToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"allowanceForAccountTransfers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"allowedContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowedContractsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"allowedTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowedTokensCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"approveAccountTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountAccruedInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcCreditAccountHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcThresholdWeightedValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"calcTotalValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"checkAndEnableToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"checkCollateralChange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokenIn\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokenOut\",\"type\":\"address[]\"}],\"name\":\"checkMultiTokenCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolService\",\"type\":\"address\"}],\"name\":\"connectCreditManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allowedContract\",\"type\":\"address\"}],\"name\":\"contractToAdapter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"enabledTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"}],\"name\":\"forbidContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getCreditAccountTokenById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"twv\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"initEnabledTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"liquidationThresholds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"onwer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"}],\"name\":\"revertIfAccountTransferIsNotAllowed\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minHealthFactor\",\"type\":\"uint256\"}],\"name\":\"revertIfCantIncreaseBorrowing\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"revertIfTokenNotAllowed\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateUnderlyingTokenLiquidationThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ContractAllowed(address,address)\":{\"details\":\"Emits when a 3rd-party contract / adapter pair is allowed\"},\"ContractForbidden(address)\":{\"details\":\"Emits when a 3rd-party contract\"},\"NewFastCheckParameters(uint256,uint256)\":{\"details\":\"Emits when fast check parameters are updated\"},\"PriceOracleUpdated(address)\":{\"details\":\"Emits when a new price oracle address is set\"},\"TokenAllowed(address,uint256)\":{\"details\":\"Emits when a token is allowed or a liquidtion threshold is changed\"},\"TokenForbidden(address)\":{\"details\":\"Emits when a token is forbidden\"},\"TransferAccountAllowed(address,address,bool)\":{\"details\":\"Emits when account transfer allowance status is changed between two addresses\"},\"TransferPluginAllowed(address,bool)\":{\"details\":\"Emits when a priviledged address that can transfer accounts to anyone, is allowed\"}},\"kind\":\"dev\",\"methods\":{\"allowContract(address,address)\":{\"details\":\"Allows an adapter <> 3rd-party contract to be used with the connected Credit Manager\",\"params\":{\"adapter\":\"Adapter contract address\",\"targetContract\":\"Address of contract to be allowed\"}},\"allowToken(address,uint256)\":{\"details\":\"Adds a token to the list of allowed tokens\",\"params\":{\"liquidationThreshold\":\"A constant determining the maximal allowed ratio of Loan-To-Value for the allowed token.\",\"token\":\"Address of allowed token\"}},\"allowedContracts(uint256)\":{\"details\":\"Returns of contract address from the allowed list by its id\"},\"allowedContractsCount()\":{\"details\":\"Returns quantity of contracts in allowed list\"},\"allowedTokens(uint256)\":{\"details\":\"Returns of token address from allowed list by its id\"},\"allowedTokensCount()\":{\"details\":\"Returns quantity of tokens in allowed list\"},\"calcCreditAccountAccruedInterest(address)\":{\"details\":\"Calculates credit account interest accrued More: https://dev.gearbox.fi/developers/credit/economy#interest-rate-accrued\",\"params\":{\"creditAccount\":\"Credit account address\"}},\"calcCreditAccountHealthFactor(address)\":{\"details\":\"Calculates health factor for the credit account sum(asset[i] * liquidation threshold[i]) Hf = -------------------------------------------- borrowed amount + interest accrued More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\",\"params\":{\"creditAccount\":\"Credit account address\"},\"returns\":{\"_0\":\"Health factor in percents (see PERCENTAGE FACTOR in PercentageMath.sol)\"}},\"calcThresholdWeightedValue(address)\":{\"details\":\"Calculates Threshold Weighted Total Value More: https://dev.gearbox.fi/developers/credit/economy#threshold-weighted-value\",\"params\":{\"creditAccount\":\"Credit account address\"}},\"calcTotalValue(address)\":{\"details\":\"Calculates total value for provided address More: https://dev.gearbox.fi/developers/credit/economy#total-value\",\"params\":{\"creditAccount\":\"Token creditAccount address\"}},\"checkCollateralChange(address,address,address,uint256,uint256)\":{\"details\":\"Checks financial order and reverts if tokens aren't in list or collateral protection alerts\",\"params\":{\"amountIn\":\"Amount of tokens in\",\"amountOut\":\"Amount of tokens out\",\"creditAccount\":\"Address of credit account\",\"tokenIn\":\"Address of token In in swap operation\",\"tokenOut\":\"Address of token Out in swap operation\"}},\"connectCreditManager(address)\":{\"details\":\"Connects credit managaer, hecks that all needed price feeds exists and finalize config\"},\"enabledTokens(address)\":{\"details\":\"Return enabled tokens - token masks where each bit is \\\"1\\\" is token is enabled\"},\"forbidContract(address)\":{\"details\":\"Forbids contract and removes it from the list of allowed contracts\",\"params\":{\"targetContract\":\"Address of allowed contract\"}},\"getCreditAccountTokenById(address,uint256)\":{\"details\":\"Returns address & balance of token by the id of allowed token in the list\",\"params\":{\"creditAccount\":\"Credit account address\",\"id\":\"Id of token in allowed list\"},\"returns\":{\"balance\":\"Token balance\",\"token\":\"Address of token\"}},\"initEnabledTokens(address)\":{\"details\":\"Sets collateral protection for new credit accounts\"},\"isTokenAllowed(address)\":{\"details\":\"Returns true if token is in allowed list otherwise false\"},\"revertIfTokenNotAllowed(address)\":{\"details\":\"Reverts if token isn't in token allowed list\"},\"underlyingToken()\":{\"details\":\"Returns address of underlying token\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":\"ICreditFilter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":{\"keccak256\":\"0x33021aa2cf8a70971bc33cee83d1efc8f8054579b419c7beb26653be92bb1a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad3e94c28e83e55a70eaaa2dd683242a8be7319024f7149b657044189116dd93\",\"dweb:/ipfs/QmVsXMF7qoEMZ3wYB4TVWJwvsxUZjUDYC2JdxTPPNbssDM\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol": { - "ICreditManager": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "AddCollateral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "CloseCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "ExecuteOrder", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "IncreaseBorrowedAmount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "liquidator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - } - ], - "name": "LiquidateCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxLeverage", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeInterest", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "feeLiquidation", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "liquidationDiscount", - "type": "uint256" - } - ], - "name": "NewParameters", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "borrowAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "referralCode", - "type": "uint256" - } - ], - "name": "OpenCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "RepayCreditAccount", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "TransferAccount", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "uint256", - "name": "totalValue", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "isLiquidated", - "type": "bool" - } - ], - "name": "_calcClosePayments", - "outputs": [ - { - "internalType": "uint256", - "name": "_borrowedAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountToPool", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "remainingFunds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "profit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "loss", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "addCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "targetContract", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "bool", - "name": "isLiquidated", - "type": "bool" - } - ], - "name": "calcRepayAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "components": [ - { - "internalType": "address[]", - "name": "path", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "amountOutMin", - "type": "uint256" - } - ], - "internalType": "struct Exchange[]", - "name": "paths", - "type": "tuple[]" - } - ], - "name": "closeCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "creditAccounts", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditFilter", - "outputs": [ - { - "internalType": "contract ICreditFilter", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultSwapContract", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "executeOrder", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeInterest", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "feeLiquidation", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "getCreditAccountOrRevert", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - } - ], - "name": "hasOpenedCreditAccount", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "increaseBorrowedAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "bool", - "name": "force", - "type": "bool" - } - ], - "name": "liquidateCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "liquidationDiscount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxLeverageFactor", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minHealthFactor", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "onBehalfOf", - "type": "address" - }, - { - "internalType": "uint256", - "name": "leverageFactor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "referralCode", - "type": "uint256" - } - ], - "name": "openCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "poolService", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "creditAccount", - "type": "address" - }, - { - "internalType": "address", - "name": "toContract", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "provideCreditAccountAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "repayCreditAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "borrower", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "repayCreditAccountETH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferAccountOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlyingToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addCollateral(address,address,uint256)": { - "details": "Adds collateral to borrower's credit account", - "params": { - "amount": "Amount to add", - "onBehalfOf": "Address of borrower to add funds", - "token": "Token address" - } - }, - "approve(address,address)": { - "details": "Approves token for msg.sender's credit account" - }, - "calcRepayAmount(address,bool)": { - "details": "Calculates Repay amount = borrow amount + interest accrued + fee More info: https://dev.gearbox.fi/developers/credit/economy#repay https://dev.gearbox.fi/developers/credit/economy#liquidate", - "params": { - "borrower": "Borrower address", - "isLiquidated": "True if calculated repay amount for liquidator" - } - }, - "closeCreditAccount(address,(address[],uint256)[])": { - "details": "Closes credit account - Swaps all assets to underlying one using default swap protocol - Pays borrowed amount + interest accrued + fees back to the pool by calling repayCreditAccount - Transfers remaining funds to the trader / farmer - Closes the credit account and return it to account factory - Emits CloseCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#close-credit-account", - "params": { - "paths": "Exchange type data which provides paths + amountMinOut", - "to": "Address to send remaining funds" - } - }, - "creditAccounts(address)": { - "details": "Returns address of CreditFilter" - }, - "creditFilter()": { - "details": "Returns address of CreditFilter" - }, - "executeOrder(address,address,bytes)": { - "details": "Executes filtered order on credit account which is connected with particular borrowers", - "params": { - "borrower": "Borrower address", - "data": "Call data for call", - "target": "Target smart-contract" - } - }, - "getCreditAccountOrRevert(address)": { - "details": "Returns address of borrower's credit account and reverts of borrower has no one.", - "params": { - "borrower": "Borrower address" - } - }, - "hasOpenedCreditAccount(address)": { - "details": "Returns true if the borrower has opened a credit account", - "params": { - "borrower": "Borrower account" - } - }, - "increaseBorrowedAmount(uint256)": { - "details": "Increases borrowed amount by transferring additional funds from the pool if after that HealthFactor > minHealth More info: https://dev.gearbox.fi/developers/credit/credit_manager#increase-borrowed-amount", - "params": { - "amount": "Amount to increase borrowed amount" - } - }, - "liquidateCreditAccount(address,address,bool)": { - "details": "Liquidates credit account - Transfers discounted total credit account value from liquidators account - Pays borrowed funds + interest + fees back to pool, than transfers remaining funds to credit account owner - Transfer all assets from credit account to liquidator (\"to\") account - Returns credit account to factory - Emits LiquidateCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#liquidate-credit-account", - "params": { - "borrower": "Borrower address", - "force": "If true, use transfer function for transferring tokens instead of safeTransfer", - "to": "Address to transfer all assets from credit account" - } - }, - "maxAmount()": { - "details": "Returns maximum amount for open credit account" - }, - "maxLeverageFactor()": { - "details": "Returns maximum leveraged factor allowed for this pool" - }, - "minAmount()": { - "details": "Returns minimal amount for open credit account" - }, - "openCreditAccount(uint256,address,uint256,uint256)": { - "details": "Opens credit account and provides credit funds. - Opens credit account (take it from account factory) - Transfers trader /farmers initial funds to credit account - Transfers borrowed leveraged amount from pool (= amount x leverageFactor) calling lendCreditAccount() on connected Pool contract. - Emits OpenCreditAccount event Function reverts if user has already opened position More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account", - "params": { - "amount": "Borrowers own funds", - "leverageFactor": "Multiplier to borrowers own funds", - "onBehalfOf": "The address that will receive the aTokens, same as msg.sender if the user wants to receive them on his own wallet, or a different address if the beneficiary of aTokens is a different wallet", - "referralCode": "Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man" - } - }, - "poolService()": { - "details": "Returns address of connected pool" - }, - "provideCreditAccountAllowance(address,address,address)": { - "details": "Approve tokens for credit accounts. Restricted for adapters only" - }, - "repayCreditAccount(address)": { - "details": "Repays credit account More info: https://dev.gearbox.fi/developers/credit/credit_manager#repay-credit-account", - "params": { - "to": "Address to send credit account assets" - } - }, - "repayCreditAccountETH(address,address)": { - "details": "Repays credit account with ETH. Restricted to be called by WETH Gateway only", - "params": { - "borrower": "Address of borrower", - "to": "Address to send credit account assets" - } - }, - "underlyingToken()": { - "details": "Returns underlying token address" - } - }, - "title": "Credit Manager interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "_calcClosePayments(address,uint256,bool)": "996329f8", - "addCollateral(address,address,uint256)": "59781034", - "approve(address,address)": "7e5465ba", - "calcRepayAmount(address,bool)": "3ce07355", - "closeCreditAccount(address,(address[],uint256)[])": "ab114805", - "creditAccounts(address)": "055ee9b5", - "creditFilter()": "f93f515b", - "defaultSwapContract()": "e0c011b7", - "executeOrder(address,address,bytes)": "6ce4074a", - "feeInterest()": "5e0b63d3", - "feeLiquidation()": "3915ffaa", - "getCreditAccountOrRevert(address)": "e958b704", - "hasOpenedCreditAccount(address)": "256ac915", - "increaseBorrowedAmount(uint256)": "9efc60d0", - "liquidateCreditAccount(address,address,bool)": "a69a7dd6", - "liquidationDiscount()": "8053fcbe", - "maxAmount()": "5f48f393", - "maxLeverageFactor()": "b2c53a6c", - "minAmount()": "9b2cb5d8", - "minHealthFactor()": "e1b4264c", - "openCreditAccount(uint256,address,uint256,uint256)": "5288ba4b", - "poolService()": "570a7af2", - "provideCreditAccountAllowance(address,address,address)": "579122ab", - "repayCreditAccount(address)": "d692ba33", - "repayCreditAccountETH(address,address)": "a6eab5c2", - "transferAccountOwnership(address)": "5019e20a", - "underlyingToken()": "2495a599" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"AddCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"CloseCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"ExecuteOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"IncreaseBorrowedAmount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"}],\"name\":\"LiquidateCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxLeverage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeInterest\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeLiquidation\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationDiscount\",\"type\":\"uint256\"}],\"name\":\"NewParameters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"referralCode\",\"type\":\"uint256\"}],\"name\":\"OpenCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"RepayCreditAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"TransferAccount\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalValue\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isLiquidated\",\"type\":\"bool\"}],\"name\":\"_calcClosePayments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_borrowedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountToPool\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingFunds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"loss\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"targetContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isLiquidated\",\"type\":\"bool\"}],\"name\":\"calcRepayAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"path\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMin\",\"type\":\"uint256\"}],\"internalType\":\"struct Exchange[]\",\"name\":\"paths\",\"type\":\"tuple[]\"}],\"name\":\"closeCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"creditAccounts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"creditFilter\",\"outputs\":[{\"internalType\":\"contract ICreditFilter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultSwapContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeOrder\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeInterest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeLiquidation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"getCreditAccountOrRevert\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"hasOpenedCreditAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"increaseBorrowedAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"force\",\"type\":\"bool\"}],\"name\":\"liquidateCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"liquidationDiscount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxLeverageFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"leverageFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"referralCode\",\"type\":\"uint256\"}],\"name\":\"openCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolService\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creditAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"provideCreditAccountAllowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"repayCreditAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"repayCreditAccountETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferAccountOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addCollateral(address,address,uint256)\":{\"details\":\"Adds collateral to borrower's credit account\",\"params\":{\"amount\":\"Amount to add\",\"onBehalfOf\":\"Address of borrower to add funds\",\"token\":\"Token address\"}},\"approve(address,address)\":{\"details\":\"Approves token for msg.sender's credit account\"},\"calcRepayAmount(address,bool)\":{\"details\":\"Calculates Repay amount = borrow amount + interest accrued + fee More info: https://dev.gearbox.fi/developers/credit/economy#repay https://dev.gearbox.fi/developers/credit/economy#liquidate\",\"params\":{\"borrower\":\"Borrower address\",\"isLiquidated\":\"True if calculated repay amount for liquidator\"}},\"closeCreditAccount(address,(address[],uint256)[])\":{\"details\":\"Closes credit account - Swaps all assets to underlying one using default swap protocol - Pays borrowed amount + interest accrued + fees back to the pool by calling repayCreditAccount - Transfers remaining funds to the trader / farmer - Closes the credit account and return it to account factory - Emits CloseCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#close-credit-account\",\"params\":{\"paths\":\"Exchange type data which provides paths + amountMinOut\",\"to\":\"Address to send remaining funds\"}},\"creditAccounts(address)\":{\"details\":\"Returns address of CreditFilter\"},\"creditFilter()\":{\"details\":\"Returns address of CreditFilter\"},\"executeOrder(address,address,bytes)\":{\"details\":\"Executes filtered order on credit account which is connected with particular borrowers\",\"params\":{\"borrower\":\"Borrower address\",\"data\":\"Call data for call\",\"target\":\"Target smart-contract\"}},\"getCreditAccountOrRevert(address)\":{\"details\":\"Returns address of borrower's credit account and reverts of borrower has no one.\",\"params\":{\"borrower\":\"Borrower address\"}},\"hasOpenedCreditAccount(address)\":{\"details\":\"Returns true if the borrower has opened a credit account\",\"params\":{\"borrower\":\"Borrower account\"}},\"increaseBorrowedAmount(uint256)\":{\"details\":\"Increases borrowed amount by transferring additional funds from the pool if after that HealthFactor > minHealth More info: https://dev.gearbox.fi/developers/credit/credit_manager#increase-borrowed-amount\",\"params\":{\"amount\":\"Amount to increase borrowed amount\"}},\"liquidateCreditAccount(address,address,bool)\":{\"details\":\"Liquidates credit account - Transfers discounted total credit account value from liquidators account - Pays borrowed funds + interest + fees back to pool, than transfers remaining funds to credit account owner - Transfer all assets from credit account to liquidator (\\\"to\\\") account - Returns credit account to factory - Emits LiquidateCreditAccount event More info: https://dev.gearbox.fi/developers/credit/credit_manager#liquidate-credit-account\",\"params\":{\"borrower\":\"Borrower address\",\"force\":\"If true, use transfer function for transferring tokens instead of safeTransfer\",\"to\":\"Address to transfer all assets from credit account\"}},\"maxAmount()\":{\"details\":\"Returns maximum amount for open credit account\"},\"maxLeverageFactor()\":{\"details\":\"Returns maximum leveraged factor allowed for this pool\"},\"minAmount()\":{\"details\":\"Returns minimal amount for open credit account\"},\"openCreditAccount(uint256,address,uint256,uint256)\":{\"details\":\"Opens credit account and provides credit funds. - Opens credit account (take it from account factory) - Transfers trader /farmers initial funds to credit account - Transfers borrowed leveraged amount from pool (= amount x leverageFactor) calling lendCreditAccount() on connected Pool contract. - Emits OpenCreditAccount event Function reverts if user has already opened position More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account\",\"params\":{\"amount\":\"Borrowers own funds\",\"leverageFactor\":\"Multiplier to borrowers own funds\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user wants to receive them on his own wallet, or a different address if the beneficiary of aTokens is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards. 0 if the action is executed directly by the user, without any middle-man\"}},\"poolService()\":{\"details\":\"Returns address of connected pool\"},\"provideCreditAccountAllowance(address,address,address)\":{\"details\":\"Approve tokens for credit accounts. Restricted for adapters only\"},\"repayCreditAccount(address)\":{\"details\":\"Repays credit account More info: https://dev.gearbox.fi/developers/credit/credit_manager#repay-credit-account\",\"params\":{\"to\":\"Address to send credit account assets\"}},\"repayCreditAccountETH(address,address)\":{\"details\":\"Repays credit account with ETH. Restricted to be called by WETH Gateway only\",\"params\":{\"borrower\":\"Address of borrower\",\"to\":\"Address to send credit account assets\"}},\"underlyingToken()\":{\"details\":\"Returns underlying token address\"}},\"title\":\"Credit Manager interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"It encapsulates business logic for managing credit accounts More info: https://dev.gearbox.fi/developers/credit/credit_manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol\":\"ICreditManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":{\"keccak256\":\"0x33021aa2cf8a70971bc33cee83d1efc8f8054579b419c7beb26653be92bb1a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad3e94c28e83e55a70eaaa2dd683242a8be7319024f7149b657044189116dd93\",\"dweb:/ipfs/QmVsXMF7qoEMZ3wYB4TVWJwvsxUZjUDYC2JdxTPPNbssDM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol\":{\"keccak256\":\"0x22db3491682fd72c4b261ce500ccb2e9c3742ac18830d4e10d40f49014bafa5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b192f1ec27283cab14d04466ec19a4d5b765e0ba3c951108d147d1fe6c5948f0\",\"dweb:/ipfs/QmY7oMStzT9JqbpCVAbaXSPhLqdeQKN1eXwEaEuTxNcLz6\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "It encapsulates business logic for managing credit accounts More info: https://dev.gearbox.fi/developers/credit/credit_manager", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol": { - "IWETH": { - "abi": [ - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "deposit()": { - "details": "Deposits native ETH into the contract and mints WETH" - }, - "transfer(address,uint256)": { - "details": "Transfers WETH to another account" - }, - "withdraw(uint256)": { - "details": "Burns WETH from msg.sender and send back native ETH" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "deposit()": "d0e30db0", - "transfer(address,uint256)": "a9059cbb", - "withdraw(uint256)": "2e1a7d4d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"deposit()\":{\"details\":\"Deposits native ETH into the contract and mints WETH\"},\"transfer(address,uint256)\":{\"details\":\"Transfers WETH to another account\"},\"withdraw(uint256)\":{\"details\":\"Burns WETH from msg.sender and send back native ETH\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol": { - "BalanceOps": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "UnknownToken", - "type": "error" - } - ], - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c66ef1660b5f1b82c869dae6bf23d5f564c969339f0faec4c367af38f52d7d0564736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH15 0xF1660B5F1B82C869DAE6BF23D5F564 0xC9 PUSH10 0x339F0FAEC4C367AF38F5 0x2D PUSH30 0x564736F6C63430008110033000000000000000000000000000000000000 ", - "sourceMap": "209:2177:43:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;209:2177:43;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c66ef1660b5f1b82c869dae6bf23d5f564c969339f0faec4c367af38f52d7d0564736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH15 0xF1660B5F1B82C869DAE6BF23D5F564 0xC9 PUSH10 0x339F0FAEC4C367AF38F5 0x2D PUSH30 0x564736F6C63430008110033000000000000000000000000000000000000 ", - "sourceMap": "209:2177:43:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "addBalance(struct Balance memory[] memory,address,uint256)": "infinite", - "clone(struct Balance memory[] memory)": "infinite", - "copy(struct Balance memory[] memory,uint256)": "infinite", - "copyBalance(struct Balance memory)": "infinite", - "getBalance(struct Balance memory[] memory,address)": "infinite", - "getIndex(struct Balance memory[] memory,address)": "infinite", - "getModifiedAfterSwap(struct Balance memory[] memory,address,uint256,address,uint256)": "infinite", - "setBalance(struct Balance memory[] memory,address,uint256)": "infinite", - "subBalance(struct Balance memory[] memory,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"UnknownToken\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":\"BalanceOps\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol": { - "Errors": { - "abi": [ - { - "inputs": [], - "name": "ACL_CALLER_NOT_CONFIGURATOR", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ACL_CALLER_NOT_PAUSABLE_ADMIN", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "AF_MINING_IS_FINISHED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "AS_ADDRESS_NOT_FOUND", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CA_CONNECTED_CREDIT_MANAGER_ONLY", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CA_FACTORY_ONLY", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CR_CREDIT_MANAGER_ALREADY_ADDED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "CR_POOL_ALREADY_ADDED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INCORRECT_ARRAY_LENGTH", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INCORRECT_PARAMETER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INCORRECT_PATH_LENGTH", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MATH_ADDITION_OVERFLOW", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MATH_DIVISION_BY_ZERO", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MATH_MULTIPLICATION_OVERFLOW", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "NOT_IMPLEMENTED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POOL_CANT_ADD_CREDIT_MANAGER_TWICE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POOL_CONNECTED_CREDIT_MANAGERS_ONLY", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POOL_INCORRECT_WITHDRAW_FEE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REGISTERED_POOLS_ONLY", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TD_CONTRIBUTOR_IS_NOT_REGISTERED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TD_INCORRECT_WEIGHTS", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WG_NOT_ENOUGH_FUNDS", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WG_RECEIVE_IS_NOT_ALLOWED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ZERO_ADDRESS_IS_NOT_ALLOWED", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": {}, - "title": "Errors library", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "6106fe61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106102055760003560e01c806387f88ef411610124578063bdcb2576116100b7578063de63cd4011610086578063de63cd40146105d0578063e7f3be0c146105f2578063ebbd977f14610613578063fe32e65d14610636578063ff2a04e31461065857600080fd5b8063bdcb257614610549578063beea5ec21461056a578063ccbf92781461058c578063d1a65a38146105ae57600080fd5b8063a988ac60116100f3578063a988ac60146104c0578063abc3d254146104e3578063ac75713914610505578063b563b3001461052757600080fd5b806387f88ef41461043957806394391a4a1461045b57806399a98c991461047c578063a27c03701461049e57600080fd5b80633647c9f91161019c57806343f6e4ab1161016b57806343f6e4ab146103b2578063447d8e42146103d357806353278911146103f557806376d9ebb81461041757600080fd5b80633647c9f91461032d5780633df46fe51461034f5780633f3153b2146103705780634349e3d81461039157600080fd5b80630f5ee482116101d85780630f5ee482146102a6578063119427c5146102c75780632357f362146102e957806328432c221461030b57600080fd5b8063029d23441461020a5780630a2b1d3a146102415780630afeee97146102635780630c9409e714610284575b600080fd5b61022b604051806040016040528060028152602001614d3160f01b81525081565b604051610238919061067a565b60405180910390f35b61022b6040518060400160405280600381526020016243523160e81b81525081565b61022b60405180604001604052806002815260200161052560f41b81525081565b61022b6040518060400160405280600381526020016241463160e81b81525081565b61022b60405180604001604052806002815260200161269960f11b81525081565b61022b6040518060400160405280600381526020016228299960e91b81525081565b61022b6040518060400160405280600381526020016221a09960e91b81525081565b61022b6040518060400160405280600381526020016250533360e81b81525081565b61022b6040518060400160405280600381526020016257473160e81b81525081565b61022b60405180604001604052806002815260200161141360f21b81525081565b61022b6040518060400160405280600281526020016105a360f41b81525081565b61022b604051806040016040528060028152602001614d3360f01b81525081565b61022b604051806040016040528060028152602001614e4960f01b81525081565b61022b604051806040016040528060038152602001622ba39960e91b81525081565b61022b6040518060400160405280600381526020016254443160e81b81525081565b61022b6040518060400160405280600381526020016205053360ec1b81525081565b61022b6040518060400160405280600381526020016220a31960e91b81525081565b61022b60405180604001604052806002815260200161043560f41b81525081565b61022b6040518060400160405280600381526020016221a91960e91b81525081565b61022b6040518060400160405280600381526020016250533160e81b81525081565b61022b6040518060400160405280600481526020016341434c3160e01b81525081565b61022b6040518060400160405280600381526020016254443360e81b81525081565b61022b6040518060400160405280600381526020016241463360e81b81525081565b61022b6040518060400160405280600381526020016215110d60ea1b81525081565b61022b60405180604001604052806002815260200161049560f41b81525081565b61022b6040518060400160405280600381526020016257473360e81b81525081565b61022b604051806040016040528060038152602001621414cd60ea1b81525081565b61022b6040518060400160405280600381526020016210518d60ea1b81525081565b61022b6040518060400160405280600381526020016241503160e81b81525081565b61022b6040518060400160405280600281526020016121a960f11b81525081565b61022b6040518060400160405280600481526020016320a1a61960e11b81525081565b61022b604051806040016040528060038152602001622a221960e91b81525081565b61022b6040518060400160405280600381526020016243413160e81b81525081565b600060208083528351808285015260005b818110156106a75785810183015185820160400152820161068b565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212203c2f2fc97eae11e5bf1729c379a0e1f59dc7b1df5c96ab23f5471e423509597c64736f6c63430008110033", - "opcodes": "PUSH2 0x6FE PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x205 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x87F88EF4 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0xBDCB2576 GT PUSH2 0xB7 JUMPI DUP1 PUSH4 0xDE63CD40 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xDE63CD40 EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE7F3BE0C EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0xEBBD977F EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0xFE32E65D EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0xFF2A04E3 EQ PUSH2 0x658 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBDCB2576 EQ PUSH2 0x549 JUMPI DUP1 PUSH4 0xBEEA5EC2 EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0xCCBF9278 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xD1A65A38 EQ PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA988AC60 GT PUSH2 0xF3 JUMPI DUP1 PUSH4 0xA988AC60 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0xABC3D254 EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xAC757139 EQ PUSH2 0x505 JUMPI DUP1 PUSH4 0xB563B300 EQ PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x87F88EF4 EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x94391A4A EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x99A98C99 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xA27C0370 EQ PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3647C9F9 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0x43F6E4AB GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x43F6E4AB EQ PUSH2 0x3B2 JUMPI DUP1 PUSH4 0x447D8E42 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x53278911 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x76D9EBB8 EQ PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3647C9F9 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x3DF46FE5 EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0x3F3153B2 EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x4349E3D8 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF5EE482 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0xF5EE482 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x119427C5 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x2357F362 EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x28432C22 EQ PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x29D2344 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xA2B1D3A EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xAFEEE97 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xC9409E7 EQ PUSH2 0x284 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D31 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x238 SWAP2 SWAP1 PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x435231 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x525 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414631 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2699 PUSH1 0xF1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x282999 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x21A099 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x505333 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x574731 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1413 PUSH1 0xF2 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5A3 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D33 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4E49 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2BA399 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x544431 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x50533 PUSH1 0xEC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x20A319 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x21A919 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x505331 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x41434C31 PUSH1 0xE0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x544433 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414633 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x15110D PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x495 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x574733 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1414CD PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x10518D PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x415031 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21A9 PUSH1 0xF1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x20A1A619 PUSH1 0xE1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2A2219 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x434131 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6A7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x68B JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODECOPY 0x2F 0x2F 0xC9 PUSH31 0xAE11E5BF1729C379A0E1F59DC7B1DF5C96AB23F5471E423509597C64736F6C PUSH4 0x43000811 STOP CALLER ", - "sourceMap": "175:2500:45:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;175:2500:45;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@ACL_CALLER_NOT_CONFIGURATOR_14011": { - "entryPoint": null, - "id": 14011, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@ACL_CALLER_NOT_PAUSABLE_ADMIN_14008": { - "entryPoint": null, - "id": 14008, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK_13981": { - "entryPoint": null, - "id": 13981, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@AF_CREDIT_ACCOUNT_NOT_IN_STOCK_13987": { - "entryPoint": null, - "id": 13987, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN_13990": { - "entryPoint": null, - "id": 13990, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@AF_MINING_IS_FINISHED_13984": { - "entryPoint": null, - "id": 13984, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@AS_ADDRESS_NOT_FOUND_13993": { - "entryPoint": null, - "id": 13993, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@CA_CONNECTED_CREDIT_MANAGER_ONLY_14002": { - "entryPoint": null, - "id": 14002, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@CA_FACTORY_ONLY_14005": { - "entryPoint": null, - "id": 14005, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@CR_CREDIT_MANAGER_ALREADY_ADDED_13999": { - "entryPoint": null, - "id": 13999, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@CR_POOL_ALREADY_ADDED_13996": { - "entryPoint": null, - "id": 13996, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@INCORRECT_ARRAY_LENGTH_13945": { - "entryPoint": null, - "id": 13945, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@INCORRECT_PARAMETER_13954": { - "entryPoint": null, - "id": 13954, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@INCORRECT_PATH_LENGTH_13942": { - "entryPoint": null, - "id": 13942, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@MATH_ADDITION_OVERFLOW_13960": { - "entryPoint": null, - "id": 13960, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@MATH_DIVISION_BY_ZERO_13963": { - "entryPoint": null, - "id": 13963, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@MATH_MULTIPLICATION_OVERFLOW_13957": { - "entryPoint": null, - "id": 13957, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@NOT_IMPLEMENTED_13939": { - "entryPoint": null, - "id": 13939, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@POOL_CANT_ADD_CREDIT_MANAGER_TWICE_13978": { - "entryPoint": null, - "id": 13978, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@POOL_CONNECTED_CREDIT_MANAGERS_ONLY_13966": { - "entryPoint": null, - "id": 13966, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER_13969": { - "entryPoint": null, - "id": 13969, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@POOL_INCORRECT_WITHDRAW_FEE_13975": { - "entryPoint": null, - "id": 13975, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT_13972": { - "entryPoint": null, - "id": 13972, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY_13948": { - "entryPoint": null, - "id": 13948, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@REGISTERED_POOLS_ONLY_13951": { - "entryPoint": null, - "id": 13951, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@TD_CONTRIBUTOR_IS_NOT_REGISTERED_14032": { - "entryPoint": null, - "id": 14032, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@TD_INCORRECT_WEIGHTS_14026": { - "entryPoint": null, - "id": 14026, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION_14029": { - "entryPoint": null, - "id": 14029, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@TD_WALLET_IS_ALREADY_CONNECTED_TO_VC_14023": { - "entryPoint": null, - "id": 14023, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@WG_DESTINATION_IS_NOT_WETH_COMPATIBLE_14014": { - "entryPoint": null, - "id": 14014, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@WG_NOT_ENOUGH_FUNDS_14020": { - "entryPoint": null, - "id": 14020, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@WG_RECEIVE_IS_NOT_ALLOWED_14017": { - "entryPoint": null, - "id": 14017, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@ZERO_ADDRESS_IS_NOT_ALLOWED_13936": { - "entryPoint": null, - "id": 13936, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed": { - "entryPoint": 1658, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:572:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "143:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "153:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "157:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "181:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "192:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "174:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "174:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "174:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "204:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "224:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "218:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "218:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "208:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "262:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "267:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "240:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "240:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "240:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "283:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "292:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "287:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "352:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "381:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "392:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "377:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "377:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "396:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "373:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "373:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "415:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "423:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "411:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "411:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "427:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "407:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "407:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "401:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "401:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "366:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "366:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "366:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "313:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "316:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "310:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "310:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "324:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "326:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "335:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "338:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "331:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "331:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "326:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "306:3:70", - "statements": [] - }, - "src": "302:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "466:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "477:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "462:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "462:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "486:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "458:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "458:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "491:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "451:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "451:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "451:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "502:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "518:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "537:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "533:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "533:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "554:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "550:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "550:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "529:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "529:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "514:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "514:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "561:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "510:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "510:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "502:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "112:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "123:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "134:4:70", - "type": "" - } - ], - "src": "14:556:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600436106102055760003560e01c806387f88ef411610124578063bdcb2576116100b7578063de63cd4011610086578063de63cd40146105d0578063e7f3be0c146105f2578063ebbd977f14610613578063fe32e65d14610636578063ff2a04e31461065857600080fd5b8063bdcb257614610549578063beea5ec21461056a578063ccbf92781461058c578063d1a65a38146105ae57600080fd5b8063a988ac60116100f3578063a988ac60146104c0578063abc3d254146104e3578063ac75713914610505578063b563b3001461052757600080fd5b806387f88ef41461043957806394391a4a1461045b57806399a98c991461047c578063a27c03701461049e57600080fd5b80633647c9f91161019c57806343f6e4ab1161016b57806343f6e4ab146103b2578063447d8e42146103d357806353278911146103f557806376d9ebb81461041757600080fd5b80633647c9f91461032d5780633df46fe51461034f5780633f3153b2146103705780634349e3d81461039157600080fd5b80630f5ee482116101d85780630f5ee482146102a6578063119427c5146102c75780632357f362146102e957806328432c221461030b57600080fd5b8063029d23441461020a5780630a2b1d3a146102415780630afeee97146102635780630c9409e714610284575b600080fd5b61022b604051806040016040528060028152602001614d3160f01b81525081565b604051610238919061067a565b60405180910390f35b61022b6040518060400160405280600381526020016243523160e81b81525081565b61022b60405180604001604052806002815260200161052560f41b81525081565b61022b6040518060400160405280600381526020016241463160e81b81525081565b61022b60405180604001604052806002815260200161269960f11b81525081565b61022b6040518060400160405280600381526020016228299960e91b81525081565b61022b6040518060400160405280600381526020016221a09960e91b81525081565b61022b6040518060400160405280600381526020016250533360e81b81525081565b61022b6040518060400160405280600381526020016257473160e81b81525081565b61022b60405180604001604052806002815260200161141360f21b81525081565b61022b6040518060400160405280600281526020016105a360f41b81525081565b61022b604051806040016040528060028152602001614d3360f01b81525081565b61022b604051806040016040528060028152602001614e4960f01b81525081565b61022b604051806040016040528060038152602001622ba39960e91b81525081565b61022b6040518060400160405280600381526020016254443160e81b81525081565b61022b6040518060400160405280600381526020016205053360ec1b81525081565b61022b6040518060400160405280600381526020016220a31960e91b81525081565b61022b60405180604001604052806002815260200161043560f41b81525081565b61022b6040518060400160405280600381526020016221a91960e91b81525081565b61022b6040518060400160405280600381526020016250533160e81b81525081565b61022b6040518060400160405280600481526020016341434c3160e01b81525081565b61022b6040518060400160405280600381526020016254443360e81b81525081565b61022b6040518060400160405280600381526020016241463360e81b81525081565b61022b6040518060400160405280600381526020016215110d60ea1b81525081565b61022b60405180604001604052806002815260200161049560f41b81525081565b61022b6040518060400160405280600381526020016257473360e81b81525081565b61022b604051806040016040528060038152602001621414cd60ea1b81525081565b61022b6040518060400160405280600381526020016210518d60ea1b81525081565b61022b6040518060400160405280600381526020016241503160e81b81525081565b61022b6040518060400160405280600281526020016121a960f11b81525081565b61022b6040518060400160405280600481526020016320a1a61960e11b81525081565b61022b604051806040016040528060038152602001622a221960e91b81525081565b61022b6040518060400160405280600381526020016243413160e81b81525081565b600060208083528351808285015260005b818110156106a75785810183015185820160400152820161068b565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212203c2f2fc97eae11e5bf1729c379a0e1f59dc7b1df5c96ab23f5471e423509597c64736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x205 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x87F88EF4 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0xBDCB2576 GT PUSH2 0xB7 JUMPI DUP1 PUSH4 0xDE63CD40 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xDE63CD40 EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0xE7F3BE0C EQ PUSH2 0x5F2 JUMPI DUP1 PUSH4 0xEBBD977F EQ PUSH2 0x613 JUMPI DUP1 PUSH4 0xFE32E65D EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0xFF2A04E3 EQ PUSH2 0x658 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBDCB2576 EQ PUSH2 0x549 JUMPI DUP1 PUSH4 0xBEEA5EC2 EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0xCCBF9278 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xD1A65A38 EQ PUSH2 0x5AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA988AC60 GT PUSH2 0xF3 JUMPI DUP1 PUSH4 0xA988AC60 EQ PUSH2 0x4C0 JUMPI DUP1 PUSH4 0xABC3D254 EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xAC757139 EQ PUSH2 0x505 JUMPI DUP1 PUSH4 0xB563B300 EQ PUSH2 0x527 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x87F88EF4 EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x94391A4A EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0x99A98C99 EQ PUSH2 0x47C JUMPI DUP1 PUSH4 0xA27C0370 EQ PUSH2 0x49E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3647C9F9 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0x43F6E4AB GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x43F6E4AB EQ PUSH2 0x3B2 JUMPI DUP1 PUSH4 0x447D8E42 EQ PUSH2 0x3D3 JUMPI DUP1 PUSH4 0x53278911 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x76D9EBB8 EQ PUSH2 0x417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3647C9F9 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x3DF46FE5 EQ PUSH2 0x34F JUMPI DUP1 PUSH4 0x3F3153B2 EQ PUSH2 0x370 JUMPI DUP1 PUSH4 0x4349E3D8 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF5EE482 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0xF5EE482 EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x119427C5 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x2357F362 EQ PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x28432C22 EQ PUSH2 0x30B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x29D2344 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xA2B1D3A EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xAFEEE97 EQ PUSH2 0x263 JUMPI DUP1 PUSH4 0xC9409E7 EQ PUSH2 0x284 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D31 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x238 SWAP2 SWAP1 PUSH2 0x67A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x435231 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x525 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414631 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2699 PUSH1 0xF1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x282999 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x21A099 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x505333 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x574731 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1413 PUSH1 0xF2 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x5A3 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4D33 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4E49 PUSH1 0xF0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2BA399 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x544431 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x50533 PUSH1 0xEC SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x20A319 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x435 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x21A919 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x505331 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x41434C31 PUSH1 0xE0 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x544433 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x414633 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x15110D PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x495 PUSH1 0xF4 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x574733 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x1414CD PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x10518D PUSH1 0xEA SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x415031 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x21A9 PUSH1 0xF1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x20A1A619 PUSH1 0xE1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x2A2219 PUSH1 0xE9 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x22B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x434131 PUSH1 0xE8 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6A7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x68B JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODECOPY 0x2F 0x2F 0xC9 PUSH31 0xAE11E5BF1729C379A0E1F59DC7B1DF5C96AB23F5471E423509597C64736F6C PUSH4 0x43000811 STOP CALLER ", - "sourceMap": "175:2500:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;667:58;;;;;;;;;;;;;;;-1:-1:-1;;;667:58:45;;;;;;;;;;;;:::i;:::-;;;;;;;;1695:52;;;;;;;;;;;;;;;-1:-1:-1;;;1695:52:45;;;;;528:51;;;;;;;;;;;;;;;-1:-1:-1;;;528:51:45;;;;;1271:85;;;;;;;;;;;;;;;-1:-1:-1;;;1271:85:45;;;;;731:52;;;;;;;;;;;;;;;-1:-1:-1;;;731:52:45;;;;;1022:70;;;;;;;;;;;;;;;-1:-1:-1;;;1022:70:45;;;;;1927:46;;;;;;;;;;;;;;;-1:-1:-1;;;1927:46:45;;;;;1098:58;;;;;;;;;;;;;;;-1:-1:-1;;;1098:58:45;;;;;2172:68;;;;;;;;;;;;;;;-1:-1:-1;;;2172:68:45;;;;;338:51;;;;;;;;;;;;;;;-1:-1:-1;;;338:51:45;;;;;224:57;;;;;;;;;;;;;;;-1:-1:-1;;;224:57:45;;;;;789:51;;;;;;;;;;;;;;;-1:-1:-1;;;789:51:45;;;;;287:45;;;;;;;;;;;;;;;-1:-1:-1;;;287:45:45;;;;;2246:56;;;;;;;;;;;;;;;-1:-1:-1;;;2246:56:45;;;;;2404:67;;;;;;;;;;;;;;;-1:-1:-1;;;2404:67:45;;;;;873:66;;;;;;;;;;;;;;;-1:-1:-1;;;873:66:45;;;;;1362:52;;;;;;;;;;;;;;;-1:-1:-1;;;1362:52:45;;;;;453:69;;;;;;;;;;;;;;;-1:-1:-1;;;453:69:45;;;;;1753:62;;;;;;;;;;;;;;;-1:-1:-1;;;1753:62:45;;;;;945:71;;;;;;;;;;;;;;;-1:-1:-1;;;945:71:45;;;;;2005:61;;;;;;;;;;;;;;;-1:-1:-1;;;2005:61:45;;;;;2534:69;;;;;;;;;;;;;;;-1:-1:-1;;;2534:69:45;;;;;1420:61;;;;;;;;;;;;;;;-1:-1:-1;;;1420:61:45;;;;;2609:63;;;;;;;;;;;;;;;-1:-1:-1;;;2609:63:45;;;;;585:49;;;;;;;;;;;;;;;-1:-1:-1;;;585:49:45;;;;;2308:50;;;;;;;;;;;;;;;-1:-1:-1;;;2308:50:45;;;;;1162:65;;;;;;;;;;;;;;;-1:-1:-1;;;1162:65:45;;;;;1487;;;;;;;;;;;;;;;-1:-1:-1;;;1487:65:45;;;;;1597:51;;;;;;;;;;;;;;;-1:-1:-1;;;1597:51:45;;;;;395:52;;;;;;;;;;;;;;;-1:-1:-1;;;395:52:45;;;;;2072:59;;;;;;;;;;;;;;;-1:-1:-1;;;2072:59:45;;;;;2477:51;;;;;;;;;;;;;;;-1:-1:-1;;;2477:51:45;;;;;1858:63;;;;;;;;;;;;;;;-1:-1:-1;;;1858:63:45;;;;;14:556:70;134:4;163:2;192;181:9;174:21;224:6;218:13;267:6;262:2;251:9;247:18;240:34;292:1;302:140;316:6;313:1;310:13;302:140;;;411:14;;;407:23;;401:30;377:17;;;396:2;373:26;366:66;331:10;;302:140;;;306:3;491:1;486:2;477:6;466:9;462:22;458:31;451:42;561:2;554;550:7;545:2;537:6;533:15;529:29;518:9;514:45;510:54;502:62;;;;14:556;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "358000", - "executionCost": "427", - "totalCost": "358427" - }, - "external": { - "ACL_CALLER_NOT_CONFIGURATOR()": "infinite", - "ACL_CALLER_NOT_PAUSABLE_ADMIN()": "infinite", - "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK()": "infinite", - "AF_CREDIT_ACCOUNT_NOT_IN_STOCK()": "infinite", - "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN()": "infinite", - "AF_MINING_IS_FINISHED()": "infinite", - "AS_ADDRESS_NOT_FOUND()": "infinite", - "CA_CONNECTED_CREDIT_MANAGER_ONLY()": "infinite", - "CA_FACTORY_ONLY()": "infinite", - "CR_CREDIT_MANAGER_ALREADY_ADDED()": "infinite", - "CR_POOL_ALREADY_ADDED()": "infinite", - "INCORRECT_ARRAY_LENGTH()": "infinite", - "INCORRECT_PARAMETER()": "infinite", - "INCORRECT_PATH_LENGTH()": "infinite", - "MATH_ADDITION_OVERFLOW()": "infinite", - "MATH_DIVISION_BY_ZERO()": "infinite", - "MATH_MULTIPLICATION_OVERFLOW()": "infinite", - "NOT_IMPLEMENTED()": "infinite", - "POOL_CANT_ADD_CREDIT_MANAGER_TWICE()": "infinite", - "POOL_CONNECTED_CREDIT_MANAGERS_ONLY()": "infinite", - "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER()": "infinite", - "POOL_INCORRECT_WITHDRAW_FEE()": "infinite", - "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT()": "infinite", - "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY()": "infinite", - "REGISTERED_POOLS_ONLY()": "infinite", - "TD_CONTRIBUTOR_IS_NOT_REGISTERED()": "infinite", - "TD_INCORRECT_WEIGHTS()": "infinite", - "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION()": "infinite", - "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC()": "infinite", - "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE()": "infinite", - "WG_NOT_ENOUGH_FUNDS()": "infinite", - "WG_RECEIVE_IS_NOT_ALLOWED()": "infinite", - "ZERO_ADDRESS_IS_NOT_ALLOWED()": "infinite" - } - }, - "methodIdentifiers": { - "ACL_CALLER_NOT_CONFIGURATOR()": "ebbd977f", - "ACL_CALLER_NOT_PAUSABLE_ADMIN()": "a988ac60", - "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK()": "0c9409e7", - "AF_CREDIT_ACCOUNT_NOT_IN_STOCK()": "ac757139", - "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN()": "d1a65a38", - "AF_MINING_IS_FINISHED()": "87f88ef4", - "AS_ADDRESS_NOT_FOUND()": "de63cd40", - "CA_CONNECTED_CREDIT_MANAGER_ONLY()": "ff2a04e3", - "CA_FACTORY_ONLY()": "2357f362", - "CR_CREDIT_MANAGER_ALREADY_ADDED()": "99a98c99", - "CR_POOL_ALREADY_ADDED()": "0a2b1d3a", - "INCORRECT_ARRAY_LENGTH()": "e7f3be0c", - "INCORRECT_PARAMETER()": "bdcb2576", - "INCORRECT_PATH_LENGTH()": "3df46fe5", - "MATH_ADDITION_OVERFLOW()": "0f5ee482", - "MATH_DIVISION_BY_ZERO()": "4349e3d8", - "MATH_MULTIPLICATION_OVERFLOW()": "029d2344", - "NOT_IMPLEMENTED()": "43f6e4ab", - "POOL_CANT_ADD_CREDIT_MANAGER_TWICE()": "ccbf9278", - "POOL_CONNECTED_CREDIT_MANAGERS_ONLY()": "76d9ebb8", - "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER()": "a27c0370", - "POOL_INCORRECT_WITHDRAW_FEE()": "28432c22", - "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT()": "119427c5", - "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY()": "94391a4a", - "REGISTERED_POOLS_ONLY()": "0afeee97", - "TD_CONTRIBUTOR_IS_NOT_REGISTERED()": "b563b300", - "TD_INCORRECT_WEIGHTS()": "fe32e65d", - "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION()": "abc3d254", - "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC()": "53278911", - "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE()": "3647c9f9", - "WG_NOT_ENOUGH_FUNDS()": "beea5ec2", - "WG_RECEIVE_IS_NOT_ALLOWED()": "447d8e42", - "ZERO_ADDRESS_IS_NOT_ALLOWED()": "3f3153b2" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ACL_CALLER_NOT_CONFIGURATOR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ACL_CALLER_NOT_PAUSABLE_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AF_CREDIT_ACCOUNT_NOT_IN_STOCK\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AF_MINING_IS_FINISHED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AS_ADDRESS_NOT_FOUND\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CA_CONNECTED_CREDIT_MANAGER_ONLY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CA_FACTORY_ONLY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CR_CREDIT_MANAGER_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CR_POOL_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCORRECT_ARRAY_LENGTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCORRECT_PARAMETER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCORRECT_PATH_LENGTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MATH_ADDITION_OVERFLOW\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MATH_DIVISION_BY_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MATH_MULTIPLICATION_OVERFLOW\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOT_IMPLEMENTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_CANT_ADD_CREDIT_MANAGER_TWICE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_CONNECTED_CREDIT_MANAGERS_ONLY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_INCORRECT_WITHDRAW_FEE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REGISTERED_POOLS_ONLY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TD_CONTRIBUTOR_IS_NOT_REGISTERED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TD_INCORRECT_WEIGHTS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TD_WALLET_IS_ALREADY_CONNECTED_TO_VC\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WG_DESTINATION_IS_NOT_WETH_COMPATIBLE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WG_NOT_ENOUGH_FUNDS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WG_RECEIVE_IS_NOT_ALLOWED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS_IS_NOT_ALLOWED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Errors library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":\"Errors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol": { - "MultiCallOps": { - "abi": [], - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208e5b165ed8a669640a1d0edc3e4c54b18fc01d7314266bd6d3153124a984376d64736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 JUMPDEST AND 0x5E 0xD8 0xA6 PUSH10 0x640A1D0EDC3E4C54B18F 0xC0 SAR PUSH20 0x14266BD6D3153124A984376D64736F6C63430008 GT STOP CALLER ", - "sourceMap": "120:2708:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;120:2708:46;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208e5b165ed8a669640a1d0edc3e4c54b18fc01d7314266bd6d3153124a984376d64736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 JUMPDEST AND 0x5E 0xD8 0xA6 PUSH10 0x640A1D0EDC3E4C54B18F 0xC0 SAR PUSH20 0x14266BD6D3153124A984376D64736F6C63430008 GT STOP CALLER ", - "sourceMap": "120:2708:46:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "append(struct MultiCall memory[] memory,struct MultiCall memory)": "infinite", - "clone(struct MultiCall memory[] memory)": "infinite", - "concat(struct MultiCall memory[] memory,struct MultiCall memory[] memory)": "infinite", - "copy(struct MultiCall memory[] memory,uint256)": "infinite", - "copyMulticall(struct MultiCall memory)": "infinite", - "prepend(struct MultiCall memory[] memory,struct MultiCall memory)": "infinite", - "trim(struct MultiCall memory[] memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":\"MultiCallOps\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol": { - "PercentageMath": { - "abi": [], - "devdoc": { - "author": "Aave", - "details": "Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded half up*", - "kind": "dev", - "methods": {}, - "title": "PercentageMath library", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202bb38c5382cb7f98742833214bdb2c8a092ff12bd43be82f6fe599735238472764736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB3 DUP13 MSTORE8 DUP3 0xCB PUSH32 0x98742833214BDB2C8A092FF12BD43BE82F6FE599735238472764736F6C634300 ADDMOD GT STOP CALLER ", - "sourceMap": "524:1581:47:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;524:1581:47;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202bb38c5382cb7f98742833214bdb2c8a092ff12bd43be82f6fe599735238472764736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2B 0xB3 DUP13 MSTORE8 DUP3 0xCB PUSH32 0x98742833214BDB2C8A092FF12BD43BE82F6FE599735238472764736F6C634300 ADDMOD GT STOP CALLER ", - "sourceMap": "524:1581:47:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "percentDiv(uint256,uint256)": "infinite", - "percentMul(uint256,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded half up*\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PercentageMath library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform percentage calculations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":\"PercentageMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Provides functions to perform percentage calculations", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol": { - "PriceFeedChecker": { - "abi": [ - { - "inputs": [], - "name": "ChainPriceStaleException", - "type": "error" - }, - { - "inputs": [], - "name": "PriceOracleNotExistsException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroPriceException", - "type": "error" - } - ], - "devdoc": { - "errors": { - "ChainPriceStaleException()": [ - { - "details": "Thrown if the last recorded result was not updated in the last round" - } - ], - "PriceOracleNotExistsException()": [ - { - "details": "Thrown on attempting to get a result for a token that does not have a price feed" - } - ], - "ZeroPriceException()": [ - { - "details": "Thrown if a price feed returns 0" - } - ] - }, - "kind": "dev", - "methods": {}, - "title": "Sanity checker for Chainlink price feed results", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220283172a69f719681306f9f74acd4993d20ef3f00a059c648006e081d5da672a364736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x28 BALANCE PUSH19 0xA69F719681306F9F74ACD4993D20EF3F00A059 0xC6 BASEFEE STOP PUSH15 0x81D5DA672A364736F6C6343000811 STOP CALLER ", - "sourceMap": "289:397:49:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea2646970667358221220283172a69f719681306f9f74acd4993d20ef3f00a059c648006e081d5da672a364736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x28 BALANCE PUSH19 0xA69F719681306F9F74ACD4993D20EF3F00A059 0xC6 BASEFEE STOP PUSH15 0x81D5DA672A364736F6C6343000811 STOP CALLER ", - "sourceMap": "289:397:49:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "66", - "totalCost": "12666" - }, - "internal": { - "_checkAnswer(uint80,int256,uint256,uint80)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ChainPriceStaleException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceOracleNotExistsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPriceException\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"ChainPriceStaleException()\":[{\"details\":\"Thrown if the last recorded result was not updated in the last round\"}],\"PriceOracleNotExistsException()\":[{\"details\":\"Thrown on attempting to get a result for a token that does not have a price feed\"}],\"ZeroPriceException()\":[{\"details\":\"Thrown if a price feed returns 0\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"Sanity checker for Chainlink price feed results\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol\":\"PriceFeedChecker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol\":{\"keccak256\":\"0x78bd925e7883e63dda90f615a808dd0ffc7ebbdba1933044ea560dcf527c4360\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3fa61016c62a4a39096e07bd8362aa410b1a62d8de8bf1a8e25653b8098a01a8\",\"dweb:/ipfs/Qme6m47fXLd9xjgiz652ghwS12Q7zzhWYjdzRhJ5M48UJE\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol": { - "PriceOracle": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "addressProvider", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "internalType": "struct PriceFeedConfig[]", - "name": "defaults", - "type": "tuple[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "AddressIsNotContractException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotConfiguratorException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotUnPausableAdminException", - "type": "error" - }, - { - "inputs": [], - "name": "ChainPriceStaleException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectPriceFeedException", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectTokenContractException", - "type": "error" - }, - { - "inputs": [], - "name": "PriceOracleNotExistsException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressException", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroPriceException", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "NewPriceFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "_acl", - "outputs": [ - { - "internalType": "contract IACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "name": "addPriceFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "convert", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertFromUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "convertToUSD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountFrom", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenFrom", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountTo", - "type": "uint256" - }, - { - "internalType": "address", - "name": "tokenTo", - "type": "address" - } - ], - "name": "fastCheck", - "outputs": [ - { - "internalType": "uint256", - "name": "collateralFrom", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "collateralTo", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeeds", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "priceFeedsWithFlags", - "outputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "bool", - "name": "skipCheck", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "errors": { - "AddressIsNotContractException(address)": [ - { - "details": "Thrown on attempting to set an EOA as an important contract in the system" - } - ], - "CallerNotConfiguratorException()": [ - { - "details": "Thrown on attempting to call an access restricted function as a non-Configurator" - } - ], - "CallerNotPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Pausable admin" - } - ], - "CallerNotUnPausableAdminException()": [ - { - "details": "Thrown on attempting to pause a contract as a non-Unpausable admin" - } - ], - "ChainPriceStaleException()": [ - { - "details": "Thrown if the last recorded result was not updated in the last round" - } - ], - "IncorrectPriceFeedException()": [ - { - "details": "Thrown on attempting to set a token price feed to an address that is not a correct price feed" - } - ], - "IncorrectTokenContractException()": [ - { - "details": "Thrown on attempting to use a non-ERC20 contract or an EOA as a token" - } - ], - "PriceOracleNotExistsException()": [ - { - "details": "Thrown on attempting to get a result for a token that does not have a price feed" - } - ], - "ZeroAddressException()": [ - { - "details": "Thrown on attempting to set an important address to zero address" - } - ], - "ZeroPriceException()": [ - { - "details": "Thrown if a price feed returns 0" - } - ] - }, - "kind": "dev", - "methods": { - "addPriceFeed(address,address)": { - "details": "Sets a price feed if it doesn't exist, or updates an existing one", - "params": { - "priceFeed": "Address of a USD price feed adhering to Chainlink's interface", - "token": "Address of the token to set the price feed for" - } - }, - "convert(uint256,address,address)": { - "details": "Converts one asset into another", - "params": { - "amount": "Amount to convert", - "tokenFrom": "Address of the token to convert from", - "tokenTo": "Address of the token to convert to" - } - }, - "convertFromUSD(uint256,address)": { - "details": "Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset", - "params": { - "amount": "Amount to convert", - "token": "Address of the token converted to" - } - }, - "convertToUSD(uint256,address)": { - "details": "Converts a quantity of an asset to USD (decimals = 8).", - "params": { - "amount": "Amount to convert", - "token": "Address of the token to be converted" - } - }, - "fastCheck(uint256,address,uint256,address)": { - "details": "Returns collateral values for two tokens, required for a fast check", - "params": { - "amountFrom": "Amount of the outbound token", - "amountTo": "Amount of the inbound token", - "tokenFrom": "Address of the outbound token", - "tokenTo": "Address of the inbound token" - }, - "returns": { - "collateralFrom": "Value of the outbound token amount in USD", - "collateralTo": "Value of the inbound token amount in USD" - } - }, - "getPrice(address)": { - "details": "Returns token's price in USD (8 decimals)", - "params": { - "token": "The token to compute the price for" - } - }, - "pause()": { - "details": "Pause contract" - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "priceFeeds(address)": { - "details": "Returns the price feed address for the passed token", - "params": { - "token": "Token to get the price feed for" - } - }, - "priceFeedsWithFlags(address)": { - "details": "Returns the price feed for the passed token, with additional parameters", - "params": { - "token": "Token to get the price feed for" - } - }, - "unpause()": { - "details": "Unpause contract" - } - }, - "stateVariables": { - "_priceFeeds": { - "details": "Map of token addresses to corresponding price feeds and their parameters, encoded into a single uint256" - }, - "version": { - "details": "Returns contract version" - } - }, - "title": "Price Oracle based on Chainlink's price feeds", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_14790": { - "entryPoint": null, - "id": 14790, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_17105": { - "entryPoint": null, - "id": 17105, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2005": { - "entryPoint": null, - "id": 2005, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_addPriceFeed_14969": { - "entryPoint": 332, - "id": 14969, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkAnswer_14695": { - "entryPoint": 1220, - "id": 14695, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_setPriceFeedWithFlags_15266": { - "entryPoint": 1322, - "id": 15266, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@isContract_18408": { - "entryPoint": 1205, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1403, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1806, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr_fromMemory": { - "entryPoint": 1548, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 1902, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory": { - "entryPoint": 1962, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint8_fromMemory": { - "entryPoint": 1865, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint80_fromMemory": { - "entryPoint": 1938, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 1497, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_760": { - "entryPoint": 1454, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 2047, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1843, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1432, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4239:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:70" - }, - "nodeType": "YulIf", - "src": "115:70:70" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:70", - "type": "" - } - ], - "src": "14:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "373:205:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "383:19:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "399:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "393:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "393:9:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "383:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "411:33:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "433:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "441:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "429:15:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "415:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "519:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "521:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "521:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "521:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "462:10:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "482:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "486:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "478:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "478:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "490:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "474:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "474:18:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "459:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "459:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "498:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "510:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "495:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "495:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "456:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "456:62:70" - }, - "nodeType": "YulIf", - "src": "453:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "557:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "561:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "550:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "550:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "550:22:70" - } - ] - }, - "name": "allocate_memory_760", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "362:6:70", - "type": "" - } - ], - "src": "328:250:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "628:230:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "638:19:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "654:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "648:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "648:9:70" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "638:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "666:58:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "688:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "704:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "710:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "700:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "700:13:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "719:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "715:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "715:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "696:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "696:27:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "684:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "684:40:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "670:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "799:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "801:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "801:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "801:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "742:10:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "762:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "766:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "758:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "758:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "770:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "754:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "754:18:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "739:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "739:34:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "778:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "790:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "775:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "775:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "736:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "736:62:70" - }, - "nodeType": "YulIf", - "src": "733:88:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "837:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "841:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "830:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "830:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "830:22:70" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "608:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "617:6:70", - "type": "" - } - ], - "src": "583:275:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1020:1219:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1030:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1040:2:70", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1034:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1087:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1096:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1099:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1089:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1089:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1089:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1062:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1071:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1058:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1058:23:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1083:2:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1054:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1054:32:70" - }, - "nodeType": "YulIf", - "src": "1051:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1112:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1152:9:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "1122:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "1122:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1112:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1171:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1181:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1175:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1192:39:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1216:9:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1227:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1212:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1212:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1206:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1206:25:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1196:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1240:28:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1258:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1262:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1254:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1254:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1266:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1250:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1250:18:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1244:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1295:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1304:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1307:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1297:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1297:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1297:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1283:6:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1291:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1280:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1280:14:70" - }, - "nodeType": "YulIf", - "src": "1277:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1320:32:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1334:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1345:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1330:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1330:22:70" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1324:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1400:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1409:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1412:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1402:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1402:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1402:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1379:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1383:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1375:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1375:13:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1390:7:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1371:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1371:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1364:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1364:35:70" - }, - "nodeType": "YulIf", - "src": "1361:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1425:19:70", - "value": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1441:2:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1435:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1435:9:70" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "1429:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1467:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1469:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "1469:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1469:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "1459:2:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1463:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1456:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1456:10:70" - }, - "nodeType": "YulIf", - "src": "1453:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1498:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1533:1:70", - "type": "", - "value": "5" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "1536:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1529:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1529:10:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1541:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1525:19:70" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "1509:15:70" - }, - "nodeType": "YulFunctionCall", - "src": "1509:36:70" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1502:3:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1554:16:70", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1567:3:70" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "1558:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1586:3:70" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "1591:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1579:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1579:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1579:15:70" - }, - { - "nodeType": "YulAssignment", - "src": "1603:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1614:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1619:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1610:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1610:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1603:3:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1631:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1653:2:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1661:1:70", - "type": "", - "value": "6" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "1664:2:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1657:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1657:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1649:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1649:19:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1670:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1645:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1645:28:70" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "1635:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1705:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1714:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1717:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1707:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1707:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1707:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "1688:6:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1696:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1685:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1685:19:70" - }, - "nodeType": "YulIf", - "src": "1682:39:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1730:22:70", - "value": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1745:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1749:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1741:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1741:11:70" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1734:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1817:392:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1873:74:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1891:11:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1901:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "1895:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "1926:2:70" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "1930:2:70" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1919:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1919:14:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1919:14:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1842:7:70" - }, - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1851:3:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1838:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1838:17:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1857:2:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1834:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1834:26:70" - }, - "nodeType": "YulIf", - "src": "1831:116:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1960:34:70", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_760", - "nodeType": "YulIdentifier", - "src": "1973:19:70" - }, - "nodeType": "YulFunctionCall", - "src": "1973:21:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1964:5:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2014:5:70" - }, - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2051:3:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2021:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "2021:34:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2007:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2007:49:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2007:49:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2080:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2087:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2076:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2076:14:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2126:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2131:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2122:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2122:12:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2092:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "2092:43:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2069:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2069:67:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2069:67:70" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2156:3:70" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2161:5:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2149:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2149:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2149:18:70" - }, - { - "nodeType": "YulAssignment", - "src": "2180:19:70", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2191:3:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2196:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2187:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2187:12:70" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2180:3:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1772:3:70" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "1777:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1769:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1769:15:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1785:23:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1787:19:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1798:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1803:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1794:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1794:12:70" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1787:3:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1765:3:70", - "statements": [] - }, - "src": "1761:448:70" - }, - { - "nodeType": "YulAssignment", - "src": "2218:15:70", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "2228:5:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2218:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "978:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "989:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1001:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1009:6:70", - "type": "" - } - ], - "src": "863:1376:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2325:127:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2371:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2380:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2383:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2373:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2373:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2373:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2346:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2355:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2342:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2342:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2367:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2338:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2338:32:70" - }, - "nodeType": "YulIf", - "src": "2335:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2396:50:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2436:9:70" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2406:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "2406:40:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2396:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2291:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2302:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2314:6:70", - "type": "" - } - ], - "src": "2244:208:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2489:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2506:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2513:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2518:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2509:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2509:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2499:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2499:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2499:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2546:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2549:4:70", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2539:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2539:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2539:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2570:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2573:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2563:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2563:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2563:15:70" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "2457:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2690:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2700:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2712:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2723:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2708:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2708:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2700:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2742:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2757:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2773:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2778:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2769:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2769:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2782:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2765:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2765:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2753:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2753:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2735:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2735:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2735:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2659:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2670:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2681:4:70", - "type": "" - } - ], - "src": "2589:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2876:194:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2922:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2931:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2934:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2924:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2924:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2924:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2897:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2906:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2893:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2893:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2918:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2889:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2889:32:70" - }, - "nodeType": "YulIf", - "src": "2886:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2947:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2966:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2960:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2960:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2951:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3024:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3033:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3036:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3026:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3026:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3026:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2998:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3009:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3016:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3005:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3005:16:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2995:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2995:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2988:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2988:35:70" - }, - "nodeType": "YulIf", - "src": "2985:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "3049:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3059:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3049:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint8_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2842:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2853:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2865:6:70", - "type": "" - } - ], - "src": "2797:273:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3153:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3199:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3208:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3211:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3201:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3201:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3201:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3174:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3183:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3170:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3170:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3195:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3166:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3166:32:70" - }, - "nodeType": "YulIf", - "src": "3163:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3224:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3243:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3237:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3237:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3228:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3306:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3315:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3318:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3308:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3308:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3308:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3275:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3296:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3289:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3289:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3282:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3282:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3272:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3272:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3265:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3265:40:70" - }, - "nodeType": "YulIf", - "src": "3262:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "3331:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3341:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3331:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3119:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3130:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3142:6:70", - "type": "" - } - ], - "src": "3075:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3416:116:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3426:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3441:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3435:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3435:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3426:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3510:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3519:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3522:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3512:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3512:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3512:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3470:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3481:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3496:2:70", - "type": "", - "value": "80" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3500:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3492:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3492:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3504:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3488:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3488:18:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3477:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3477:30:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3467:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3467:41:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3460:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3460:49:70" - }, - "nodeType": "YulIf", - "src": "3457:69:70" - } - ] - }, - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "3395:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3406:5:70", - "type": "" - } - ], - "src": "3357:175:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3683:327:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3730:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3739:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3742:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3732:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3732:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3732:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3704:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3713:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3700:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3700:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3725:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3696:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3696:33:70" - }, - "nodeType": "YulIf", - "src": "3693:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "3755:49:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3794:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulIdentifier", - "src": "3765:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "3765:39:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3755:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3813:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3833:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3844:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3829:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3829:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3823:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3823:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3813:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3857:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3877:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3888:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3873:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3873:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3867:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3867:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3857:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3901:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3921:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3932:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3917:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3917:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3911:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3911:25:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "3901:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3945:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3988:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3999:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3984:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3984:19:70" - } - ], - "functionName": { - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulIdentifier", - "src": "3955:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "3955:49:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "3945:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3617:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3628:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3640:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3648:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3656:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "3664:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "3672:6:70", - "type": "" - } - ], - "src": "3537:473:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4063:174:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4073:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4084:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4087:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4080:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4080:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "4073:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4120:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4141:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4148:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4153:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4144:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4144:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4134:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4134:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4134:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4185:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4188:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4178:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4178:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4178:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4213:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4216:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4206:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4206:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4206:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4104:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "4107:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4101:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4101:10:70" - }, - "nodeType": "YulIf", - "src": "4098:133:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "4046:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "4049:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "4055:3:70", - "type": "" - } - ], - "src": "4015:222:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_760() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 64)\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function abi_decode_tuple_t_addresst_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n let _1 := 64\n if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n let _2 := 32\n let offset := mload(add(headStart, _2))\n let _3 := sub(shl(64, 1), 1)\n if gt(offset, _3) { revert(0, 0) }\n let _4 := add(headStart, offset)\n if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n let _5 := mload(_4)\n if gt(_5, _3) { panic_error_0x41() }\n let dst := allocate_memory(add(shl(5, _5), _2))\n let dst_1 := dst\n mstore(dst, _5)\n dst := add(dst, _2)\n let srcEnd := add(add(_4, shl(6, _5)), _2)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_4, _2)\n for { } lt(src, srcEnd) { src := add(src, _1) }\n {\n if slt(sub(dataEnd, src), _1)\n {\n let _6 := 0\n revert(_6, _6)\n }\n let value := allocate_memory_760()\n mstore(value, abi_decode_address_fromMemory(src))\n mstore(add(value, _2), abi_decode_address_fromMemory(add(src, _2)))\n mstore(dst, value)\n dst := add(dst, _2)\n }\n value1 := dst_1\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n value0 := value\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_decode_uint80_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(80, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_uint80_fromMemory(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n value3 := mload(add(headStart, 96))\n value4 := abi_decode_uint80_fromMemory(add(headStart, 128))\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60a06040523480156200001157600080fd5b50604051620016b2380380620016b283398101604081905262000034916200060c565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070e565b6001600160a01b031660805250805160005b8181101562000142576200013983828151811062000100576200010062000733565b60200260200101516000015184838151811062000121576200012162000733565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000827565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004b560201b620005591760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004b560201b620005591760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000749565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076e565b60015b15620003285790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000387575060408051601f3d908101601f19168201909252620003849181019062000749565b60015b620003a55760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003cb5760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042a575060408051601f3d908101601f191682019092526200042791810190620007aa565b60015b62000448576040516367a7cd4360e01b815260040160405180910390fd5b866200045c576200045c85858484620004c4565b50505050506200046f848484846200052a565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b6001600160a01b03163b151590565b60008313620004e6576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000505575081155b15620005245760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200054257600160a11b175b6200055860ff60a21b60a284901b1682620007ff565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200059357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005d357620005d362000598565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000604576200060462000598565b604052919050565b60008060408084860312156200062157600080fd5b6200062c846200057b565b602085810151919450906001600160401b03808211156200064c57600080fd5b818701915087601f8301126200066157600080fd5b81518181111562000676576200067662000598565b62000686848260051b01620005d9565b818152848101925060069190911b830184019089821115620006a757600080fd5b928401925b81841015620006fe5785848b031215620006c65760008081fd5b620006d0620005ae565b620006db856200057b565b8152620006ea8686016200057b565b8187015283529285019291840191620006ac565b8096505050505050509250929050565b6000602082840312156200072157600080fd5b6200072c826200057b565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075c57600080fd5b815160ff811681146200072c57600080fd5b6000602082840312156200078157600080fd5b815180151581146200072c57600080fd5b80516001600160501b03811681146200059357600080fd5b600080600080600060a08688031215620007c357600080fd5b620007ce8662000792565b9450602086015193506040860151925060608601519150620007f36080870162000792565b90509295509295909350565b808201808211156200082157634e487b7160e01b600052601160045260246000fd5b92915050565b608051610e5a62000858600039600081816101950152818161023d01528181610360015261043e0152610e5a6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101b7578063e8a97a3e146101ca578063f190e5fa146101dd578063f9a650301461021557600080fd5b80638456cb591461015d5780639dcb511a14610165578063a50cf2c81461019057600080fd5b80633f4ba83a146100d457806341976e09146100de57806354fd4d50146101045780635c975abb1461010c5780635cecbd0e146101225780637afb01041461014a575b600080fd5b6100dc610228565b005b6100f16100ec366004610b29565b6102d7565b6040519081526020015b60405180910390f35b6100f1600281565b60005460ff1660405190151581526020016100fb565b610135610130366004610b4b565b6102e9565b604080519283526020830191909152016100fb565b6100f1610158366004610b91565b61030d565b6100dc61034b565b610178610173366004610b29565b6103f8565b6040516001600160a01b0390911681526020016100fb565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6100f16101c5366004610bbd565b61040c565b6100dc6101d8366004610bf9565b610429565b6101f06101eb366004610b29565b6104dc565b604080516001600160a01b0390941684529115156020840152908201526060016100fb565b6100f1610223366004610b91565b610531565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610c23565b6102cd5760405163081996f760e11b815260040160405180910390fd5b6102d5610568565b565b60006102e2826105ba565b5092915050565b6000806102f68686610531565b91506103028484610531565b905094509492505050565b600080600061031b846105ba565b90925090508161032c82600a610d3f565b6103369087610d4b565b6103409190610d62565b925050505b92915050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610c23565b6103f05760405163d794b1e760e01b815260040160405180910390fd5b6102d5610665565b6000610403826104dc565b50909392505050565b600061042161041b8585610531565b8361030d565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610c23565b6104ce576040516361081c1560e01b815260040160405180910390fd5b6104d882826106a2565b5050565b6001600160a01b03811660009081526001602052604081205481908190808203610519576040516325dc56c160e11b815260040160405180910390fd5b94600160a11b86161515945060a286901c9350915050565b600080600061053f846105ba565b909250905061054f81600a610d3f565b6103368387610d4b565b6001600160a01b03163b151590565b6105706109c7565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000806000806105c9856104dc565b809550819350829450505050600080600080856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190610d9e565b945094505093509350846106575761065784848484610a10565b829750505050505050915091565b61066d610a79565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861059d3390565b6001600160a01b03821615806106bf57506001600160a01b038116155b156106dd57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0382163b6107155760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b0381163b6107485760405163df4c572d60e01b81526001600160a01b038216600482015260240161070c565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156107a2575060408051601f3d908101601f1916820190925261079f91810190610dee565b60015b6107bf576040516367a7cd4360e01b815260040160405180910390fd5b8060ff166008146107e3576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c23565b60015b156108485790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108a4575060408051601f3d908101601f191682019092526108a191810190610dee565b60015b6108c15760405163528ca31d60e01b815260040160405180910390fd5b60128160ff1611156108e65760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610942575060408051601f3d908101601f1916820190925261093f91810190610d9e565b60015b61095f576040516367a7cd4360e01b815260040160405180910390fd5b866109705761097085858484610a10565b505050505061098184848484610abf565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60005460ff166102d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161070c565b60008313610a31576040516356e05d2b60e01b815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610a55575081155b15610a735760405163b1cf675560e01b815260040160405180910390fd5b50505050565b60005460ff16156102d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161070c565b6001600160a01b0383168215610ad657600160a11b175b610aea60ff60a21b60a284901b1682610e11565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80356001600160a01b0381168114610b2457600080fd5b919050565b600060208284031215610b3b57600080fd5b610b4482610b0d565b9392505050565b60008060008060808587031215610b6157600080fd5b84359350610b7160208601610b0d565b925060408501359150610b8660608601610b0d565b905092959194509250565b60008060408385031215610ba457600080fd5b82359150610bb460208401610b0d565b90509250929050565b600080600060608486031215610bd257600080fd5b83359250610be260208501610b0d565b9150610bf060408501610b0d565b90509250925092565b60008060408385031215610c0c57600080fd5b610c1583610b0d565b9150610bb460208401610b0d565b600060208284031215610c3557600080fd5b81518015158114610b4457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610c96578160001904821115610c7c57610c7c610c45565b80851615610c8957918102915b93841c9390800290610c60565b509250929050565b600082610cad57506001610345565b81610cba57506000610345565b8160018114610cd05760028114610cda57610cf6565b6001915050610345565b60ff841115610ceb57610ceb610c45565b50506001821b610345565b5060208310610133831016604e8410600b8410161715610d19575081810a610345565b610d238383610c5b565b8060001904821115610d3757610d37610c45565b029392505050565b6000610b448383610c9e565b808202811582820484141761034557610345610c45565b600082610d7f57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610b2457600080fd5b600080600080600060a08688031215610db657600080fd5b610dbf86610d84565b9450602086015193506040860151925060608601519150610de260808701610d84565b90509295509295909350565b600060208284031215610e0057600080fd5b815160ff81168114610b4457600080fd5b8082018082111561034557610345610c4556fea264697066735822122069c2fd2db6d7dc1b5845e60541bf11eeb508185a9ae85239b49627abfd6b814564736f6c63430008110033", - "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x16B2 CODESIZE SUB DUP1 PUSH3 0x16B2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x60C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x67 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8737695 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xA6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xCC SWAP2 SWAP1 PUSH3 0x70E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE POP DUP1 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x142 JUMPI PUSH3 0x139 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x100 JUMPI PUSH3 0x100 PUSH3 0x733 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x121 JUMPI PUSH3 0x121 PUSH3 0x733 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH3 0x14C PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 ADD PUSH3 0xDE JUMP JUMPDEST POP POP POP POP PUSH3 0x827 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH3 0x16A JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH3 0x189 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x1A8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0x4B5 PUSH1 0x20 SHL PUSH3 0x559 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1D6 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x1F5 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0x4B5 PUSH1 0x20 SHL PUSH3 0x559 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x21F JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH3 0x1CD JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x27C JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x279 SWAP2 DUP2 ADD SWAP1 PUSH3 0x749 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x29A JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x8 EQ PUSH3 0x2BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD62ADA11 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x31F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x31C SWAP2 DUP2 ADD SWAP1 PUSH3 0x76E JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH3 0x328 JUMPI SWAP1 POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x387 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x384 SWAP2 DUP2 ADD SWAP1 PUSH3 0x749 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x3A5 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 DUP2 PUSH1 0xFF AND GT ISZERO PUSH3 0x3CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH3 0x42A JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH3 0x427 SWAP2 DUP2 ADD SWAP1 PUSH3 0x7AA JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH3 0x448 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH3 0x45C JUMPI PUSH3 0x45C DUP6 DUP6 DUP5 DUP5 PUSH3 0x4C4 JUMP JUMPDEST POP POP POP POP POP PUSH3 0x46F DUP5 DUP5 DUP5 DUP5 PUSH3 0x52A JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE263805B03657AB13064915D0723C5CE14981547E7CBA5283F66B9E5D81F6E6E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 SGT PUSH3 0x4E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56E05D2B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB AND LT DUP1 PUSH3 0x505 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH3 0x524 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB1CF6755 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 ISZERO PUSH3 0x542 JUMPI PUSH1 0x1 PUSH1 0xA1 SHL OR JUMPDEST PUSH3 0x558 PUSH1 0xFF PUSH1 0xA2 SHL PUSH1 0xA2 DUP5 SWAP1 SHL AND DUP3 PUSH3 0x7FF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x593 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x5D3 JUMPI PUSH3 0x5D3 PUSH3 0x598 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x604 JUMPI PUSH3 0x604 PUSH3 0x598 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP1 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x62C DUP5 PUSH3 0x57B JUMP JUMPDEST PUSH1 0x20 DUP6 DUP2 ADD MLOAD SWAP2 SWAP5 POP SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x661 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x676 JUMPI PUSH3 0x676 PUSH3 0x598 JUMP JUMPDEST PUSH3 0x686 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH3 0x5D9 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0x6 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD DUP5 ADD SWAP1 DUP10 DUP3 GT ISZERO PUSH3 0x6A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 DUP5 ADD SWAP3 JUMPDEST DUP2 DUP5 LT ISZERO PUSH3 0x6FE JUMPI DUP6 DUP5 DUP12 SUB SLT ISZERO PUSH3 0x6C6 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH3 0x6D0 PUSH3 0x5AE JUMP JUMPDEST PUSH3 0x6DB DUP6 PUSH3 0x57B JUMP JUMPDEST DUP2 MSTORE PUSH3 0x6EA DUP7 DUP7 ADD PUSH3 0x57B JUMP JUMPDEST DUP2 DUP8 ADD MSTORE DUP4 MSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH3 0x6AC JUMP JUMPDEST DUP1 SWAP7 POP POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x72C DUP3 PUSH3 0x57B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x75C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x781 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x72C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x50 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x593 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH3 0x7C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x7CE DUP7 PUSH3 0x792 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH3 0x7F3 PUSH1 0x80 DUP8 ADD PUSH3 0x792 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH3 0x821 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0xE5A PUSH3 0x858 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x195 ADD MSTORE DUP2 DUP2 PUSH2 0x23D ADD MSTORE DUP2 DUP2 PUSH2 0x360 ADD MSTORE PUSH2 0x43E ADD MSTORE PUSH2 0xE5A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xB66102DF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB66102DF EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0xE8A97A3E EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0xF190E5FA EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0xF9A65030 EQ PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x9DCB511A EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x5CECBD0E EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x7AFB0104 EQ PUSH2 0x14A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x228 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x2D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x2E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH2 0xDC PUSH2 0x34B JUMP JUMPDEST PUSH2 0x178 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x178 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x1C5 CALLDATASIZE PUSH1 0x4 PUSH2 0xBBD JUMP JUMPDEST PUSH2 0x40C JUMP JUMPDEST PUSH2 0xDC PUSH2 0x1D8 CALLDATASIZE PUSH1 0x4 PUSH2 0xBF9 JUMP JUMPDEST PUSH2 0x429 JUMP JUMPDEST PUSH2 0x1F0 PUSH2 0x1EB CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x4DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP5 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x223 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x531 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B0 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x568 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E2 DUP3 PUSH2 0x5BA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2F6 DUP7 DUP7 PUSH2 0x531 JUMP JUMPDEST SWAP2 POP PUSH2 0x302 DUP5 DUP5 PUSH2 0x531 JUMP JUMPDEST SWAP1 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31B DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP2 PUSH2 0x32C DUP3 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 SWAP1 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x340 SWAP2 SWAP1 PUSH2 0xD62 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D3 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x3F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x665 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x403 DUP3 PUSH2 0x4DC JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x421 PUSH2 0x41B DUP6 DUP6 PUSH2 0x531 JUMP JUMPDEST DUP4 PUSH2 0x30D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B1 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x4CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D8 DUP3 DUP3 PUSH2 0x6A2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 DUP2 SWAP1 DUP1 DUP3 SUB PUSH2 0x519 JUMPI PUSH1 0x40 MLOAD PUSH4 0x25DC56C1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0xA1 SHL DUP7 AND ISZERO ISZERO SWAP5 POP PUSH1 0xA2 DUP7 SWAP1 SHR SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x53F DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x54F DUP2 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 DUP4 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x570 PUSH2 0x9C7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5C9 DUP6 PUSH2 0x4DC JUMP JUMPDEST DUP1 SWAP6 POP DUP2 SWAP4 POP DUP3 SWAP5 POP POP POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x619 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x63D SWAP2 SWAP1 PUSH2 0xD9E JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP5 PUSH2 0x657 JUMPI PUSH2 0x657 DUP5 DUP5 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST DUP3 SWAP8 POP POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x66D PUSH2 0xA79 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x59D CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0x6BF JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x6DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x748 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x70C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x7A2 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x79F SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x7BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x8 EQ PUSH2 0x7E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD62ADA11 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x840 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x83D SWAP2 DUP2 ADD SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x848 JUMPI SWAP1 POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x8A4 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x8A1 SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x8C1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x942 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x93F SWAP2 DUP2 ADD SWAP1 PUSH2 0xD9E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH2 0x970 JUMPI PUSH2 0x970 DUP6 DUP6 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST POP POP POP POP POP PUSH2 0x981 DUP5 DUP5 DUP5 DUP5 PUSH2 0xABF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE263805B03657AB13064915D0723C5CE14981547E7CBA5283F66B9E5D81F6E6E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 DUP4 SGT PUSH2 0xA31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56E05D2B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND LT DUP1 PUSH2 0xA55 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA73 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB1CF6755 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x1 PUSH1 0xA1 SHL OR JUMPDEST PUSH2 0xAEA PUSH1 0xFF PUSH1 0xA2 SHL PUSH1 0xA2 DUP5 SWAP1 SHL AND DUP3 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0xB71 PUSH1 0x20 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0xB86 PUSH1 0x60 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0xBE2 PUSH1 0x20 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBF0 PUSH1 0x40 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC15 DUP4 PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xC96 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xC7C JUMPI PUSH2 0xC7C PUSH2 0xC45 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xC89 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xC60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xCAD JUMPI POP PUSH1 0x1 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH2 0xCBA JUMPI POP PUSH1 0x0 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xCD0 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xCDA JUMPI PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x345 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xCEB JUMPI PUSH2 0xCEB PUSH2 0xC45 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x345 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xD19 JUMPI POP DUP2 DUP2 EXP PUSH2 0x345 JUMP JUMPDEST PUSH2 0xD23 DUP4 DUP4 PUSH2 0xC5B JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xD37 JUMPI PUSH2 0xD37 PUSH2 0xC45 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB44 DUP4 DUP4 PUSH2 0xC9E JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xD7F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xDB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDBF DUP7 PUSH2 0xD84 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0xDE2 PUSH1 0x80 DUP8 ADD PUSH2 0xD84 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xC2FD2DB6D7DC1B5845E6 SDIV COINBASE 0xBF GT 0xEE 0xB5 ADDMOD XOR GAS SWAP11 0xE8 MSTORE CODECOPY 0xB4 SWAP7 0x27 0xAB REVERT PUSH12 0x814564736F6C634300081100 CALLER ", - "sourceMap": "1247:7945:50:-:0;;;1603:348;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1006:5:56;996:15;;-1:-1:-1;;996:15:56;;;1692::50;-1:-1:-1;;;;;855:29:13;;851:64;;893:22;;-1:-1:-1;;;893:22:13;;;;;;;;;;;851:64;966:15;-1:-1:-1;;;;;950:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;938:54:13;;;-1:-1:-1;1737:15:50;;1723:11:::1;1762:183;1786:3;1782:1;:7;1762:183;;;1807:55;1821:8;1830:1;1821:11;;;;;;;;:::i;:::-;;;;;;;:17;;;1840:8;1849:1;1840:11;;;;;;;;:::i;:::-;;;;;;;:21;;;1807:13;;;:55;;:::i;:::-;1917:3;;1762:183;;;;1713:238;1603:348:::0;;1247:7945;;2544:1759;-1:-1:-1;;;;;2624:19:50;;;;:46;;-1:-1:-1;;;;;;2647:23:50;;;2624:46;2620:93;;;2691:22;;-1:-1:-1;;;2691:22:50;;;;;;;;;;;2620:93;2741:18;:5;-1:-1:-1;;;;;2741:16:50;;;;;;:18;;:::i;:::-;2736:68;;2768:36;;-1:-1:-1;;;2768:36:50;;-1:-1:-1;;;;;2753:32:70;;2768:36:50;;;2735:51:70;2708:18;;2768:36:50;;;;;;;;2736:68;2832:22;:9;-1:-1:-1;;;;;2832:20:50;;;;;;:22;;:::i;:::-;2827:88;;2875:40;;-1:-1:-1;;;2875:40:50;;-1:-1:-1;;;;;2753:32:70;;2875:40:50;;;2735:51:70;2708:18;;2875:40:50;2589:203:70;2827:88:50;2964:9;-1:-1:-1;;;;;2942:41:50;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2942:43:50;;;;;;;;-1:-1:-1;;2942:43:50;;;;;;;;;;;;:::i;:::-;;;2938:269;;3155:29;;-1:-1:-1;;;3155:29:50;;;;;;;;;;;2938:269;3052:9;:14;;3065:1;3052:14;3048:56;;3075:29;;-1:-1:-1;;;3075:29:50;;;;;;;;;;;3048:56;2986:141;3217:14;3261:9;-1:-1:-1;;;;;3246:40:50;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3246:42:50;;;;;;;;-1:-1:-1;;3246:42:50;;;;;;;;;;;;:::i;:::-;;;3242:137;;;3339:8;-1:-1:-1;3242:137:50;3389:14;3423:5;-1:-1:-1;;;;;3417:21:50;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3417:23:50;;;;;;;;-1:-1:-1;;3417:23:50;;;;;;;;;;;;:::i;:::-;;;3413:282;;3639:33;;-1:-1:-1;;;3639:33:50;;;;;;;;;;;3413:282;3497:2;3485:9;:14;;;3481:60;;;3508:33;;-1:-1:-1;;;3508:33:50;;;;;;;;;;;3481:60;3579:9;-1:-1:-1;3731:9:50;-1:-1:-1;;;;;3709:48:50;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3709:50:50;;;;;;;;-1:-1:-1;;3709:50:50;;;;;;;;;;;;:::i;:::-;;;3705:462;;4115:29;;-1:-1:-1;;;4115:29:50;;;;;;;;;;;3705:462;3993:9;3988:88;;4020:56;4033:7;4042:5;4049:9;4060:15;4020:12;:56::i;:::-;3760:327;;;;;4177:61;4200:5;4207:9;4218;4229:8;4177:22;:61::i;:::-;4274:9;-1:-1:-1;;;;;4254:30:50;4267:5;-1:-1:-1;;;;;4254:30:50;;;;;;;;;;;2610:1693;;2544:1759;;:::o;1175:320:65:-;-1:-1:-1;;;;;1465:19:65;;:23;;;1175:320::o;349:335:49:-;519:1;510:5;:10;506:43;;529:20;;-1:-1:-1;;;529:20:49;;;;;;;;;;;506:43;593:7;-1:-1:-1;;;;;575:25:49;:15;-1:-1:-1;;;;;575:25:49;;:43;;;-1:-1:-1;604:14:49;;575:43;571:94;;;639:26;;-1:-1:-1;;;639:26:49;;;;;;;;;;;571:94;349:335;;;;:::o;8826:364:50:-;-1:-1:-1;;;;;8981:34:50;;9037:45;;;;-1:-1:-1;;;9052:30:50;9037:45;9126;-1:-1:-1;;;1107:3:50;9135:35;;;;9126:5;:45;:::i;:::-;-1:-1:-1;;;;;9105:18:50;;;;;;;:11;:18;;;;;:66;;;;-1:-1:-1;;;;8826:364:50:o;14:177:70:-;93:13;;-1:-1:-1;;;;;135:31:70;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:250;399:2;393:9;;;429:15;;-1:-1:-1;;;;;459:34:70;;495:22;;;456:62;453:88;;;521:18;;:::i;:::-;557:2;550:22;328:250;:::o;583:275::-;654:2;648:9;719:2;700:13;;-1:-1:-1;;696:27:70;684:40;;-1:-1:-1;;;;;739:34:70;;775:22;;;736:62;733:88;;;801:18;;:::i;:::-;837:2;830:22;583:275;;-1:-1:-1;583:275:70:o;863:1376::-;1001:6;1009;1040:2;1083;1071:9;1062:7;1058:23;1054:32;1051:52;;;1099:1;1096;1089:12;1051:52;1122:40;1152:9;1122:40;:::i;:::-;1181:2;1212:18;;;1206:25;1112:50;;-1:-1:-1;1181:2:70;-1:-1:-1;;;;;1280:14:70;;;1277:34;;;1307:1;1304;1297:12;1277:34;1345:6;1334:9;1330:22;1320:32;;1390:7;1383:4;1379:2;1375:13;1371:27;1361:55;;1412:1;1409;1402:12;1361:55;1441:2;1435:9;1463:2;1459;1456:10;1453:36;;;1469:18;;:::i;:::-;1509:36;1541:2;1536;1533:1;1529:10;1525:19;1509:36;:::i;:::-;1579:15;;;1610:12;;;;-1:-1:-1;1661:1:70;1657:10;;;;1649:19;;1645:28;;;1685:19;;;1682:39;;;1717:1;1714;1707:12;1682:39;1741:11;;;;1761:448;1777:6;1772:3;1769:15;1761:448;;;1857:2;1851:3;1842:7;1838:17;1834:26;1831:116;;;1901:1;1930:2;1926;1919:14;1831:116;1973:21;;:::i;:::-;2021:34;2051:3;2021:34;:::i;:::-;2014:5;2007:49;2092:43;2131:2;2126:3;2122:12;2092:43;:::i;:::-;2076:14;;;2069:67;2149:18;;1794:12;;;;2187;;;;1761:448;;;2228:5;2218:15;;;;;;;;863:1376;;;;;:::o;2244:208::-;2314:6;2367:2;2355:9;2346:7;2342:23;2338:32;2335:52;;;2383:1;2380;2373:12;2335:52;2406:40;2436:9;2406:40;:::i;:::-;2396:50;2244:208;-1:-1:-1;;;2244:208:70:o;2457:127::-;2518:10;2513:3;2509:20;2506:1;2499:31;2549:4;2546:1;2539:15;2573:4;2570:1;2563:15;2797:273;2865:6;2918:2;2906:9;2897:7;2893:23;2889:32;2886:52;;;2934:1;2931;2924:12;2886:52;2966:9;2960:16;3016:4;3009:5;3005:16;2998:5;2995:27;2985:55;;3036:1;3033;3026:12;3075:277;3142:6;3195:2;3183:9;3174:7;3170:23;3166:32;3163:52;;;3211:1;3208;3201:12;3163:52;3243:9;3237:16;3296:5;3289:13;3282:21;3275:5;3272:32;3262:60;;3318:1;3315;3308:12;3357:175;3435:13;;-1:-1:-1;;;;;3477:30:70;;3467:41;;3457:69;;3522:1;3519;3512:12;3537:473;3640:6;3648;3656;3664;3672;3725:3;3713:9;3704:7;3700:23;3696:33;3693:53;;;3742:1;3739;3732:12;3693:53;3765:39;3794:9;3765:39;:::i;:::-;3755:49;;3844:2;3833:9;3829:18;3823:25;3813:35;;3888:2;3877:9;3873:18;3867:25;3857:35;;3932:2;3921:9;3917:18;3911:25;3901:35;;3955:49;3999:3;3988:9;3984:19;3955:49;:::i;:::-;3945:59;;3537:473;;;;;;;;:::o;4015:222::-;4080:9;;;4101:10;;;4098:133;;;4153:10;4148:3;4144:20;4141:1;4134:31;4188:4;4185:1;4178:15;4216:4;4213:1;4206:15;4098:133;4015:222;;;;:::o;:::-;1247:7945:50;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_acl_1978": { - "entryPoint": null, - "id": 1978, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_addPriceFeed_14969": { - "entryPoint": 1698, - "id": 14969, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkAnswer_14695": { - "entryPoint": 2576, - "id": 14695, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_getPrice_15044": { - "entryPoint": 1466, - "id": 15044, - "parameterSlots": 1, - "returnSlots": 2 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_pause_17169": { - "entryPoint": 1637, - "id": 17169, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requireNotPaused_17142": { - "entryPoint": 2681, - "id": 17142, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_requirePaused_17153": { - "entryPoint": 2503, - "id": 17153, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_setPriceFeedWithFlags_15266": { - "entryPoint": 2751, - "id": 15266, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_unpause_17185": { - "entryPoint": 1384, - "id": 17185, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addPriceFeed_14806": { - "entryPoint": 1065, - "id": 14806, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@convertFromUSD_15104": { - "entryPoint": 781, - "id": 15104, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@convertToUSD_15074": { - "entryPoint": 1329, - "id": 15074, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@convert_15126": { - "entryPoint": 1036, - "id": 15126, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@fastCheck_15158": { - "entryPoint": 745, - "id": 15158, - "parameterSlots": 4, - "returnSlots": 2 - }, - "@getPrice_14986": { - "entryPoint": 727, - "id": 14986, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_18408": { - "entryPoint": 1369, - "id": 18408, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@pause_2038": { - "entryPoint": 843, - "id": 2038, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@paused_17130": { - "entryPoint": null, - "id": 17130, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@priceFeedsWithFlags_15226": { - "entryPoint": 1244, - "id": 15226, - "parameterSlots": 1, - "returnSlots": 3 - }, - "@priceFeeds_15175": { - "entryPoint": 1016, - "id": 15175, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@unpause_2056": { - "entryPoint": 552, - "id": 2056, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@version_14748": { - "entryPoint": null, - "id": 14748, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2829, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2857, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 3065, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 3107, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint256t_address": { - "entryPoint": 2961, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint256t_addresst_address": { - "entryPoint": 3005, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint256t_addresst_uint256t_address": { - "entryPoint": 2891, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory": { - "entryPoint": 3486, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_decode_tuple_t_uint8_fromMemory": { - "entryPoint": 3566, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint80_fromMemory": { - "entryPoint": 3460, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bool_t_uint256__to_t_address_t_bool_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 3601, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 3426, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_exp_helper": { - "entryPoint": 3163, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "checked_exp_t_uint256_t_uint256": { - "entryPoint": 3391, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_exp_unsigned": { - "entryPoint": 3230, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 3403, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 3141, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:7003:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "73:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "82:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "82:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "73:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "165:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "174:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "177:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "167:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "167:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "167:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "124:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "135:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "146:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "146:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "142:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "142:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "131:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "131:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "121:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "121:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "114:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "114:50:70" - }, - "nodeType": "YulIf", - "src": "111:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:70", - "type": "" - } - ], - "src": "14:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "262:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "308:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "317:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "320:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "310:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "310:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "310:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "283:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "292:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "279:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "279:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "304:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "275:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "275:32:70" - }, - "nodeType": "YulIf", - "src": "272:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "333:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "362:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "343:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "343:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "333:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "228:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "239:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "251:6:70", - "type": "" - } - ], - "src": "192:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "484:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "494:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "506:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "517:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "502:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "494:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "536:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "547:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "529:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "529:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "529:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "453:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "464:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "475:4:70", - "type": "" - } - ], - "src": "383:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "660:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "670:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "682:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "693:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "678:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "678:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "670:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "712:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "737:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "730:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "730:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "723:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "723:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "705:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "705:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "705:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "629:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "640:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "651:4:70", - "type": "" - } - ], - "src": "565:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "878:276:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "925:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "934:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "937:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "927:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "927:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "927:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "899:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "908:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "895:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "895:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "920:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "891:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "891:33:70" - }, - "nodeType": "YulIf", - "src": "888:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "950:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "973:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "960:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "960:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "950:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "992:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1025:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1036:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1021:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1021:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1002:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1002:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "992:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1049:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1076:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1087:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1072:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1072:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1059:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1059:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1049:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1100:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1133:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1144:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1129:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1129:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1110:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1110:38:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "1100:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_addresst_uint256t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "820:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "831:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "843:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "851:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "859:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "867:6:70", - "type": "" - } - ], - "src": "757:397:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1288:119:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1298:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1310:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1321:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1306:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1306:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1298:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1340:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1351:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1333:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1333:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1333:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1378:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1389:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1374:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1374:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1394:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1367:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1367:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1367:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1249:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1260:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1268:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1279:4:70", - "type": "" - } - ], - "src": "1159:248:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1499:167:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1545:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1554:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1557:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1547:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1547:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1547:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1520:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1529:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1516:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1516:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1541:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1512:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1512:32:70" - }, - "nodeType": "YulIf", - "src": "1509:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1570:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1593:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1580:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1580:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1570:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1612:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1645:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1656:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1641:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1641:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1622:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1622:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1612:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1457:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1468:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1480:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1488:6:70", - "type": "" - } - ], - "src": "1412:254:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1772:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1782:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1794:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1805:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1790:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1790:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1782:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1824:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1839:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1855:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1860:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1851:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1851:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1864:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1847:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1847:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1835:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1835:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1817:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1817:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1817:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1741:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1752:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1763:4:70", - "type": "" - } - ], - "src": "1671:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1994:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2004:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2016:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2027:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2012:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2012:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2004:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2046:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2061:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2077:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2082:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2073:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2073:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2086:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2069:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2069:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2057:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2057:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2039:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2039:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2039:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1963:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1974:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1985:4:70", - "type": "" - } - ], - "src": "1879:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2205:224:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2251:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2260:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2263:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2253:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2253:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2253:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2226:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2235:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2222:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2222:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2247:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2218:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2218:32:70" - }, - "nodeType": "YulIf", - "src": "2215:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2276:33:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2299:9:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2286:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2286:23:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2276:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2318:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2351:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2362:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2347:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2347:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2328:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2328:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2318:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2375:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2408:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2419:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2404:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2404:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2385:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2385:38:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2375:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2155:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2166:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2178:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2186:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2194:6:70", - "type": "" - } - ], - "src": "2101:328:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2521:173:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2567:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2576:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2579:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2569:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2569:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2569:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2542:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2551:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2538:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2538:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2563:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2534:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2534:32:70" - }, - "nodeType": "YulIf", - "src": "2531:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2592:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2621:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2602:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2602:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2592:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2640:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2673:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2684:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2669:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2669:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2650:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2650:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2640:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2479:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2490:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2502:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2510:6:70", - "type": "" - } - ], - "src": "2434:260:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2850:204:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2860:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2872:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2883:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2868:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2868:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2860:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2902:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2917:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2933:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2938:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2929:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2929:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2942:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2925:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2925:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2913:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2913:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2895:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2895:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2895:51:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2966:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2977:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2962:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2962:18:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2996:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2989:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2989:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2982:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2982:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2955:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2955:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2955:50:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3025:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3036:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3021:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3021:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3041:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3014:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3014:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3014:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bool_t_uint256__to_t_address_t_bool_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2803:9:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2814:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2822:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2830:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2841:4:70", - "type": "" - } - ], - "src": "2699:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3137:199:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3183:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3192:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3195:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3185:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3185:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3185:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3158:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3167:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3154:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3154:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3179:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3150:32:70" - }, - "nodeType": "YulIf", - "src": "3147:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3208:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3227:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3221:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3221:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3212:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3290:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3299:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3302:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3292:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3292:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3292:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3259:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3280:5:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3273:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3273:13:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3266:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3266:21:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3256:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3256:32:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3249:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3249:40:70" - }, - "nodeType": "YulIf", - "src": "3246:60:70" - }, - { - "nodeType": "YulAssignment", - "src": "3315:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3325:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3315:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3103:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3114:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3126:6:70", - "type": "" - } - ], - "src": "3059:277:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3373:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3390:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3397:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3402:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3393:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3393:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3383:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3383:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3383:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3430:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3433:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3423:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3423:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3423:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3454:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3457:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3447:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3447:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3447:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "3341:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3537:358:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3547:16:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3562:1:70", - "type": "", - "value": "1" - }, - "variables": [ - { - "name": "power_1", - "nodeType": "YulTypedName", - "src": "3551:7:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3572:16:70", - "value": { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "3581:7:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "3572:5:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3597:13:70", - "value": { - "name": "_base", - "nodeType": "YulIdentifier", - "src": "3605:5:70" - }, - "variableNames": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3597:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3661:228:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3706:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "3708:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "3708:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3708:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3681:4:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3695:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3691:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3691:6:70" - }, - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3699:4:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "3687:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3687:17:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3678:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3678:27:70" - }, - "nodeType": "YulIf", - "src": "3675:53:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3767:29:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3769:25:70", - "value": { - "arguments": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "3782:5:70" - }, - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3789:4:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "3778:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3778:16:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "3769:5:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "3748:8:70" - }, - { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "3758:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3744:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3744:22:70" - }, - "nodeType": "YulIf", - "src": "3741:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "3809:23:70", - "value": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3821:4:70" - }, - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3827:4:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "3817:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3817:15:70" - }, - "variableNames": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "3809:4:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3845:34:70", - "value": { - "arguments": [ - { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "3861:7:70" - }, - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "3870:8:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "3857:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3857:22:70" - }, - "variableNames": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "3845:8:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "3630:8:70" - }, - { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "3640:7:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3627:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3627:21:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3649:3:70", - "statements": [] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3623:3:70", - "statements": [] - }, - "src": "3619:270:70" - } - ] - }, - "name": "checked_exp_helper", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "_base", - "nodeType": "YulTypedName", - "src": "3501:5:70", - "type": "" - }, - { - "name": "exponent", - "nodeType": "YulTypedName", - "src": "3508:8:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nodeType": "YulTypedName", - "src": "3521:5:70", - "type": "" - }, - { - "name": "base", - "nodeType": "YulTypedName", - "src": "3528:4:70", - "type": "" - } - ], - "src": "3473:422:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3959:747:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3997:52:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4011:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4020:1:70", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4011:5:70" - } - ] - }, - { - "nodeType": "YulLeave", - "src": "4034:5:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "3979:8:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3972:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3972:16:70" - }, - "nodeType": "YulIf", - "src": "3969:80:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4082:52:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4096:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4105:1:70", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4096:5:70" - } - ] - }, - { - "nodeType": "YulLeave", - "src": "4119:5:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4068:4:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4061:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4061:12:70" - }, - "nodeType": "YulIf", - "src": "4058:76:70" - }, - { - "cases": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4170:52:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4184:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4193:1:70", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4184:5:70" - } - ] - }, - { - "nodeType": "YulLeave", - "src": "4207:5:70" - } - ] - }, - "nodeType": "YulCase", - "src": "4163:59:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4168:1:70", - "type": "", - "value": "1" - } - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4238:123:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4273:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4275:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4275:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4275:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4258:8:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4268:3:70", - "type": "", - "value": "255" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4255:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4255:17:70" - }, - "nodeType": "YulIf", - "src": "4252:43:70" - }, - { - "nodeType": "YulAssignment", - "src": "4308:25:70", - "value": { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4321:8:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4331:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4317:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4317:16:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4308:5:70" - } - ] - }, - { - "nodeType": "YulLeave", - "src": "4346:5:70" - } - ] - }, - "nodeType": "YulCase", - "src": "4231:130:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4236:1:70", - "type": "", - "value": "2" - } - } - ], - "expression": { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4150:4:70" - }, - "nodeType": "YulSwitch", - "src": "4143:218:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4459:70:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4473:28:70", - "value": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4486:4:70" - }, - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4492:8:70" - } - ], - "functionName": { - "name": "exp", - "nodeType": "YulIdentifier", - "src": "4482:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4482:19:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4473:5:70" - } - ] - }, - { - "nodeType": "YulLeave", - "src": "4514:5:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4383:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4389:2:70", - "type": "", - "value": "11" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4380:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4380:12:70" - }, - { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4397:8:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4407:2:70", - "type": "", - "value": "78" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4394:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4394:16:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4376:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4376:35:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4420:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4426:3:70", - "type": "", - "value": "307" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4417:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4417:13:70" - }, - { - "arguments": [ - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4435:8:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4445:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4432:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4432:16:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4413:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4413:36:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "4373:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4373:77:70" - }, - "nodeType": "YulIf", - "src": "4370:159:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4538:57:70", - "value": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4580:4:70" - }, - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4586:8:70" - } - ], - "functionName": { - "name": "checked_exp_helper", - "nodeType": "YulIdentifier", - "src": "4561:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4561:34:70" - }, - "variables": [ - { - "name": "power_1", - "nodeType": "YulTypedName", - "src": "4542:7:70", - "type": "" - }, - { - "name": "base_1", - "nodeType": "YulTypedName", - "src": "4551:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4640:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4642:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4642:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4642:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "4610:7:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4627:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4623:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4623:6:70" - }, - { - "name": "base_1", - "nodeType": "YulIdentifier", - "src": "4631:6:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "4619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4619:19:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4607:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4607:32:70" - }, - "nodeType": "YulIf", - "src": "4604:58:70" - }, - { - "nodeType": "YulAssignment", - "src": "4671:29:70", - "value": { - "arguments": [ - { - "name": "power_1", - "nodeType": "YulIdentifier", - "src": "4684:7:70" - }, - { - "name": "base_1", - "nodeType": "YulIdentifier", - "src": "4693:6:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "4680:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4680:20:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4671:5:70" - } - ] - } - ] - }, - "name": "checked_exp_unsigned", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nodeType": "YulTypedName", - "src": "3930:4:70", - "type": "" - }, - { - "name": "exponent", - "nodeType": "YulTypedName", - "src": "3936:8:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nodeType": "YulTypedName", - "src": "3949:5:70", - "type": "" - } - ], - "src": "3900:806:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4781:61:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4791:45:70", - "value": { - "arguments": [ - { - "name": "base", - "nodeType": "YulIdentifier", - "src": "4821:4:70" - }, - { - "name": "exponent", - "nodeType": "YulIdentifier", - "src": "4827:8:70" - } - ], - "functionName": { - "name": "checked_exp_unsigned", - "nodeType": "YulIdentifier", - "src": "4800:20:70" - }, - "nodeType": "YulFunctionCall", - "src": "4800:36:70" - }, - "variableNames": [ - { - "name": "power", - "nodeType": "YulIdentifier", - "src": "4791:5:70" - } - ] - } - ] - }, - "name": "checked_exp_t_uint256_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nodeType": "YulTypedName", - "src": "4752:4:70", - "type": "" - }, - { - "name": "exponent", - "nodeType": "YulTypedName", - "src": "4758:8:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nodeType": "YulTypedName", - "src": "4771:5:70", - "type": "" - } - ], - "src": "4711:131:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4899:116:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4909:20:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4924:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4927:1:70" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "4920:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4920:9:70" - }, - "variableNames": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "4909:7:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4987:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "4989:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4989:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4989:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4958:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4951:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4951:9:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "4965:1:70" - }, - { - "arguments": [ - { - "name": "product", - "nodeType": "YulIdentifier", - "src": "4972:7:70" - }, - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "4981:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "4968:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4968:15:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4962:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4962:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "4948:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4948:37:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4941:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4941:45:70" - }, - "nodeType": "YulIf", - "src": "4938:71:70" - } - ] - }, - "name": "checked_mul_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "4878:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "4881:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nodeType": "YulTypedName", - "src": "4887:7:70", - "type": "" - } - ], - "src": "4847:168:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5066:171:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5097:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5118:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5125:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5130:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5121:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5121:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5111:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5111:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5111:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5162:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5165:4:70", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5155:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5155:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5155:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5190:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5193:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5183:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5183:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5183:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "5086:1:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5079:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5079:9:70" - }, - "nodeType": "YulIf", - "src": "5076:132:70" - }, - { - "nodeType": "YulAssignment", - "src": "5217:14:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "5226:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "5229:1:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "5222:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5222:9:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "5217:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "5051:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "5054:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "5060:1:70", - "type": "" - } - ], - "src": "5020:217:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5301:120:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5311:22:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5326:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5320:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5320:13:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5311:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5399:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5408:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5411:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5401:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5401:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5401:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5355:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5366:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5373:22:70", - "type": "", - "value": "0xffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5362:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5362:34:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5352:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "5352:45:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5345:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5345:53:70" - }, - "nodeType": "YulIf", - "src": "5342:73:70" - } - ] - }, - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "5280:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5291:5:70", - "type": "" - } - ], - "src": "5242:179:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5572:327:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5619:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5628:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5631:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5621:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5621:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5621:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5593:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5602:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "5589:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5589:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5614:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5585:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5585:33:70" - }, - "nodeType": "YulIf", - "src": "5582:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "5644:49:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5683:9:70" - } - ], - "functionName": { - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulIdentifier", - "src": "5654:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "5654:39:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5644:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5702:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5722:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5733:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5718:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5718:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5712:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5712:25:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5702:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5746:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5766:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5777:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5762:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5762:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5756:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5756:25:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "5746:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5790:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5810:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5821:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5806:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5800:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "5800:25:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "5790:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "5834:59:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5877:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5888:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5873:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5873:19:70" - } - ], - "functionName": { - "name": "abi_decode_uint80_fromMemory", - "nodeType": "YulIdentifier", - "src": "5844:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "5844:49:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "5834:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5506:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5517:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5529:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "5537:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "5545:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "5553:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "5561:6:70", - "type": "" - } - ], - "src": "5426:473:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5983:194:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6029:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6038:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6041:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6031:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6031:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6031:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6004:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6013:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6000:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6000:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6025:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5996:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5996:32:70" - }, - "nodeType": "YulIf", - "src": "5993:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6054:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6073:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "6067:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "6067:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6058:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6131:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6140:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6143:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6133:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6133:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6133:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6105:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6116:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6123:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6112:16:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6102:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6102:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6095:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6095:35:70" - }, - "nodeType": "YulIf", - "src": "6092:55:70" - }, - { - "nodeType": "YulAssignment", - "src": "6156:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6166:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6156:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint8_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5949:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "5960:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5972:6:70", - "type": "" - } - ], - "src": "5904:273:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6356:170:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6373:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6384:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6366:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6366:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6366:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6407:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6418:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6403:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6403:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6423:2:70", - "type": "", - "value": "20" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6396:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6396:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6396:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6446:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6457:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6442:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6442:18:70" - }, - { - "hexValue": "5061757361626c653a206e6f7420706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6462:22:70", - "type": "", - "value": "Pausable: not paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6435:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6435:50:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6435:50:70" - }, - { - "nodeType": "YulAssignment", - "src": "6494:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6506:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6517:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6502:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6494:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6333:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6347:4:70", - "type": "" - } - ], - "src": "6182:344:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6705:166:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6722:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6733:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6715:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6715:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6715:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6756:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6767:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6752:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6752:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6772:2:70", - "type": "", - "value": "16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6745:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6745:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6745:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6795:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6806:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6791:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6791:18:70" - }, - { - "hexValue": "5061757361626c653a20706175736564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6811:18:70", - "type": "", - "value": "Pausable: paused" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6784:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6784:46:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6784:46:70" - }, - { - "nodeType": "YulAssignment", - "src": "6839:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6851:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6862:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6847:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6847:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6839:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6682:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6696:4:70", - "type": "" - } - ], - "src": "6531:340:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6924:77:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6934:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "6945:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "6948:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6941:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6941:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "6934:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6973:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6975:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "6975:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6975:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "6965:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "6968:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6962:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6962:10:70" - }, - "nodeType": "YulIf", - "src": "6959:36:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "6907:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "6910:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "6916:3:70", - "type": "" - } - ], - "src": "6876:125:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_tuple_t_uint256t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := abi_decode_address(add(headStart, 96))\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_contract$_IACL_$10623__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := abi_decode_address(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_encode_tuple_t_address_t_bool_t_uint256__to_t_address_t_bool_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), iszero(iszero(value1)))\n mstore(add(headStart, 64), value2)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_exp_helper(_base, exponent) -> power, base\n {\n let power_1 := 1\n power := power_1\n base := _base\n for { } gt(exponent, power_1) { }\n {\n if gt(base, div(not(0), base)) { panic_error_0x11() }\n if and(exponent, power_1) { power := mul(power, base) }\n base := mul(base, base)\n exponent := shr(power_1, exponent)\n }\n }\n function checked_exp_unsigned(base, exponent) -> power\n {\n if iszero(exponent)\n {\n power := 1\n leave\n }\n if iszero(base)\n {\n power := 0\n leave\n }\n switch base\n case 1 {\n power := 1\n leave\n }\n case 2 {\n if gt(exponent, 255) { panic_error_0x11() }\n power := shl(exponent, 1)\n leave\n }\n if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n {\n power := exp(base, exponent)\n leave\n }\n let power_1, base_1 := checked_exp_helper(base, exponent)\n if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n power := mul(power_1, base_1)\n }\n function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n {\n power := checked_exp_unsigned(base, exponent)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_decode_uint80_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint80t_int256t_uint256t_uint256t_uint80_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_uint80_fromMemory(headStart)\n value1 := mload(add(headStart, 32))\n value2 := mload(add(headStart, 64))\n value3 := mload(add(headStart, 96))\n value4 := abi_decode_uint80_fromMemory(add(headStart, 128))\n }\n function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Pausable: not paused\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 16)\n mstore(add(headStart, 64), \"Pausable: paused\")\n tail := add(headStart, 96)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1978": [ - { - "length": 32, - "start": 405 - }, - { - "length": 32, - "start": 573 - }, - { - "length": 32, - "start": 864 - }, - { - "length": 32, - "start": 1086 - } - ] - }, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101b7578063e8a97a3e146101ca578063f190e5fa146101dd578063f9a650301461021557600080fd5b80638456cb591461015d5780639dcb511a14610165578063a50cf2c81461019057600080fd5b80633f4ba83a146100d457806341976e09146100de57806354fd4d50146101045780635c975abb1461010c5780635cecbd0e146101225780637afb01041461014a575b600080fd5b6100dc610228565b005b6100f16100ec366004610b29565b6102d7565b6040519081526020015b60405180910390f35b6100f1600281565b60005460ff1660405190151581526020016100fb565b610135610130366004610b4b565b6102e9565b604080519283526020830191909152016100fb565b6100f1610158366004610b91565b61030d565b6100dc61034b565b610178610173366004610b29565b6103f8565b6040516001600160a01b0390911681526020016100fb565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6100f16101c5366004610bbd565b61040c565b6100dc6101d8366004610bf9565b610429565b6101f06101eb366004610b29565b6104dc565b604080516001600160a01b0390941684529115156020840152908201526060016100fb565b6100f1610223366004610b91565b610531565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610c23565b6102cd5760405163081996f760e11b815260040160405180910390fd5b6102d5610568565b565b60006102e2826105ba565b5092915050565b6000806102f68686610531565b91506103028484610531565b905094509492505050565b600080600061031b846105ba565b90925090508161032c82600a610d3f565b6103369087610d4b565b6103409190610d62565b925050505b92915050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610c23565b6103f05760405163d794b1e760e01b815260040160405180910390fd5b6102d5610665565b6000610403826104dc565b50909392505050565b600061042161041b8585610531565b8361030d565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610c23565b6104ce576040516361081c1560e01b815260040160405180910390fd5b6104d882826106a2565b5050565b6001600160a01b03811660009081526001602052604081205481908190808203610519576040516325dc56c160e11b815260040160405180910390fd5b94600160a11b86161515945060a286901c9350915050565b600080600061053f846105ba565b909250905061054f81600a610d3f565b6103368387610d4b565b6001600160a01b03163b151590565b6105706109c7565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000806000806105c9856104dc565b809550819350829450505050600080600080856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190610d9e565b945094505093509350846106575761065784848484610a10565b829750505050505050915091565b61066d610a79565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861059d3390565b6001600160a01b03821615806106bf57506001600160a01b038116155b156106dd57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0382163b6107155760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b0381163b6107485760405163df4c572d60e01b81526001600160a01b038216600482015260240161070c565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156107a2575060408051601f3d908101601f1916820190925261079f91810190610dee565b60015b6107bf576040516367a7cd4360e01b815260040160405180910390fd5b8060ff166008146107e3576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c23565b60015b156108485790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108a4575060408051601f3d908101601f191682019092526108a191810190610dee565b60015b6108c15760405163528ca31d60e01b815260040160405180910390fd5b60128160ff1611156108e65760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610942575060408051601f3d908101601f1916820190925261093f91810190610d9e565b60015b61095f576040516367a7cd4360e01b815260040160405180910390fd5b866109705761097085858484610a10565b505050505061098184848484610abf565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60005460ff166102d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161070c565b60008313610a31576040516356e05d2b60e01b815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610a55575081155b15610a735760405163b1cf675560e01b815260040160405180910390fd5b50505050565b60005460ff16156102d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161070c565b6001600160a01b0383168215610ad657600160a11b175b610aea60ff60a21b60a284901b1682610e11565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80356001600160a01b0381168114610b2457600080fd5b919050565b600060208284031215610b3b57600080fd5b610b4482610b0d565b9392505050565b60008060008060808587031215610b6157600080fd5b84359350610b7160208601610b0d565b925060408501359150610b8660608601610b0d565b905092959194509250565b60008060408385031215610ba457600080fd5b82359150610bb460208401610b0d565b90509250929050565b600080600060608486031215610bd257600080fd5b83359250610be260208501610b0d565b9150610bf060408501610b0d565b90509250925092565b60008060408385031215610c0c57600080fd5b610c1583610b0d565b9150610bb460208401610b0d565b600060208284031215610c3557600080fd5b81518015158114610b4457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610c96578160001904821115610c7c57610c7c610c45565b80851615610c8957918102915b93841c9390800290610c60565b509250929050565b600082610cad57506001610345565b81610cba57506000610345565b8160018114610cd05760028114610cda57610cf6565b6001915050610345565b60ff841115610ceb57610ceb610c45565b50506001821b610345565b5060208310610133831016604e8410600b8410161715610d19575081810a610345565b610d238383610c5b565b8060001904821115610d3757610d37610c45565b029392505050565b6000610b448383610c9e565b808202811582820484141761034557610345610c45565b600082610d7f57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610b2457600080fd5b600080600080600060a08688031215610db657600080fd5b610dbf86610d84565b9450602086015193506040860151925060608601519150610de260808701610d84565b90509295509295909350565b600060208284031215610e0057600080fd5b815160ff81168114610b4457600080fd5b8082018082111561034557610345610c4556fea264697066735822122069c2fd2db6d7dc1b5845e60541bf11eeb508185a9ae85239b49627abfd6b814564736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xCF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8456CB59 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xB66102DF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xB66102DF EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0xE8A97A3E EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0xF190E5FA EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0xF9A65030 EQ PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x9DCB511A EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xA50CF2C8 EQ PUSH2 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x41976E09 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x5CECBD0E EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x7AFB0104 EQ PUSH2 0x14A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDC PUSH2 0x228 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1 PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x2D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF1 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x2E9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x30D JUMP JUMPDEST PUSH2 0xDC PUSH2 0x34B JUMP JUMPDEST PUSH2 0x178 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0x178 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x1C5 CALLDATASIZE PUSH1 0x4 PUSH2 0xBBD JUMP JUMPDEST PUSH2 0x40C JUMP JUMPDEST PUSH2 0xDC PUSH2 0x1D8 CALLDATASIZE PUSH1 0x4 PUSH2 0xBF9 JUMP JUMPDEST PUSH2 0x429 JUMP JUMPDEST PUSH2 0x1F0 PUSH2 0x1EB CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH2 0x4DC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND DUP5 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0xFB JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x223 CALLDATASIZE PUSH1 0x4 PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x531 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD4EB5DB PUSH1 0xE4 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xD4EB5DB0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B0 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH4 0x81996F7 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x568 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E2 DUP3 PUSH2 0x5BA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2F6 DUP7 DUP7 PUSH2 0x531 JUMP JUMPDEST SWAP2 POP PUSH2 0x302 DUP5 DUP5 PUSH2 0x531 JUMP JUMPDEST SWAP1 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31B DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP DUP2 PUSH2 0x32C DUP3 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 SWAP1 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x340 SWAP2 SWAP1 PUSH2 0xD62 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE907B19 PUSH1 0xE2 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x3A41EC64 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D3 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x3F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0xD794B1E7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2D5 PUSH2 0x665 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x403 DUP3 PUSH2 0x4DC JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x421 PUSH2 0x41B DUP6 DUP6 PUSH2 0x531 JUMP JUMPDEST DUP4 PUSH2 0x30D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x2F92CD5D PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x5F259ABA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4B1 SWAP2 SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH2 0x4CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x61081C15 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4D8 DUP3 DUP3 PUSH2 0x6A2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 DUP2 SWAP1 DUP1 DUP3 SUB PUSH2 0x519 JUMPI PUSH1 0x40 MLOAD PUSH4 0x25DC56C1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0xA1 SHL DUP7 AND ISZERO ISZERO SWAP5 POP PUSH1 0xA2 DUP7 SWAP1 SHR SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x53F DUP5 PUSH2 0x5BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x54F DUP2 PUSH1 0xA PUSH2 0xD3F JUMP JUMPDEST PUSH2 0x336 DUP4 DUP8 PUSH2 0xD4B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x570 PUSH2 0x9C7 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA CALLER JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x5C9 DUP6 PUSH2 0x4DC JUMP JUMPDEST DUP1 SWAP6 POP DUP2 SWAP4 POP DUP3 SWAP5 POP POP POP POP PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x619 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x63D SWAP2 SWAP1 PUSH2 0xD9E JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP5 PUSH2 0x657 JUMPI PUSH2 0x657 DUP5 DUP5 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST DUP3 SWAP8 POP POP POP POP POP POP POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH2 0x66D PUSH2 0xA79 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH2 0x59D CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO DUP1 PUSH2 0x6BF JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x6DD JUMPI PUSH1 0x40 MLOAD PUSH4 0x5919AF97 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE PUSH2 0x715 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE PUSH2 0x748 JUMPI PUSH1 0x40 MLOAD PUSH4 0xDF4C572D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x70C JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x7A2 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x79F SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x7BF JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0xFF AND PUSH1 0x8 EQ PUSH2 0x7E3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD62ADA11 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x840 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x83D SWAP2 DUP2 ADD SWAP1 PUSH2 0xC23 JUMP JUMPDEST PUSH1 0x1 JUMPDEST ISZERO PUSH2 0x848 JUMPI SWAP1 POP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x8A4 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x8A1 SWAP2 DUP2 ADD SWAP1 PUSH2 0xDEE JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x8C1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x12 DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x528CA31D PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST SWAP1 POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFEAF968C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0xA0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x942 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x93F SWAP2 DUP2 ADD SWAP1 PUSH2 0xD9E JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH4 0x67A7CD43 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH2 0x970 JUMPI PUSH2 0x970 DUP6 DUP6 DUP5 DUP5 PUSH2 0xA10 JUMP JUMPDEST POP POP POP POP POP PUSH2 0x981 DUP5 DUP5 DUP5 DUP5 PUSH2 0xABF JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xE263805B03657AB13064915D0723C5CE14981547E7CBA5283F66B9E5D81F6E6E PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x0 DUP4 SGT PUSH2 0xA31 JUMPI PUSH1 0x40 MLOAD PUSH4 0x56E05D2B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH10 0xFFFFFFFFFFFFFFFFFFFF AND LT DUP1 PUSH2 0xA55 JUMPI POP DUP2 ISZERO JUMPDEST ISZERO PUSH2 0xA73 JUMPI PUSH1 0x40 MLOAD PUSH4 0xB1CF6755 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x70C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP3 ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x1 PUSH1 0xA1 SHL OR JUMPDEST PUSH2 0xAEA PUSH1 0xFF PUSH1 0xA2 SHL PUSH1 0xA2 DUP5 SWAP1 SHL AND DUP3 PUSH2 0xE11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH2 0xB71 PUSH1 0x20 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH2 0xB86 PUSH1 0x60 DUP7 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xBD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0xBE2 PUSH1 0x20 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBF0 PUSH1 0x40 DUP6 ADD PUSH2 0xB0D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xC0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC15 DUP4 PUSH2 0xB0D JUMP JUMPDEST SWAP2 POP PUSH2 0xBB4 PUSH1 0x20 DUP5 ADD PUSH2 0xB0D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xC96 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xC7C JUMPI PUSH2 0xC7C PUSH2 0xC45 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xC89 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xC60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xCAD JUMPI POP PUSH1 0x1 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH2 0xCBA JUMPI POP PUSH1 0x0 PUSH2 0x345 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xCD0 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xCDA JUMPI PUSH2 0xCF6 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x345 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xCEB JUMPI PUSH2 0xCEB PUSH2 0xC45 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x345 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xD19 JUMPI POP DUP2 DUP2 EXP PUSH2 0x345 JUMP JUMPDEST PUSH2 0xD23 DUP4 DUP4 PUSH2 0xC5B JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH2 0xD37 JUMPI PUSH2 0xD37 PUSH2 0xC45 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB44 DUP4 DUP4 PUSH2 0xC9E JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xD7F JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH10 0xFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xDB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDBF DUP7 PUSH2 0xD84 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP4 POP PUSH1 0x40 DUP7 ADD MLOAD SWAP3 POP PUSH1 0x60 DUP7 ADD MLOAD SWAP2 POP PUSH2 0xDE2 PUSH1 0x80 DUP8 ADD PUSH2 0xD84 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x345 JUMPI PUSH2 0x345 PUSH2 0xC45 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xC2FD2DB6D7DC1B5845E6 SDIV COINBASE 0xBF GT 0xEE 0xB5 ADDMOD XOR GAS SWAP11 0xE8 MSTORE CODECOPY 0xB4 SWAP7 0x27 0xAB REVERT PUSH12 0x814564736F6C634300081100 CALLER ", - "sourceMap": "1247:7945:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1427:161:13;;;:::i;:::-;;4420:159:50;;;;;;:::i;:::-;;:::i;:::-;;;529:25:70;;;517:2;502:18;4420:159:50;;;;;;;;1561:35;;1595:1;1561:35;;1615:84:56;1662:4;1685:7;;;1615:84;;730:14:70;;723:22;705:41;;693:2;678:18;1615:84:56;565:187:70;7082:394:50;;;;;;:::i;:::-;;:::i;:::-;;;;1333:25:70;;;1389:2;1374:18;;1367:34;;;;1306:18;7082:394:50;1159:248:70;5928:261:50;;;;;;:::i;:::-;;:::i;1239:152:13:-;;;:::i;7600:195:50:-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1835:32:70;;;1817:51;;1805:2;1790:18;7600:195:50;1671:203:70;685:26:13;;;;;6408:230:50;;;;;;:::i;:::-;;:::i;2191:150::-;;;;;;:::i;:::-;;:::i;7952:492::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2913:32:70;;;2895:51;;2989:14;;2982:22;2977:2;2962:18;;2955:50;3021:18;;;3014:34;2883:2;2868:18;7952:492:50;2699:355:70;5477:259:50;;;;;;:::i;:::-;;:::i;1427:161:13:-;1470:34;;-1:-1:-1;;;1470:34:13;;1493:10;1470:34;;;1817:51:70;1470:4:13;-1:-1:-1;;;;;1470:22:13;;;;1790:18:70;;1470:34:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1465:95;;1525:35;;-1:-1:-1;;;1525:35:13;;;;;;;;;;;1465:95;1571:10;:8;:10::i;:::-;1427:161::o;4420:159:50:-;4515:13;4556:16;4566:5;4556:9;:16::i;:::-;-1:-1:-1;4544:28:50;4420:159;-1:-1:-1;;4420:159:50:o;7082:394::-;7277:22;7301:20;7354:35;7367:10;7379:9;7354:12;:35::i;:::-;7337:52;;7426:31;7439:8;7449:7;7426:12;:31::i;:::-;7411:46;;7082:394;;;;;;;:::o;5928:261::-;6045:7;6069:13;6084:16;6104;6114:5;6104:9;:16::i;:::-;6068:52;;-1:-1:-1;6068:52:50;-1:-1:-1;6068:52:50;6148:12;6068:52;6148:2;:12;:::i;:::-;6138:23;;:6;:23;:::i;:::-;6137:33;;;;:::i;:::-;6130:40;;;;5928:261;;;;;:::o;1239:152:13:-;1280:32;;-1:-1:-1;;;1280:32:13;;1301:10;1280:32;;;1817:51:70;1280:4:13;-1:-1:-1;;;;;1280:20:13;;;;1790:18:70;;1280:32:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1275:91;;1333:33;;-1:-1:-1;;;1333:33:13;;;;;;;;;;;1275:91;1376:8;:6;:8::i;7600:195:50:-;7699:17;7750:26;7770:5;7750:19;:26::i;:::-;-1:-1:-1;7732:44:50;;7600:195;-1:-1:-1;;;7600:195:50:o;6408:230::-;6537:7;6563:56;6578:31;6591:6;6599:9;6578:12;:31::i;:::-;6611:7;6563:14;:56::i;:::-;6556:63;6408:230;-1:-1:-1;;;;6408:230:50:o;2191:150::-;1104:31:13;;-1:-1:-1;;;1104:31:13;;1124:10;1104:31;;;1817:51:70;1104:4:13;-1:-1:-1;;;;;1104:19:13;;;;1790:18:70;;1104:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1099:89;;1156:32;;-1:-1:-1;;;1156:32:13;;;;;;;;;;;1099:89;2303:31:50::1;2317:5;2324:9;2303:13;:31::i;:::-;2191:150:::0;;:::o;7952:492::-;-1:-1:-1;;;;;8184:18:50;;8071:17;8184:18;;;:11;:18;;;;;;8071:17;;;;8228:7;;;8224:51;;8244:31;;-1:-1:-1;;;8244:31:50;;;;;;;;;;;8224:51;8314:2;-1:-1:-1;;;8353:26:50;;:31;;;-1:-1:-1;1107:3:50;8417:20;;;;-1:-1:-1;7952:492:50;-1:-1:-1;;7952:492:50:o;5477:259::-;5592:7;5616:13;5631:16;5651;5661:5;5651:9;:16::i;:::-;5615:52;;-1:-1:-1;5615:52:50;-1:-1:-1;5704:12:50;5615:52;5704:2;:12;:::i;:::-;5685:14;5694:5;5685:6;:14;:::i;1175:320:65:-;-1:-1:-1;;;;;1465:19:65;;:23;;;1175:320::o;2433:117:56:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:15:::0;;-1:-1:-1;;2491:15:56::1;::::0;;2521:22:::1;719:10:66::0;2530:12:56::1;2521:22;::::0;-1:-1:-1;;;;;1835:32:70;;;1817:51;;1805:2;1790:18;2521:22:56::1;;;;;;;2433:117::o:0;4623:682:50:-;4704:13;4719:16;4751:17;4778:14;4837:26;4857:5;4837:19;:26::i;:::-;4802:61;;;;;;;;;;;;4891:14;4919:13;4960:17;4991:22;5048:9;-1:-1:-1;;;;;5026:48:50;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4877:199;;;;;;;;;5158:9;5153:85;;5181:57;5194:7;5203:6;5211:9;5222:15;5181:12;:57::i;:::-;5278:6;5261:25;;4741:564;;;;;;4623:682;;;:::o;2186:115:56:-;1239:19;:17;:19::i;:::-;2245:7:::1;:14:::0;;-1:-1:-1;;2245:14:56::1;2255:4;2245:14;::::0;;2274:20:::1;2281:12;719:10:66::0;;640:96;2544:1759:50;-1:-1:-1;;;;;2624:19:50;;;;:46;;-1:-1:-1;;;;;;2647:23:50;;;2624:46;2620:93;;;2691:22;;-1:-1:-1;;;2691:22:50;;;;;;;;;;;2620:93;-1:-1:-1;;;;;2741:16:50;;1465:19:65;2736:68:50;;2768:36;;-1:-1:-1;;;2768:36:50;;-1:-1:-1;;;;;1835:32:70;;2768:36:50;;;1817:51:70;1790:18;;2768:36:50;;;;;;;;2736:68;-1:-1:-1;;;;;2832:20:50;;1465:19:65;2827:88:50;;2875:40;;-1:-1:-1;;;2875:40:50;;-1:-1:-1;;;;;1835:32:70;;2875:40:50;;;1817:51:70;1790:18;;2875:40:50;1671:203:70;2827:88:50;2964:9;-1:-1:-1;;;;;2942:41:50;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2942:43:50;;;;;;;;-1:-1:-1;;2942:43:50;;;;;;;;;;;;:::i;:::-;;;2938:269;;3155:29;;-1:-1:-1;;;3155:29:50;;;;;;;;;;;2938:269;3052:9;:14;;3065:1;3052:14;3048:56;;3075:29;;-1:-1:-1;;;3075:29:50;;;;;;;;;;;3048:56;2986:141;3217:14;3261:9;-1:-1:-1;;;;;3246:40:50;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3246:42:50;;;;;;;;-1:-1:-1;;3246:42:50;;;;;;;;;;;;:::i;:::-;;;3242:137;;;3339:8;-1:-1:-1;3242:137:50;3389:14;3423:5;-1:-1:-1;;;;;3417:21:50;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3417:23:50;;;;;;;;-1:-1:-1;;3417:23:50;;;;;;;;;;;;:::i;:::-;;;3413:282;;3639:33;;-1:-1:-1;;;3639:33:50;;;;;;;;;;;3413:282;3497:2;3485:9;:14;;;3481:60;;;3508:33;;-1:-1:-1;;;3508:33:50;;;;;;;;;;;3481:60;3579:9;-1:-1:-1;3731:9:50;-1:-1:-1;;;;;3709:48:50;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3709:50:50;;;;;;;;-1:-1:-1;;3709:50:50;;;;;;;;;;;;:::i;:::-;;;3705:462;;4115:29;;-1:-1:-1;;;4115:29:50;;;;;;;;;;;3705:462;3993:9;3988:88;;4020:56;4033:7;4042:5;4049:9;4060:15;4020:12;:56::i;:::-;3760:327;;;;;4177:61;4200:5;4207:9;4218;4229:8;4177:22;:61::i;:::-;4274:9;-1:-1:-1;;;;;4254:30:50;4267:5;-1:-1:-1;;;;;4254:30:50;;;;;;;;;;;2610:1693;;2544:1759;;:::o;1945:106:56:-;1662:4;1685:7;;;2003:41;;;;-1:-1:-1;;;2003:41:56;;6384:2:70;2003:41:56;;;6366:21:70;6423:2;6403:18;;;6396:30;-1:-1:-1;;;6442:18:70;;;6435:50;6502:18;;2003:41:56;6182:344:70;349:335:49;519:1;510:5;:10;506:43;;529:20;;-1:-1:-1;;;529:20:49;;;;;;;;;;;506:43;593:7;575:25;;:15;:25;;;:43;;;-1:-1:-1;604:14:49;;575:43;571:94;;;639:26;;-1:-1:-1;;;639:26:49;;;;;;;;;;;571:94;349:335;;;;:::o;1767:106:56:-;1662:4;1685:7;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:56;;6733:2:70;1828:38:56;;;6715:21:70;6772:2;6752:18;;;6745:30;-1:-1:-1;;;6791:18:70;;;6784:46;6847:18;;1828:38:56;6531:340:70;8826:364:50;-1:-1:-1;;;;;8981:34:50;;9037:45;;;;-1:-1:-1;;;9052:30:50;9037:45;9126;-1:-1:-1;;;1107:3:50;9135:35;;;;9126:5;:45;:::i;:::-;-1:-1:-1;;;;;9105:18:50;;;;;;;:11;:18;;;;;:66;;;;-1:-1:-1;;;;8826:364:50:o;14:173:70:-;82:20;;-1:-1:-1;;;;;131:31:70;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:70:o;757:397::-;843:6;851;859;867;920:3;908:9;899:7;895:23;891:33;888:53;;;937:1;934;927:12;888:53;973:9;960:23;950:33;;1002:38;1036:2;1025:9;1021:18;1002:38;:::i;:::-;992:48;;1087:2;1076:9;1072:18;1059:32;1049:42;;1110:38;1144:2;1133:9;1129:18;1110:38;:::i;:::-;1100:48;;757:397;;;;;;;:::o;1412:254::-;1480:6;1488;1541:2;1529:9;1520:7;1516:23;1512:32;1509:52;;;1557:1;1554;1547:12;1509:52;1593:9;1580:23;1570:33;;1622:38;1656:2;1645:9;1641:18;1622:38;:::i;:::-;1612:48;;1412:254;;;;;:::o;2101:328::-;2178:6;2186;2194;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;2299:9;2286:23;2276:33;;2328:38;2362:2;2351:9;2347:18;2328:38;:::i;:::-;2318:48;;2385:38;2419:2;2408:9;2404:18;2385:38;:::i;:::-;2375:48;;2101:328;;;;;:::o;2434:260::-;2502:6;2510;2563:2;2551:9;2542:7;2538:23;2534:32;2531:52;;;2579:1;2576;2569:12;2531:52;2602:29;2621:9;2602:29;:::i;:::-;2592:39;;2650:38;2684:2;2673:9;2669:18;2650:38;:::i;3059:277::-;3126:6;3179:2;3167:9;3158:7;3154:23;3150:32;3147:52;;;3195:1;3192;3185:12;3147:52;3227:9;3221:16;3280:5;3273:13;3266:21;3259:5;3256:32;3246:60;;3302:1;3299;3292:12;3341:127;3402:10;3397:3;3393:20;3390:1;3383:31;3433:4;3430:1;3423:15;3457:4;3454:1;3447:15;3473:422;3562:1;3605:5;3562:1;3619:270;3640:7;3630:8;3627:21;3619:270;;;3699:4;3695:1;3691:6;3687:17;3681:4;3678:27;3675:53;;;3708:18;;:::i;:::-;3758:7;3748:8;3744:22;3741:55;;;3778:16;;;;3741:55;3857:22;;;;3817:15;;;;3619:270;;;3623:3;3473:422;;;;;:::o;3900:806::-;3949:5;3979:8;3969:80;;-1:-1:-1;4020:1:70;4034:5;;3969:80;4068:4;4058:76;;-1:-1:-1;4105:1:70;4119:5;;4058:76;4150:4;4168:1;4163:59;;;;4236:1;4231:130;;;;4143:218;;4163:59;4193:1;4184:10;;4207:5;;;4231:130;4268:3;4258:8;4255:17;4252:43;;;4275:18;;:::i;:::-;-1:-1:-1;;4331:1:70;4317:16;;4346:5;;4143:218;;4445:2;4435:8;4432:16;4426:3;4420:4;4417:13;4413:36;4407:2;4397:8;4394:16;4389:2;4383:4;4380:12;4376:35;4373:77;4370:159;;;-1:-1:-1;4482:19:70;;;4514:5;;4370:159;4561:34;4586:8;4580:4;4561:34;:::i;:::-;4631:6;4627:1;4623:6;4619:19;4610:7;4607:32;4604:58;;;4642:18;;:::i;:::-;4680:20;;3900:806;-1:-1:-1;;;3900:806:70:o;4711:131::-;4771:5;4800:36;4827:8;4821:4;4800:36;:::i;4847:168::-;4920:9;;;4951;;4968:15;;;4962:22;;4948:37;4938:71;;4989:18;;:::i;5020:217::-;5060:1;5086;5076:132;;5130:10;5125:3;5121:20;5118:1;5111:31;5165:4;5162:1;5155:15;5193:4;5190:1;5183:15;5076:132;-1:-1:-1;5222:9:70;;5020:217::o;5242:179::-;5320:13;;5373:22;5362:34;;5352:45;;5342:73;;5411:1;5408;5401:12;5426:473;5529:6;5537;5545;5553;5561;5614:3;5602:9;5593:7;5589:23;5585:33;5582:53;;;5631:1;5628;5621:12;5582:53;5654:39;5683:9;5654:39;:::i;:::-;5644:49;;5733:2;5722:9;5718:18;5712:25;5702:35;;5777:2;5766:9;5762:18;5756:25;5746:35;;5821:2;5810:9;5806:18;5800:25;5790:35;;5844:49;5888:3;5877:9;5873:19;5844:49;:::i;:::-;5834:59;;5426:473;;;;;;;;:::o;5904:273::-;5972:6;6025:2;6013:9;6004:7;6000:23;5996:32;5993:52;;;6041:1;6038;6031:12;5993:52;6073:9;6067:16;6123:4;6116:5;6112:16;6105:5;6102:27;6092:55;;6143:1;6140;6133:12;6876:125;6941:9;;;6962:10;;;6959:36;;;6975:18;;:::i" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "734800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "_acl()": "infinite", - "addPriceFeed(address,address)": "infinite", - "convert(uint256,address,address)": "infinite", - "convertFromUSD(uint256,address)": "infinite", - "convertToUSD(uint256,address)": "infinite", - "fastCheck(uint256,address,uint256,address)": "infinite", - "getPrice(address)": "infinite", - "pause()": "infinite", - "paused()": "2359", - "priceFeeds(address)": "2750", - "priceFeedsWithFlags(address)": "2766", - "unpause()": "infinite", - "version()": "229" - }, - "internal": { - "_addPriceFeed(address,address)": "infinite", - "_getPrice(address)": "infinite", - "_setPriceFeedWithFlags(address,address,bool,uint8)": "22374" - } - }, - "methodIdentifiers": { - "_acl()": "a50cf2c8", - "addPriceFeed(address,address)": "e8a97a3e", - "convert(uint256,address,address)": "b66102df", - "convertFromUSD(uint256,address)": "7afb0104", - "convertToUSD(uint256,address)": "f9a65030", - "fastCheck(uint256,address,uint256,address)": "5cecbd0e", - "getPrice(address)": "41976e09", - "pause()": "8456cb59", - "paused()": "5c975abb", - "priceFeeds(address)": "9dcb511a", - "priceFeedsWithFlags(address)": "f190e5fa", - "unpause()": "3f4ba83a", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"internalType\":\"struct PriceFeedConfig[]\",\"name\":\"defaults\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"AddressIsNotContractException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotConfiguratorException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotUnPausableAdminException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainPriceStaleException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectPriceFeedException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectTokenContractException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceOracleNotExistsException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressException\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPriceException\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"NewPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_acl\",\"outputs\":[{\"internalType\":\"contract IACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"addPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertFromUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"convertToUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountFrom\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenFrom\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountTo\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenTo\",\"type\":\"address\"}],\"name\":\"fastCheck\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"collateralFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collateralTo\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeeds\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"priceFeedsWithFlags\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"skipCheck\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressIsNotContractException(address)\":[{\"details\":\"Thrown on attempting to set an EOA as an important contract in the system\"}],\"CallerNotConfiguratorException()\":[{\"details\":\"Thrown on attempting to call an access restricted function as a non-Configurator\"}],\"CallerNotPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Pausable admin\"}],\"CallerNotUnPausableAdminException()\":[{\"details\":\"Thrown on attempting to pause a contract as a non-Unpausable admin\"}],\"ChainPriceStaleException()\":[{\"details\":\"Thrown if the last recorded result was not updated in the last round\"}],\"IncorrectPriceFeedException()\":[{\"details\":\"Thrown on attempting to set a token price feed to an address that is not a correct price feed\"}],\"IncorrectTokenContractException()\":[{\"details\":\"Thrown on attempting to use a non-ERC20 contract or an EOA as a token\"}],\"PriceOracleNotExistsException()\":[{\"details\":\"Thrown on attempting to get a result for a token that does not have a price feed\"}],\"ZeroAddressException()\":[{\"details\":\"Thrown on attempting to set an important address to zero address\"}],\"ZeroPriceException()\":[{\"details\":\"Thrown if a price feed returns 0\"}]},\"kind\":\"dev\",\"methods\":{\"addPriceFeed(address,address)\":{\"details\":\"Sets a price feed if it doesn't exist, or updates an existing one\",\"params\":{\"priceFeed\":\"Address of a USD price feed adhering to Chainlink's interface\",\"token\":\"Address of the token to set the price feed for\"}},\"convert(uint256,address,address)\":{\"details\":\"Converts one asset into another\",\"params\":{\"amount\":\"Amount to convert\",\"tokenFrom\":\"Address of the token to convert from\",\"tokenTo\":\"Address of the token to convert to\"}},\"convertFromUSD(uint256,address)\":{\"details\":\"Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token converted to\"}},\"convertToUSD(uint256,address)\":{\"details\":\"Converts a quantity of an asset to USD (decimals = 8).\",\"params\":{\"amount\":\"Amount to convert\",\"token\":\"Address of the token to be converted\"}},\"fastCheck(uint256,address,uint256,address)\":{\"details\":\"Returns collateral values for two tokens, required for a fast check\",\"params\":{\"amountFrom\":\"Amount of the outbound token\",\"amountTo\":\"Amount of the inbound token\",\"tokenFrom\":\"Address of the outbound token\",\"tokenTo\":\"Address of the inbound token\"},\"returns\":{\"collateralFrom\":\"Value of the outbound token amount in USD\",\"collateralTo\":\"Value of the inbound token amount in USD\"}},\"getPrice(address)\":{\"details\":\"Returns token's price in USD (8 decimals)\",\"params\":{\"token\":\"The token to compute the price for\"}},\"pause()\":{\"details\":\"Pause contract\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"priceFeeds(address)\":{\"details\":\"Returns the price feed address for the passed token\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"priceFeedsWithFlags(address)\":{\"details\":\"Returns the price feed for the passed token, with additional parameters\",\"params\":{\"token\":\"Token to get the price feed for\"}},\"unpause()\":{\"details\":\"Unpause contract\"}},\"stateVariables\":{\"_priceFeeds\":{\"details\":\"Map of token addresses to corresponding price feeds and their parameters, encoded into a single uint256\"},\"version\":{\"details\":\"Returns contract version\"}},\"title\":\"Price Oracle based on Chainlink's price feeds\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Works as router and provide cross rates using converting via USD\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol\":\"PriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol\":{\"keccak256\":\"0x59e6767df59b43511a7b1d37115b67bef0cc3d4fa044855add4b632df75b38b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e3d489de1808b3f7c963bb0f96877efc4735edfe051f334847a0ea8fbb43b0d\",\"dweb:/ipfs/QmaLifTCHF2TfHKReXBviLKnp846oEPChxWSpZuxY1s5kq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol\":{\"keccak256\":\"0x78bd925e7883e63dda90f615a808dd0ffc7ebbdba1933044ea560dcf527c4360\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3fa61016c62a4a39096e07bd8362aa410b1a62d8de8bf1a8e25653b8098a01a8\",\"dweb:/ipfs/Qme6m47fXLd9xjgiz652ghwS12Q7zzhWYjdzRhJ5M48UJE\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol\":{\"keccak256\":\"0x0d8a848ee309dc12b4422793bacb572b273aa4074cbd28b7322b3a0e6c15ea7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://405281dbf2a2b2d88fbb6168f2e831301e3e03912f280435a75f1a573d5bcea3\",\"dweb:/ipfs/QmP13xDAXyz7MqZd7jnNY6Mjwefq3Y1SJFMtYQu7qnWM8H\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol:PriceOracle", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 14745, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol:PriceOracle", - "label": "_priceFeeds", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_uint256)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Works as router and provide cross rates using converting via USD", - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol": { - "GearToken": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromDelegate", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "toDelegate", - "type": "address" - } - ], - "name": "DelegateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "previousBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "DelegateVotesChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "miner", - "type": "address" - } - ], - "name": "MinerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "TransferAllowed", - "type": "event" - }, - { - "inputs": [], - "name": "DELEGATION_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allowTransfers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "checkpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "fromBlock", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "votes", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "delegateBySig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "delegates", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getCurrentVotes", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "getPriorVotes", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "miner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "numCheckpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_miner", - "type": "address" - } - ], - "name": "setMiner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newManager", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "transfersAllowed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Governance Gearbox token based on https://github.com/Uniswap/governance/blob/master/contracts/Uni.sol", - "kind": "dev", - "methods": { - "allowance(address,address)": { - "params": { - "account": "The address of the account holding the funds", - "spender": "The address of the account spending the funds" - }, - "returns": { - "_0": "The number of tokens approved" - } - }, - "approve(address,uint256)": { - "details": "This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)", - "params": { - "rawAmount": "The number of tokens that are approved (2^256-1 means infinite)", - "spender": "The address of the account which may transfer tokens" - }, - "returns": { - "_0": "Whether or not the approval succeeded" - } - }, - "balanceOf(address)": { - "params": { - "account": "The address of the account to get the balance of" - }, - "returns": { - "_0": "The number of tokens held" - } - }, - "constructor": { - "params": { - "account": "The initial account to grant all the tokens" - } - }, - "delegate(address)": { - "params": { - "delegatee": "The address to delegate votes to" - } - }, - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": { - "params": { - "delegatee": "The address to delegate votes to", - "expiry": "The time at which to expire the signature", - "nonce": "The contract state required to match the signature", - "r": "Half of the ECDSA signature pair", - "s": "Half of the ECDSA signature pair", - "v": "The recovery byte of the signature" - } - }, - "getCurrentVotes(address)": { - "params": { - "account": "The address to get votes balance" - }, - "returns": { - "_0": "The number of current votes for `account`" - } - }, - "getPriorVotes(address,uint256)": { - "details": "Block number must be a finalized block or else this function will revert to prevent misinformation.", - "params": { - "account": "The address of the account to check", - "blockNumber": "The block number to get the vote balance at" - }, - "returns": { - "_0": "The number of votes the account had as of the given block" - } - }, - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { - "params": { - "deadline": "The time at which to expire the signature", - "owner": "The address to approve from", - "r": "Half of the ECDSA signature pair", - "rawAmount": "The number of tokens that are approved (2^256-1 means infinite)", - "s": "Half of the ECDSA signature pair", - "spender": "The address to be approved", - "v": "The recovery byte of the signature" - } - }, - "transfer(address,uint256)": { - "params": { - "dst": "The address of the destination account", - "rawAmount": "The number of tokens to transfer" - }, - "returns": { - "_0": "Whether or not the transfer succeeded" - } - }, - "transferFrom(address,address,uint256)": { - "params": { - "dst": "The address of the destination account", - "rawAmount": "The number of tokens to transfer", - "src": "The address of the source account" - }, - "returns": { - "_0": "Whether or not the transfer succeeded" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_15455": { - "entryPoint": null, - "id": 15455, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 290, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:844:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:70" - }, - "nodeType": "YulIf", - "src": "105:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:70" - }, - "nodeType": "YulIf", - "src": "204:70:70" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:70", - "type": "" - } - ], - "src": "14:290:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "483:177:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "500:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "511:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "493:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "493:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "493:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "534:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "530:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "530:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "550:2:70", - "type": "", - "value": "27" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "523:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "523:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "523:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "573:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "584:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "569:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "569:18:70" - }, - { - "hexValue": "5a65726f2061646472657373206973206e6f7420616c6c6f776564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "589:29:70", - "type": "", - "value": "Zero address is not allowed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "562:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "562:57:70" - }, - "nodeType": "YulExpressionStatement", - "src": "562:57:70" - }, - { - "nodeType": "YulAssignment", - "src": "628:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "640:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "651:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "636:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "636:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "628:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "460:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "474:4:70", - "type": "" - } - ], - "src": "309:351:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "766:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "776:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "788:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "799:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "784:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "784:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "776:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "818:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "829:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "811:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "811:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "811:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "735:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "746:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "757:4:70", - "type": "" - } - ], - "src": "665:177:70" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Zero address is not allowed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b506040516200220a3803806200220a833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b6120a680620001646000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104b9578063f1127ed8146104e0578063f2fde38b1461054757600080fd5b8063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b806395d89b41116100d357806395d89b41146103ea5780639742ca461461040d578063a9059cbb14610420578063b0660c3d1461043357600080fd5b806370a082311461036d578063782d6fe11461039f5780637ecebe00146103ca57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a75146102de578063587cde1e146102f65780635c19a95c1461031f5780636fcfff451461033257600080fd5b806330adf81f14610272578063313ce56714610299578063349dc329146102b357600080fd5b806306fdde03146101ae578063095ea7b3146101ea57806318160ddd1461020d57806320606b701461022e5780632185810b1461025557806323b872dd1461025f575b600080fd5b6101d46040518060400160405280600781526020016608ecac2e4c4def60cb1b81525081565b6040516101e19190611b92565b60405180910390f35b6101fd6101f8366004611bfc565b61055a565b60405190151581526020016101e1565b6102206b204fce5e3e2502611000000081565b6040519081526020016101e1565b6102207f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61025d610618565b005b6101fd61026d366004611c26565b610688565b6102207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102a1601281565b60405160ff90911681526020016101e1565b6007546102c6906001600160a01b031681565b6040516001600160a01b0390911681526020016101e1565b6006546102c69061010090046001600160a01b031681565b6102c6610304366004611c62565b6002602052600090815260409020546001600160a01b031681565b61025d61032d366004611c62565b6107c9565b610358610340366004611c62565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e1565b61022061037b366004611c62565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b6103b26103ad366004611bfc565b6107d6565b6040516001600160601b0390911681526020016101e1565b6102206103d8366004611c62565b60056020526000908152604090205481565b6101d46040518060400160405280600481526020016323a2a0a960e11b81525081565b61025d61041b366004611c62565b610a60565b6101fd61042e366004611bfc565b610b2f565b6006546101fd9060ff1681565b6103b261044e366004611c62565b610b6b565b61025d610461366004611c8e565b610be9565b61025d610474366004611ce6565b610ed4565b610220610487366004611d50565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b6102207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105236104ee366004611d83565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016101e1565b61025d610555366004611c62565b6112c1565b600080600019830361057457506001600160601b03610599565b61059683604051806060016040528060258152602001611edc602591396113ad565b90505b336000818152602081815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60065461010090046001600160a01b031633146106505760405162461bcd60e51b815260040161064790611dc3565b60405180910390fd5b6006805460ff191660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b6001600160a01b0383166000908152602081815260408083203380855290835281842054825160608101909352602580845291936001600160601b039091169285926106de9288929190611edc908301396113ad565b9050866001600160a01b0316836001600160a01b03161415801561070b57506001600160601b0382811614155b156107b157600061073583836040518060600160405280603d8152602001611ffe603d91396113dc565b6001600160a01b03898116600081815260208181526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6107bc878783611426565b5060019695505050505050565b6107d333826116f8565b50565b60004382106108375760405162461bcd60e51b815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610647565b6001600160a01b03831660009081526004602052604081205463ffffffff1690819003610868576000915050610612565b6001600160a01b0384166000908152600360205260408120849161088d600185611e10565b63ffffffff90811682526020820192909252604001600020541611610900576001600160a01b0384166000908152600360205260408120906108d0600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b031691506106129050565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff1683101561093b576000915050610612565b600080610949600184611e10565b90505b8163ffffffff168163ffffffff161115610a1b576000600261096e8484611e10565b6109789190611e34565b6109829083611e10565b6001600160a01b038816600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529192508790036109ef576020015194506106129350505050565b805163ffffffff16871115610a0657819350610a14565b610a11600183611e10565b92505b505061094c565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60065461010090046001600160a01b03163314610a8f5760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610b5483604051806060016040528060268152602001611f31602691396113ad565b9050610b61338583611426565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610b96576000610be2565b6001600160a01b038316600090815260036020526040812090610bba600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d6b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610647565b6001600160a01b0381166000908152600560205260408120805491610e0183611e65565b919050558914610e5e5760405162461bcd60e51b815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610647565b87421115610ebd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610647565b610ec7818b6116f8565b505050505b505050505050565b60006000198603610eed57506001600160601b03610f12565b610f0f86604051806060016040528060248152602001611fa6602491396113ad565b90505b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086610fef83611e65565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161106e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661113c5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e6174757265006044820152606401610647565b8b6001600160a01b0316816001600160a01b03161461119d5760405162461bcd60e51b815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a65640000000000006044820152606401610647565b884211156111ed5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e61747572652065787069726564006044820152606401610647565b846000808e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ab91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b60065461010090046001600160a01b031633146112f05760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b0381166113465760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b6006546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081600160601b84106113d45760405162461bcd60e51b81526004016106479190611b92565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114135760405162461bcd60e51b81526004016106479190611b92565b5061141e8385611e7e565b949350505050565b60065460ff1680611446575060065461010090046001600160a01b031633145b8061145b57506007546001600160a01b031633145b6114a75760405162461bcd60e51b815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e0000006044820152606401610647565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610647565b6001600160a01b03821661159f5760405162461bcd60e51b815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610647565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526115ea936001600160601b03909216928592919061203b908301396113dc565b6001600160a01b03848116600090815260016020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482516060810190935260308084526116529491909116928592909190611f0190830139611782565b6001600160a01b0383811660008181526001602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038084166000908152600260205260408082205485841683529120546116f3929182169116836117cf565b505050565b6001600160a01b03808316600081815260026020818152604080842080546001845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461177c8284836117cf565b50505050565b60008061178f8486611e9e565b9050846001600160601b0316816001600160601b0316101583906117c65760405162461bcd60e51b81526004016106479190611b92565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156117fa57506000816001600160601b0316115b156116f3576001600160a01b038316156118bf576001600160a01b03831660009081526004602052604081205463ffffffff16908161183a576000611886565b6001600160a01b03851660009081526003602052604081209061185e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b905060006118ad8285604051806060016040528060288152602001611f57602891396113dc565b90506118bb86848484611977565b5050505b6001600160a01b038216156116f3576001600160a01b03821660009081526004602052604081205463ffffffff1690816118fa576000611946565b6001600160a01b03841660009081526003602052604081209061191e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061196d8285604051806060016040528060278152602001611f7f60279139611782565b9050610ecc858484845b600061199b43604051806060016040528060348152602001611fca60349139611b6f565b905060008463ffffffff161180156119f557506001600160a01b038516600090815260036020526040812063ffffffff8316916119d9600188611e10565b63ffffffff908116825260208201929092526040016000205416145b15611a69576001600160a01b03851660009081526003602052604081208391611a1f600188611e10565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611b1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600382528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611ae9846001611ebe565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d45760405162461bcd60e51b815260040161064791905b600060208083528351808285015260005b81811015611bbf57858101830151858201604001528201611ba3565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bf757600080fd5b919050565b60008060408385031215611c0f57600080fd5b611c1883611be0565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b611c4484611be0565b9250611c5260208501611be0565b9150604084013590509250925092565b600060208284031215611c7457600080fd5b610be282611be0565b803560ff81168114611bf757600080fd5b60008060008060008060c08789031215611ca757600080fd5b611cb087611be0565b95506020870135945060408701359350611ccc60608801611c7d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611d0157600080fd5b611d0a88611be0565b9650611d1860208901611be0565b95506040880135945060608801359350611d3460808901611c7d565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d6357600080fd5b611d6c83611be0565b9150611d7a60208401611be0565b90509250929050565b60008060408385031215611d9657600080fd5b611d9f83611be0565b9150602083013563ffffffff81168114611db857600080fd5b809150509250929050565b6020808252601f908201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604082015260600190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611e2d57611e2d611dfa565b5092915050565b600063ffffffff80841680611e5957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611e7757611e77611dfa565b5060010190565b6001600160601b03828116828216039080821115611e2d57611e2d611dfa565b6001600160601b03818116838216019080821115611e2d57611e2d611dfa565b63ffffffff818116838216019080821115611e2d57611e2d611dfa56fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212205c356fbd26a2927ad0969afd2d786175a49452b6df0cc597ce2d0edbb24a252964736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x220A CODESIZE SUB DUP1 PUSH3 0x220A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x122 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH12 0x204FCE5E3E25026110000000 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 PUSH3 0xF9 SWAP2 SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND CALLER PUSH2 0x100 MUL PUSH1 0xFF NOT AND OR SWAP1 SSTORE PUSH3 0x154 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x20A6 DUP1 PUSH3 0x164 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xB4B5EA57 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xE7A324DC EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xF1127ED8 EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB4B5EA57 EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0xC3CDA520 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0x9742CA46 EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xB0660C3D EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36D JUMPI DUP1 PUSH4 0x782D6FE1 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x481C6A75 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x481C6A75 EQ PUSH2 0x2DE JUMPI DUP1 PUSH4 0x587CDE1E EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x6FCFFF45 EQ PUSH2 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0x349DC329 EQ PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x20606B70 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0x2185810B EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x55A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH12 0x204FCE5E3E25026110000000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x618 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1FD PUSH2 0x26D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C26 JUMP JUMPDEST PUSH2 0x688 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH2 0x2A1 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x2C6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x2C6 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2C6 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x32D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0x358 PUSH2 0x340 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x37B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x3AD CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x3D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x23A2A0A9 PUSH1 0xE1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1FD SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xB6B JUMP JUMPDEST PUSH2 0x25D PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8E JUMP JUMPDEST PUSH2 0xBE9 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE6 JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF DUP2 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D83 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x555 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x12C1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 NOT DUP4 SUB PUSH2 0x574 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0x599 JUMP JUMPDEST PUSH2 0x596 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDC PUSH1 0x25 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x795B0E16C8DA9807B0A215F3749BD6DBCC49FC0472183F4E446ABB7DCBD9D007 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x25 DUP1 DUP5 MSTORE SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 PUSH2 0x6DE SWAP3 DUP9 SWAP3 SWAP2 SWAP1 PUSH2 0x1EDC SWAP1 DUP4 ADD CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 PUSH2 0x735 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FFE PUSH1 0x3D SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP11 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x7BC DUP8 DUP8 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7D3 CALLER DUP3 PUSH2 0x16F8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A6765745072696F72566F7465733A206E6F742079657420646574 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x195C9B5A5B9959 PUSH1 0xCA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x868 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 SWAP2 PUSH2 0x88D PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND GT PUSH2 0x900 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x8D0 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 POP PUSH2 0x612 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP4 LT ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP2 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 PUSH1 0x2 PUSH2 0x96E DUP5 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH2 0x978 SWAP2 SWAP1 PUSH2 0x1E34 JUMP JUMPDEST PUSH2 0x982 SWAP1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF DUP6 DUP2 AND DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE SLOAD SWAP3 DUP4 AND DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP4 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP3 POP DUP8 SWAP1 SUB PUSH2 0x9EF JUMPI PUSH1 0x20 ADD MLOAD SWAP5 POP PUSH2 0x612 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP8 GT ISZERO PUSH2 0xA06 JUMPI DUP2 SWAP4 POP PUSH2 0xA14 JUMP JUMPDEST PUSH2 0xA11 PUSH1 0x1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST SWAP3 POP JUMPDEST POP POP PUSH2 0x94C JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2F834D1C8C4B956018FFF5FACA4D99868AE635487424D9C265C257CCBC698C6A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB54 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F31 PUSH1 0x26 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP PUSH2 0xB61 CALLER DUP6 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP1 PUSH2 0xB96 JUMPI PUSH1 0x0 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xBBA PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD DUP10 SWAP1 MSTORE PUSH2 0x120 DUP1 DUP4 ADD DUP10 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x140 DUP4 ADD SWAP1 SWAP5 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x160 DUP5 ADD MSTORE PUSH2 0x162 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x182 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP1 PUSH2 0x1A2 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP11 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP8 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C696420736967 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x6E6174757265 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0xE01 DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE DUP10 EQ PUSH2 0xE5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C6964206E6F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST DUP8 TIMESTAMP GT ISZERO PUSH2 0xEBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A207369676E61747572652065 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1E1C1A5C9959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH2 0xEC7 DUP2 DUP12 PUSH2 0x16F8 JUMP JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP7 SUB PUSH2 0xEED JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0xF12 JUMP JUMPDEST PUSH2 0xF0F DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FA6 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD DUP4 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE SWAP2 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 SWAP2 DUP13 SWAP2 DUP13 SWAP2 DUP13 SWAP2 SWAP1 DUP7 PUSH2 0xFEF DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x106E SWAP3 SWAP2 SWAP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP12 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x113C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20696E76616C6964207369676E617475726500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x119D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20756E617574686F72697A6564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP9 TIMESTAMP GT ISZERO PUSH2 0x11ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A207369676E6174757265206578706972656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP5 PUSH1 0x0 DUP1 DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP8 PUSH1 0x40 MLOAD PUSH2 0x12AB SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x60 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT ISZERO DUP3 SWAP1 PUSH2 0x1413 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP PUSH2 0x141E DUP4 DUP6 PUSH2 0x1E7E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1446 JUMPI POP PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST DUP1 PUSH2 0x145B JUMPI POP PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST PUSH2 0x14A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7472616E73666572732061726520666F7262696464656E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E736665722066726F6D20746865207A65726F206164647265737300000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E7366657220746F20746865207A65726F2061646472657373000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x36 DUP1 DUP5 MSTORE PUSH2 0x15EA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP3 DUP6 SWAP3 SWAP2 SWAP1 PUSH2 0x203B SWAP1 DUP4 ADD CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE SWAP1 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x30 DUP1 DUP5 MSTORE PUSH2 0x1652 SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x1F01 SWAP1 DUP4 ADD CODECOPY PUSH2 0x1782 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP1 MLOAD SWAP4 DUP6 AND DUP5 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD DUP6 DUP5 AND DUP4 MSTORE SWAP2 KECCAK256 SLOAD PUSH2 0x16F3 SWAP3 SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP5 MSTORE DUP3 DUP7 KECCAK256 SLOAD SWAP5 SWAP1 SWAP4 MSTORE DUP8 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP5 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP6 AND SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP4 SWAP2 SWAP3 DUP6 SWAP3 SWAP2 PUSH32 0x3134E8A2E6D97E929A7E54011EA5485D7D196DD5F0BA4D4EF95803E8E3FC257F SWAP2 SWAP1 LOG4 PUSH2 0x177C DUP3 DUP5 DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x178F DUP5 DUP7 PUSH2 0x1E9E JUMP JUMPDEST SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT ISZERO DUP4 SWAP1 PUSH2 0x17C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x17FA JUMPI POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH2 0x18BF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x183A JUMPI PUSH1 0x0 PUSH2 0x1886 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x185E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x18AD DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F57 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST SWAP1 POP PUSH2 0x18BB DUP7 DUP5 DUP5 DUP5 PUSH2 0x1977 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x18FA JUMPI PUSH1 0x0 PUSH2 0x1946 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x191E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x196D DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F7F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1782 JUMP JUMPDEST SWAP1 POP PUSH2 0xECC DUP6 DUP5 DUP5 DUP5 JUMPDEST PUSH1 0x0 PUSH2 0x199B NUMBER PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FCA PUSH1 0x34 SWAP2 CODECOPY PUSH2 0x1B6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH4 0xFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x19F5 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH4 0xFFFFFFFF DUP4 AND SWAP2 PUSH2 0x19D9 PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ JUMPDEST ISZERO PUSH2 0x1A69 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 SWAP2 PUSH2 0x1A1F PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1B1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 MSTORE DUP7 DUP2 KECCAK256 DUP12 DUP7 AND DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP5 SWAP1 SWAP5 KECCAK256 SWAP3 MLOAD DUP4 SLOAD SWAP5 MLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP5 AND SWAP2 AND OR SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AE9 DUP5 PUSH1 0x1 PUSH2 0x1EBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x20 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1BBF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1BA3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C18 DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C44 DUP5 PUSH2 0x1BE0 JUMP JUMPDEST SWAP3 POP PUSH2 0x1C52 PUSH1 0x20 DUP6 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE2 DUP3 PUSH2 0x1BE0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x1CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CB0 DUP8 PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1CCC PUSH1 0x60 DUP9 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D0A DUP9 PUSH2 0x1BE0 JUMP JUMPDEST SWAP7 POP PUSH2 0x1D18 PUSH1 0x20 DUP10 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1D34 PUSH1 0x80 DUP10 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D6C DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH2 0x1D7A PUSH1 0x20 DUP5 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D9F DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1DB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x476561723A3A63616C6C6572206973206E6F7420746865206D616E6167657200 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP1 PUSH2 0x1E59 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1E77 JUMPI PUSH2 0x1E77 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP INVALID SELFBALANCE PUSH6 0x61723A3A6170 PUSH17 0x726F76653A20616D6F756E742065786365 PUSH6 0x647320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F74 PUSH19 0x616E73666572546F6B656E733A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206F766572666C6F777347656172 GASPRICE GASPRICE PUSH21 0x72616E736665723A20616D6F756E74206578636565 PUSH5 0x7320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F6D PUSH16 0x7665566F7465733A20766F746520616D PUSH16 0x756E7420756E646572666C6F77734765 PUSH2 0x723A GASPRICE 0x5F PUSH14 0x6F7665566F7465733A20766F7465 KECCAK256 PUSH2 0x6D6F PUSH22 0x6E74206F766572666C6F7773476561723A3A7065726D PUSH10 0x743A20616D6F756E7420 PUSH6 0x786365656473 KECCAK256 CODECOPY CALLDATASIZE KECCAK256 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F77 PUSH19 0x697465436865636B706F696E743A20626C6F63 PUSH12 0x206E756D6265722065786365 PUSH6 0x647320333220 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A7472 PUSH2 0x6E73 PUSH7 0x657246726F6D3A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x207370656E64657220616C6C6F77616E63654765 PUSH2 0x723A GASPRICE 0x5F PUSH21 0x72616E73666572546F6B656E733A207472616E7366 PUSH6 0x7220616D6F75 PUSH15 0x7420657863656564732062616C616E PUSH4 0x65A26469 PUSH17 0x6673582212205C356FBD26A2927AD0969A REVERT 0x2D PUSH25 0x6175A49452B6DF0CC597CE2D0EDBB24A252964736F6C634300 ADDMOD GT STOP CALLER ", - "sourceMap": "216:17736:51:-:0;;;3625:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3672:21:51;;3664:61;;;;-1:-1:-1;;;3664:61:51;;511:2:70;3664:61:51;;;493:21:70;550:2;530:18;;;523:30;589:29;569:18;;;562:57;636:18;;3664:61:51;;;;;;;;-1:-1:-1;;;;;3735:17:51;;;;;;:8;:17;;;;;;:39;;-1:-1:-1;;;;;;3735:39:51;619:17;3735:39;;;;;;3789:42;;;;;;811:25:70;;;799:2;784:18;;665:177;3789:42:51;;;;;;;;-1:-1:-1;3841:7:51;:20;;-1:-1:-1;;;;;;3871:24:51;3851:10;3841:20;;-1:-1:-1;;3871:24:51;;;;216:17736;;14:290:70;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:70;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:70:o;665:177::-;216:17736:51;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@DELEGATION_TYPEHASH_15332": { - "entryPoint": null, - "id": 15332, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@DOMAIN_TYPEHASH_15326": { - "entryPoint": null, - "id": 15326, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@PERMIT_TYPEHASH_15338": { - "entryPoint": null, - "id": 15338, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_16170": { - "entryPoint": 5880, - "id": 16170, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_moveDelegates_16364": { - "entryPoint": 6095, - "id": 16364, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_transferTokens_16255": { - "entryPoint": 5158, - "id": 16255, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_writeCheckpoint_16437": { - "entryPoint": 6519, - "id": 16437, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@add96_16512": { - "entryPoint": 6018, - "id": 16512, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@allowTransfers_15521": { - "entryPoint": 1560, - "id": 15521, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@allowance_15538": { - "entryPoint": null, - "id": 15538, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@approve_15595": { - "entryPoint": 1370, - "id": 15595, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@balanceOf_15752": { - "entryPoint": null, - "id": 15752, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@checkpoints_15315": { - "entryPoint": null, - "id": 15315, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@decimals_15283": { - "entryPoint": null, - "id": 15283, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@delegateBySig_15971": { - "entryPoint": 3049, - "id": 15971, - "parameterSlots": 6, - "returnSlots": 0 - }, - "@delegate_15868": { - "entryPoint": 1993, - "id": 15868, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@delegates_15302": { - "entryPoint": null, - "id": 15302, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@getChainId_16547": { - "entryPoint": null, - "id": 16547, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@getCurrentVotes_16000": { - "entryPoint": 2923, - "id": 16000, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getPriorVotes_16132": { - "entryPoint": 2006, - "id": 16132, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@manager_15348": { - "entryPoint": null, - "id": 15348, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@miner_15351": { - "entryPoint": null, - "id": 15351, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@name_15275": { - "entryPoint": null, - "id": 15275, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@nonces_15342": { - "entryPoint": null, - "id": 15342, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@numCheckpoints_15320": { - "entryPoint": null, - "id": 15320, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@permit_15739": { - "entryPoint": 3796, - "id": 15739, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@safe32_16461": { - "entryPoint": 7023, - "id": 16461, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@safe96_16485": { - "entryPoint": 5037, - "id": 16485, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@setMiner_15508": { - "entryPoint": 2656, - "id": 15508, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@sub96_16535": { - "entryPoint": 5084, - "id": 16535, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@symbol_15279": { - "entryPoint": null, - "id": 15279, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@totalSupply_15287": { - "entryPoint": null, - "id": 15287, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferFrom_15855": { - "entryPoint": 1672, - "id": 15855, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@transferOwnership_15482": { - "entryPoint": 4801, - "id": 15482, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transfer_15779": { - "entryPoint": 2863, - "id": 15779, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@transfersAllowed_15345": { - "entryPoint": null, - "id": 15345, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 7136, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 7266, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 7504, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 7206, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32": { - "entryPoint": 7398, - "id": null, - "parameterSlots": 2, - "returnSlots": 7 - }, - "abi_decode_tuple_t_addresst_uint256": { - "entryPoint": 7164, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32": { - "entryPoint": 7310, - "id": null, - "parameterSlots": 2, - "returnSlots": 6 - }, - "abi_decode_tuple_t_addresst_uint32": { - "entryPoint": 7555, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_uint8": { - "entryPoint": 7293, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 7, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 7058, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_7e336673c720811df85da9c52b52403c96414373a4ba8852da36d1bf3171c7f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_891c056eab609741c5d40497e7a7fb0cfae7b5b1e4c8c4b4338ad772f82bd07f__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9f0c73d30d1a2c7d32b78533d64a5ea0aa93418df228d52ab0e80c9e698b1203__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b517fdda34a2dd69686733c0179311ae997f4c63f00f6525c2e71068609f788e__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b8b4a42056547026e1b58e728ababc580aa48d9ac6259c9e9cd033858f855814__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ba929f1322cab880e8700d473326d4d9f4297476e1b7d45089bcdaaa3b34159c__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_bf94a3001b8e16b22aa05162cbe4c8cfa5c543ee5848b0072b699357ed0c9f7d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_d74c1ef06ea0a7e264e9b25959a74b52d468ce51f50f999f16ea6c993d319922__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 7619, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_da3eae76455fd15ac20ba7788ce129f574e737988df4b38e3ca9b86509cae508__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e98f86b871810b5dbb9ec3ddc0350faf722d94c4fa1198266b40db49b68c2c2e__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f587d9a37ed8922d716d80cb9cad0322d0e6e71f4986476043d6fab938949413__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint96__to_t_uint32_t_uint96__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint96__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint96_t_uint96__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "checked_add_t_uint32": { - "entryPoint": 7870, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_add_t_uint96": { - "entryPoint": 7838, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint32": { - "entryPoint": 7732, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint32": { - "entryPoint": 7696, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint96": { - "entryPoint": 7806, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 7781, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 7674, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:13824:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "135:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "145:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "149:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "173:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "184:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "166:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "166:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "166:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "196:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "216:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "210:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "210:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "200:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "243:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "254:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "259:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "232:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "232:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "232:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "275:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "284:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "279:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "344:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "373:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "384:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "369:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "369:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "388:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "365:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "407:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "415:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "403:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "403:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "419:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "399:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "399:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "393:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "393:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "358:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "358:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "358:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "305:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "308:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "302:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "302:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "316:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "318:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "327:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "330:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "323:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "318:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "298:3:70", - "statements": [] - }, - "src": "294:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "458:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "469:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "454:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "454:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "478:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "450:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "450:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "483:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "443:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "443:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "494:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "510:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "529:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "537:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "525:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "546:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "542:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "542:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "521:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "521:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "506:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "506:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "553:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "502:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "494:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "104:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "115:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "126:4:70", - "type": "" - } - ], - "src": "14:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "616:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "626:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "648:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "635:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "635:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "626:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "718:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "727:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "730:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "720:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "720:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "720:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "677:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "688:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "703:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "708:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "699:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "699:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "712:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "695:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "695:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "684:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "684:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "674:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "674:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "667:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "667:50:70" - }, - "nodeType": "YulIf", - "src": "664:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "595:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "606:5:70", - "type": "" - } - ], - "src": "567:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "832:167:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "878:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "887:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "890:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "880:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "880:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "880:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "853:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "862:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "849:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "849:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "874:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "845:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "845:32:70" - }, - "nodeType": "YulIf", - "src": "842:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "903:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "932:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "913:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "913:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "903:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "951:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "974:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "961:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "961:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "951:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "790:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "801:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "813:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "821:6:70", - "type": "" - } - ], - "src": "745:254:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1099:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1109:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1121:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1132:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1117:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1117:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1109:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1151:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1176:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1169:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1169:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1162:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1162:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1144:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1144:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1144:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1068:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1079:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1090:4:70", - "type": "" - } - ], - "src": "1004:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1297:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1307:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1319:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1330:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1315:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1315:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1307:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1349:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1360:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1342:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1342:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1266:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1277:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1288:4:70", - "type": "" - } - ], - "src": "1196:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1479:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1489:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1501:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1512:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1497:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1497:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1489:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1531:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1542:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1524:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1524:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1524:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1448:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1459:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1470:4:70", - "type": "" - } - ], - "src": "1378:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1664:224:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1710:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1719:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1722:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1712:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1712:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1712:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1685:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1694:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1681:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1681:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1706:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1677:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1677:32:70" - }, - "nodeType": "YulIf", - "src": "1674:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1735:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1764:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1745:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1745:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1735:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1783:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1816:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1827:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1812:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1812:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1793:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1793:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1783:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1840:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1867:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1878:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1863:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1863:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1850:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1850:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1840:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1614:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1625:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1637:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1645:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1653:6:70", - "type": "" - } - ], - "src": "1560:328:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1990:87:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2000:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2012:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2023:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2008:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2008:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2000:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2042:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2057:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2065:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2053:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2053:17:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2035:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2035:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2035:36:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1959:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1970:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1981:4:70", - "type": "" - } - ], - "src": "1893:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2183:102:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2193:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2205:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2216:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2201:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2201:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2193:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2235:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2250:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2266:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2271:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2262:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2262:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2275:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2258:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2258:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2246:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2246:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2228:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2228:51:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2228:51:70" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2152:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2163:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2174:4:70", - "type": "" - } - ], - "src": "2082:203:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2360:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2406:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2415:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2418:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2408:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2408:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2408:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2381:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2390:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2377:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2377:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2402:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2373:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2373:32:70" - }, - "nodeType": "YulIf", - "src": "2370:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2431:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2460:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2441:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2441:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2431:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2326:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2337:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2349:6:70", - "type": "" - } - ], - "src": "2290:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2580:93:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2590:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2602:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2613:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2598:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2598:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2590:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2632:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2647:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2655:10:70", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2643:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2643:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2625:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2625:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2625:42:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2549:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2560:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2571:4:70", - "type": "" - } - ], - "src": "2481:192:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2777:109:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2787:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2799:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2810:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2795:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2795:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2787:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2829:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2844:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2852:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2840:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2840:39:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2822:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2822:58:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2822:58:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2746:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2757:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2768:4:70", - "type": "" - } - ], - "src": "2678:208:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2938:109:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2948:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2970:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2957:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "2957:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2948:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3025:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3034:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3037:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3027:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3027:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3027:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2999:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3010:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3017:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3006:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3006:16:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2996:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2996:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2989:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2989:35:70" - }, - "nodeType": "YulIf", - "src": "2986:55:70" - } - ] - }, - "name": "abi_decode_uint8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "2917:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2928:5:70", - "type": "" - } - ], - "src": "2891:156:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3205:378:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3252:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3261:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3264:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3254:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3254:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3254:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3226:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3235:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3222:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3222:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3247:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3218:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3218:33:70" - }, - "nodeType": "YulIf", - "src": "3215:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "3277:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3306:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3287:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3287:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3277:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3325:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3352:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3363:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3348:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3348:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3335:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3335:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3325:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3376:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3403:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3414:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3399:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3399:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3386:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3386:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3376:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3427:46:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3458:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3469:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3454:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3454:18:70" - } - ], - "functionName": { - "name": "abi_decode_uint8", - "nodeType": "YulIdentifier", - "src": "3437:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "3437:36:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "3427:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3482:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3509:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3520:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3505:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3505:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3492:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3492:33:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "3482:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3534:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3561:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3572:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3557:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3557:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3544:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3544:33:70" - }, - "variableNames": [ - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "3534:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3131:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3142:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3154:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3162:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3170:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "3178:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "3186:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "3194:6:70", - "type": "" - } - ], - "src": "3052:531:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3758:436:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3805:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3814:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3817:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3807:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3807:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3807:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3779:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3788:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3775:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3775:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3800:3:70", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3771:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3771:33:70" - }, - "nodeType": "YulIf", - "src": "3768:53:70" - }, - { - "nodeType": "YulAssignment", - "src": "3830:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3859:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3840:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3840:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3830:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3878:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3911:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3922:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3907:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3907:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3888:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "3888:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "3878:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3935:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3962:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3973:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3958:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3958:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3945:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3945:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "3935:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3986:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4013:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4024:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4009:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4009:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3996:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "3996:32:70" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "3986:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4037:47:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4068:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4079:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4064:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4064:19:70" - } - ], - "functionName": { - "name": "abi_decode_uint8", - "nodeType": "YulIdentifier", - "src": "4047:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "4047:37:70" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "4037:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4093:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4120:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4131:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4116:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4116:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4103:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4103:33:70" - }, - "variableNames": [ - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "4093:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4145:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4172:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4183:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4168:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4168:19:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4155:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4155:33:70" - }, - "variableNames": [ - { - "name": "value6", - "nodeType": "YulIdentifier", - "src": "4145:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3676:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3687:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3699:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3707:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3715:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "3723:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "3731:6:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "3739:6:70", - "type": "" - }, - { - "name": "value6", - "nodeType": "YulTypedName", - "src": "3747:6:70", - "type": "" - } - ], - "src": "3588:606:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4286:173:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4332:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4341:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4344:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4334:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4334:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4334:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4307:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4316:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4303:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4303:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4328:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4299:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4299:32:70" - }, - "nodeType": "YulIf", - "src": "4296:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "4357:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4386:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "4367:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4367:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4357:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4405:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4438:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4449:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4434:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4434:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "4415:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4415:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4405:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4244:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4255:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4267:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4275:6:70", - "type": "" - } - ], - "src": "4199:260:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4550:264:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4596:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4605:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4608:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4598:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4598:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4598:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4571:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4580:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4567:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4567:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4592:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4563:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4563:32:70" - }, - "nodeType": "YulIf", - "src": "4560:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "4621:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4650:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "4631:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "4631:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4621:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4669:45:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4699:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4710:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4695:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4695:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4682:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "4682:32:70" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4673:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4768:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4777:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4780:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4770:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4770:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4770:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4736:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4747:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4754:10:70", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4743:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4743:22:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4733:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "4733:33:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4726:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4726:41:70" - }, - "nodeType": "YulIf", - "src": "4723:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "4793:15:70", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4803:5:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4793:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4508:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4519:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4531:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4539:6:70", - "type": "" - } - ], - "src": "4464:350:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4944:169:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4954:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4966:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4977:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4962:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4962:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4954:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4996:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5011:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5019:10:70", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5007:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5007:23:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4989:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4989:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4989:42:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5051:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5062:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5047:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "5071:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5079:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5067:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5067:39:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5040:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5040:67:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5040:67:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint96__to_t_uint32_t_uint96__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4905:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4916:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4924:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4935:4:70", - "type": "" - } - ], - "src": "4819:294:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5218:109:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5228:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5240:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5251:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5236:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5236:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5228:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5270:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5285:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5293:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5281:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5281:39:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5263:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5263:58:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5263:58:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint96__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5187:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5198:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5209:4:70", - "type": "" - } - ], - "src": "5118:209:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5506:181:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5523:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5534:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5516:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5516:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5516:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5557:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5568:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5553:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5553:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5573:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5546:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5546:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5546:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5596:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5607:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5592:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5592:18:70" - }, - { - "hexValue": "476561723a3a63616c6c6572206973206e6f7420746865206d616e61676572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5612:33:70", - "type": "", - "value": "Gear::caller is not the manager" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5585:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5585:61:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5585:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "5655:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5667:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5678:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5663:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5663:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5655:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_d74c1ef06ea0a7e264e9b25959a74b52d468ce51f50f999f16ea6c993d319922__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5483:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5497:4:70", - "type": "" - } - ], - "src": "5332:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5866:229:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5883:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5894:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5876:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5876:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5876:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5917:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5928:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5913:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5913:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5933:2:70", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5906:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5906:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5906:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5956:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5967:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5952:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5952:18:70" - }, - { - "hexValue": "476561723a3a6765745072696f72566f7465733a206e6f742079657420646574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5972:34:70", - "type": "", - "value": "Gear::getPriorVotes: not yet det" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5945:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5945:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5945:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6027:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6038:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6023:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6023:18:70" - }, - { - "hexValue": "65726d696e6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6043:9:70", - "type": "", - "value": "ermined" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6016:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6016:37:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6016:37:70" - }, - { - "nodeType": "YulAssignment", - "src": "6062:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6074:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6085:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6070:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6070:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6062:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e98f86b871810b5dbb9ec3ddc0350faf722d94c4fa1198266b40db49b68c2c2e__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5843:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5857:4:70", - "type": "" - } - ], - "src": "5692:403:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6132:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6149:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6156:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6161:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6152:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6152:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6142:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6142:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6142:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6189:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6192:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6182:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6182:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6182:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6213:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6216:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6206:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6206:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6206:15:70" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "6100:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6280:127:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "6290:20:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6300:10:70", - "type": "", - "value": "0xffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "6294:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6319:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "6335:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6338:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6331:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6331:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "6347:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6350:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6343:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6343:10:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6327:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6327:27:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "6319:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6379:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6381:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "6381:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6381:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "6369:4:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6375:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6366:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "6366:12:70" - }, - "nodeType": "YulIf", - "src": "6363:38:70" - } - ] - }, - "name": "checked_sub_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "6262:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "6265:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "6271:4:70", - "type": "" - } - ], - "src": "6232:175:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6457:243:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "6467:20:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6477:10:70", - "type": "", - "value": "0xffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "6471:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6496:21:70", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "6511:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6514:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6507:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6507:10:70" - }, - "variables": [ - { - "name": "y_1", - "nodeType": "YulTypedName", - "src": "6500:3:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6549:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6570:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6577:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6582:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6573:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6573:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6563:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6563:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6563:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6614:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6617:4:70", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6607:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6607:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6607:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6642:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6645:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6635:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6635:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6635:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y_1", - "nodeType": "YulIdentifier", - "src": "6536:3:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6529:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6529:11:70" - }, - "nodeType": "YulIf", - "src": "6526:134:70" - }, - { - "nodeType": "YulAssignment", - "src": "6669:25:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "6682:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6685:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6678:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6678:10:70" - }, - { - "name": "y_1", - "nodeType": "YulIdentifier", - "src": "6690:3:70" - } - ], - "functionName": { - "name": "div", - "nodeType": "YulIdentifier", - "src": "6674:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6674:20:70" - }, - "variableNames": [ - { - "name": "r", - "nodeType": "YulIdentifier", - "src": "6669:1:70" - } - ] - } - ] - }, - "name": "checked_div_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "6442:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "6445:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nodeType": "YulTypedName", - "src": "6451:1:70", - "type": "" - } - ], - "src": "6412:288:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6879:177:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6896:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6907:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6889:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6889:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6889:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6930:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6941:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6926:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6926:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6946:2:70", - "type": "", - "value": "27" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6919:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6919:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6919:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6969:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6980:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6965:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "6965:18:70" - }, - { - "hexValue": "5a65726f2061646472657373206973206e6f7420616c6c6f776564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6985:29:70", - "type": "", - "value": "Zero address is not allowed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6958:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "6958:57:70" - }, - "nodeType": "YulExpressionStatement", - "src": "6958:57:70" - }, - { - "nodeType": "YulAssignment", - "src": "7024:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7036:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7047:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7032:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7032:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7024:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6856:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6870:4:70", - "type": "" - } - ], - "src": "6705:351:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7246:232:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7256:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7268:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7279:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7264:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7264:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7256:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7299:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7310:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7292:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7292:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7292:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7337:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7348:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7333:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7333:18:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "7353:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7326:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7326:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7326:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7380:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7391:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7376:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7376:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "7396:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7369:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7369:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7369:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7423:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7434:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7419:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7419:18:70" - }, - { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "7443:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7459:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7464:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7455:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7455:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7468:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7451:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7451:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7439:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7439:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7412:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7412:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7412:60:70" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7191:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "7202:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7210:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7218:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7226:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7237:4:70", - "type": "" - } - ], - "src": "7061:417:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7668:232:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7678:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7690:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7701:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7686:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7686:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7678:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7721:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7732:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7714:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7714:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7714:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7759:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7770:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7755:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7755:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "7779:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7795:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7800:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7791:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7791:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7804:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7787:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7787:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7775:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7775:32:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7748:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7748:60:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7748:60:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7828:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7839:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7824:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7824:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "7844:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7817:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7817:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7817:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7871:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7882:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7867:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "7867:18:70" - }, - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "7887:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7860:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "7860:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "7860:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7613:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "7624:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7632:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7640:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7648:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7659:4:70", - "type": "" - } - ], - "src": "7483:417:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8153:144:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8170:3:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8179:3:70", - "type": "", - "value": "240" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8184:4:70", - "type": "", - "value": "6401" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8175:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8175:14:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8163:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8163:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8163:27:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8210:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8215:1:70", - "type": "", - "value": "2" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8206:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8206:11:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8219:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8199:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8199:27:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8199:27:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8246:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8251:2:70", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8242:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8242:12:70" - }, - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "8256:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8235:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8235:28:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8235:28:70" - }, - { - "nodeType": "YulAssignment", - "src": "8272:19:70", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8283:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8288:2:70", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8279:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8279:12:70" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "8272:3:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8121:3:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "8126:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8134:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "8145:3:70", - "type": "" - } - ], - "src": "7905:392:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8483:217:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8493:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8505:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8516:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8501:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8501:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8493:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8536:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8547:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8529:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8529:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8529:25:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8574:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8585:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8570:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8570:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "8594:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8602:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8590:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8590:17:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8563:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8563:45:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8563:45:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8628:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8639:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8624:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8624:18:70" - }, - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "8644:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8617:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8617:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8617:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8671:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8682:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8667:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8667:18:70" - }, - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "8687:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8660:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8660:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8660:34:70" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8428:9:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "8439:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "8447:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "8455:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8463:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8474:4:70", - "type": "" - } - ], - "src": "8302:398:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8879:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8896:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8907:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8889:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8889:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8889:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8930:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8941:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8926:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8926:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8946:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8919:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8919:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8919:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8969:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8980:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8965:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "8965:18:70" - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a20696e76616c696420736967", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8985:34:70", - "type": "", - "value": "Gear::delegateBySig: invalid sig" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8958:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "8958:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "8958:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9040:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9051:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9036:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9036:18:70" - }, - { - "hexValue": "6e6174757265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9056:8:70", - "type": "", - "value": "nature" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9029:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9029:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9029:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "9074:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9086:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9097:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9082:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9082:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9074:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b8b4a42056547026e1b58e728ababc580aa48d9ac6259c9e9cd033858f855814__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8856:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8870:4:70", - "type": "" - } - ], - "src": "8705:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9159:88:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9190:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "9192:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "9192:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9192:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9175:5:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9186:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "9182:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9182:6:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "9172:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "9172:17:70" - }, - "nodeType": "YulIf", - "src": "9169:43:70" - }, - { - "nodeType": "YulAssignment", - "src": "9221:20:70", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9232:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9239:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9228:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9228:13:70" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "9221:3:70" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "9141:5:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "9151:3:70", - "type": "" - } - ], - "src": "9112:135:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9426:224:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9443:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9454:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9436:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9436:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9436:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9477:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9488:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9473:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9473:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9493:2:70", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9466:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9466:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9466:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9516:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9527:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9512:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9512:18:70" - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9532:34:70", - "type": "", - "value": "Gear::delegateBySig: invalid non" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9505:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9505:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9505:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9587:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9598:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9583:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9583:18:70" - }, - { - "hexValue": "6365", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9603:4:70", - "type": "", - "value": "ce" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9576:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9576:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9576:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "9617:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9629:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9640:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9625:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9625:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9617:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_bf94a3001b8e16b22aa05162cbe4c8cfa5c543ee5848b0072b699357ed0c9f7d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9403:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9417:4:70", - "type": "" - } - ], - "src": "9252:398:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9829:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9846:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9857:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9839:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9839:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9839:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9880:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9891:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9876:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9876:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9896:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9869:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9869:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9869:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9919:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9930:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9915:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9915:18:70" - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a207369676e61747572652065", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9935:34:70", - "type": "", - "value": "Gear::delegateBySig: signature e" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9908:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9908:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9908:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9990:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10001:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9986:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "9986:18:70" - }, - { - "hexValue": "787069726564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10006:8:70", - "type": "", - "value": "xpired" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9979:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "9979:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "9979:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "10024:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10036:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10047:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10032:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10032:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10024:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_da3eae76455fd15ac20ba7788ce129f574e737988df4b38e3ca9b86509cae508__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9806:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9820:4:70", - "type": "" - } - ], - "src": "9655:402:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10303:350:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10313:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10325:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10336:3:70", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10321:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10321:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10313:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10356:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10367:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10349:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10349:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10349:25:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "10383:29:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10401:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10406:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "10397:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10397:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10410:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "10393:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10393:19:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "10387:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10432:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10443:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10428:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10428:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10452:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10460:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10448:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10448:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10421:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10421:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10421:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10484:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10495:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10480:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10480:18:70" - }, - { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "10504:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "10512:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "10500:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10500:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10473:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10473:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10473:43:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10536:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10547:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10532:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10532:18:70" - }, - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "10552:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10525:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10525:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10525:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10579:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10590:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10575:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10575:19:70" - }, - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "10596:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10568:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10568:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10568:35:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10623:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10634:3:70", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10619:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10619:19:70" - }, - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "10640:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10612:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10612:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10612:35:70" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10232:9:70", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "10243:6:70", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "10251:6:70", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "10259:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "10267:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "10275:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10283:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10294:4:70", - "type": "" - } - ], - "src": "10062:591:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10832:181:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10849:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10860:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10842:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10842:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10842:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10883:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10894:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10879:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10879:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10899:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10872:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10872:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10872:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10922:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10933:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10918:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10918:18:70" - }, - { - "hexValue": "476561723a3a7065726d69743a20696e76616c6964207369676e6174757265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10938:33:70", - "type": "", - "value": "Gear::permit: invalid signature" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10911:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "10911:61:70" - }, - "nodeType": "YulExpressionStatement", - "src": "10911:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "10981:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10993:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11004:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10989:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "10989:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10981:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f587d9a37ed8922d716d80cb9cad0322d0e6e71f4986476043d6fab938949413__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10809:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10823:4:70", - "type": "" - } - ], - "src": "10658:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11192:176:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11209:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11220:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11202:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11202:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11202:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11243:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11254:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11239:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11259:2:70", - "type": "", - "value": "26" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11232:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11232:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11232:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11282:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11293:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11278:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11278:18:70" - }, - { - "hexValue": "476561723a3a7065726d69743a20756e617574686f72697a6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11298:28:70", - "type": "", - "value": "Gear::permit: unauthorized" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11271:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11271:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11271:56:70" - }, - { - "nodeType": "YulAssignment", - "src": "11336:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11348:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11359:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11344:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11344:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11336:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_7e336673c720811df85da9c52b52403c96414373a4ba8852da36d1bf3171c7f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11169:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11183:4:70", - "type": "" - } - ], - "src": "11018:350:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11547:181:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11564:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11575:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11557:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11557:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11557:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11598:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11609:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11594:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11594:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11614:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11587:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11587:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11587:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11637:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11648:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11633:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11633:18:70" - }, - { - "hexValue": "476561723a3a7065726d69743a207369676e61747572652065787069726564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11653:33:70", - "type": "", - "value": "Gear::permit: signature expired" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11626:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "11626:61:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11626:61:70" - }, - { - "nodeType": "YulAssignment", - "src": "11696:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11708:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11719:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11704:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11704:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11696:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b517fdda34a2dd69686733c0179311ae997f4c63f00f6525c2e71068609f788e__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11524:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11538:4:70", - "type": "" - } - ], - "src": "11373:355:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11781:143:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "11791:36:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11801:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "11795:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "11836:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "11852:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11855:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11848:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11848:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "11864:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11867:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11860:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11860:10:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "11844:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "11844:27:70" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "11836:4:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11896:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "11898:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "11898:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "11898:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "11886:4:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11892:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "11883:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "11883:12:70" - }, - "nodeType": "YulIf", - "src": "11880:38:70" - } - ] - }, - "name": "checked_sub_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "11763:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "11766:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "11772:4:70", - "type": "" - } - ], - "src": "11733:191:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12103:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12120:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12131:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12113:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12113:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12113:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12154:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12165:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12150:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12150:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12170:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12143:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12143:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12143:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12193:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12204:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12189:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12189:18:70" - }, - { - "hexValue": "476561723a3a7472616e73666572732061726520666f7262696464656e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12209:31:70", - "type": "", - "value": "Gear::transfers are forbidden" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12182:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12182:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12182:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "12250:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12262:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12273:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12258:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12258:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12250:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ba929f1322cab880e8700d473326d4d9f4297476e1b7d45089bcdaaa3b34159c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12080:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12094:4:70", - "type": "" - } - ], - "src": "11929:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12461:250:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12478:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12489:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12471:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12471:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12471:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12512:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12523:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12508:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12508:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12528:2:70", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12501:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12501:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12501:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12551:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12562:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12547:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12547:18:70" - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12567:34:70", - "type": "", - "value": "Gear::_transferTokens: cannot tr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12540:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12540:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12540:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12622:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12633:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12618:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12618:18:70" - }, - { - "hexValue": "616e736665722066726f6d20746865207a65726f2061646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12638:30:70", - "type": "", - "value": "ansfer from the zero address" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12611:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12611:58:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12611:58:70" - }, - { - "nodeType": "YulAssignment", - "src": "12678:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12690:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12701:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12686:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12686:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12678:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_891c056eab609741c5d40497e7a7fb0cfae7b5b1e4c8c4b4338ad772f82bd07f__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12438:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12452:4:70", - "type": "" - } - ], - "src": "12287:424:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12890:248:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12907:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12918:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12900:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12900:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12900:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12941:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12952:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12937:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12937:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12957:2:70", - "type": "", - "value": "58" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12930:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12930:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12930:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12980:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12991:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12976:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "12976:18:70" - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12996:34:70", - "type": "", - "value": "Gear::_transferTokens: cannot tr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12969:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "12969:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "12969:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13051:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13062:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13047:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13047:18:70" - }, - { - "hexValue": "616e7366657220746f20746865207a65726f2061646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13067:28:70", - "type": "", - "value": "ansfer to the zero address" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13040:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13040:56:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13040:56:70" - }, - { - "nodeType": "YulAssignment", - "src": "13105:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13117:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13128:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13113:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13113:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13105:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9f0c73d30d1a2c7d32b78533d64a5ea0aa93418df228d52ab0e80c9e698b1203__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12867:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12881:4:70", - "type": "" - } - ], - "src": "12716:422:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13190:141:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13200:36:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13210:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "13204:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "13245:34:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "13260:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13263:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13256:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13256:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "13272:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13275:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13268:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13268:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13252:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13252:27:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "13245:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13303:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "13305:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "13305:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13305:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "13294:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13299:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "13291:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "13291:11:70" - }, - "nodeType": "YulIf", - "src": "13288:37:70" - } - ] - }, - "name": "checked_add_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "13173:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "13176:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "13182:3:70", - "type": "" - } - ], - "src": "13143:188:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13383:125:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13393:20:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13403:10:70", - "type": "", - "value": "0xffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "13397:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "13422:34:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "13437:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13440:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13433:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13433:10:70" - }, - { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "13449:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13452:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13445:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13445:10:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13429:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13429:27:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "13422:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13480:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "13482:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "13482:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13482:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "13471:3:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13476:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "13468:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "13468:11:70" - }, - "nodeType": "YulIf", - "src": "13465:37:70" - } - ] - }, - "name": "checked_add_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "13366:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "13369:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "13375:3:70", - "type": "" - } - ], - "src": "13336:172:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13640:182:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "13650:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13662:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13673:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13658:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13658:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13650:4:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "13685:36:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13695:26:70", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "13689:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13737:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13752:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13760:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13748:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13748:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13730:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13730:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13730:34:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13784:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13795:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13780:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13780:18:70" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "13804:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "13812:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "13800:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "13800:15:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13773:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "13773:43:70" - }, - "nodeType": "YulExpressionStatement", - "src": "13773:43:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint96_t_uint96__to_t_uint256_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13601:9:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "13612:6:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13620:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13631:4:70", - "type": "" - } - ], - "src": "13513:309:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_encode_tuple_t_uint96__to_t_uint96__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffff))\n }\n function abi_decode_uint8(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n {\n if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := abi_decode_uint8(add(headStart, 96))\n value4 := calldataload(add(headStart, 128))\n value5 := calldataload(add(headStart, 160))\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n {\n if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n value4 := abi_decode_uint8(add(headStart, 128))\n value5 := calldataload(add(headStart, 160))\n value6 := calldataload(add(headStart, 192))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_addresst_uint32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n value1 := value\n }\n function abi_encode_tuple_t_uint32_t_uint96__to_t_uint32_t_uint96__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_uint96__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_d74c1ef06ea0a7e264e9b25959a74b52d468ce51f50f999f16ea6c993d319922__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Gear::caller is not the manager\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_e98f86b871810b5dbb9ec3ddc0350faf722d94c4fa1198266b40db49b68c2c2e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"Gear::getPriorVotes: not yet det\")\n mstore(add(headStart, 96), \"ermined\")\n tail := add(headStart, 128)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint32(x, y) -> diff\n {\n let _1 := 0xffffffff\n diff := sub(and(x, _1), and(y, _1))\n if gt(diff, _1) { panic_error_0x11() }\n }\n function checked_div_t_uint32(x, y) -> r\n {\n let _1 := 0xffffffff\n let y_1 := and(y, _1)\n if iszero(y_1)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(and(x, _1), y_1)\n }\n function abi_encode_tuple_t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Zero address is not allowed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), and(value3, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, sub(shl(160, 1), 1)))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, shl(240, 6401))\n mstore(add(pos, 2), value0)\n mstore(add(pos, 34), value1)\n end := add(pos, 66)\n }\n function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 128)\n mstore(headStart, value0)\n mstore(add(headStart, 32), and(value1, 0xff))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n }\n function abi_encode_tuple_t_stringliteral_b8b4a42056547026e1b58e728ababc580aa48d9ac6259c9e9cd033858f855814__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Gear::delegateBySig: invalid sig\")\n mstore(add(headStart, 96), \"nature\")\n tail := add(headStart, 128)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_tuple_t_stringliteral_bf94a3001b8e16b22aa05162cbe4c8cfa5c543ee5848b0072b699357ed0c9f7d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"Gear::delegateBySig: invalid non\")\n mstore(add(headStart, 96), \"ce\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_da3eae76455fd15ac20ba7788ce129f574e737988df4b38e3ca9b86509cae508__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Gear::delegateBySig: signature e\")\n mstore(add(headStart, 96), \"xpired\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, value0)\n let _1 := sub(shl(160, 1), 1)\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), and(value2, _1))\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n }\n function abi_encode_tuple_t_stringliteral_f587d9a37ed8922d716d80cb9cad0322d0e6e71f4986476043d6fab938949413__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Gear::permit: invalid signature\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_7e336673c720811df85da9c52b52403c96414373a4ba8852da36d1bf3171c7f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"Gear::permit: unauthorized\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_b517fdda34a2dd69686733c0179311ae997f4c63f00f6525c2e71068609f788e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Gear::permit: signature expired\")\n tail := add(headStart, 96)\n }\n function checked_sub_t_uint96(x, y) -> diff\n {\n let _1 := 0xffffffffffffffffffffffff\n diff := sub(and(x, _1), and(y, _1))\n if gt(diff, _1) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_stringliteral_ba929f1322cab880e8700d473326d4d9f4297476e1b7d45089bcdaaa3b34159c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"Gear::transfers are forbidden\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_891c056eab609741c5d40497e7a7fb0cfae7b5b1e4c8c4b4338ad772f82bd07f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"Gear::_transferTokens: cannot tr\")\n mstore(add(headStart, 96), \"ansfer from the zero address\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_9f0c73d30d1a2c7d32b78533d64a5ea0aa93418df228d52ab0e80c9e698b1203__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 58)\n mstore(add(headStart, 64), \"Gear::_transferTokens: cannot tr\")\n mstore(add(headStart, 96), \"ansfer to the zero address\")\n tail := add(headStart, 128)\n }\n function checked_add_t_uint96(x, y) -> sum\n {\n let _1 := 0xffffffffffffffffffffffff\n sum := add(and(x, _1), and(y, _1))\n if gt(sum, _1) { panic_error_0x11() }\n }\n function checked_add_t_uint32(x, y) -> sum\n {\n let _1 := 0xffffffff\n sum := add(and(x, _1), and(y, _1))\n if gt(sum, _1) { panic_error_0x11() }\n }\n function abi_encode_tuple_t_uint96_t_uint96__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104b9578063f1127ed8146104e0578063f2fde38b1461054757600080fd5b8063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b806395d89b41116100d357806395d89b41146103ea5780639742ca461461040d578063a9059cbb14610420578063b0660c3d1461043357600080fd5b806370a082311461036d578063782d6fe11461039f5780637ecebe00146103ca57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a75146102de578063587cde1e146102f65780635c19a95c1461031f5780636fcfff451461033257600080fd5b806330adf81f14610272578063313ce56714610299578063349dc329146102b357600080fd5b806306fdde03146101ae578063095ea7b3146101ea57806318160ddd1461020d57806320606b701461022e5780632185810b1461025557806323b872dd1461025f575b600080fd5b6101d46040518060400160405280600781526020016608ecac2e4c4def60cb1b81525081565b6040516101e19190611b92565b60405180910390f35b6101fd6101f8366004611bfc565b61055a565b60405190151581526020016101e1565b6102206b204fce5e3e2502611000000081565b6040519081526020016101e1565b6102207f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61025d610618565b005b6101fd61026d366004611c26565b610688565b6102207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102a1601281565b60405160ff90911681526020016101e1565b6007546102c6906001600160a01b031681565b6040516001600160a01b0390911681526020016101e1565b6006546102c69061010090046001600160a01b031681565b6102c6610304366004611c62565b6002602052600090815260409020546001600160a01b031681565b61025d61032d366004611c62565b6107c9565b610358610340366004611c62565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e1565b61022061037b366004611c62565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b6103b26103ad366004611bfc565b6107d6565b6040516001600160601b0390911681526020016101e1565b6102206103d8366004611c62565b60056020526000908152604090205481565b6101d46040518060400160405280600481526020016323a2a0a960e11b81525081565b61025d61041b366004611c62565b610a60565b6101fd61042e366004611bfc565b610b2f565b6006546101fd9060ff1681565b6103b261044e366004611c62565b610b6b565b61025d610461366004611c8e565b610be9565b61025d610474366004611ce6565b610ed4565b610220610487366004611d50565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b6102207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105236104ee366004611d83565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016101e1565b61025d610555366004611c62565b6112c1565b600080600019830361057457506001600160601b03610599565b61059683604051806060016040528060258152602001611edc602591396113ad565b90505b336000818152602081815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60065461010090046001600160a01b031633146106505760405162461bcd60e51b815260040161064790611dc3565b60405180910390fd5b6006805460ff191660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b6001600160a01b0383166000908152602081815260408083203380855290835281842054825160608101909352602580845291936001600160601b039091169285926106de9288929190611edc908301396113ad565b9050866001600160a01b0316836001600160a01b03161415801561070b57506001600160601b0382811614155b156107b157600061073583836040518060600160405280603d8152602001611ffe603d91396113dc565b6001600160a01b03898116600081815260208181526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6107bc878783611426565b5060019695505050505050565b6107d333826116f8565b50565b60004382106108375760405162461bcd60e51b815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610647565b6001600160a01b03831660009081526004602052604081205463ffffffff1690819003610868576000915050610612565b6001600160a01b0384166000908152600360205260408120849161088d600185611e10565b63ffffffff90811682526020820192909252604001600020541611610900576001600160a01b0384166000908152600360205260408120906108d0600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b031691506106129050565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff1683101561093b576000915050610612565b600080610949600184611e10565b90505b8163ffffffff168163ffffffff161115610a1b576000600261096e8484611e10565b6109789190611e34565b6109829083611e10565b6001600160a01b038816600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529192508790036109ef576020015194506106129350505050565b805163ffffffff16871115610a0657819350610a14565b610a11600183611e10565b92505b505061094c565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60065461010090046001600160a01b03163314610a8f5760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610b5483604051806060016040528060268152602001611f31602691396113ad565b9050610b61338583611426565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610b96576000610be2565b6001600160a01b038316600090815260036020526040812090610bba600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d6b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610647565b6001600160a01b0381166000908152600560205260408120805491610e0183611e65565b919050558914610e5e5760405162461bcd60e51b815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610647565b87421115610ebd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610647565b610ec7818b6116f8565b505050505b505050505050565b60006000198603610eed57506001600160601b03610f12565b610f0f86604051806060016040528060248152602001611fa6602491396113ad565b90505b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086610fef83611e65565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161106e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661113c5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e6174757265006044820152606401610647565b8b6001600160a01b0316816001600160a01b03161461119d5760405162461bcd60e51b815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a65640000000000006044820152606401610647565b884211156111ed5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e61747572652065787069726564006044820152606401610647565b846000808e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ab91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b60065461010090046001600160a01b031633146112f05760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b0381166113465760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b6006546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081600160601b84106113d45760405162461bcd60e51b81526004016106479190611b92565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114135760405162461bcd60e51b81526004016106479190611b92565b5061141e8385611e7e565b949350505050565b60065460ff1680611446575060065461010090046001600160a01b031633145b8061145b57506007546001600160a01b031633145b6114a75760405162461bcd60e51b815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e0000006044820152606401610647565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610647565b6001600160a01b03821661159f5760405162461bcd60e51b815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610647565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526115ea936001600160601b03909216928592919061203b908301396113dc565b6001600160a01b03848116600090815260016020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482516060810190935260308084526116529491909116928592909190611f0190830139611782565b6001600160a01b0383811660008181526001602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038084166000908152600260205260408082205485841683529120546116f3929182169116836117cf565b505050565b6001600160a01b03808316600081815260026020818152604080842080546001845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461177c8284836117cf565b50505050565b60008061178f8486611e9e565b9050846001600160601b0316816001600160601b0316101583906117c65760405162461bcd60e51b81526004016106479190611b92565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156117fa57506000816001600160601b0316115b156116f3576001600160a01b038316156118bf576001600160a01b03831660009081526004602052604081205463ffffffff16908161183a576000611886565b6001600160a01b03851660009081526003602052604081209061185e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b905060006118ad8285604051806060016040528060288152602001611f57602891396113dc565b90506118bb86848484611977565b5050505b6001600160a01b038216156116f3576001600160a01b03821660009081526004602052604081205463ffffffff1690816118fa576000611946565b6001600160a01b03841660009081526003602052604081209061191e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061196d8285604051806060016040528060278152602001611f7f60279139611782565b9050610ecc858484845b600061199b43604051806060016040528060348152602001611fca60349139611b6f565b905060008463ffffffff161180156119f557506001600160a01b038516600090815260036020526040812063ffffffff8316916119d9600188611e10565b63ffffffff908116825260208201929092526040016000205416145b15611a69576001600160a01b03851660009081526003602052604081208391611a1f600188611e10565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611b1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600382528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611ae9846001611ebe565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d45760405162461bcd60e51b815260040161064791905b600060208083528351808285015260005b81811015611bbf57858101830151858201604001528201611ba3565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bf757600080fd5b919050565b60008060408385031215611c0f57600080fd5b611c1883611be0565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b611c4484611be0565b9250611c5260208501611be0565b9150604084013590509250925092565b600060208284031215611c7457600080fd5b610be282611be0565b803560ff81168114611bf757600080fd5b60008060008060008060c08789031215611ca757600080fd5b611cb087611be0565b95506020870135945060408701359350611ccc60608801611c7d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611d0157600080fd5b611d0a88611be0565b9650611d1860208901611be0565b95506040880135945060608801359350611d3460808901611c7d565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d6357600080fd5b611d6c83611be0565b9150611d7a60208401611be0565b90509250929050565b60008060408385031215611d9657600080fd5b611d9f83611be0565b9150602083013563ffffffff81168114611db857600080fd5b809150509250929050565b6020808252601f908201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604082015260600190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611e2d57611e2d611dfa565b5092915050565b600063ffffffff80841680611e5957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611e7757611e77611dfa565b5060010190565b6001600160601b03828116828216039080821115611e2d57611e2d611dfa565b6001600160601b03818116838216019080821115611e2d57611e2d611dfa565b63ffffffff818116838216019080821115611e2d57611e2d611dfa56fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212205c356fbd26a2927ad0969afd2d786175a49452b6df0cc597ce2d0edbb24a252964736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1A9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xB4B5EA57 GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xE7A324DC EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xF1127ED8 EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB4B5EA57 EQ PUSH2 0x440 JUMPI DUP1 PUSH4 0xC3CDA520 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x466 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0x9742CA46 EQ PUSH2 0x40D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0xB0660C3D EQ PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36D JUMPI DUP1 PUSH4 0x782D6FE1 EQ PUSH2 0x39F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x166 JUMPI DUP1 PUSH4 0x481C6A75 GT PUSH2 0x140 JUMPI DUP1 PUSH4 0x481C6A75 EQ PUSH2 0x2DE JUMPI DUP1 PUSH4 0x587CDE1E EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x31F JUMPI DUP1 PUSH4 0x6FCFFF45 EQ PUSH2 0x332 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x272 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x299 JUMPI DUP1 PUSH4 0x349DC329 EQ PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x20606B70 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0x2185810B EQ PUSH2 0x255 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 DUP2 MSTORE PUSH1 0x20 ADD PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x55A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH12 0x204FCE5E3E25026110000000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x618 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1FD PUSH2 0x26D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C26 JUMP JUMPDEST PUSH2 0x688 JUMP JUMPDEST PUSH2 0x220 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH2 0x2A1 PUSH1 0x12 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH2 0x2C6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x2C6 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x2C6 PUSH2 0x304 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x32D CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0x358 PUSH2 0x340 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x37B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x3AD CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0x7D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x3D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1D4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH4 0x23A2A0A9 PUSH1 0xE1 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x1BFC JUMP JUMPDEST PUSH2 0xB2F JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x1FD SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x3B2 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0xB6B JUMP JUMPDEST PUSH2 0x25D PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C8E JUMP JUMPDEST PUSH2 0xBE9 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0x1CE6 JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH2 0x220 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x1D50 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x220 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF DUP2 JUMP JUMPDEST PUSH2 0x523 PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x1D83 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH2 0x1E1 JUMP JUMPDEST PUSH2 0x25D PUSH2 0x555 CALLDATASIZE PUSH1 0x4 PUSH2 0x1C62 JUMP JUMPDEST PUSH2 0x12C1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 NOT DUP4 SUB PUSH2 0x574 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0x599 JUMP JUMPDEST PUSH2 0x596 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1EDC PUSH1 0x25 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP1 DUP2 MSTORE SWAP2 SWAP3 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x650 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x795B0E16C8DA9807B0A215F3749BD6DBCC49FC0472183F4E446ABB7DCBD9D007 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x25 DUP1 DUP5 MSTORE SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 PUSH2 0x6DE SWAP3 DUP9 SWAP3 SWAP2 SWAP1 PUSH2 0x1EDC SWAP1 DUP4 ADD CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND EQ ISZERO JUMPDEST ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 PUSH2 0x735 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3D DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FFE PUSH1 0x3D SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP11 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP8 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP2 MLOAD SWAP2 DUP3 MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST PUSH2 0x7BC DUP8 DUP8 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7D3 CALLER DUP3 PUSH2 0x16F8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 NUMBER DUP3 LT PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A6765745072696F72566F7465733A206E6F742079657420646574 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x195C9B5A5B9959 PUSH1 0xCA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x868 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP5 SWAP2 PUSH2 0x88D PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND GT PUSH2 0x900 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x8D0 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 POP PUSH2 0x612 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 DUP1 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP4 LT ISZERO PUSH2 0x93B JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x612 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x949 PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP JUMPDEST DUP2 PUSH4 0xFFFFFFFF AND DUP2 PUSH4 0xFFFFFFFF AND GT ISZERO PUSH2 0xA1B JUMPI PUSH1 0x0 PUSH1 0x2 PUSH2 0x96E DUP5 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH2 0x978 SWAP2 SWAP1 PUSH2 0x1E34 JUMP JUMPDEST PUSH2 0x982 SWAP1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF DUP6 DUP2 AND DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE SLOAD SWAP3 DUP4 AND DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP4 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 SWAP3 POP DUP8 SWAP1 SUB PUSH2 0x9EF JUMPI PUSH1 0x20 ADD MLOAD SWAP5 POP PUSH2 0x612 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP8 GT ISZERO PUSH2 0xA06 JUMPI DUP2 SWAP4 POP PUSH2 0xA14 JUMP JUMPDEST PUSH2 0xA11 PUSH1 0x1 DUP4 PUSH2 0x1E10 JUMP JUMPDEST SWAP3 POP JUMPDEST POP POP PUSH2 0x94C JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH4 0xFFFFFFFF SWAP1 SWAP5 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH1 0x1 PUSH1 0x20 SHL SWAP1 SWAP2 DIV AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xAE5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x2F834D1C8C4B956018FFF5FACA4D99868AE635487424D9C265C257CCBC698C6A SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB54 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F31 PUSH1 0x26 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP PUSH2 0xB61 CALLER DUP6 DUP4 PUSH2 0x1426 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND DUP1 PUSH2 0xB96 JUMPI PUSH1 0x0 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xBBA PUSH1 0x1 DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 DUP3 ADD DUP5 MSTORE DUP1 MLOAD SWAP1 DUP4 ADD KECCAK256 PUSH32 0xE48329057BFD03D55E49B547132E39CFFD9C1820AD7B9D4C5307691425D15ADF PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP3 ADD DUP10 SWAP1 MSTORE PUSH2 0x120 DUP1 DUP4 ADD DUP10 SWAP1 MSTORE DUP5 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH2 0x140 DUP4 ADD SWAP1 SWAP5 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH2 0x1901 PUSH1 0xF0 SHL PUSH2 0x160 DUP5 ADD MSTORE PUSH2 0x162 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x182 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP2 PUSH1 0x0 SWAP1 PUSH2 0x1A2 ADD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP11 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP9 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP8 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xDDD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C696420736967 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x6E6174757265 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP2 PUSH2 0xE01 DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE DUP10 EQ PUSH2 0xE5E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A20696E76616C6964206E6F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x6365 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST DUP8 TIMESTAMP GT ISZERO PUSH2 0xEBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A64656C656761746542795369673A207369676E61747572652065 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1E1C1A5C9959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH2 0xEC7 DUP2 DUP12 PUSH2 0x16F8 JUMP JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP7 SUB PUSH2 0xEED JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB PUSH2 0xF12 JUMP JUMPDEST PUSH2 0xF0F DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FA6 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x13AD JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x8ECAC2E4C4DEF PUSH1 0xCB SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0x8CAD95687BA82C2CE50E74F7B754645E5117C3A5BEC8151C0726D5857980A866 DUP2 DUP4 ADD MSTORE PUSH32 0x28EF9F797075F74AC647C65FDE04FB0F128C2D59FD40F45732269917642FD46 DUP2 DUP5 ADD MSTORE CHAINID PUSH1 0x60 DUP3 ADD MSTORE ADDRESS PUSH1 0x80 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD DUP4 MSTORE DUP1 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP3 MSTORE SWAP2 DUP2 KECCAK256 DUP1 SLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 SWAP2 DUP13 SWAP2 DUP13 SWAP2 DUP13 SWAP2 SWAP1 DUP7 PUSH2 0xFEF DUP4 PUSH2 0x1E65 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND SWAP1 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP2 AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x106E SWAP3 SWAP2 SWAP1 PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP1 DUP6 MSTORE SWAP2 DUP5 ADD DUP1 DUP5 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP12 AND SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP4 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP9 SWAP1 MSTORE SWAP1 SWAP3 POP SWAP1 PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x113C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20696E76616C6964207369676E617475726500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x119D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A20756E617574686F72697A6564000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP9 TIMESTAMP GT ISZERO PUSH2 0x11ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7065726D69743A207369676E6174757265206578706972656400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST DUP5 PUSH1 0x0 DUP1 DUP15 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP8 PUSH1 0x40 MLOAD PUSH2 0x12AB SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x12F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP1 PUSH2 0x1DC3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1346 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5A65726F2061646472657373206973206E6F7420616C6C6F7765640000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x60 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT ISZERO DUP3 SWAP1 PUSH2 0x1413 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP PUSH2 0x141E DUP4 DUP6 PUSH2 0x1E7E JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1446 JUMPI POP PUSH1 0x6 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST DUP1 PUSH2 0x145B JUMPI POP PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST PUSH2 0x14A7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A7472616E73666572732061726520666F7262696464656E000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1523 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E736665722066726F6D20746865207A65726F206164647265737300000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x476561723A3A5F7472616E73666572546F6B656E733A2063616E6E6F74207472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E7366657220746F20746865207A65726F2061646472657373000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x647 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x36 DUP1 DUP5 MSTORE PUSH2 0x15EA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP3 DUP6 SWAP3 SWAP2 SWAP1 PUSH2 0x203B SWAP1 DUP4 ADD CODECOPY PUSH2 0x13DC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP3 DUP7 AND DUP3 MSTORE SWAP1 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP4 MSTORE PUSH1 0x30 DUP1 DUP5 MSTORE PUSH2 0x1652 SWAP5 SWAP2 SWAP1 SWAP2 AND SWAP3 DUP6 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x1F01 SWAP1 DUP4 ADD CODECOPY PUSH2 0x1782 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP7 DUP8 AND OR SWAP1 SSTORE SWAP1 MLOAD SWAP4 DUP6 AND DUP5 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD DUP6 DUP5 AND DUP4 MSTORE SWAP2 KECCAK256 SLOAD PUSH2 0x16F3 SWAP3 SWAP2 DUP3 AND SWAP2 AND DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP5 MSTORE DUP3 DUP7 KECCAK256 SLOAD SWAP5 SWAP1 SWAP4 MSTORE DUP8 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP5 AND DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD SWAP2 SWAP1 SWAP6 AND SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP1 SWAP3 AND SWAP4 SWAP2 SWAP3 DUP6 SWAP3 SWAP2 PUSH32 0x3134E8A2E6D97E929A7E54011EA5485D7D196DD5F0BA4D4EF95803E8E3FC257F SWAP2 SWAP1 LOG4 PUSH2 0x177C DUP3 DUP5 DUP4 PUSH2 0x17CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x178F DUP5 DUP7 PUSH2 0x1E9E JUMP JUMPDEST SWAP1 POP DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT ISZERO DUP4 SWAP1 PUSH2 0x17C6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 PUSH2 0x1B92 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x17FA JUMPI POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND GT JUMPDEST ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH2 0x18BF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x183A JUMPI PUSH1 0x0 PUSH2 0x1886 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x185E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x18AD DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F57 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x13DC JUMP JUMPDEST SWAP1 POP PUSH2 0x18BB DUP7 DUP5 DUP5 DUP5 PUSH2 0x1977 JUMP JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x16F3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH4 0xFFFFFFFF AND SWAP1 DUP2 PUSH2 0x18FA JUMPI PUSH1 0x0 PUSH2 0x1946 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x191E PUSH1 0x1 DUP6 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x20 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x196D DUP3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F7F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1782 JUMP JUMPDEST SWAP1 POP PUSH2 0xECC DUP6 DUP5 DUP5 DUP5 JUMPDEST PUSH1 0x0 PUSH2 0x199B NUMBER PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x34 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FCA PUSH1 0x34 SWAP2 CODECOPY PUSH2 0x1B6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH4 0xFFFFFFFF AND GT DUP1 ISZERO PUSH2 0x19F5 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH4 0xFFFFFFFF DUP4 AND SWAP2 PUSH2 0x19D9 PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ JUMPDEST ISZERO PUSH2 0x1A69 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP4 SWAP2 PUSH2 0x1A1F PUSH1 0x1 DUP9 PUSH2 0x1E10 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1B1A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP3 MSTORE DUP7 DUP2 KECCAK256 DUP12 DUP7 AND DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP5 SWAP1 SWAP5 KECCAK256 SWAP3 MLOAD DUP4 SLOAD SWAP5 MLOAD SWAP1 SWAP2 AND PUSH1 0x1 PUSH1 0x20 SHL MUL PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT SWAP1 SWAP5 AND SWAP2 AND OR SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AE9 DUP5 PUSH1 0x1 PUSH2 0x1EBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH4 0xFFFFFFFF NOT AND PUSH4 0xFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP1 DUP7 AND DUP3 MSTORE DUP5 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xDEC2BACDD2F05B59DE34DA9B523DFF8BE42E5E38E818C82FDB0BAE774387A724 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x20 SHL DUP5 LT PUSH2 0x13D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x647 SWAP2 SWAP1 JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1BBF JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1BA3 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C18 DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C44 DUP5 PUSH2 0x1BE0 JUMP JUMPDEST SWAP3 POP PUSH2 0x1C52 PUSH1 0x20 DUP6 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBE2 DUP3 PUSH2 0x1BE0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1BF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x1CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CB0 DUP8 PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1CCC PUSH1 0x60 DUP9 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D0A DUP9 PUSH2 0x1BE0 JUMP JUMPDEST SWAP7 POP PUSH2 0x1D18 PUSH1 0x20 DUP10 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1D34 PUSH1 0x80 DUP10 ADD PUSH2 0x1C7D JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D6C DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH2 0x1D7A PUSH1 0x20 DUP5 ADD PUSH2 0x1BE0 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1D96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1D9F DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1DB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1F SWAP1 DUP3 ADD MSTORE PUSH32 0x476561723A3A63616C6C6572206973206E6F7420746865206D616E6167657200 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP1 DUP5 AND DUP1 PUSH2 0x1E59 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP3 AND SWAP2 SWAP1 SWAP2 DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 ADD PUSH2 0x1E77 JUMPI PUSH2 0x1E77 PUSH2 0x1DFA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 DUP2 AND DUP4 DUP3 AND ADD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x1E2D JUMPI PUSH2 0x1E2D PUSH2 0x1DFA JUMP INVALID SELFBALANCE PUSH6 0x61723A3A6170 PUSH17 0x726F76653A20616D6F756E742065786365 PUSH6 0x647320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F74 PUSH19 0x616E73666572546F6B656E733A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206F766572666C6F777347656172 GASPRICE GASPRICE PUSH21 0x72616E736665723A20616D6F756E74206578636565 PUSH5 0x7320393620 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F6D PUSH16 0x7665566F7465733A20766F746520616D PUSH16 0x756E7420756E646572666C6F77734765 PUSH2 0x723A GASPRICE 0x5F PUSH14 0x6F7665566F7465733A20766F7465 KECCAK256 PUSH2 0x6D6F PUSH22 0x6E74206F766572666C6F7773476561723A3A7065726D PUSH10 0x743A20616D6F756E7420 PUSH6 0x786365656473 KECCAK256 CODECOPY CALLDATASIZE KECCAK256 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A5F77 PUSH19 0x697465436865636B706F696E743A20626C6F63 PUSH12 0x206E756D6265722065786365 PUSH6 0x647320333220 PUSH3 0x697473 SELFBALANCE PUSH6 0x61723A3A7472 PUSH2 0x6E73 PUSH7 0x657246726F6D3A KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x207370656E64657220616C6C6F77616E63654765 PUSH2 0x723A GASPRICE 0x5F PUSH21 0x72616E73666572546F6B656E733A207472616E7366 PUSH6 0x7220616D6F75 PUSH15 0x7420657863656564732062616C616E PUSH4 0x65A26469 PUSH17 0x6673582212205C356FBD26A2927AD0969A REVERT 0x2D PUSH25 0x6175A49452B6DF0CC597CE2D0EDBB24A252964736F6C634300 ADDMOD GT STOP CALLER ", - "sourceMap": "216:17736:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;290:39;;;;;;;;;;;;;;;-1:-1:-1;;;290:39:51;;;;;;;;;;;;:::i;:::-;;;;;;;;5557:445;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:70;;1162:22;1144:41;;1132:2;1117:18;5557:445:51;1004:187:70;581:55:51;;619:17;581:55;;;;;1342:25:70;;;1330:2;1315:18;581:55:51;1196:177:70;1471:152:51;;1521:102;1471:152;;4465:163;;;:::i;:::-;;8997:793;;;;;;:::i;:::-;;:::i;1926:167::-;;1976:117;1926:167;;485:35;;518:2;485:35;;;;;2065:4:70;2053:17;;;2035:36;;2023:2;2008:18;485:35:51;1893:184:70;2461:20:51;;;;;-1:-1:-1;;;;;2461:20:51;;;;;;-1:-1:-1;;;;;2246:32:70;;;2228:51;;2216:2;2201:18;2461:20:51;2082:203:70;2358:22:51;;;;;;;;-1:-1:-1;;;;;2358:22:51;;;940:44;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;940:44:51;;;9932:102;;;;;;:::i;:::-;;:::i;1353:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2655:10:70;2643:23;;;2625:42;;2613:2;2598:18;1353:48:51;2481:192:70;8060:109:51;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:17:51;8119:7;8145:17;;;:8;:17;;;;;;-1:-1:-1;;;;;8145:17:51;;8060:109;12404:1249;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2840:39:70;;;2822:58;;2810:2;2795:18;12404:1249:51;2678:208:70;2162:41:51;;;;;;:::i;:::-;;;;;;;;;;;;;;387:38;;;;;;;;;;;;;;;-1:-1:-1;;;387:38:51;;;;;4217:242;;;;;;:::i;:::-;;:::i;8425:271::-;;;;;;:::i;:::-;;:::i;2260:28::-;;;;;;;;;11751:231;;;;;;:::i;:::-;;:::i;10457:1100::-;;;;;;:::i;:::-;;:::i;6480:1384::-;;;;;;:::i;:::-;;:::i;4924:165::-;;;;;;:::i;:::-;-1:-1:-1;;;;;5054:19:51;;;5024:7;5054:19;;;;;;;;;;;:28;;;;;;;;;;;;-1:-1:-1;;;;;5054:28:51;;4924:165;1714:125;;1768:71;1714:125;;1219:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1219:68:51;;-1:-1:-1;;;;;1219:68:51;;;;;;;5019:10:70;5007:23;;;4989:42;;-1:-1:-1;;;;;5067:39:70;;;5062:2;5047:18;;5040:67;4962:18;1219:68:51;4819:294:70;3908:303:51;;;;;;:::i;:::-;;:::i;5557:445::-;5644:4;5664:13;-1:-1:-1;;5691:9:51;:30;5687:184;;-1:-1:-1;;;;;;5687:184:51;;;5802:58;5809:9;5802:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;5793:67;;5687:184;5892:10;5881;:22;;;;;;;;;;;-1:-1:-1;;;;;5881:31:51;;;;;;;;;;;;:40;;-1:-1:-1;;;;;;5881:40:51;-1:-1:-1;;;;;5881:40:51;;;;;;;;5937:37;;2822:58:70;;;5881:31:51;;5892:10;5937:37;;2795:18:70;5937:37:51;;;;;;;5991:4;5984:11;;;5557:445;;;;;:::o;4465:163::-;3434:7;;;;;-1:-1:-1;;;;;3434:7:51;3420:10;:21;3412:65;;;;-1:-1:-1;;;3412:65:51;;;;;;;:::i;:::-;;;;;;;;;4554:16:::1;:23:::0;;-1:-1:-1;;4554:23:51::1;4573:4;4554:23;::::0;;4604:17:::1;::::0;::::1;::::0;4554:16:::1;::::0;4604:17:::1;4465:163::o:0;8997:793::-;-1:-1:-1;;;;;9192:15:51;;9112:4;9192:15;;;;;;;;;;;9146:10;9192:24;;;;;;;;;;9242:92;;;;;;;;;;;;9146:10;;-1:-1:-1;;;;;9192:24:51;;;;9112:4;;9242:92;;9262:9;;9242:92;;;;;;;:6;:92::i;:::-;9226:108;;9360:3;-1:-1:-1;;;;;9349:14:51;:7;-1:-1:-1;;;;;9349:14:51;;;:54;;;;-1:-1:-1;;;;;;9367:36:51;;;;;9349:54;9345:374;;;9419:19;9441:158;9464:16;9498:6;9441:158;;;;;;;;;;;;;;;;;:5;:158::i;:::-;-1:-1:-1;;;;;9613:15:51;;;:10;:15;;;;;;;;;;;:24;;;;;;;;;;;;;:39;;-1:-1:-1;;;;;;9613:39:51;-1:-1:-1;;;;;9613:39:51;;;;;;;;9672:36;;2822:58:70;;;9613:39:51;;-1:-1:-1;9613:24:51;;:15;;9672:36;;2795:18:70;9672:36:51;;;;;;;9405:314;9345:374;9729:33;9745:3;9750;9755:6;9729:15;:33::i;:::-;-1:-1:-1;9779:4:51;;8997:793;-1:-1:-1;;;;;;8997:793:51:o;9932:102::-;9995:32;10005:10;10017:9;9995;:32::i;:::-;9932:102;:::o;12404:1249::-;12512:6;12569:12;12555:11;:26;12534:112;;;;-1:-1:-1;;;12534:112:51;;5894:2:70;12534:112:51;;;5876:21:70;5933:2;5913:18;;;5906:30;5972:34;5952:18;;;5945:62;-1:-1:-1;;;6023:18:70;;;6016:37;6070:19;;12534:112:51;5692:403:70;12534:112:51;-1:-1:-1;;;;;12679:23:51;;12657:19;12679:23;;;:14;:23;;;;;;;;;12716:17;;;12712:56;;12756:1;12749:8;;;;;12712:56;-1:-1:-1;;;;;12825:20:51;;;;;;:11;:20;;;;;12877:11;;12846:16;12861:1;12846:12;:16;:::i;:::-;12825:38;;;;;;;;;;;;;;;-1:-1:-1;12825:38:51;:48;;:63;12821:145;;-1:-1:-1;;;;;12911:20:51;;;;;;:11;:20;;;;;;12932:16;12947:1;12932:12;:16;:::i;:::-;12911:38;;;;;;;;;;;;;-1:-1:-1;12911:38:51;:44;-1:-1:-1;;;12911:44:51;;-1:-1:-1;;;;;12911:44:51;;-1:-1:-1;12904:51:51;;-1:-1:-1;12904:51:51;12821:145;-1:-1:-1;;;;;13024:20:51;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;13020:86:51;;;13094:1;13087:8;;;;;13020:86;13116:12;;13153:16;13168:1;13153:12;:16;:::i;:::-;13138:31;;13179:418;13194:5;13186:13;;:5;:13;;;13179:418;;;13215:13;13257:1;13240:13;13248:5;13240;:13;:::i;:::-;13239:19;;;;:::i;:::-;13231:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;13322:20:51;;13299;13322;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;13299:51;;;;;;;;;;;;;;;-1:-1:-1;;;13299:51:51;;;-1:-1:-1;;;;;13299:51:51;;;;;;;;13322:28;;-1:-1:-1;13368:27:51;;;13364:223;;13422:8;;;;-1:-1:-1;13415:15:51;;-1:-1:-1;;;;13415:15:51;13364:223;13455:12;;:26;;;-1:-1:-1;13451:136:51;;;13509:6;13501:14;;13451:136;;;13562:10;13571:1;13562:6;:10;:::i;:::-;13554:18;;13451:136;13201:396;;13179:418;;;-1:-1:-1;;;;;;13613:20:51;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;13613:33:51;;;;;-1:-1:-1;;12404:1249:51;;;;:::o;4217:242::-;3434:7;;;;;-1:-1:-1;;;;;3434:7:51;3420:10;:21;3412:65;;;;-1:-1:-1;;;3412:65:51;;;;;;;:::i;:::-;-1:-1:-1;;;;;4322:20:51;::::1;4314:60;;;::::0;-1:-1:-1;;;4314:60:51;;6907:2:70;4314:60:51::1;::::0;::::1;6889:21:70::0;6946:2;6926:18;;;6919:30;6985:29;6965:18;;;6958:57;7032:18;;4314:60:51::1;6705:351:70::0;4314:60:51::1;4384:5;:14:::0;;-1:-1:-1;;;;;;4384:14:51::1;-1:-1:-1::0;;;;;4384:14:51;::::1;::::0;;::::1;::::0;;;4425:15:::1;::::0;::::1;::::0;-1:-1:-1;;4425:15:51::1;4217:242:::0;:::o;8425:271::-;8493:4;8509:13;8525:93;8545:9;8525:93;;;;;;;;;;;;;;;;;:6;:93::i;:::-;8509:109;;8628:40;8644:10;8656:3;8661:6;8628:15;:40::i;:::-;-1:-1:-1;8685:4:51;;8425:271;-1:-1:-1;;;8425:271:51:o;11751:231::-;-1:-1:-1;;;;;11856:23:51;;11816:6;11856:23;;;:14;:23;;;;;;;;11908:16;:67;;11974:1;11908:67;;;-1:-1:-1;;;;;11927:20:51;;;;;;:11;:20;;;;;;11948:16;11963:1;11948:12;:16;:::i;:::-;11927:38;;;;;;;;;;;;;-1:-1:-1;11927:38:51;:44;-1:-1:-1;;;11927:44:51;;-1:-1:-1;;;;;11927:44:51;11908:67;11889:86;11751:231;-1:-1:-1;;;11751:231:51:o;10457:1100::-;10760:4;;;;;;;;;;;-1:-1:-1;;;10760:4:51;;;;;10683:158;;1521:102;10683:158;;;7292:25:70;10744:22:51;7333:18:70;;;7326:34;17901:9:51;7376:18:70;;;7369:34;10822:4:51;7419:18:70;;;;7412:60;;;;10683:158:51;;;;;;;;;;7264:19:70;;;10683:158:51;;10660:191;;;;;;1768:71;10905:57;;;7714:25:70;-1:-1:-1;;;;;7775:32:70;;7755:18;;;7748:60;7824:18;;;7817:34;;;7867:18;;;;7860:34;;;10905:57:51;;;;;;;;;;7686:19:70;;;10905:57:51;;;10882:90;;;;;;;;;;-1:-1:-1;;;11022:57:51;;;8163:27:70;8206:11;;;8199:27;;;8242:12;;;8235:28;;;10660:191:51;;-1:-1:-1;;8279:12:70;;11022:57:51;;;-1:-1:-1;;11022:57:51;;;;;;;;;10999:90;;11022:57;10999:90;;;;11099:17;11119:26;;;;;;;;;8529:25:70;;;8602:4;8590:17;;8570:18;;;8563:45;;;;8624:18;;;8617:34;;;8667:18;;;8660:34;;;10999:90:51;;-1:-1:-1;11099:17:51;11119:26;;8501:19:70;;11119:26:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11119:26:51;;-1:-1:-1;;11119:26:51;;;-1:-1:-1;;;;;;;11176:23:51;;11155:108;;;;-1:-1:-1;;;11155:108:51;;8907:2:70;11155:108:51;;;8889:21:70;8946:2;8926:18;;;8919:30;8985:34;8965:18;;;8958:62;-1:-1:-1;;;9036:18:70;;;9029:36;9082:19;;11155:108:51;8705:402:70;11155:108:51;-1:-1:-1;;;;;11303:17:51;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;11294:5;:28;11273:109;;;;-1:-1:-1;;;11273:109:51;;9454:2:70;11273:109:51;;;9436:21:70;9493:2;9473:18;;;9466:30;9532:34;9512:18;;;9505:62;-1:-1:-1;;;9583:18:70;;;9576:32;9625:19;;11273:109:51;9252:398:70;11273:109:51;11432:6;11413:15;:25;;11392:110;;;;-1:-1:-1;;;11392:110:51;;9857:2:70;11392:110:51;;;9839:21:70;9896:2;9876:18;;;9869:30;9935:34;9915:18;;;9908:62;-1:-1:-1;;;9986:18:70;;;9979:36;10032:19;;11392:110:51;9655:402:70;11392:110:51;11519:31;11529:9;11540;11519;:31::i;:::-;11512:38;;;;10457:1100;;;;;;;:::o;6480:1384::-;6677:13;-1:-1:-1;;6704:9:51;:30;6700:183;;-1:-1:-1;;;;;;6700:183:51;;;6815:57;6822:9;6815:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;6806:66;;6700:183;7019:4;;;;;;;;;;;-1:-1:-1;;;7019:4:51;;;;;6942:158;;1521:102;6942:158;;;7292:25:70;7003:22:51;7333:18:70;;;7326:34;17901:9:51;7376:18:70;;;7369:34;7081:4:51;7419:18:70;;;;7412:60;;;;6942:158:51;;;;;;;;;;7264:19:70;;;;6942:158:51;;6919:191;;;;;;-1:-1:-1;;;;;7300:13:51;;-1:-1:-1;7300:13:51;;;:6;:13;;;;;;:15;;1976:117;;7300:13;;7248:7;;7273:9;;7300:15;-1:-1:-1;7300:15:51;;;:::i;:::-;;;;-1:-1:-1;7164:191:51;;;;;;10349:25:70;;;;-1:-1:-1;;;;;10448:15:70;;;10428:18;;;10421:43;10500:15;;;;10480:18;;;10473:43;10532:18;;;10525:34;10575:19;;;10568:35;10619:19;;;10612:35;;;10321:19;;7164:191:51;;;;;;;;;;;;7141:224;;;;;;7120:245;;7375:14;7444:15;7461:10;7415:57;;;;;;;;-1:-1:-1;;;8163:27:70;;8215:1;8206:11;;8199:27;;;;8251:2;8242:12;;8235:28;8288:2;8279:12;;7905:392;7415:57:51;;;;-1:-1:-1;;7415:57:51;;;;;;;;;7392:90;;7415:57;7392:90;;;;7492:17;7512:26;;;;;;;;;8529:25:70;;;8602:4;8590:17;;8570:18;;;8563:45;;;;8624:18;;;8617:34;;;8667:18;;;8660:34;;;7392:90:51;;-1:-1:-1;7492:17:51;7512:26;;8501:19:70;;7512:26:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7512:26:51;;-1:-1:-1;;7512:26:51;;;-1:-1:-1;;;;;;;7556:23:51;;7548:67;;;;-1:-1:-1;;;7548:67:51;;10860:2:70;7548:67:51;;;10842:21:70;10899:2;10879:18;;;10872:30;10938:33;10918:18;;;10911:61;10989:18;;7548:67:51;10658:355:70;7548:67:51;7646:5;-1:-1:-1;;;;;7633:18:51;:9;-1:-1:-1;;;;;7633:18:51;;7625:57;;;;-1:-1:-1;;;7625:57:51;;11220:2:70;7625:57:51;;;11202:21:70;11259:2;11239:18;;;11232:30;11298:28;11278:18;;;11271:56;11344:18;;7625:57:51;11018:350:70;7625:57:51;7719:8;7700:15;:27;;7692:71;;;;-1:-1:-1;;;7692:71:51;;11575:2:70;7692:71:51;;;11557:21:70;11614:2;11594:18;;;11587:30;11653:33;11633:18;;;11626:61;11704:18;;7692:71:51;11373:355:70;7692:71:51;7803:6;7774:10;:17;7785:5;-1:-1:-1;;;;;7774:17:51;-1:-1:-1;;;;;7774:17:51;;;;;;;;;;;;:26;7792:7;-1:-1:-1;;;;;7774:26:51;-1:-1:-1;;;;;7774:26:51;;;;;;;;;;;;;:35;;;;;-1:-1:-1;;;;;7774:35:51;;;;;-1:-1:-1;;;;;7774:35:51;;;;;;7841:7;-1:-1:-1;;;;;7825:32:51;7834:5;-1:-1:-1;;;;;7825:32:51;;7850:6;7825:32;;;;;-1:-1:-1;;;;;2840:39:70;;;;2822:58;;2810:2;2795:18;;2678:208;7825:32:51;;;;;;;;6667:1197;;;;;6480:1384;;;;;;;:::o;3908:303::-;3434:7;;;;;-1:-1:-1;;;;;3434:7:51;3420:10;:21;3412:65;;;;-1:-1:-1;;;3412:65:51;;;;;;;:::i;:::-;-1:-1:-1;;;;;4026:24:51;::::1;4018:64;;;::::0;-1:-1:-1;;;4018:64:51;;6907:2:70;4018:64:51::1;::::0;::::1;6889:21:70::0;6946:2;6926:18;;;6919:30;6985:29;6965:18;;;6958:57;7032:18;;4018:64:51::1;6705:351:70::0;4018:64:51::1;4130:7;::::0;4109:41:::1;::::0;-1:-1:-1;;;;;4109:41:51;;::::1;::::0;4130:7:::1;::::0;::::1;;::::0;4109:41:::1;::::0;;;::::1;4172:7;:20:::0;;-1:-1:-1;;;;;4172:20:51;;::::1;;;-1:-1:-1::0;;;;;;4172:20:51;;::::1;::::0;;;::::1;::::0;;3908:303::o;17165:189::-;17267:6;17308:12;-1:-1:-1;;;17297:9:51;;17289:32;;;;-1:-1:-1;;;17289:32:51;;;;;;;;:::i;:::-;-1:-1:-1;17345:1:51;;17165:189;-1:-1:-1;;17165:189:51:o;17580:192::-;17696:6;17727:1;-1:-1:-1;;;;;17722:6:51;:1;-1:-1:-1;;;;;17722:6:51;;;17730:12;17714:29;;;;;-1:-1:-1;;;17714:29:51;;;;;;;;:::i;:::-;-1:-1:-1;17760:5:51;17764:1;17760;:5;:::i;:::-;17753:12;17580:192;-1:-1:-1;;;;17580:192:51:o;14032:945::-;14168:16;;;;;:41;;-1:-1:-1;14202:7:51;;;;;-1:-1:-1;;;;;14202:7:51;14188:10;:21;14168:41;:64;;;-1:-1:-1;14227:5:51;;-1:-1:-1;;;;;14227:5:51;14213:10;:19;14168:64;14147:140;;;;-1:-1:-1;;;14147:140:51;;12131:2:70;14147:140:51;;;12113:21:70;12170:2;12150:18;;;12143:30;12209:31;12189:18;;;12182:59;12258:18;;14147:140:51;11929:353:70;14147:140:51;-1:-1:-1;;;;;14318:17:51;;14297:124;;;;-1:-1:-1;;;14297:124:51;;12489:2:70;14297:124:51;;;12471:21:70;12528:2;12508:18;;;12501:30;12567:34;12547:18;;;12540:62;12638:30;12618:18;;;12611:58;12686:19;;14297:124:51;12287:424:70;14297:124:51;-1:-1:-1;;;;;14452:17:51;;14431:122;;;;-1:-1:-1;;;14431:122:51;;12918:2:70;14431:122:51;;;12900:21:70;12957:2;12937:18;;;12930:30;12996:34;12976:18;;;12969:62;13067:28;13047:18;;;13040:56;13113:19;;14431:122:51;12716:422:70;14431:122:51;-1:-1:-1;;;;;14599:13:51;;;;;;:8;:13;;;;;;;;;;14580:132;;;;;;;;;;;;;;-1:-1:-1;;;;;14599:13:51;;;;14626:6;;14580:132;;;;;;;:5;:132::i;:::-;-1:-1:-1;;;;;14564:13:51;;;;;;;:8;:13;;;;;;;;:148;;-1:-1:-1;;;;;;14564:148:51;-1:-1:-1;;;;;14564:148:51;;;;;;14757:13;;;;;;;;;;14738:126;;;;;;;;;;;;;;14757:13;;;;;14784:6;;14738:126;;;;;;;;:5;:126::i;:::-;-1:-1:-1;;;;;14722:13:51;;;;;;;:8;:13;;;;;;;;;:142;;-1:-1:-1;;;;;;14722:142:51;-1:-1:-1;;;;;14722:142:51;;;;;;14879:26;;2840:39:70;;;2822:58;;14722:13:51;;14879:26;;;;;;2795:18:70;14879:26:51;;;;;;;-1:-1:-1;;;;;14931:14:51;;;;;;;:9;:14;;;;;;;14947;;;;;;;;14916:54;;14931:14;;;;14947;14963:6;14916:14;:54::i;:::-;14032:945;;;:::o;13659:367::-;-1:-1:-1;;;;;13761:20:51;;;13735:23;13761:20;;;:9;:20;;;;;;;;;;;13817:19;;;;;;13846:20;;;;:32;;;-1:-1:-1;;;;;;13846:32:51;;;;;;;13894:54;;13761:20;;;;;-1:-1:-1;;;;;13817:19:51;;;;13846:32;;13761:20;;;13894:54;;13735:23;13894:54;13959:60;13974:15;13991:9;14002:16;13959:14;:60::i;:::-;13725:301;;13659:367;;:::o;17360:214::-;17476:6;;17505:5;17509:1;17505;:5;:::i;:::-;17494:16;;17533:1;-1:-1:-1;;;;;17528:6:51;:1;-1:-1:-1;;;;;17528:6:51;;;17536:12;17520:29;;;;;-1:-1:-1;;;17520:29:51;;;;;;;;:::i;:::-;-1:-1:-1;17566:1:51;17360:214;-1:-1:-1;;;;17360:214:51:o;14983:1189::-;15117:6;-1:-1:-1;;;;;15107:16:51;:6;-1:-1:-1;;;;;15107:16:51;;;:30;;;;;15136:1;15127:6;-1:-1:-1;;;;;15127:10:51;;15107:30;15103:1063;;;-1:-1:-1;;;;;15157:20:51;;;15153:495;;-1:-1:-1;;;;;15216:22:51;;15197:16;15216:22;;;:14;:22;;;;;;;;;15275:13;:100;;15374:1;15275:100;;;-1:-1:-1;;;;;15311:19:51;;;;;;:11;:19;;;;;;15331:13;15343:1;15331:9;:13;:::i;:::-;15311:34;;;;;;;;;;;;;-1:-1:-1;15311:34:51;:40;-1:-1:-1;;;15311:40:51;;-1:-1:-1;;;;;15311:40:51;15275:100;15256:119;;15393:16;15412:146;15439:9;15470:6;15412:146;;;;;;;;;;;;;;;;;:5;:146::i;:::-;15393:165;;15576:57;15593:6;15601:9;15612;15623;15576:16;:57::i;:::-;15179:469;;;15153:495;-1:-1:-1;;;;;15666:20:51;;;15662:494;;-1:-1:-1;;;;;15725:22:51;;15706:16;15725:22;;;:14;:22;;;;;;;;;15784:13;:100;;15883:1;15784:100;;;-1:-1:-1;;;;;15820:19:51;;;;;;:11;:19;;;;;;15840:13;15852:1;15840:9;:13;:::i;:::-;15820:34;;;;;;;;;;;;;-1:-1:-1;15820:34:51;:40;-1:-1:-1;;;15820:40:51;;-1:-1:-1;;;;;15820:40:51;15784:100;15765:119;;15902:16;15921:145;15948:9;15979:6;15921:145;;;;;;;;;;;;;;;;;:5;:145::i;:::-;15902:164;;16084:57;16101:6;16109:9;16120;16131;16178:786;16335:18;16356:110;16376:12;16356:110;;;;;;;;;;;;;;;;;:6;:110::i;:::-;16335:131;;16509:1;16494:12;:16;;;:97;;;;-1:-1:-1;;;;;;16526:22:51;;;;;;:11;:22;;;;;:65;;;;16549:16;16564:1;16549:12;:16;:::i;:::-;16526:40;;;;;;;;;;;;;;;-1:-1:-1;16526:40:51;:50;;:65;16494:97;16477:414;;;-1:-1:-1;;;;;16616:22:51;;;;;;:11;:22;;;;;16665:8;;16639:16;16654:1;16639:12;:16;:::i;:::-;16616:40;;;;;;;;;;;;;-1:-1:-1;16616:40:51;:57;;-1:-1:-1;;;;;16616:57:51;;;;-1:-1:-1;;;16616:57:51;-1:-1:-1;;16616:57:51;;;;;;;;;16477:414;;;16743:79;;;;;;;;;;;;;;-1:-1:-1;;;;;16743:79:51;;;;;;;;;;-1:-1:-1;;;;;16704:22:51;;-1:-1:-1;16704:22:51;;;:11;:22;;;;;:36;;;;;;;;;;;;:118;;;;;;;;;-1:-1:-1;;;16704:118:51;-1:-1:-1;;16704:118:51;;;;;;;;;;;;16864:16;16727:12;16704:118;16864:16;:::i;:::-;-1:-1:-1;;;;;16836:25:51;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;16836:44:51;;;;;;;;;;;;16477:414;16906:51;;;-1:-1:-1;;;;;13748:15:70;;;13730:34;;13800:15;;13795:2;13780:18;;13773:43;-1:-1:-1;;;;;16906:51:51;;;;;13658:18:70;16906:51:51;;;;;;;16325:639;16178:786;;;;:::o;16970:189::-;17072:6;17113:12;-1:-1:-1;;;17102:9:51;;17094:32;;;;-1:-1:-1;;;17094:32:51;;;;;;;14:548:70;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:70;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:70:o;1560:328::-;1637:6;1645;1653;1706:2;1694:9;1685:7;1681:23;1677:32;1674:52;;;1722:1;1719;1712:12;1674:52;1745:29;1764:9;1745:29;:::i;:::-;1735:39;;1793:38;1827:2;1816:9;1812:18;1793:38;:::i;:::-;1783:48;;1878:2;1867:9;1863:18;1850:32;1840:42;;1560:328;;;;;:::o;2290:186::-;2349:6;2402:2;2390:9;2381:7;2377:23;2373:32;2370:52;;;2418:1;2415;2408:12;2370:52;2441:29;2460:9;2441:29;:::i;2891:156::-;2957:20;;3017:4;3006:16;;2996:27;;2986:55;;3037:1;3034;3027:12;3052:531;3154:6;3162;3170;3178;3186;3194;3247:3;3235:9;3226:7;3222:23;3218:33;3215:53;;;3264:1;3261;3254:12;3215:53;3287:29;3306:9;3287:29;:::i;:::-;3277:39;;3363:2;3352:9;3348:18;3335:32;3325:42;;3414:2;3403:9;3399:18;3386:32;3376:42;;3437:36;3469:2;3458:9;3454:18;3437:36;:::i;:::-;3427:46;;3520:3;3509:9;3505:19;3492:33;3482:43;;3572:3;3561:9;3557:19;3544:33;3534:43;;3052:531;;;;;;;;:::o;3588:606::-;3699:6;3707;3715;3723;3731;3739;3747;3800:3;3788:9;3779:7;3775:23;3771:33;3768:53;;;3817:1;3814;3807:12;3768:53;3840:29;3859:9;3840:29;:::i;:::-;3830:39;;3888:38;3922:2;3911:9;3907:18;3888:38;:::i;:::-;3878:48;;3973:2;3962:9;3958:18;3945:32;3935:42;;4024:2;4013:9;4009:18;3996:32;3986:42;;4047:37;4079:3;4068:9;4064:19;4047:37;:::i;:::-;4037:47;;4131:3;4120:9;4116:19;4103:33;4093:43;;4183:3;4172:9;4168:19;4155:33;4145:43;;3588:606;;;;;;;;;;:::o;4199:260::-;4267:6;4275;4328:2;4316:9;4307:7;4303:23;4299:32;4296:52;;;4344:1;4341;4334:12;4296:52;4367:29;4386:9;4367:29;:::i;:::-;4357:39;;4415:38;4449:2;4438:9;4434:18;4415:38;:::i;:::-;4405:48;;4199:260;;;;;:::o;4464:350::-;4531:6;4539;4592:2;4580:9;4571:7;4567:23;4563:32;4560:52;;;4608:1;4605;4598:12;4560:52;4631:29;4650:9;4631:29;:::i;:::-;4621:39;;4710:2;4699:9;4695:18;4682:32;4754:10;4747:5;4743:22;4736:5;4733:33;4723:61;;4780:1;4777;4770:12;4723:61;4803:5;4793:15;;;4464:350;;;;;:::o;5332:355::-;5534:2;5516:21;;;5573:2;5553:18;;;5546:30;5612:33;5607:2;5592:18;;5585:61;5678:2;5663:18;;5332:355::o;6100:127::-;6161:10;6156:3;6152:20;6149:1;6142:31;6192:4;6189:1;6182:15;6216:4;6213:1;6206:15;6232:175;6300:10;6343;;;6331;;;6327:27;;6366:12;;;6363:38;;;6381:18;;:::i;:::-;6363:38;6232:175;;;;:::o;6412:288::-;6451:1;6477:10;6514:2;6511:1;6507:10;6536:3;6526:134;;6582:10;6577:3;6573:20;6570:1;6563:31;6617:4;6614:1;6607:15;6645:4;6642:1;6635:15;6526:134;6678:10;;6674:20;;;;;6412:288;-1:-1:-1;;6412:288:70:o;9112:135::-;9151:3;9172:17;;;9169:43;;9192:18;;:::i;:::-;-1:-1:-1;9239:1:70;9228:13;;9112:135::o;11733:191::-;-1:-1:-1;;;;;11860:10:70;;;11848;;;11844:27;;11883:12;;;11880:38;;;11898:18;;:::i;13143:188::-;-1:-1:-1;;;;;13256:10:70;;;13268;;;13252:27;;13291:11;;;13288:37;;;13305:18;;:::i;13336:172::-;13403:10;13433;;;13445;;;13429:27;;13468:11;;;13465:37;;;13482:18;;:::i" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1671600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "DELEGATION_TYPEHASH()": "261", - "DOMAIN_TYPEHASH()": "285", - "PERMIT_TYPEHASH()": "241", - "allowTransfers()": "27399", - "allowance(address,address)": "infinite", - "approve(address,uint256)": "infinite", - "balanceOf(address)": "2601", - "checkpoints(address,uint32)": "2834", - "decimals()": "272", - "delegate(address)": "infinite", - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": "infinite", - "delegates(address)": "2625", - "getCurrentVotes(address)": "infinite", - "getPriorVotes(address,uint256)": "infinite", - "manager()": "2393", - "miner()": "2427", - "name()": "infinite", - "nonces(address)": "2609", - "numCheckpoints(address)": "2645", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "infinite", - "setMiner(address)": "27963", - "symbol()": "infinite", - "totalSupply()": "263", - "transfer(address,uint256)": "infinite", - "transferFrom(address,address,uint256)": "infinite", - "transferOwnership(address)": "30543", - "transfersAllowed()": "2421" - }, - "internal": { - "_delegate(address,address)": "infinite", - "_moveDelegates(address,address,uint96)": "infinite", - "_transferTokens(address,address,uint96)": "infinite", - "_writeCheckpoint(address,uint32,uint96,uint96)": "infinite", - "add96(uint96,uint96,string memory)": "infinite", - "getChainId()": "infinite", - "safe32(uint256,string memory)": "infinite", - "safe96(uint256,string memory)": "infinite", - "sub96(uint96,uint96,string memory)": "infinite" - } - }, - "methodIdentifiers": { - "DELEGATION_TYPEHASH()": "e7a324dc", - "DOMAIN_TYPEHASH()": "20606b70", - "PERMIT_TYPEHASH()": "30adf81f", - "allowTransfers()": "2185810b", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "checkpoints(address,uint32)": "f1127ed8", - "decimals()": "313ce567", - "delegate(address)": "5c19a95c", - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": "c3cda520", - "delegates(address)": "587cde1e", - "getCurrentVotes(address)": "b4b5ea57", - "getPriorVotes(address,uint256)": "782d6fe1", - "manager()": "481c6a75", - "miner()": "349dc329", - "name()": "06fdde03", - "nonces(address)": "7ecebe00", - "numCheckpoints(address)": "6fcfff45", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", - "setMiner(address)": "9742ca46", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b", - "transfersAllowed()": "b0660c3d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"miner\",\"type\":\"address\"}],\"name\":\"MinerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"TransferAllowed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowTransfers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rawAmount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"fromBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"votes\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getCurrentVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPriorVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"miner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rawAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_miner\",\"type\":\"address\"}],\"name\":\"setMiner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rawAmount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"rawAmount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transfersAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance Gearbox token based on https://github.com/Uniswap/governance/blob/master/contracts/Uni.sol\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"account\":\"The address of the account holding the funds\",\"spender\":\"The address of the account spending the funds\"},\"returns\":{\"_0\":\"The number of tokens approved\"}},\"approve(address,uint256)\":{\"details\":\"This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\",\"params\":{\"rawAmount\":\"The number of tokens that are approved (2^256-1 means infinite)\",\"spender\":\"The address of the account which may transfer tokens\"},\"returns\":{\"_0\":\"Whether or not the approval succeeded\"}},\"balanceOf(address)\":{\"params\":{\"account\":\"The address of the account to get the balance of\"},\"returns\":{\"_0\":\"The number of tokens held\"}},\"constructor\":{\"params\":{\"account\":\"The initial account to grant all the tokens\"}},\"delegate(address)\":{\"params\":{\"delegatee\":\"The address to delegate votes to\"}},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"delegatee\":\"The address to delegate votes to\",\"expiry\":\"The time at which to expire the signature\",\"nonce\":\"The contract state required to match the signature\",\"r\":\"Half of the ECDSA signature pair\",\"s\":\"Half of the ECDSA signature pair\",\"v\":\"The recovery byte of the signature\"}},\"getCurrentVotes(address)\":{\"params\":{\"account\":\"The address to get votes balance\"},\"returns\":{\"_0\":\"The number of current votes for `account`\"}},\"getPriorVotes(address,uint256)\":{\"details\":\"Block number must be a finalized block or else this function will revert to prevent misinformation.\",\"params\":{\"account\":\"The address of the account to check\",\"blockNumber\":\"The block number to get the vote balance at\"},\"returns\":{\"_0\":\"The number of votes the account had as of the given block\"}},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The time at which to expire the signature\",\"owner\":\"The address to approve from\",\"r\":\"Half of the ECDSA signature pair\",\"rawAmount\":\"The number of tokens that are approved (2^256-1 means infinite)\",\"s\":\"Half of the ECDSA signature pair\",\"spender\":\"The address to be approved\",\"v\":\"The recovery byte of the signature\"}},\"transfer(address,uint256)\":{\"params\":{\"dst\":\"The address of the destination account\",\"rawAmount\":\"The number of tokens to transfer\"},\"returns\":{\"_0\":\"Whether or not the transfer succeeded\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"dst\":\"The address of the destination account\",\"rawAmount\":\"The number of tokens to transfer\",\"src\":\"The address of the source account\"},\"returns\":{\"_0\":\"Whether or not the transfer succeeded\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"notice\":\"The standard EIP-20 approval event\"},\"DelegateChanged(address,address,address)\":{\"notice\":\"An event thats emitted when an account changes its delegate\"},\"DelegateVotesChanged(address,uint256,uint256)\":{\"notice\":\"An event thats emitted when a delegate account's vote balance changes\"},\"Transfer(address,address,uint256)\":{\"notice\":\"The standard EIP-20 transfer event\"}},\"kind\":\"user\",\"methods\":{\"DELEGATION_TYPEHASH()\":{\"notice\":\"The EIP-712 typehash for the delegation struct used by the contract\"},\"DOMAIN_TYPEHASH()\":{\"notice\":\"The EIP-712 typehash for the contract's domain\"},\"PERMIT_TYPEHASH()\":{\"notice\":\"The EIP-712 typehash for the permit struct used by the contract\"},\"allowance(address,address)\":{\"notice\":\"Get the number of tokens `spender` is approved to spend on behalf of `account`\"},\"approve(address,uint256)\":{\"notice\":\"Approve `spender` to transfer up to `amount` from `src`\"},\"balanceOf(address)\":{\"notice\":\"Get the number of tokens held by the `account`\"},\"checkpoints(address,uint32)\":{\"notice\":\"A record of votes checkpoints for each account, by index\"},\"constructor\":{\"notice\":\"Construct a new Gear token\"},\"decimals()\":{\"notice\":\"EIP-20 token decimals for this token\"},\"delegate(address)\":{\"notice\":\"Delegate votes from `msg.sender` to `delegatee`\"},\"delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates votes from signatory to `delegatee`\"},\"delegates(address)\":{\"notice\":\"A record of each accounts delegate\"},\"getCurrentVotes(address)\":{\"notice\":\"Gets the current votes balance for `account`\"},\"getPriorVotes(address,uint256)\":{\"notice\":\"Determine the prior number of votes for an account as of a block number\"},\"manager()\":{\"notice\":\"Contract owner which can allow token transfers\"},\"miner()\":{\"notice\":\"Miner address which can send tokens during account mining\"},\"name()\":{\"notice\":\"EIP-20 token name for this token\"},\"numCheckpoints(address)\":{\"notice\":\"The number of checkpoints for each account\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Triggers an approval from owner to spends\"},\"symbol()\":{\"notice\":\"EIP-20 token symbol for this token\"},\"totalSupply()\":{\"notice\":\"Total number of tokens in circulation\"},\"transfer(address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `msg.sender` to `dst`\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfer `amount` tokens from `src` to `dst`\"},\"transfersAllowed()\":{\"notice\":\"Flag which allows token transfers\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol\":\"GearToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol\":{\"keccak256\":\"0x99030b3930a07eccf12d3d4880db02563f84b60dad10003ed829467fc701dd8c\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://1be7a72c75732fa48bd8351f7a82475602b45492caf4a1dc8646c9115914e0c2\",\"dweb:/ipfs/QmSKMk53jJrtgWSG5U5nuZP9eRhrMLCStwpxT7gmZPX2pP\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 15293, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "allowances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint96))" - }, - { - "astId": 15297, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "balances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_uint96)" - }, - { - "astId": 15302, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "delegates", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 15315, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "checkpoints", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(Checkpoint)15307_storage))" - }, - { - "astId": 15320, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "numCheckpoints", - "offset": 0, - "slot": "4", - "type": "t_mapping(t_address,t_uint32)" - }, - { - "astId": 15342, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "nonces", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 15345, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "transfersAllowed", - "offset": 0, - "slot": "6", - "type": "t_bool" - }, - { - "astId": 15348, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "manager", - "offset": 1, - "slot": "6", - "type": "t_address" - }, - { - "astId": 15351, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "miner", - "offset": 0, - "slot": "7", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint96))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint96))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint96)" - }, - "t_mapping(t_address,t_mapping(t_uint32,t_struct(Checkpoint)15307_storage))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint32,t_struct(Checkpoint)15307_storage)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_address,t_uint32)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint32)", - "numberOfBytes": "32", - "value": "t_uint32" - }, - "t_mapping(t_address,t_uint96)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint96)", - "numberOfBytes": "32", - "value": "t_uint96" - }, - "t_mapping(t_uint32,t_struct(Checkpoint)15307_storage)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => struct GearToken.Checkpoint)", - "numberOfBytes": "32", - "value": "t_struct(Checkpoint)15307_storage" - }, - "t_struct(Checkpoint)15307_storage": { - "encoding": "inplace", - "label": "struct GearToken.Checkpoint", - "members": [ - { - "astId": 15304, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "fromBlock", - "offset": 0, - "slot": "0", - "type": "t_uint32" - }, - { - "astId": 15306, - "contract": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol:GearToken", - "label": "votes", - "offset": 4, - "slot": "0", - "type": "t_uint96" - } - ], - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - }, - "t_uint96": { - "encoding": "inplace", - "label": "uint96", - "numberOfBytes": "12" - } - } - }, - "userdoc": { - "events": { - "Approval(address,address,uint256)": { - "notice": "The standard EIP-20 approval event" - }, - "DelegateChanged(address,address,address)": { - "notice": "An event thats emitted when an account changes its delegate" - }, - "DelegateVotesChanged(address,uint256,uint256)": { - "notice": "An event thats emitted when a delegate account's vote balance changes" - }, - "Transfer(address,address,uint256)": { - "notice": "The standard EIP-20 transfer event" - } - }, - "kind": "user", - "methods": { - "DELEGATION_TYPEHASH()": { - "notice": "The EIP-712 typehash for the delegation struct used by the contract" - }, - "DOMAIN_TYPEHASH()": { - "notice": "The EIP-712 typehash for the contract's domain" - }, - "PERMIT_TYPEHASH()": { - "notice": "The EIP-712 typehash for the permit struct used by the contract" - }, - "allowance(address,address)": { - "notice": "Get the number of tokens `spender` is approved to spend on behalf of `account`" - }, - "approve(address,uint256)": { - "notice": "Approve `spender` to transfer up to `amount` from `src`" - }, - "balanceOf(address)": { - "notice": "Get the number of tokens held by the `account`" - }, - "checkpoints(address,uint32)": { - "notice": "A record of votes checkpoints for each account, by index" - }, - "constructor": { - "notice": "Construct a new Gear token" - }, - "decimals()": { - "notice": "EIP-20 token decimals for this token" - }, - "delegate(address)": { - "notice": "Delegate votes from `msg.sender` to `delegatee`" - }, - "delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32)": { - "notice": "Delegates votes from signatory to `delegatee`" - }, - "delegates(address)": { - "notice": "A record of each accounts delegate" - }, - "getCurrentVotes(address)": { - "notice": "Gets the current votes balance for `account`" - }, - "getPriorVotes(address,uint256)": { - "notice": "Determine the prior number of votes for an account as of a block number" - }, - "manager()": { - "notice": "Contract owner which can allow token transfers" - }, - "miner()": { - "notice": "Miner address which can send tokens during account mining" - }, - "name()": { - "notice": "EIP-20 token name for this token" - }, - "numCheckpoints(address)": { - "notice": "The number of checkpoints for each account" - }, - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { - "notice": "Triggers an approval from owner to spends" - }, - "symbol()": { - "notice": "EIP-20 token symbol for this token" - }, - "totalSupply()": { - "notice": "Total number of tokens in circulation" - }, - "transfer(address,uint256)": { - "notice": "Transfer `amount` tokens from `msg.sender` to `dst`" - }, - "transferFrom(address,address,uint256)": { - "notice": "Transfer `amount` tokens from `src` to `dst`" - }, - "transfersAllowed()": { - "notice": "Flag which allows token transfers" - } - }, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "Ownable": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract setting the deployer as the initial owner." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16556, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol:Ownable", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": { - "IERC4626": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [ - { - "internalType": "address", - "name": "assetTokenAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "convertToAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "convertToShares", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "maxAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "maxShares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "maxShares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "maxAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewMint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "totalManagedAssets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. _Available since v4.7._", - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "asset()": { - "details": "Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert." - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "convertToAssets(uint256)": { - "details": "Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." - }, - "convertToShares(uint256)": { - "details": "Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and from." - }, - "decimals()": { - "details": "Returns the decimals places of the token." - }, - "deposit(uint256,address)": { - "details": "Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "maxDeposit(address)": { - "details": "Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert." - }, - "maxMint(address)": { - "details": "Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert." - }, - "maxRedeem(address)": { - "details": "Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert." - }, - "maxWithdraw(address)": { - "details": "Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert." - }, - "mint(uint256,address)": { - "details": "Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "name()": { - "details": "Returns the name of the token." - }, - "previewDeposit(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "previewMint(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting." - }, - "previewRedeem(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming." - }, - "previewWithdraw(uint256)": { - "details": "Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "redeem(uint256,address,address)": { - "details": "Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." - }, - "symbol()": { - "details": "Returns the symbol of the token." - }, - "totalAssets()": { - "details": "Returns the total amount of the underlying asset that is “managed” by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert." - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "withdraw(uint256,address,address)": { - "details": "Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "asset()": "38d52e0f", - "balanceOf(address)": "70a08231", - "convertToAssets(uint256)": "07a2d13a", - "convertToShares(uint256)": "c6e6f592", - "decimals()": "313ce567", - "deposit(uint256,address)": "6e553f65", - "maxDeposit(address)": "402d267d", - "maxMint(address)": "c63d75b6", - "maxRedeem(address)": "d905777e", - "maxWithdraw(address)": "ce96cb77", - "mint(uint256,address)": "94bf804d", - "name()": "06fdde03", - "previewDeposit(uint256)": "ef8b30f7", - "previewMint(uint256)": "b3d7f6b9", - "previewRedeem(uint256)": "4cdad506", - "previewWithdraw(uint256)": "0a28a477", - "redeem(uint256,address,address)": "ba087652", - "symbol()": "95d89b41", - "totalAssets()": "01e1d114", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "withdraw(uint256,address,address)": "b460af94" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]. _Available since v4.7._\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol": { - "Clones": { - "abi": [], - "devdoc": { - "details": "https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \"clones\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205cc659f5dbe0794433c632f9a286081525a5881a86ccf5b69b336adb794da56064736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C 0xC6 MSIZE CREATE2 0xDB 0xE0 PUSH26 0x4433C632F9A286081525A5881A86CCF5B69B336ADB794DA56064 PUSH20 0x6F6C634300081100330000000000000000000000 ", - "sourceMap": "755:3281:54:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;755:3281:54;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205cc659f5dbe0794433c632f9a286081525a5881a86ccf5b69b336adb794da56064736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C 0xC6 MSIZE CREATE2 0xDB 0xE0 PUSH26 0x4433C632F9A286081525A5881A86CCF5B69B336ADB794DA56064 PUSH20 0x6F6C634300081100330000000000000000000000 ", - "sourceMap": "755:3281:54:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "clone(address)": "infinite", - "cloneDeterministic(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \\\"clones\\\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":\"Clones\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4da0f451fe5aefdb95204dbec4a9448a8a2b00a444864bb5dbf7162da842a0f7\",\"dweb:/ipfs/QmYciAwNiJzgGMAqSTUANwMjy5HykNUvmkQ5PQhNTRqrB5\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol": { - "Initializable": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } - ], - "devdoc": { - "custom:oz-upgrades-unsafe-allow": "constructor constructor() { _disableInitializers(); } ``` ====", - "details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\"MyToken\", \"MTK\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\"MyToken\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```", - "events": { - "Initialized(uint8)": { - "details": "Triggered when the contract has been initialized or reinitialized." - } - }, - "kind": "dev", - "methods": {}, - "stateVariables": { - "_initialized": { - "custom:oz-retyped-from": "bool", - "details": "Indicates that the contract has been initialized." - }, - "_initializing": { - "details": "Indicates that the contract is in the process of being initialized." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"custom:oz-retyped-from\":\"bool\",\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 16916, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8" - }, - { - "astId": 16919, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol:Initializable", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_uint8": { - "encoding": "inplace", - "label": "uint8", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol": { - "Pausable": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.", - "events": { - "Paused(address)": { - "details": "Emitted when the pause is triggered by `account`." - }, - "Unpaused(address)": { - "details": "Emitted when the pause is lifted by `account`." - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract in unpaused state." - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "paused()": "5c975abb" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract in unpaused state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17096, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol:Pausable", - "label": "_paused", - "offset": 0, - "slot": "0", - "type": "t_bool" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { - "ReentrancyGuard": { - "abi": [], - "devdoc": { - "details": "Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17197, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol:ReentrancyGuard", - "label": "_status", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "ERC20": { - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol_", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.", - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "constructor": { - "details": "Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_17285": { - "entryPoint": null, - "id": 17285, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_decode_string_fromMemory": { - "entryPoint": 112, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory": { - "entryPoint": 287, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "array_dataslot_string_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_string_storage": { - "entryPoint": 453, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { - "entryPoint": 536, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "extract_byte_array_length": { - "entryPoint": 393, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x41": { - "entryPoint": 90, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4144:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "46:95:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "63:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "70:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "75:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "66:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "66:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "56:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "56:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "56:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "103:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "106:4:70", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "96:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "96:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "96:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "127:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "130:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "120:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "120:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "120:15:70" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "14:127:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "210:776:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "259:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "268:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "271:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "261:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "261:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "261:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "238:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "246:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "234:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "234:17:70" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "253:3:70" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "230:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "230:27:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "223:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "223:35:70" - }, - "nodeType": "YulIf", - "src": "220:55:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "284:23:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "300:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "294:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "294:13:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "288:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "316:28:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "334:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "338:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "330:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "330:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "342:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "326:18:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "320:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "367:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "369:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "369:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "369:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "359:2:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "363:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "356:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "356:10:70" - }, - "nodeType": "YulIf", - "src": "353:36:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "398:17:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "412:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "408:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "408:7:70" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "402:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "424:23:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "444:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "438:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "438:9:70" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "428:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "456:71:70", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "478:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "502:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "506:4:70", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "498:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "498:13:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "513:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "494:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "494:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "518:2:70", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "490:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "490:31:70" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "523:2:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "486:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "486:40:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "474:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "474:53:70" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "460:10:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "586:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "588:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "588:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "588:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "545:10:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "557:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "542:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "542:18:70" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "565:10:70" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "577:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "562:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "562:22:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "539:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "539:46:70" - }, - "nodeType": "YulIf", - "src": "536:72:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "624:2:70", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "628:10:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "617:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "617:22:70" - }, - "nodeType": "YulExpressionStatement", - "src": "617:22:70" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "655:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "663:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "648:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "648:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "648:18:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "675:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "685:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "679:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "735:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "744:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "747:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "737:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "737:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "737:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "712:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "720:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "708:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "708:15:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "725:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "704:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "704:24:70" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "730:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "701:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "701:33:70" - }, - "nodeType": "YulIf", - "src": "698:53:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "760:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "769:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "764:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "825:87:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "854:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "862:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "850:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "850:14:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "866:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "846:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "846:23:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "885:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "893:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "881:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "881:14:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "897:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "877:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "877:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "871:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "871:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "839:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "839:63:70" - }, - "nodeType": "YulExpressionStatement", - "src": "839:63:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "790:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "793:2:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "787:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "787:9:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "797:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "799:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "808:1:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "811:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "804:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "804:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "799:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "783:3:70", - "statements": [] - }, - "src": "779:133:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "936:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "944:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "932:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "932:15:70" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "949:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "928:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "928:24:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "954:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "921:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "921:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "921:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "965:15:70", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "974:6:70" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "965:5:70" - } - ] - } - ] - }, - "name": "abi_decode_string_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "184:6:70", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "192:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "200:5:70", - "type": "" - } - ], - "src": "146:840:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1109:444:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1155:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1164:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1167:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1157:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1157:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1157:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1130:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1139:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1126:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1126:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1151:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1122:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1122:32:70" - }, - "nodeType": "YulIf", - "src": "1119:52:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1180:30:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1200:9:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1194:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1194:16:70" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1184:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1219:28:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1237:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1241:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1233:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1233:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1245:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1229:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1229:18:70" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1223:2:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1274:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1283:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1286:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1276:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1276:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1276:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1262:6:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1270:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1259:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1259:14:70" - }, - "nodeType": "YulIf", - "src": "1256:34:70" - }, - { - "nodeType": "YulAssignment", - "src": "1299:71:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1342:9:70" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1353:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1338:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1338:22:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1362:7:70" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nodeType": "YulIdentifier", - "src": "1309:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "1309:61:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1299:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1379:41:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1405:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1416:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1401:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1401:18:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1395:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "1395:25:70" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "1383:8:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1449:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1458:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1461:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1451:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1451:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1451:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1435:8:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1445:2:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1432:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1432:16:70" - }, - "nodeType": "YulIf", - "src": "1429:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "1474:73:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1517:9:70" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1528:8:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1513:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1513:24:70" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1539:7:70" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nodeType": "YulIdentifier", - "src": "1484:28:70" - }, - "nodeType": "YulFunctionCall", - "src": "1484:63:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1474:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1067:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1078:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1090:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1098:6:70", - "type": "" - } - ], - "src": "991:562:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1613:325:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1623:22:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1637:1:70", - "type": "", - "value": "1" - }, - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "1640:4:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "1633:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1633:12:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1623:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1654:38:70", - "value": { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "1684:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1690:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1680:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1680:12:70" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulTypedName", - "src": "1658:18:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1731:31:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1733:27:70", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1747:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1755:4:70", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1743:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1743:17:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1733:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulIdentifier", - "src": "1711:18:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1704:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1704:26:70" - }, - "nodeType": "YulIf", - "src": "1701:61:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1821:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1842:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1849:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1854:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1845:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1845:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1835:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1835:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1835:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1886:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1889:4:70", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1879:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1879:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1879:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1914:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1917:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1907:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1907:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1907:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulIdentifier", - "src": "1777:18:70" - }, - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1800:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1808:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1797:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1797:14:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1774:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "1774:38:70" - }, - "nodeType": "YulIf", - "src": "1771:161:70" - } - ] - }, - "name": "extract_byte_array_length", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "1593:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1602:6:70", - "type": "" - } - ], - "src": "1558:380:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1999:65:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2016:1:70", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "2019:3:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2009:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2009:14:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2009:14:70" - }, - { - "nodeType": "YulAssignment", - "src": "2032:26:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2050:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2053:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nodeType": "YulIdentifier", - "src": "2040:9:70" - }, - "nodeType": "YulFunctionCall", - "src": "2040:18:70" - }, - "variableNames": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2032:4:70" - } - ] - } - ] - }, - "name": "array_dataslot_string_storage", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "1982:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "1990:4:70", - "type": "" - } - ], - "src": "1943:121:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2150:464:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2183:425:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2197:11:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2207:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2201:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2228:2:70" - }, - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "2232:5:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2221:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2221:17:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2221:17:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2251:31:70", - "value": { - "arguments": [ - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2273:2:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2277:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nodeType": "YulIdentifier", - "src": "2263:9:70" - }, - "nodeType": "YulFunctionCall", - "src": "2263:19:70" - }, - "variables": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "2255:4:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2295:57:70", - "value": { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2318:4:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2328:1:70", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nodeType": "YulIdentifier", - "src": "2335:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2347:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2331:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2331:19:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "2324:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2324:27:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2314:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2314:38:70" - }, - "variables": [ - { - "name": "deleteStart", - "nodeType": "YulTypedName", - "src": "2299:11:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2389:23:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2391:19:70", - "value": { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2406:4:70" - }, - "variableNames": [ - { - "name": "deleteStart", - "nodeType": "YulIdentifier", - "src": "2391:11:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nodeType": "YulIdentifier", - "src": "2371:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2383:4:70", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2368:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2368:20:70" - }, - "nodeType": "YulIf", - "src": "2365:47:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2425:41:70", - "value": { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2439:4:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2449:1:70", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "2456:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2461:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2452:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2452:12:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "2445:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2445:20:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2435:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2435:31:70" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2429:2:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2479:24:70", - "value": { - "name": "deleteStart", - "nodeType": "YulIdentifier", - "src": "2492:11:70" - }, - "variables": [ - { - "name": "start", - "nodeType": "YulTypedName", - "src": "2483:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2577:21:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nodeType": "YulIdentifier", - "src": "2586:5:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2593:2:70" - } - ], - "functionName": { - "name": "sstore", - "nodeType": "YulIdentifier", - "src": "2579:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2579:17:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2579:17:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nodeType": "YulIdentifier", - "src": "2527:5:70" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2534:2:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2524:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2524:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2538:26:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2540:22:70", - "value": { - "arguments": [ - { - "name": "start", - "nodeType": "YulIdentifier", - "src": "2553:5:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2560:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2549:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2549:13:70" - }, - "variableNames": [ - { - "name": "start", - "nodeType": "YulIdentifier", - "src": "2540:5:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2520:3:70", - "statements": [] - }, - "src": "2516:82:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "2166:3:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2171:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2163:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2163:11:70" - }, - "nodeType": "YulIf", - "src": "2160:448:70" - } - ] - }, - "name": "clean_up_bytearray_end_slots_string_storage", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "2122:5:70", - "type": "" - }, - { - "name": "len", - "nodeType": "YulTypedName", - "src": "2129:3:70", - "type": "" - }, - { - "name": "startIndex", - "nodeType": "YulTypedName", - "src": "2134:10:70", - "type": "" - } - ], - "src": "2069:545:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2704:81:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2714:65:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2729:4:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2747:1:70", - "type": "", - "value": "3" - }, - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "2750:3:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2743:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2743:11:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2760:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2756:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2756:6:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "2739:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2739:24:70" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2735:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2735:29:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2725:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2725:40:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2771:1:70", - "type": "", - "value": "1" - }, - { - "name": "len", - "nodeType": "YulIdentifier", - "src": "2774:3:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2767:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2767:11:70" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2722:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2722:57:70" - }, - "variableNames": [ - { - "name": "used", - "nodeType": "YulIdentifier", - "src": "2714:4:70" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "2681:4:70", - "type": "" - }, - { - "name": "len", - "nodeType": "YulTypedName", - "src": "2687:3:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nodeType": "YulTypedName", - "src": "2695:4:70", - "type": "" - } - ], - "src": "2619:166:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2886:1256:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2896:24:70", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2916:3:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2910:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "2910:10:70" - }, - "variables": [ - { - "name": "newLen", - "nodeType": "YulTypedName", - "src": "2900:6:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2963:22:70", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2965:16:70" - }, - "nodeType": "YulFunctionCall", - "src": "2965:18:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2965:18:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "2935:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2951:2:70", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2955:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2947:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2947:10:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2959:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2943:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2943:18:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2932:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2932:30:70" - }, - "nodeType": "YulIf", - "src": "2929:56:70" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nodeType": "YulIdentifier", - "src": "3038:4:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nodeType": "YulIdentifier", - "src": "3076:4:70" - } - ], - "functionName": { - "name": "sload", - "nodeType": "YulIdentifier", - "src": "3070:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3070:11:70" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nodeType": "YulIdentifier", - "src": "3044:25:70" - }, - "nodeType": "YulFunctionCall", - "src": "3044:38:70" - }, - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3084:6:70" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_string_storage", - "nodeType": "YulIdentifier", - "src": "2994:43:70" - }, - "nodeType": "YulFunctionCall", - "src": "2994:97:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2994:97:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3100:18:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3117:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nodeType": "YulTypedName", - "src": "3104:9:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3127:23:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3146:4:70", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "srcOffset_1", - "nodeType": "YulTypedName", - "src": "3131:11:70", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3159:24:70", - "value": { - "name": "srcOffset_1", - "nodeType": "YulIdentifier", - "src": "3172:11:70" - }, - "variableNames": [ - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "3159:9:70" - } - ] - }, - { - "cases": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3229:656:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3243:35:70", - "value": { - "arguments": [ - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3262:6:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3274:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3270:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3270:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3258:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3258:20:70" - }, - "variables": [ - { - "name": "loopEnd", - "nodeType": "YulTypedName", - "src": "3247:7:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3291:49:70", - "value": { - "arguments": [ - { - "name": "slot", - "nodeType": "YulIdentifier", - "src": "3335:4:70" - } - ], - "functionName": { - "name": "array_dataslot_string_storage", - "nodeType": "YulIdentifier", - "src": "3305:29:70" - }, - "nodeType": "YulFunctionCall", - "src": "3305:35:70" - }, - "variables": [ - { - "name": "dstPtr", - "nodeType": "YulTypedName", - "src": "3295:6:70", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3353:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3362:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "3357:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3440:172:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nodeType": "YulIdentifier", - "src": "3465:6:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3483:3:70" - }, - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "3488:9:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3479:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3479:19:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3473:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3473:26:70" - } - ], - "functionName": { - "name": "sstore", - "nodeType": "YulIdentifier", - "src": "3458:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3458:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3458:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "3517:24:70", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nodeType": "YulIdentifier", - "src": "3531:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3539:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3527:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3527:14:70" - }, - "variableNames": [ - { - "name": "dstPtr", - "nodeType": "YulIdentifier", - "src": "3517:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3558:40:70", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "3575:9:70" - }, - { - "name": "srcOffset_1", - "nodeType": "YulIdentifier", - "src": "3586:11:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3571:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3571:27:70" - }, - "variableNames": [ - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "3558:9:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3387:1:70" - }, - { - "name": "loopEnd", - "nodeType": "YulIdentifier", - "src": "3390:7:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3384:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3384:14:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3399:28:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3401:24:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3410:1:70" - }, - { - "name": "srcOffset_1", - "nodeType": "YulIdentifier", - "src": "3413:11:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3406:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3406:19:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3401:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3380:3:70", - "statements": [] - }, - "src": "3376:236:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3660:166:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3678:43:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3705:3:70" - }, - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "3710:9:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3701:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3701:19:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3695:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3695:26:70" - }, - "variables": [ - { - "name": "lastValue", - "nodeType": "YulTypedName", - "src": "3682:9:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nodeType": "YulIdentifier", - "src": "3745:6:70" - }, - { - "arguments": [ - { - "name": "lastValue", - "nodeType": "YulIdentifier", - "src": "3757:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3784:1:70", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3787:6:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3780:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3780:14:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3796:3:70", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3776:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3776:24:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3806:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3802:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3802:6:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "3772:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3772:37:70" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3768:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3768:42:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3753:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3753:58:70" - } - ], - "functionName": { - "name": "sstore", - "nodeType": "YulIdentifier", - "src": "3738:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3738:74:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3738:74:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nodeType": "YulIdentifier", - "src": "3631:7:70" - }, - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3640:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3628:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3628:19:70" - }, - "nodeType": "YulIf", - "src": "3625:201:70" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nodeType": "YulIdentifier", - "src": "3846:4:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3860:1:70", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3863:6:70" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3856:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3856:14:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3872:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3852:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3852:22:70" - } - ], - "functionName": { - "name": "sstore", - "nodeType": "YulIdentifier", - "src": "3839:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3839:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3839:36:70" - } - ] - }, - "nodeType": "YulCase", - "src": "3222:663:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3227:1:70", - "type": "", - "value": "1" - } - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3902:234:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3916:14:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3929:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3920:5:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3965:67:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3983:35:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4002:3:70" - }, - { - "name": "srcOffset", - "nodeType": "YulIdentifier", - "src": "4007:9:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3998:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3998:19:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3992:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "3992:26:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3983:5:70" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3946:6:70" - }, - "nodeType": "YulIf", - "src": "3943:89:70" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nodeType": "YulIdentifier", - "src": "4052:4:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4111:5:70" - }, - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "4118:6:70" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nodeType": "YulIdentifier", - "src": "4058:52:70" - }, - "nodeType": "YulFunctionCall", - "src": "4058:67:70" - } - ], - "functionName": { - "name": "sstore", - "nodeType": "YulIdentifier", - "src": "4045:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4045:81:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4045:81:70" - } - ] - }, - "nodeType": "YulCase", - "src": "3894:242:70", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nodeType": "YulIdentifier", - "src": "3202:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3210:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3199:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "3199:14:70" - }, - "nodeType": "YulSwitch", - "src": "3192:944:70" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nodeType": "YulTypedName", - "src": "2871:4:70", - "type": "" - }, - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2877:3:70", - "type": "" - } - ], - "src": "2790:1352:70" - } - ] - }, - "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_string_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := mload(offset)\n let _2 := sub(shl(64, 1), 1)\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n let _4 := 0x20\n if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n let i := 0\n for { } lt(i, _1) { i := add(i, _4) }\n {\n mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n }\n mstore(add(add(memPtr, _1), _4), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := mload(headStart)\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n let _1 := 0\n mstore(_1, array)\n let data := keccak256(_1, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _2 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _2) { start := add(start, 1) }\n { sstore(start, _1) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n let srcOffset_1 := 0x20\n srcOffset := srcOffset_1\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, srcOffset_1)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60806040523480156200001157600080fd5b5060405162000b4638038062000b4683398101604081905262000034916200011f565b600362000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61085280620002f46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212208dc26b701871e55c81709403faf2f1ba8dbab1913209eb33d9f719a466a3fc5e64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xB46 CODESIZE SUB DUP1 PUSH3 0xB46 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x11F JUMP JUMPDEST PUSH1 0x3 PUSH3 0x42 DUP4 DUP3 PUSH3 0x218 JUMP JUMPDEST POP PUSH1 0x4 PUSH3 0x51 DUP3 DUP3 PUSH3 0x218 JUMP JUMPDEST POP POP POP PUSH3 0x2E4 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x9F JUMPI PUSH3 0x9F PUSH3 0x5A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0xCA JUMPI PUSH3 0xCA PUSH3 0x5A JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x10B JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0xEC JUMP JUMPDEST PUSH1 0x0 SWAP4 DUP2 ADD SWAP1 SWAP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x159 DUP7 DUP4 DUP8 ADD PUSH3 0x70 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x170 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x17F DUP6 DUP3 DUP7 ADD PUSH3 0x70 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x19E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x1BF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x213 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x1EE JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x20F JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1FA JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x234 JUMPI PUSH3 0x234 PUSH3 0x5A JUMP JUMPDEST PUSH3 0x24C DUP2 PUSH3 0x245 DUP5 SLOAD PUSH3 0x189 JUMP JUMPDEST DUP5 PUSH3 0x1C5 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x284 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x26B JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x20F JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x2B5 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x294 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x2D4 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x852 DUP1 PUSH3 0x2F4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x730 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x321 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x19B CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DB SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x228 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x35A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x25A DUP6 DUP3 DUP6 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x265 DUP6 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x283 DUP4 DUP4 PUSH2 0x32F JUMP JUMPDEST PUSH2 0x28D SWAP2 SWAP1 PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AF DUP3 DUP7 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x265 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP5 DUP5 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30B JUMP JUMPDEST PUSH2 0x4F2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C9 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x722 DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74E DUP5 PUSH2 0x6EA JUMP JUMPDEST SWAP3 POP PUSH2 0x75C PUSH1 0x20 DUP6 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x6EA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AA DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH2 0x7B8 PUSH1 0x20 DUP5 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7D5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7F5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC2 PUSH12 0x701871E55C81709403FAF2F1 0xBA DUP14 0xBA 0xB1 SWAP2 ORIGIN MULMOD 0xEB CALLER 0xD9 0xF7 NOT LOG4 PUSH7 0xA3FC5E64736F6C PUSH4 0x43000811 STOP CALLER ", - "sourceMap": "1401:11610:58:-:0;;;1976:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2042:5;:13;2050:5;2042;:13;:::i;:::-;-1:-1:-1;2065:7:58;:17;2075:7;2065;:17;:::i;:::-;;1976:113;;1401:11610;;14:127:70;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:70;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:70;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:70:o;991:562::-;1090:6;1098;1151:2;1139:9;1130:7;1126:23;1122:32;1119:52;;;1167:1;1164;1157:12;1119:52;1194:16;;-1:-1:-1;;;;;1259:14:70;;;1256:34;;;1286:1;1283;1276:12;1256:34;1309:61;1362:7;1353:6;1342:9;1338:22;1309:61;:::i;:::-;1299:71;;1416:2;1405:9;1401:18;1395:25;1379:41;;1445:2;1435:8;1432:16;1429:36;;;1461:1;1458;1451:12;1429:36;;1484:63;1539:7;1528:8;1517:9;1513:24;1484:63;:::i;:::-;1474:73;;;991:562;;;;;:::o;1558:380::-;1637:1;1633:12;;;;1680;;;1701:61;;1755:4;1747:6;1743:17;1733:27;;1701:61;1808:2;1800:6;1797:14;1777:18;1774:38;1771:161;;1854:10;1849:3;1845:20;1842:1;1835:31;1889:4;1886:1;1879:15;1917:4;1914:1;1907:15;1771:161;;1558:380;;;:::o;2069:545::-;2171:2;2166:3;2163:11;2160:448;;;2207:1;2232:5;2228:2;2221:17;2277:4;2273:2;2263:19;2347:2;2335:10;2331:19;2328:1;2324:27;2318:4;2314:38;2383:4;2371:10;2368:20;2365:47;;;-1:-1:-1;2406:4:70;2365:47;2461:2;2456:3;2452:12;2449:1;2445:20;2439:4;2435:31;2425:41;;2516:82;2534:2;2527:5;2524:13;2516:82;;;2579:17;;;2560:1;2549:13;2516:82;;;2520:3;;;2160:448;2069:545;;;:::o;2790:1352::-;2910:10;;-1:-1:-1;;;;;2932:30:70;;2929:56;;;2965:18;;:::i;:::-;2994:97;3084:6;3044:38;3076:4;3070:11;3044:38;:::i;:::-;3038:4;2994:97;:::i;:::-;3146:4;;3210:2;3199:14;;3227:1;3222:663;;;;3929:1;3946:6;3943:89;;;-1:-1:-1;3998:19:70;;;3992:26;3943:89;-1:-1:-1;;2747:1:70;2743:11;;;2739:24;2735:29;2725:40;2771:1;2767:11;;;2722:57;4045:81;;3192:944;;3222:663;2016:1;2009:14;;;2053:4;2040:18;;-1:-1:-1;;3258:20:70;;;3376:236;3390:7;3387:1;3384:14;3376:236;;;3479:19;;;3473:26;3458:42;;3571:27;;;;3539:1;3527:14;;;;3406:19;;3376:236;;;3380:3;3640:6;3631:7;3628:19;3625:201;;;3701:19;;;3695:26;-1:-1:-1;;3784:1:70;3780:14;;;3796:3;3776:24;3772:37;3768:42;3753:58;3738:74;;3625:201;-1:-1:-1;;;;;3872:1:70;3856:14;;;3852:22;3839:36;;-1:-1:-1;2790:1352:70:o;:::-;1401:11610:58;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_afterTokenTransfer_17826": { - "entryPoint": null, - "id": 17826, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_approve_17761": { - "entryPoint": 858, - "id": 17761, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_beforeTokenTransfer_17815": { - "entryPoint": null, - "id": 17815, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_msgSender_18732": { - "entryPoint": null, - "id": 18732, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_spendAllowance_17804": { - "entryPoint": 1150, - "id": 17804, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_transfer_17587": { - "entryPoint": 1272, - "id": 17587, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@allowance_17382": { - "entryPoint": 815, - "id": 17382, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@approve_17407": { - "entryPoint": 562, - "id": 17407, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@balanceOf_17339": { - "entryPoint": null, - "id": 17339, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@decimals_17315": { - "entryPoint": null, - "id": 17315, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@decreaseAllowance_17510": { - "entryPoint": 673, - "id": 17510, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@increaseAllowance_17469": { - "entryPoint": 624, - "id": 17469, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@name_17295": { - "entryPoint": 416, - "id": 17295, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@symbol_17305": { - "entryPoint": 658, - "id": 17305, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@totalSupply_17325": { - "entryPoint": null, - "id": 17325, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@transferFrom_17440": { - "entryPoint": 588, - "id": 17440, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@transfer_17364": { - "entryPoint": 801, - "id": 17364, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_address": { - "entryPoint": 1770, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1900, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 1934, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 1840, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_uint256": { - "entryPoint": 1798, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1692, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_add_t_uint256": { - "entryPoint": 2043, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "extract_byte_array_length": { - "entryPoint": 1985, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:5754:70", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:70", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "135:427:70", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "145:12:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:2:70", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "149:2:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "173:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "184:2:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "166:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "166:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "166:21:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "196:27:70", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "216:6:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "210:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "210:13:70" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "200:6:70", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "243:9:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "254:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "239:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "239:18:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "259:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "232:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "232:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "232:34:70" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "275:10:70", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "284:1:70", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "279:1:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "344:90:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "373:9:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "384:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "369:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "369:17:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "388:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "365:26:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "407:6:70" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "415:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "403:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "403:14:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "419:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "399:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "399:23:70" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "393:5:70" - }, - "nodeType": "YulFunctionCall", - "src": "393:30:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "358:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "358:66:70" - }, - "nodeType": "YulExpressionStatement", - "src": "358:66:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "305:1:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "308:6:70" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "302:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "302:13:70" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "316:19:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "318:15:70", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "327:1:70" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "330:2:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "323:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "323:10:70" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "318:1:70" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "298:3:70", - "statements": [] - }, - "src": "294:140:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "458:9:70" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "469:6:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "454:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "454:22:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "478:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "450:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "450:31:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "483:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "443:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "443:42:70" - }, - "nodeType": "YulExpressionStatement", - "src": "443:42:70" - }, - { - "nodeType": "YulAssignment", - "src": "494:62:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "510:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "529:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "537:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "525:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "525:15:70" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "546:2:70", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "542:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "542:7:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "521:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "521:29:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "506:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "506:45:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "553:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "502:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "502:54:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "494:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "104:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "115:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "126:4:70", - "type": "" - } - ], - "src": "14:548:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "616:124:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "626:29:70", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "648:6:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "635:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "635:20:70" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "626:5:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "718:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "727:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "730:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "720:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "720:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "720:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "677:5:70" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "688:5:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "703:3:70", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "708:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "699:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "699:11:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "712:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "695:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "695:19:70" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "684:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "684:31:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "674:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "674:42:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "667:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "667:50:70" - }, - "nodeType": "YulIf", - "src": "664:70:70" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "595:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "606:5:70", - "type": "" - } - ], - "src": "567:173:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "832:167:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "878:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "887:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "890:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "880:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "880:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "880:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "853:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "862:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "849:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "849:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "874:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "845:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "845:32:70" - }, - "nodeType": "YulIf", - "src": "842:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "903:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "932:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "913:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "913:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "903:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "951:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "974:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "961:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "961:32:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "951:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "790:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "801:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "813:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "821:6:70", - "type": "" - } - ], - "src": "745:254:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1099:92:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1109:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1121:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1132:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1117:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1117:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1109:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1151:9:70" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1176:6:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1169:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1169:14:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1162:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1162:22:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1144:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1144:41:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1144:41:70" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1068:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1079:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1090:4:70", - "type": "" - } - ], - "src": "1004:187:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1297:76:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1307:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1319:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1330:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1315:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1315:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1307:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1349:9:70" - }, - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1360:6:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1342:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1342:25:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1342:25:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1266:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1277:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1288:4:70", - "type": "" - } - ], - "src": "1196:177:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1482:224:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1528:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1537:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1540:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1530:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1530:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1503:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1512:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1499:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1499:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1524:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1495:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1495:32:70" - }, - "nodeType": "YulIf", - "src": "1492:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "1553:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1582:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1563:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1563:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1553:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1601:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1634:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1645:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1630:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1630:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1611:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "1611:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1601:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1658:42:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1685:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1696:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1681:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1681:18:70" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1668:12:70" - }, - "nodeType": "YulFunctionCall", - "src": "1668:32:70" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1658:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1432:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1443:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1455:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1463:6:70", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1471:6:70", - "type": "" - } - ], - "src": "1378:328:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1808:87:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1818:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1830:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1841:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1826:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1826:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1818:4:70" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1860:9:70" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1875:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1883:4:70", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1871:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1871:17:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1853:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "1853:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "1853:36:70" - } - ] - }, - "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1777:9:70", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1788:6:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1799:4:70", - "type": "" - } - ], - "src": "1711:184:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1970:116:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2016:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2025:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2028:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2018:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2018:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2018:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1991:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2000:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1987:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1987:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2012:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1983:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "1983:32:70" - }, - "nodeType": "YulIf", - "src": "1980:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2041:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2070:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2051:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2051:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2041:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1936:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1947:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1959:6:70", - "type": "" - } - ], - "src": "1900:186:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2178:173:70", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2224:16:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2233:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2236:1:70", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2226:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2226:12:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2226:12:70" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2199:7:70" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2208:9:70" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2195:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2195:23:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2220:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2191:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2191:32:70" - }, - "nodeType": "YulIf", - "src": "2188:52:70" - }, - { - "nodeType": "YulAssignment", - "src": "2249:39:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2278:9:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2259:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2259:29:70" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2249:6:70" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2297:48:70", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2330:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2341:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2326:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2326:18:70" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "2307:18:70" - }, - "nodeType": "YulFunctionCall", - "src": "2307:38:70" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2297:6:70" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2136:9:70", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2147:7:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2159:6:70", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2167:6:70", - "type": "" - } - ], - "src": "2091:260:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2411:325:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2421:22:70", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2435:1:70", - "type": "", - "value": "1" - }, - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2438:4:70" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "2431:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2431:12:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2421:6:70" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2452:38:70", - "value": { - "arguments": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "2482:4:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2488:1:70", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2478:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2478:12:70" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulTypedName", - "src": "2456:18:70", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2529:31:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2531:27:70", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2545:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2553:4:70", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2541:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2541:17:70" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2531:6:70" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulIdentifier", - "src": "2509:18:70" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2502:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2502:26:70" - }, - "nodeType": "YulIf", - "src": "2499:61:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2619:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2640:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2647:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2652:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2643:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2643:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2633:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2633:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2633:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2684:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2687:4:70", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2677:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2677:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2677:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2712:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2715:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2705:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2705:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2705:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nodeType": "YulIdentifier", - "src": "2575:18:70" - }, - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2598:6:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2606:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2595:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2595:14:70" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2572:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2572:38:70" - }, - "nodeType": "YulIf", - "src": "2569:161:70" - } - ] - }, - "name": "extract_byte_array_length", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "2391:4:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2400:6:70", - "type": "" - } - ], - "src": "2356:380:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2789:174:70", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2799:16:70", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "2810:1:70" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "2813:1:70" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2806:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2806:9:70" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "2799:3:70" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2846:111:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2867:1:70", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2874:3:70", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2879:10:70", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2870:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "2870:20:70" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2860:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2860:31:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2860:31:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2911:1:70", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2914:4:70", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2904:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2904:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2904:15:70" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2939:1:70", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2942:4:70", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2932:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "2932:15:70" - }, - "nodeType": "YulExpressionStatement", - "src": "2932:15:70" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "2830:1:70" - }, - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "2833:3:70" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2827:2:70" - }, - "nodeType": "YulFunctionCall", - "src": "2827:10:70" - }, - "nodeType": "YulIf", - "src": "2824:133:70" - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "2772:1:70", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "2775:1:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "2781:3:70", - "type": "" - } - ], - "src": "2741:222:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3142:227:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3159:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3170:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3152:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3152:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3152:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3193:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3204:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3189:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3189:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3209:2:70", - "type": "", - "value": "37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3182:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3182:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3182:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3232:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3243:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3228:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3228:18:70" - }, - { - "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3248:34:70", - "type": "", - "value": "ERC20: decreased allowance below" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3221:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3221:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3221:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3303:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3314:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3299:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3299:18:70" - }, - { - "hexValue": "207a65726f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3319:7:70", - "type": "", - "value": " zero" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3292:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3292:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3292:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "3336:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3348:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3359:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3344:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3344:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3336:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3119:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3133:4:70", - "type": "" - } - ], - "src": "2968:401:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3548:226:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3565:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3576:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3558:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3558:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3558:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3599:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3610:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3595:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3595:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3615:2:70", - "type": "", - "value": "36" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3588:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3588:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3588:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3638:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3649:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3634:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3634:18:70" - }, - { - "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f20616464", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3654:34:70", - "type": "", - "value": "ERC20: approve from the zero add" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3627:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3627:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3627:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3709:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3720:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3705:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3705:18:70" - }, - { - "hexValue": "72657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3725:6:70", - "type": "", - "value": "ress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3698:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3698:34:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3698:34:70" - }, - { - "nodeType": "YulAssignment", - "src": "3741:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3753:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3764:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3749:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "3749:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3741:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3525:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3539:4:70", - "type": "" - } - ], - "src": "3374:400:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3953:224:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3970:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3981:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3963:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3963:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3963:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4004:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4015:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4000:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4000:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4020:2:70", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3993:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "3993:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "3993:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4043:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4054:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4039:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4039:18:70" - }, - { - "hexValue": "45524332303a20617070726f766520746f20746865207a65726f206164647265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4059:34:70", - "type": "", - "value": "ERC20: approve to the zero addre" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4032:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4032:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4032:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4114:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4125:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4110:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4110:18:70" - }, - { - "hexValue": "7373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4130:4:70", - "type": "", - "value": "ss" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4103:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4103:32:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4103:32:70" - }, - { - "nodeType": "YulAssignment", - "src": "4144:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4156:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4167:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4152:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4152:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4144:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3930:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3944:4:70", - "type": "" - } - ], - "src": "3779:398:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4356:179:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4373:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4384:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4366:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4366:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4366:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4407:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4418:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4403:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4403:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4423:2:70", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4396:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4396:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4396:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4446:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4457:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4442:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4442:18:70" - }, - { - "hexValue": "45524332303a20696e73756666696369656e7420616c6c6f77616e6365", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4462:31:70", - "type": "", - "value": "ERC20: insufficient allowance" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4435:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4435:59:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4435:59:70" - }, - { - "nodeType": "YulAssignment", - "src": "4503:26:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4515:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4526:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4511:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4511:18:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4503:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4333:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4347:4:70", - "type": "" - } - ], - "src": "4182:353:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4714:227:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4731:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4742:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4724:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4724:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4724:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4765:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4776:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4761:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4761:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4781:2:70", - "type": "", - "value": "37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4754:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4754:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4754:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4804:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4815:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4800:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4800:18:70" - }, - { - "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f206164", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4820:34:70", - "type": "", - "value": "ERC20: transfer from the zero ad" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4793:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4793:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4793:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4875:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4886:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4871:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4871:18:70" - }, - { - "hexValue": "6472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4891:7:70", - "type": "", - "value": "dress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4864:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "4864:35:70" - }, - "nodeType": "YulExpressionStatement", - "src": "4864:35:70" - }, - { - "nodeType": "YulAssignment", - "src": "4908:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4920:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4931:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4916:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "4916:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4908:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4691:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4705:4:70", - "type": "" - } - ], - "src": "4540:401:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5120:225:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5137:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5148:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5130:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5130:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5130:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5171:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5182:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5167:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5167:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5187:2:70", - "type": "", - "value": "35" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5160:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5160:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5160:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5210:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5221:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5206:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5206:18:70" - }, - { - "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5226:34:70", - "type": "", - "value": "ERC20: transfer to the zero addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5199:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5199:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5199:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5281:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5292:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5277:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5277:18:70" - }, - { - "hexValue": "657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5297:5:70", - "type": "", - "value": "ess" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5270:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5270:33:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5270:33:70" - }, - { - "nodeType": "YulAssignment", - "src": "5312:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5324:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5335:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5320:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5320:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5312:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5097:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5111:4:70", - "type": "" - } - ], - "src": "4946:399:70" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5524:228:70", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5541:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5552:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5534:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5534:21:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5534:21:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5575:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5586:2:70", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5571:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5571:18:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5591:2:70", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5564:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5564:30:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5564:30:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5614:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5625:2:70", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5610:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5610:18:70" - }, - { - "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5630:34:70", - "type": "", - "value": "ERC20: transfer amount exceeds b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5603:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5603:62:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5603:62:70" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5685:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5696:2:70", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5681:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5681:18:70" - }, - { - "hexValue": "616c616e6365", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5701:8:70", - "type": "", - "value": "alance" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5674:6:70" - }, - "nodeType": "YulFunctionCall", - "src": "5674:36:70" - }, - "nodeType": "YulExpressionStatement", - "src": "5674:36:70" - }, - { - "nodeType": "YulAssignment", - "src": "5719:27:70", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5731:9:70" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5742:3:70", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5727:3:70" - }, - "nodeType": "YulFunctionCall", - "src": "5727:19:70" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5719:4:70" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5501:9:70", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5515:4:70", - "type": "" - } - ], - "src": "5350:402:70" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let length := mload(value0)\n mstore(add(headStart, _1), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n }\n mstore(add(add(headStart, length), 64), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function abi_encode_tuple_t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"ERC20: decreased allowance below\")\n mstore(add(headStart, 96), \" zero\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n mstore(add(headStart, 96), \"ress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n mstore(add(headStart, 96), \"ss\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 29)\n mstore(add(headStart, 64), \"ERC20: insufficient allowance\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n mstore(add(headStart, 96), \"dress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 35)\n mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n mstore(add(headStart, 96), \"ess\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"ERC20: transfer amount exceeds b\")\n mstore(add(headStart, 96), \"alance\")\n tail := add(headStart, 128)\n }\n}", - "id": 70, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea26469706673582212208dc26b701871e55c81709403faf2f1ba8dbab1913209eb33d9f719a466a3fc5e64736f6c63430008110033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x730 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x321 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x19B CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DB SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x228 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x35A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x25A DUP6 DUP3 DUP6 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x265 DUP6 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x283 DUP4 DUP4 PUSH2 0x32F JUMP JUMPDEST PUSH2 0x28D SWAP2 SWAP1 PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AF DUP3 DUP7 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x265 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP5 DUP5 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30B JUMP JUMPDEST PUSH2 0x4F2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C9 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x722 DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74E DUP5 PUSH2 0x6EA JUMP JUMPDEST SWAP3 POP PUSH2 0x75C PUSH1 0x20 DUP6 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x6EA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AA DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH2 0x7B8 PUSH1 0x20 DUP5 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7D5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7F5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC2 PUSH12 0x701871E55C81709403FAF2F1 0xBA DUP14 0xBA 0xB1 SWAP2 ORIGIN MULMOD 0xEB CALLER 0xD9 0xF7 NOT LOG4 PUSH7 0xA3FC5E64736F6C PUSH4 0x43000811 STOP CALLER ", - "sourceMap": "1401:11610:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4431:197;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:70;;1162:22;1144:41;;1132:2;1117:18;4431:197:58;1004:187:70;3242:106:58;3329:12;;3242:106;;;1342:25:70;;;1330:2;1315:18;3242:106:58;1196:177:70;5190:286:58;;;;;;:::i;:::-;;:::i;3091:91::-;;;3173:2;1853:36:70;;1841:2;1826:18;3091:91:58;1711:184:70;5871:234:58;;;;;;:::i;:::-;;:::i;3406:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3506:18:58;3480:7;3506:18;;;;;;;;;;;;3406:125;2365:102;;;:::i;6592:427::-;;;;;;:::i;:::-;;:::i;3727:189::-;;;;;;:::i;:::-;;:::i;3974:149::-;;;;;;:::i;:::-;;:::i;2154:98::-;2208:13;2240:5;2233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:98;:::o;4431:197::-;4514:4;719:10:66;4568:32:58;719:10:66;4584:7:58;4593:6;4568:8;:32::i;:::-;4617:4;4610:11;;;4431:197;;;;;:::o;5190:286::-;5317:4;719:10:66;5373:38:58;5389:4;719:10:66;5404:6:58;5373:15;:38::i;:::-;5421:27;5431:4;5437:2;5441:6;5421:9;:27::i;:::-;-1:-1:-1;5465:4:58;;5190:286;-1:-1:-1;;;;5190:286:58:o;5871:234::-;5959:4;719:10:66;6013:64:58;719:10:66;6029:7:58;6066:10;6038:25;719:10:66;6029:7:58;6038:9;:25::i;:::-;:38;;;;:::i;:::-;6013:8;:64::i;2365:102::-;2421:13;2453:7;2446:14;;;;;:::i;6592:427::-;6685:4;719:10:66;6685:4:58;6766:25;719:10:66;6783:7:58;6766:9;:25::i;:::-;6739:52;;6829:15;6809:16;:35;;6801:85;;;;-1:-1:-1;;;6801:85:58;;3170:2:70;6801:85:58;;;3152:21:70;3209:2;3189:18;;;3182:30;3248:34;3228:18;;;3221:62;-1:-1:-1;;;3299:18:70;;;3292:35;3344:19;;6801:85:58;;;;;;;;;6920:60;6929:5;6936:7;6964:15;6945:16;:34;6920:8;:60::i;3727:189::-;3806:4;719:10:66;3860:28:58;719:10:66;3877:2:58;3881:6;3860:9;:28::i;3974:149::-;-1:-1:-1;;;;;4089:18:58;;;4063:7;4089:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3974:149::o;10504:370::-;-1:-1:-1;;;;;10635:19:58;;10627:68;;;;-1:-1:-1;;;10627:68:58;;3576:2:70;10627:68:58;;;3558:21:70;3615:2;3595:18;;;3588:30;3654:34;3634:18;;;3627:62;-1:-1:-1;;;3705:18:70;;;3698:34;3749:19;;10627:68:58;3374:400:70;10627:68:58;-1:-1:-1;;;;;10713:21:58;;10705:68;;;;-1:-1:-1;;;10705:68:58;;3981:2:70;10705:68:58;;;3963:21:70;4020:2;4000:18;;;3993:30;4059:34;4039:18;;;4032:62;-1:-1:-1;;;4110:18:70;;;4103:32;4152:19;;10705:68:58;3779:398:70;10705:68:58;-1:-1:-1;;;;;10784:18:58;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10835:32;;1342:25:70;;;10835:32:58;;1315:18:70;10835:32:58;;;;;;;10504:370;;;:::o;11155:441::-;11285:24;11312:25;11322:5;11329:7;11312:9;:25::i;:::-;11285:52;;-1:-1:-1;;11351:16:58;:37;11347:243;;11432:6;11412:16;:26;;11404:68;;;;-1:-1:-1;;;11404:68:58;;4384:2:70;11404:68:58;;;4366:21:70;4423:2;4403:18;;;4396:30;4462:31;4442:18;;;4435:59;4511:18;;11404:68:58;4182:353:70;11404:68:58;11514:51;11523:5;11530:7;11558:6;11539:16;:25;11514:8;:51::i;:::-;11275:321;11155:441;;;:::o;7473:818::-;-1:-1:-1;;;;;7599:18:58;;7591:68;;;;-1:-1:-1;;;7591:68:58;;4742:2:70;7591:68:58;;;4724:21:70;4781:2;4761:18;;;4754:30;4820:34;4800:18;;;4793:62;-1:-1:-1;;;4871:18:70;;;4864:35;4916:19;;7591:68:58;4540:401:70;7591:68:58;-1:-1:-1;;;;;7677:16:58;;7669:64;;;;-1:-1:-1;;;7669:64:58;;5148:2:70;7669:64:58;;;5130:21:70;5187:2;5167:18;;;5160:30;5226:34;5206:18;;;5199:62;-1:-1:-1;;;5277:18:70;;;5270:33;5320:19;;7669:64:58;4946:399:70;7669:64:58;-1:-1:-1;;;;;7815:15:58;;7793:19;7815:15;;;;;;;;;;;7848:21;;;;7840:72;;;;-1:-1:-1;;;7840:72:58;;5552:2:70;7840:72:58;;;5534:21:70;5591:2;5571:18;;;5564:30;5630:34;5610:18;;;5603:62;-1:-1:-1;;;5681:18:70;;;5674:36;5727:19;;7840:72:58;5350:402:70;7840:72:58;-1:-1:-1;;;;;7946:15:58;;;:9;:15;;;;;;;;;;;7964:20;;;7946:38;;8161:13;;;;;;;;;;:23;;;;;;8210:26;;1342:25:70;;;8161:13:58;;8210:26;;1315:18:70;8210:26:58;;;;;;;8247:37;12180:121;14:548:70;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:70;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:70:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:70:o;2091:260::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;:::-;2249:39;;2307:38;2341:2;2330:9;2326:18;2307:38;:::i;:::-;2297:48;;2091:260;;;;;:::o;2356:380::-;2435:1;2431:12;;;;2478;;;2499:61;;2553:4;2545:6;2541:17;2531:27;;2499:61;2606:2;2598:6;2595:14;2575:18;2572:38;2569:161;;2652:10;2647:3;2643:20;2640:1;2633:31;2687:4;2684:1;2677:15;2715:4;2712:1;2705:15;2569:161;;2356:380;;;:::o;2741:222::-;2806:9;;;2827:10;;;2824:133;;;2879:10;2874:3;2870:20;2867:1;2860:31;2914:4;2911:1;2904:15;2942:4;2939:1;2932:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "426000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "allowance(address,address)": "infinite", - "approve(address,uint256)": "24628", - "balanceOf(address)": "2562", - "decimals()": "266", - "decreaseAllowance(address,uint256)": "27016", - "increaseAllowance(address,uint256)": "infinite", - "name()": "infinite", - "symbol()": "infinite", - "totalSupply()": "2326", - "transfer(address,uint256)": "51138", - "transferFrom(address,address,uint256)": "infinite" - }, - "internal": { - "_afterTokenTransfer(address,address,uint256)": "infinite", - "_approve(address,address,uint256)": "infinite", - "_beforeTokenTransfer(address,address,uint256)": "infinite", - "_burn(address,uint256)": "infinite", - "_mint(address,uint256)": "infinite", - "_spendAllowance(address,address,uint256)": "infinite", - "_transfer(address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "decreaseAllowance(address,uint256)": "a457c2d7", - "increaseAllowance(address,uint256)": "39509351", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 17256, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 17262, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 17264, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 17266, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 17268, - "contract": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC20 standard as defined in the EIP.", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "IERC20Metadata": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._", - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the amount of tokens owned by `account`." - }, - "decimals()": { - "details": "Returns the decimals places of the token." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token." - }, - "totalSupply()": { - "details": "Returns the amount of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { - "IERC20Permit": { - "abi": [ - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.", - "kind": "dev", - "methods": { - "DOMAIN_SEPARATOR()": { - "details": "Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}." - }, - "nonces(address)": { - "details": "Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times." - }, - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { - "details": "Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "DOMAIN_SEPARATOR()": "3644e515", - "nonces(address)": "7ecebe00", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "SafeERC20": { - "abi": [], - "devdoc": { - "details": "Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "kind": "dev", - "methods": {}, - "title": "SafeERC20", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220524ba1a6184f9c0af45bcbcf2fcb5ed78dd5ac0768515052bc07f6a3f4db86db64736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0x4B LOG1 0xA6 XOR 0x4F SWAP13 EXP DELEGATECALL JUMPDEST 0xCB 0xCF 0x2F 0xCB 0x5E 0xD7 DUP14 0xD5 0xAC SMOD PUSH9 0x515052BC07F6A3F4DB DUP7 0xDB PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "707:3748:62:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;707:3748:62;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220524ba1a6184f9c0af45bcbcf2fcb5ed78dd5ac0768515052bc07f6a3f4db86db64736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE 0x4B LOG1 0xA6 XOR 0x4F SWAP13 EXP DELEGATECALL JUMPDEST 0xCB 0xCF 0x2F 0xCB 0x5E 0xD7 DUP14 0xD5 0xAC SMOD PUSH9 0x515052BC07F6A3F4DB DUP7 0xDB PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "707:3748:62:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_callOptionalReturn(contract IERC20,bytes memory)": "infinite", - "safeApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safePermit(contract IERC20Permit,address,address,uint256,uint256,uint8,bytes32,bytes32)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { - "IERC721": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Required interface of an ERC721 compliant contract.", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token." - }, - "ApprovalForAll(address,address,bool)": { - "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `tokenId` token is transferred from `from` to `to`." - } - }, - "kind": "dev", - "methods": { - "approve(address,uint256)": { - "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the number of tokens in ``owner``'s account." - }, - "getApproved(uint256)": { - "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist." - }, - "isApprovedForAll(address,address)": { - "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}" - }, - "ownerOf(uint256)": { - "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist." - }, - "safeTransferFrom(address,address,uint256)": { - "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "safeTransferFrom(address,address,uint256,bytes)": { - "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "setApprovalForAll(address,bool)": { - "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event." - }, - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - }, - "transferFrom(address,address,uint256)": { - "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "getApproved(uint256)": "081812fc", - "isApprovedForAll(address,address)": "e985e9c5", - "ownerOf(uint256)": "6352211e", - "safeTransferFrom(address,address,uint256)": "42842e0e", - "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde", - "setApprovalForAll(address,bool)": "a22cb465", - "supportsInterface(bytes4)": "01ffc9a7", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { - "IERC721Metadata": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "_approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "See https://eips.ethereum.org/EIPS/eip-721", - "kind": "dev", - "methods": { - "approve(address,uint256)": { - "details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the number of tokens in ``owner``'s account." - }, - "getApproved(uint256)": { - "details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist." - }, - "isApprovedForAll(address,address)": { - "details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}" - }, - "name()": { - "details": "Returns the token collection name." - }, - "ownerOf(uint256)": { - "details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist." - }, - "safeTransferFrom(address,address,uint256)": { - "details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "safeTransferFrom(address,address,uint256,bytes)": { - "details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event." - }, - "setApprovalForAll(address,bool)": { - "details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event." - }, - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - }, - "symbol()": { - "details": "Returns the token collection symbol." - }, - "tokenURI(uint256)": { - "details": "Returns the Uniform Resource Identifier (URI) for `tokenId` token." - }, - "transferFrom(address,address,uint256)": { - "details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event." - } - }, - "title": "ERC-721 Non-Fungible Token Standard, optional metadata extension", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "getApproved(uint256)": "081812fc", - "isApprovedForAll(address,address)": "e985e9c5", - "name()": "06fdde03", - "ownerOf(uint256)": "6352211e", - "safeTransferFrom(address,address,uint256)": "42842e0e", - "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde", - "setApprovalForAll(address,bool)": "a22cb465", - "supportsInterface(bytes4)": "01ffc9a7", - "symbol()": "95d89b41", - "tokenURI(uint256)": "c87b56dd", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"See https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"name()\":{\"details\":\"Returns the token collection name.\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"Returns the token collection symbol.\"},\"tokenURI(uint256)\":{\"details\":\"Returns the Uniform Resource Identifier (URI) for `tokenId` token.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"title\":\"ERC-721 Non-Fungible Token Standard, optional metadata extension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":\"IERC721Metadata\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol": { - "Address": { - "abi": [], - "devdoc": { - "details": "Collection of functions related to the address type", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220555406fbe6acf88eea10684e82ec63da7df8eb551daf602f34308bcc18ae99a864736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SLOAD MOD 0xFB 0xE6 0xAC 0xF8 DUP15 0xEA LT PUSH9 0x4E82EC63DA7DF8EB55 SAR 0xAF PUSH1 0x2F CALLVALUE ADDRESS DUP12 0xCC XOR 0xAE SWAP10 0xA8 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "194:8964:65:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8964:65;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220555406fbe6acf88eea10684e82ec63da7df8eb551daf602f34308bcc18ae99a864736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE SLOAD MOD 0xFB 0xE6 0xAC 0xF8 DUP15 0xEA LT PUSH9 0x4E82EC63DA7DF8EB55 SAR 0xAF PUSH1 0x2F CALLVALUE ADDRESS DUP12 0xCC XOR 0xAE SWAP10 0xA8 PUSH5 0x736F6C6343 STOP ADDMOD GT STOP CALLER ", - "sourceMap": "194:8964:65:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_revert(bytes memory,string memory)": "infinite", - "functionCall(address,bytes memory)": "infinite", - "functionCall(address,bytes memory,string memory)": "infinite", - "functionCallWithValue(address,bytes memory,uint256)": "infinite", - "functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite", - "functionDelegateCall(address,bytes memory)": "infinite", - "functionDelegateCall(address,bytes memory,string memory)": "infinite", - "functionStaticCall(address,bytes memory)": "infinite", - "functionStaticCall(address,bytes memory,string memory)": "infinite", - "isContract(address)": "infinite", - "sendValue(address payable,uint256)": "infinite", - "verifyCallResult(bool,bytes memory,string memory)": "infinite", - "verifyCallResultFromTarget(address,bool,bytes memory,string memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol": { - "Context": { - "abi": [], - "devdoc": { - "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "IERC165": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "SafeCast": { - "abi": [], - "devdoc": { - "details": "Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c65e26e67809b571d7aa6cb6e1df656affa16ffce63e17a53674aecc1aa6de464736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR PUSH6 0xE26E67809B57 SAR PUSH27 0xA6CB6E1DF656AFFA16FFCE63E17A53674AECC1AA6DE464736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ", - "sourceMap": "927:34153:68:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;927:34153:68;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201c65e26e67809b571d7aa6cb6e1df656affa16ffce63e17a53674aecc1aa6de464736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHR PUSH6 0xE26E67809B57 SAR PUSH27 0xA6CB6E1DF656AFFA16FFCE63E17A53674AECC1AA6DE464736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ", - "sourceMap": "927:34153:68:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "toInt104(int256)": "infinite", - "toInt112(int256)": "infinite", - "toInt120(int256)": "infinite", - "toInt128(int256)": "infinite", - "toInt136(int256)": "infinite", - "toInt144(int256)": "infinite", - "toInt152(int256)": "infinite", - "toInt16(int256)": "infinite", - "toInt160(int256)": "infinite", - "toInt168(int256)": "infinite", - "toInt176(int256)": "infinite", - "toInt184(int256)": "infinite", - "toInt192(int256)": "infinite", - "toInt200(int256)": "infinite", - "toInt208(int256)": "infinite", - "toInt216(int256)": "infinite", - "toInt224(int256)": "infinite", - "toInt232(int256)": "infinite", - "toInt24(int256)": "infinite", - "toInt240(int256)": "infinite", - "toInt248(int256)": "infinite", - "toInt256(uint256)": "infinite", - "toInt32(int256)": "infinite", - "toInt40(int256)": "infinite", - "toInt48(int256)": "infinite", - "toInt56(int256)": "infinite", - "toInt64(int256)": "infinite", - "toInt72(int256)": "infinite", - "toInt8(int256)": "infinite", - "toInt80(int256)": "infinite", - "toInt88(int256)": "infinite", - "toInt96(int256)": "infinite", - "toUint104(uint256)": "infinite", - "toUint112(uint256)": "infinite", - "toUint120(uint256)": "infinite", - "toUint128(uint256)": "infinite", - "toUint136(uint256)": "infinite", - "toUint144(uint256)": "infinite", - "toUint152(uint256)": "infinite", - "toUint16(uint256)": "infinite", - "toUint160(uint256)": "infinite", - "toUint168(uint256)": "infinite", - "toUint176(uint256)": "infinite", - "toUint184(uint256)": "infinite", - "toUint192(uint256)": "infinite", - "toUint200(uint256)": "infinite", - "toUint208(uint256)": "infinite", - "toUint216(uint256)": "infinite", - "toUint224(uint256)": "infinite", - "toUint232(uint256)": "infinite", - "toUint24(uint256)": "infinite", - "toUint240(uint256)": "infinite", - "toUint248(uint256)": "infinite", - "toUint256(int256)": "infinite", - "toUint32(uint256)": "infinite", - "toUint40(uint256)": "infinite", - "toUint48(uint256)": "infinite", - "toUint56(uint256)": "infinite", - "toUint64(uint256)": "infinite", - "toUint72(uint256)": "infinite", - "toUint8(uint256)": "infinite", - "toUint80(uint256)": "infinite", - "toUint88(uint256)": "infinite", - "toUint96(uint256)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { - "EnumerableSet": { - "abi": [], - "devdoc": { - "details": "Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d10c0615e66554a52308fa78f952e9e05b95915fb79c5642136af7debf444e8c64736f6c63430008110033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xC MOD ISZERO 0xE6 PUSH6 0x54A52308FA78 0xF9 MSTORE 0xE9 0xE0 JUMPDEST SWAP6 SWAP2 0x5F 0xB7 SWAP13 JUMP TIMESTAMP SGT PUSH11 0xF7DEBF444E8C64736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ", - "sourceMap": "1321:11630:69:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1321:11630:69;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d10c0615e66554a52308fa78f952e9e05b95915fb79c5642136af7debf444e8c64736f6c63430008110033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xC MOD ISZERO 0xE6 PUSH6 0x54A52308FA78 0xF9 MSTORE 0xE9 0xE0 JUMPDEST SWAP6 SWAP2 0x5F 0xB7 SWAP13 JUMP TIMESTAMP SGT PUSH11 0xF7DEBF444E8C64736F6C63 NUMBER STOP ADDMOD GT STOP CALLER ", - "sourceMap": "1321:11630:69:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_add(struct EnumerableSet.Set storage pointer,bytes32)": "infinite", - "_at(struct EnumerableSet.Set storage pointer,uint256)": "infinite", - "_contains(struct EnumerableSet.Set storage pointer,bytes32)": "infinite", - "_length(struct EnumerableSet.Set storage pointer)": "infinite", - "_remove(struct EnumerableSet.Set storage pointer,bytes32)": "infinite", - "_values(struct EnumerableSet.Set storage pointer)": "infinite", - "add(struct EnumerableSet.AddressSet storage pointer,address)": "infinite", - "add(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite", - "add(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite", - "at(struct EnumerableSet.AddressSet storage pointer,uint256)": "infinite", - "at(struct EnumerableSet.Bytes32Set storage pointer,uint256)": "infinite", - "at(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite", - "contains(struct EnumerableSet.AddressSet storage pointer,address)": "infinite", - "contains(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite", - "contains(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite", - "length(struct EnumerableSet.AddressSet storage pointer)": "infinite", - "length(struct EnumerableSet.Bytes32Set storage pointer)": "infinite", - "length(struct EnumerableSet.UintSet storage pointer)": "infinite", - "remove(struct EnumerableSet.AddressSet storage pointer,address)": "infinite", - "remove(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite", - "remove(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite", - "values(struct EnumerableSet.AddressSet storage pointer)": "infinite", - "values(struct EnumerableSet.Bytes32Set storage pointer)": "infinite", - "values(struct EnumerableSet.UintSet storage pointer)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - } - } - } - }, - "sources": { - "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol", - "exportedSymbols": { - "ACLTrait": [1620], - "AccountFactoryV2": [138], - "AccountTransferNotAllowedException": [357], - "AdapterUsedTwiceException": [342], - "AddressIsNotContractException": [282], - "AllowanceFailedException": [416], - "AmountCantBeZeroException": [448], - "BalanceLessThanMinimumDesiredException": [389], - "BorrowAmountOutOfLimitsException": [384], - "BorrowedBlockLimitException": [381], - "BorrowingForbiddenException": [375], - "BorrowingMoreU2ForbiddenException": [436], - "CallerNotAdapterException": [327], - "CallerNotConfiguratorException": [300], - "CallerNotControllerException": [309], - "CallerNotCreditAccountOwnerException": [297], - "CallerNotCreditFacadeException": [306], - "CallerNotCreditManagerException": [303], - "CallerNotGaugeException": [318], - "CallerNotPausableAdminException": [312], - "CallerNotPoolQuotaKeeperException": [321], - "CallerNotUnPausableAdminException": [315], - "CallerNotVoterException": [324], - "CannotRampLTForUnderlyingException": [428], - "CantTransferLiquidatableAccountException": [378], - "Clones": [16909], - "ContractIsNotAnAllowedAdapterException": [348], - "ContractsRegisterTrait": [1714], - "CreditAccount": [225], - "CreditAccountNotExistsException": [419], - "CreditAccountNotLiquidatableException": [360], - "CreditFacadeNonBlacklistable": [454], - "CreditManagerCantBorrowException": [443], - "CustomHealthFactorTooLowException": [431], - "ExpectedBalancesAlreadySetException": [395], - "ExpectedLiquidityLimitException": [441], - "ExternalCallCreditAccountNotSetException": [469], - "ForbiddenDuringClosureException": [366], - "ForbiddenTokensException": [398], - "IAccountFactory": [256], - "IncompatibleContractException": [345], - "IncompatibleCreditManagerException": [277], - "IncompatiblePoolQuotaKeeper": [445], - "IncorrectCallDataException": [363], - "IncorrectExpirationDateException": [339], - "IncorrectLimitsException": [336], - "IncorrectLiquidationThresholdException": [333], - "IncorrectParameterException": [267], - "IncorrectPriceFeedException": [294], - "IncorrectTokenContractException": [291], - "IncreaseAndDecreaseForbiddenInOneCallException": [369], - "InvalidBotException": [451], - "LiquiditySanityCheckException": [459], - "NoFreeQithdrawalSlotsException": [463], - "NoPermissionException": [467], - "NotAllowedAfterExpirationException": [392], - "NotAllowedForBlacklistedAddressException": [401], - "NotAllowedWhenNotExpirableException": [354], - "NotApprovedBotException": [404], - "NotEnoughCollateralException": [413], - "NotImplementedException": [264], - "NothingToClaimException": [457], - "ReceiveIsNotAllowedException": [275], - "RegisteredCreditManagerOnlyException": [269], - "RegisteredPoolOnlyException": [271], - "SetLTForUnderlyingException": [330], - "TargetContractNotAllowedException": [410], - "TokenAlreadyAddedException": [285], - "TokenIsNotQuotedException": [351], - "TokenNotAllowedException": [288], - "TooManyEnabledTokensException": [425], - "TooManyTokensException": [422], - "UnknownMethodException": [372], - "UserAlreadyHasAccountException": [407], - "ValueOutOfRangeException": [439], - "VotingContractNotAllowedException": [434], - "WethPoolsOnlyException": [273], - "ZeroAddressException": [261], - "ZeroCallsException": [461] - }, - "id": 139, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": ["solidity", "^", "0.8", ".17"], - "nodeType": "PragmaDirective", - "src": "128:24:0" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol", - "file": "../traits/ContractsRegisterTrait.sol", - "id": 3, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 1715, - "src": "154:76:0", - "symbolAliases": [ - { - "foreign": { - "id": 2, - "name": "ContractsRegisterTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1714, - "src": "162:22:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol", - "id": 5, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 16910, - "src": "231:104:0", - "symbolAliases": [ - { - "foreign": { - "id": 4, - "name": "Clones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16909, - "src": "239:6:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol", - "file": "../credit/CreditAccount.sol", - "id": 7, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 226, - "src": "337:58:0", - "symbolAliases": [ - { - "foreign": { - "id": 6, - "name": "CreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 225, - "src": "345:13:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol", - "file": "../traits/ACLTrait.sol", - "id": 9, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 1621, - "src": "396:48:0", - "symbolAliases": [ - { - "foreign": { - "id": 8, - "name": "ACLTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1620, - "src": "404:8:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol", - "file": "../interfaces/IAccountFactory.sol", - "id": 11, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 257, - "src": "446:66:0", - "symbolAliases": [ - { - "foreign": { - "id": 10, - "name": "IAccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 256, - "src": "454:15:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 12, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 139, - "sourceUnit": 470, - "src": "528:39:0", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 14, - "name": "IAccountFactory", - "nameLocations": ["644:15:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 256, - "src": "644:15:0" - }, - "id": 15, - "nodeType": "InheritanceSpecifier", - "src": "644:15:0" - }, - { - "baseName": { - "id": 16, - "name": "ACLTrait", - "nameLocations": ["661:8:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1620, - "src": "661:8:0" - }, - "id": 17, - "nodeType": "InheritanceSpecifier", - "src": "661:8:0" - }, - { - "baseName": { - "id": 18, - "name": "ContractsRegisterTrait", - "nameLocations": ["671:22:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1714, - "src": "671:22:0" - }, - "id": 19, - "nodeType": "InheritanceSpecifier", - "src": "671:22:0" - } - ], - "canonicalName": "AccountFactoryV2", - "contractDependencies": [225], - "contractKind": "contract", - "documentation": { - "id": 13, - "nodeType": "StructuredDocumentation", - "src": "569:46:0", - "text": "@title Disposable credit accounts factory" - }, - "fullyImplemented": true, - "id": 138, - "linearizedBaseContracts": [138, 1714, 1620, 1736, 256, 12963, 235], - "name": "AccountFactoryV2", - "nameLocation": "624:16:0", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 20, - "nodeType": "StructuredDocumentation", - "src": "700:53:0", - "text": "@dev Address of master credit account for cloning" - }, - "functionSelector": "a4c98fed", - "id": 24, - "mutability": "mutable", - "name": "masterCreditAccounts", - "nameLocation": "793:20:0", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "758:55:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 23, - "keyType": { - "id": 21, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "766:7:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "758:27:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 22, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "777:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "documentation": { - "id": 25, - "nodeType": "StructuredDocumentation", - "src": "820:25:0", - "text": "@dev Contract version" - }, - "functionSelector": "54fd4d50", - "id": 28, - "mutability": "constant", - "name": "version", - "nameLocation": "874:7:0", - "nodeType": "VariableDeclaration", - "scope": 138, - "src": "850:38:0", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 26, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "850:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "335f3030", - "id": 27, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "884:4:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_300_by_1", - "typeString": "int_const 300" - }, - "value": "3_00" - }, - "visibility": "public" - }, - { - "errorSelector": "929e170e", - "id": 30, - "name": "MasterCreditAccountAlreadyDeployed", - "nameLocation": "901:34:0", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 29, - "nodeType": "ParameterList", - "parameters": [], - "src": "935:2:0" - }, - "src": "895:43:0" - }, - { - "body": { - "id": 42, - "nodeType": "Block", - "src": "1108:2:0", - "statements": [] - }, - "documentation": { - "id": 31, - "nodeType": "StructuredDocumentation", - "src": "944:56:0", - "text": "@param addressProvider Address of address repository" - }, - "id": 43, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 36, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "1051:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 37, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 35, - "name": "ACLTrait", - "nameLocations": ["1042:8:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1620, - "src": "1042:8:0" - }, - "nodeType": "ModifierInvocation", - "src": "1042:25:0" - }, - { - "arguments": [ - { - "id": 39, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "1091:15:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 40, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 38, - "name": "ContractsRegisterTrait", - "nameLocations": ["1068:22:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1714, - "src": "1068:22:0" - }, - "nodeType": "ModifierInvocation", - "src": "1068:39:0" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 34, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 33, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "1025:15:0", - "nodeType": "VariableDeclaration", - "scope": 43, - "src": "1017:23:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 32, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1017:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1016:25:0" - }, - "returnParameters": { - "id": 41, - "nodeType": "ParameterList", - "parameters": [], - "src": "1108:0:0" - }, - "scope": 138, - "src": "1005:105:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [249], - "body": { - "id": 66, - "nodeType": "Block", - "src": "1330:291:0", - "statements": [ - { - "assignments": [55], - "declarations": [ - { - "constant": false, - "id": 55, - "mutability": "mutable", - "name": "masterCreditAccount", - "nameLocation": "1348:19:0", - "nodeType": "VariableDeclaration", - "scope": 66, - "src": "1340:27:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 54, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1340:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 58, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 56, - "name": "_getMasterCreditAccountOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 137, - "src": "1370:31:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1370:33:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1340:63:0" - }, - { - "expression": { - "id": 64, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 59, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52, - "src": "1479:13:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 62, - "name": "masterCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 55, - "src": "1508:19:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 60, - "name": "Clones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16909, - "src": "1495:6:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Clones_$16909_$", - "typeString": "type(library Clones)" - } - }, - "id": 61, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1502:5:0", - "memberName": "clone", - "nodeType": "MemberAccess", - "referencedDeclaration": 16852, - "src": "1495:12:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", - "typeString": "function (address) returns (address)" - } - }, - "id": 63, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1495:33:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1479:49:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 65, - "nodeType": "ExpressionStatement", - "src": "1479:49:0" - } - ] - }, - "documentation": { - "id": 44, - "nodeType": "StructuredDocumentation", - "src": "1116:114:0", - "text": "@dev Provides a new credit account to a Credit Manager\n @return creditAccount Address of credit account" - }, - "functionSelector": "21d18456", - "id": 67, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "takeCreditAccount", - "nameLocation": "1244:17:0", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 50, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1289:8:0" - }, - "parameters": { - "id": 49, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 46, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 67, - "src": "1262:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 45, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1262:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 48, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 67, - "src": "1271:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 47, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1271:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1261:18:0" - }, - "returnParameters": { - "id": 53, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 52, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "1315:13:0", - "nodeType": "VariableDeclaration", - "scope": 67, - "src": "1307:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 51, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1307:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1306:23:0" - }, - "scope": 138, - "src": "1235:386:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [255], - "body": { - "id": 73, - "nodeType": "Block", - "src": "1695:47:0", - "statements": [] - }, - "functionSelector": "89b77b3e", - "id": 74, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "returnCreditAccount", - "nameLocation": "1636:19:0", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 71, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1686:8:0" - }, - "parameters": { - "id": 70, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 69, - "mutability": "mutable", - "name": "usedAccount", - "nameLocation": "1664:11:0", - "nodeType": "VariableDeclaration", - "scope": 74, - "src": "1656:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 68, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1656:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1655:21:0" - }, - "returnParameters": { - "id": 72, - "nodeType": "ParameterList", - "parameters": [], - "src": "1695:0:0" - }, - "scope": 138, - "src": "1627:115:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 112, - "nodeType": "Block", - "src": "1916:223:0", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 92, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 84, - "name": "masterCreditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "1930:20:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 87, - "indexExpression": { - "expression": { - "id": 85, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1951:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 86, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1955:6:0", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1951:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1930:32:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 90, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1974:1:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 89, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1966:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 88, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1966:7:0", - "typeDescriptions": {} - } - }, - "id": 91, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1966:10:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1930:46:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 97, - "nodeType": "IfStatement", - "src": "1926:120:0", - "trueBody": { - "id": 96, - "nodeType": "Block", - "src": "1978:68:0", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 93, - "name": "MasterCreditAccountAlreadyDeployed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 30, - "src": "1999:34:0", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 94, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1999:36:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 95, - "nodeType": "RevertStatement", - "src": "1992:43:0" - } - ] - } - }, - { - "expression": { - "id": 110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 98, - "name": "masterCreditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2056:20:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 101, - "indexExpression": { - "expression": { - "id": 99, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2077:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2081:6:0", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2077:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2056:32:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 107, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 76, - "src": "2117:13:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2099:17:0", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_CreditAccount_$225_$", - "typeString": "function (address) returns (contract CreditAccount)" - }, - "typeName": { - "id": 105, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 104, - "name": "CreditAccount", - "nameLocations": ["2103:13:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 225, - "src": "2103:13:0" - }, - "referencedDeclaration": 225, - "src": "2103:13:0", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditAccount_$225", - "typeString": "contract CreditAccount" - } - } - }, - "id": 108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2099:32:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditAccount_$225", - "typeString": "contract CreditAccount" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_CreditAccount_$225", - "typeString": "contract CreditAccount" - } - ], - "id": 103, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2091:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 102, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2091:7:0", - "typeDescriptions": {} - } - }, - "id": 109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2091:41:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2056:76:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 111, - "nodeType": "ExpressionStatement", - "src": "2056:76:0" - } - ] - }, - "functionSelector": "e26b2f63", - "id": 113, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 79, - "kind": "modifierInvocation", - "modifierName": { - "id": 78, - "name": "configuratorOnly", - "nameLocations": ["1844:16:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1619, - "src": "1844:16:0" - }, - "nodeType": "ModifierInvocation", - "src": "1844:16:0" - }, - { - "arguments": [ - { - "id": 81, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 76, - "src": "1897:13:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 82, - "kind": "modifierInvocation", - "modifierName": { - "id": 80, - "name": "registeredCreditManagerOnly", - "nameLocations": ["1869:27:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1698, - "src": "1869:27:0" - }, - "nodeType": "ModifierInvocation", - "src": "1869:42:0" - } - ], - "name": "addCreditManager", - "nameLocation": "1779:16:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 77, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 76, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1804:13:0", - "nodeType": "VariableDeclaration", - "scope": 113, - "src": "1796:21:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 75, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1796:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1795:23:0" - }, - "returnParameters": { - "id": 83, - "nodeType": "ParameterList", - "parameters": [], - "src": "1916:0:0" - }, - "scope": 138, - "src": "1770:369:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 136, - "nodeType": "Block", - "src": "2229:162:0", - "statements": [ - { - "expression": { - "id": 123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 118, - "name": "masterCA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "2239:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 119, - "name": "masterCreditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 24, - "src": "2250:20:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 122, - "indexExpression": { - "expression": { - "id": 120, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2271:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2275:6:0", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2271:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2250:32:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2239:43:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 124, - "nodeType": "ExpressionStatement", - "src": "2239:43:0" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 130, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 125, - "name": "masterCA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "2296:8:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 128, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2316:1:0", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 127, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2308:7:0", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2308:7:0", - "typeDescriptions": {} - } - }, - "id": 129, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2308:10:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2296:22:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 135, - "nodeType": "IfStatement", - "src": "2292:93:0", - "trueBody": { - "id": 134, - "nodeType": "Block", - "src": "2320:65:0", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 131, - "name": "CallerNotCreditManagerException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "2341:31:0", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2341:33:0", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 133, - "nodeType": "RevertStatement", - "src": "2334:40:0" - } - ] - } - } - ] - }, - "id": 137, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getMasterCreditAccountOrRevert", - "nameLocation": "2154:31:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 114, - "nodeType": "ParameterList", - "parameters": [], - "src": "2185:2:0" - }, - "returnParameters": { - "id": 117, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 116, - "mutability": "mutable", - "name": "masterCA", - "nameLocation": "2219:8:0", - "nodeType": "VariableDeclaration", - "scope": 137, - "src": "2211:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 115, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2211:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2210:18:0" - }, - "scope": 138, - "src": "2145:246:0", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 139, - "src": "615:1778:0", - "usedErrors": [30, 261, 269, 300, 303] - } - ], - "src": "128:2266:0" - }, - "id": 0 - }, - "/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol", - "exportedSymbols": { - "AccountTransferNotAllowedException": [357], - "AdapterUsedTwiceException": [342], - "Address": [18720], - "AddressIsNotContractException": [282], - "AllowanceFailedException": [416], - "AmountCantBeZeroException": [448], - "BalanceLessThanMinimumDesiredException": [389], - "BorrowAmountOutOfLimitsException": [384], - "BorrowedBlockLimitException": [381], - "BorrowingForbiddenException": [375], - "BorrowingMoreU2ForbiddenException": [436], - "CallerNotAdapterException": [327], - "CallerNotConfiguratorException": [300], - "CallerNotControllerException": [309], - "CallerNotCreditAccountOwnerException": [297], - "CallerNotCreditFacadeException": [306], - "CallerNotCreditManagerException": [303], - "CallerNotGaugeException": [318], - "CallerNotPausableAdminException": [312], - "CallerNotPoolQuotaKeeperException": [321], - "CallerNotUnPausableAdminException": [315], - "CallerNotVoterException": [324], - "CannotRampLTForUnderlyingException": [428], - "CantTransferLiquidatableAccountException": [378], - "ContractIsNotAnAllowedAdapterException": [348], - "CreditAccount": [225], - "CreditAccountNotExistsException": [419], - "CreditAccountNotLiquidatableException": [360], - "CreditFacadeNonBlacklistable": [454], - "CreditManagerCantBorrowException": [443], - "CustomHealthFactorTooLowException": [431], - "ExpectedBalancesAlreadySetException": [395], - "ExpectedLiquidityLimitException": [441], - "ExternalCallCreditAccountNotSetException": [469], - "ForbiddenDuringClosureException": [366], - "ForbiddenTokensException": [398], - "IERC20": [17905], - "IncompatibleContractException": [345], - "IncompatibleCreditManagerException": [277], - "IncompatiblePoolQuotaKeeper": [445], - "IncorrectCallDataException": [363], - "IncorrectExpirationDateException": [339], - "IncorrectLimitsException": [336], - "IncorrectLiquidationThresholdException": [333], - "IncorrectParameterException": [267], - "IncorrectPriceFeedException": [294], - "IncorrectTokenContractException": [291], - "IncreaseAndDecreaseForbiddenInOneCallException": [369], - "InvalidBotException": [451], - "LiquiditySanityCheckException": [459], - "NoFreeQithdrawalSlotsException": [463], - "NoPermissionException": [467], - "NotAllowedAfterExpirationException": [392], - "NotAllowedForBlacklistedAddressException": [401], - "NotAllowedWhenNotExpirableException": [354], - "NotApprovedBotException": [404], - "NotEnoughCollateralException": [413], - "NotImplementedException": [264], - "NothingToClaimException": [457], - "ReceiveIsNotAllowedException": [275], - "RegisteredCreditManagerOnlyException": [269], - "RegisteredPoolOnlyException": [271], - "SafeERC20": [18247], - "SetLTForUnderlyingException": [330], - "TargetContractNotAllowedException": [410], - "TokenAlreadyAddedException": [285], - "TokenIsNotQuotedException": [351], - "TokenNotAllowedException": [288], - "TooManyEnabledTokensException": [425], - "TooManyTokensException": [422], - "UnknownMethodException": [372], - "UserAlreadyHasAccountException": [407], - "ValueOutOfRangeException": [439], - "VotingContractNotAllowedException": [434], - "WethPoolsOnlyException": [273], - "ZeroAddressException": [261], - "ZeroCallsException": [461] - }, - "id": 226, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 140, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:1" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 142, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 226, - "sourceUnit": 18721, - "src": "154:106:1", - "symbolAliases": [ - { - "foreign": { - "id": 141, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "162:7:1", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 144, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 226, - "sourceUnit": 17906, - "src": "262:110:1", - "symbolAliases": [ - { - "foreign": { - "id": 143, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "270:6:1", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "id": 146, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 226, - "sourceUnit": 18248, - "src": "373:122:1", - "symbolAliases": [ - { - "foreign": { - "id": 145, - "name": "SafeERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18247, - "src": "381:9:1", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 147, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 226, - "sourceUnit": 470, - "src": "497:39:1", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "CreditAccount", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 148, - "nodeType": "StructuredDocumentation", - "src": "538:397:1", - "text": "@title Credit Account\n @notice Implements generic credit account logic:\n - Holds collateral assets\n - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized\n - Transfers assets\n - Executes financial orders by calling connected protocols on its behalf\n More: https://dev.gearbox.fi/developers/credit/credit_account" - }, - "fullyImplemented": true, - "id": 225, - "linearizedBaseContracts": [225], - "name": "CreditAccount", - "nameLocation": "944:13:1", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 152, - "libraryName": { - "id": 149, - "name": "SafeERC20", - "nameLocations": ["970:9:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18247, - "src": "970:9:1" - }, - "nodeType": "UsingForDirective", - "src": "964:27:1", - "typeName": { - "id": 151, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 150, - "name": "IERC20", - "nameLocations": ["984:6:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "984:6:1" - }, - "referencedDeclaration": 17905, - "src": "984:6:1", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - } - }, - { - "global": false, - "id": 155, - "libraryName": { - "id": 153, - "name": "Address", - "nameLocations": ["1002:7:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "1002:7:1" - }, - "nodeType": "UsingForDirective", - "src": "996:26:1", - "typeName": { - "id": 154, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1014:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "constant": false, - "documentation": { - "id": 156, - "nodeType": "StructuredDocumentation", - "src": "1027:59:1", - "text": "@dev Address of the currently connected Credit Manager" - }, - "functionSelector": "c12c21c0", - "id": 158, - "mutability": "immutable", - "name": "creditManager", - "nameLocation": "1116:13:1", - "nodeType": "VariableDeclaration", - "scope": 225, - "src": "1091:38:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 157, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1091:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "54fd4d50", - "id": 161, - "mutability": "constant", - "name": "version", - "nameLocation": "1184:7:1", - "nodeType": "VariableDeclaration", - "scope": 225, - "src": "1160:38:1", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 159, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1160:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "335f3030", - "id": 160, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1194:4:1", - "typeDescriptions": { - "typeIdentifier": "t_rational_300_by_1", - "typeString": "int_const 300" - }, - "value": "3_00" - }, - "visibility": "public" - }, - { - "body": { - "id": 174, - "nodeType": "Block", - "src": "1305:125:1", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 164, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1319:3:1", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1323:6:1", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1319:10:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 166, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 158, - "src": "1333:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1319:27:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 172, - "nodeType": "IfStatement", - "src": "1315:98:1", - "trueBody": { - "id": 171, - "nodeType": "Block", - "src": "1348:65:1", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 168, - "name": "CallerNotCreditManagerException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "1369:31:1", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1369:33:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 170, - "nodeType": "RevertStatement", - "src": "1362:40:1" - } - ] - } - }, - { - "id": 173, - "nodeType": "PlaceholderStatement", - "src": "1422:1:1" - } - ] - }, - "documentation": { - "id": 162, - "nodeType": "StructuredDocumentation", - "src": "1205:66:1", - "text": "@dev Restricts operations to the connected Credit Manager only" - }, - "id": 175, - "name": "creditManagerOnly", - "nameLocation": "1285:17:1", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 163, - "nodeType": "ParameterList", - "parameters": [], - "src": "1302:2:1" - }, - "src": "1276:154:1", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 184, - "nodeType": "Block", - "src": "1472:47:1", - "statements": [ - { - "expression": { - "id": 182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 180, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 158, - "src": "1482:13:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 181, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 177, - "src": "1498:14:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1482:30:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 183, - "nodeType": "ExpressionStatement", - "src": "1482:30:1" - } - ] - }, - "id": 185, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 178, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 177, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "1456:14:1", - "nodeType": "VariableDeclaration", - "scope": 185, - "src": "1448:22:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 176, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1448:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1447:24:1" - }, - "returnParameters": { - "id": 179, - "nodeType": "ParameterList", - "parameters": [], - "src": "1472:0:1" - }, - "scope": 225, - "src": "1436:83:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 205, - "nodeType": "Block", - "src": "1935:67:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 201, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 190, - "src": "1972:2:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 202, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 192, - "src": "1976:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 198, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 188, - "src": "1952:5:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 197, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "1945:6:1", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1945:13:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1959:12:1", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 17998, - "src": "1945:26:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17905_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1945:38:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 204, - "nodeType": "ExpressionStatement", - "src": "1945:38:1" - } - ] - }, - "documentation": { - "id": 186, - "nodeType": "StructuredDocumentation", - "src": "1525:281:1", - "text": "@dev Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\n @param token Token to be transferred from the Credit Account.\n @param to Address of the recipient.\n @param amount Amount to be transferred." - }, - "functionSelector": "d1660f99", - "id": 206, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 195, - "kind": "modifierInvocation", - "modifierName": { - "id": 194, - "name": "creditManagerOnly", - "nameLocations": ["1901:17:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 175, - "src": "1901:17:1" - }, - "nodeType": "ModifierInvocation", - "src": "1901:17:1" - } - ], - "name": "safeTransfer", - "nameLocation": "1820:12:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 193, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 188, - "mutability": "mutable", - "name": "token", - "nameLocation": "1841:5:1", - "nodeType": "VariableDeclaration", - "scope": 206, - "src": "1833:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 187, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1833:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 190, - "mutability": "mutable", - "name": "to", - "nameLocation": "1856:2:1", - "nodeType": "VariableDeclaration", - "scope": 206, - "src": "1848:10:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 189, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1848:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 192, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1868:6:1", - "nodeType": "VariableDeclaration", - "scope": 206, - "src": "1860:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 191, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1860:7:1", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1832:43:1" - }, - "returnParameters": { - "id": 196, - "nodeType": "ParameterList", - "parameters": [], - "src": "1935:0:1" - }, - "scope": 225, - "src": "1811:191:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 223, - "nodeType": "Block", - "src": "2345:68:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 220, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 211, - "src": "2387:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 218, - "name": "destination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 209, - "src": "2362:11:1", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2374:12:1", - "memberName": "functionCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 18460, - "src": "2362:24:1", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$", - "typeString": "function (address,bytes memory) returns (bytes memory)" - } - }, - "id": 221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2362:30:1", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 217, - "id": 222, - "nodeType": "Return", - "src": "2355:37:1" - } - ] - }, - "documentation": { - "id": 207, - "nodeType": "StructuredDocumentation", - "src": "2008:225:1", - "text": "@dev Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\n @param destination Contract address to be called.\n @param data Data to call the contract with." - }, - "functionSelector": "1cff79cd", - "id": 224, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 214, - "kind": "modifierInvocation", - "modifierName": { - "id": 213, - "name": "creditManagerOnly", - "nameLocations": ["2304:17:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 175, - "src": "2304:17:1" - }, - "nodeType": "ModifierInvocation", - "src": "2304:17:1" - } - ], - "name": "execute", - "nameLocation": "2247:7:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 212, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 209, - "mutability": "mutable", - "name": "destination", - "nameLocation": "2263:11:1", - "nodeType": "VariableDeclaration", - "scope": 224, - "src": "2255:19:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 208, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2255:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 211, - "mutability": "mutable", - "name": "data", - "nameLocation": "2289:4:1", - "nodeType": "VariableDeclaration", - "scope": 224, - "src": "2276:17:1", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 210, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2276:5:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2254:40:1" - }, - "returnParameters": { - "id": 217, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 216, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 224, - "src": "2331:12:1", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 215, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2331:5:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2330:14:1" - }, - "scope": 225, - "src": "2238:175:1", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 226, - "src": "935:1480:1", - "usedErrors": [303] - } - ], - "src": "128:2288:1" - }, - "id": 1 - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol", - "exportedSymbols": { - "IAccountFactory": [256], - "IAccountFactoryEvents": [235], - "IVersion": [12963] - }, - "id": 257, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 227, - "literals": ["solidity", "^", "0.8", ".17"], - "nodeType": "PragmaDirective", - "src": "123:24:2" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "id": 229, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 257, - "sourceUnit": 12964, - "src": "149:125:2", - "symbolAliases": [ - { - "foreign": { - "id": 228, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:2", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IAccountFactoryEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 235, - "linearizedBaseContracts": [235], - "name": "IAccountFactoryEvents", - "nameLocation": "286:21:2", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 230, - "nodeType": "StructuredDocumentation", - "src": "314:51:2", - "text": "@dev Emits when a new Credit Account is created" - }, - "eventSelector": "9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc3", - "id": 234, - "name": "NewCreditAccount", - "nameLocation": "376:16:2", - "nodeType": "EventDefinition", - "parameters": { - "id": 233, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 232, - "indexed": true, - "mutability": "mutable", - "name": "account", - "nameLocation": "409:7:2", - "nodeType": "VariableDeclaration", - "scope": 234, - "src": "393:23:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 231, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "393:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "392:25:2" - }, - "src": "370:48:2" - } - ], - "scope": 257, - "src": "276:144:2", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 236, - "name": "IAccountFactoryEvents", - "nameLocations": ["451:21:2"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 235, - "src": "451:21:2" - }, - "id": 237, - "nodeType": "InheritanceSpecifier", - "src": "451:21:2" - }, - { - "baseName": { - "id": 238, - "name": "IVersion", - "nameLocations": ["474:8:2"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "474:8:2" - }, - "id": 239, - "nodeType": "InheritanceSpecifier", - "src": "474:8:2" - } - ], - "canonicalName": "IAccountFactory", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 256, - "linearizedBaseContracts": [256, 12963, 235], - "name": "IAccountFactory", - "nameLocation": "432:15:2", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 240, - "nodeType": "StructuredDocumentation", - "src": "489:58:2", - "text": "@dev Provides a new credit account to a Credit Manager" - }, - "functionSelector": "21d18456", - "id": 249, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "takeCreditAccount", - "nameLocation": "561:17:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 245, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 242, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 249, - "src": "579:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 241, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "579:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 244, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 249, - "src": "588:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 243, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "588:7:2", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "578:18:2" - }, - "returnParameters": { - "id": 248, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 247, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 249, - "src": "615:7:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 246, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "615:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "614:9:2" - }, - "scope": 256, - "src": "552:72:2", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 250, - "nodeType": "StructuredDocumentation", - "src": "630:148:2", - "text": "@dev Retrieves the Credit Account from the Credit Manager and adds it to the stock\n @param usedAccount Address of returned credit account" - }, - "functionSelector": "89b77b3e", - "id": 255, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "returnCreditAccount", - "nameLocation": "792:19:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 253, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 252, - "mutability": "mutable", - "name": "usedAccount", - "nameLocation": "820:11:2", - "nodeType": "VariableDeclaration", - "scope": 255, - "src": "812:19:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 251, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "812:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "811:21:2" - }, - "returnParameters": { - "id": 254, - "nodeType": "ParameterList", - "parameters": [], - "src": "841:0:2" - }, - "scope": 256, - "src": "783:59:2", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 257, - "src": "422:422:2", - "usedErrors": [] - } - ], - "src": "123:722:2" - }, - "id": 2 - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "exportedSymbols": { - "AccountTransferNotAllowedException": [357], - "AdapterUsedTwiceException": [342], - "AddressIsNotContractException": [282], - "AllowanceFailedException": [416], - "AmountCantBeZeroException": [448], - "BalanceLessThanMinimumDesiredException": [389], - "BorrowAmountOutOfLimitsException": [384], - "BorrowedBlockLimitException": [381], - "BorrowingForbiddenException": [375], - "BorrowingMoreU2ForbiddenException": [436], - "CallerNotAdapterException": [327], - "CallerNotConfiguratorException": [300], - "CallerNotControllerException": [309], - "CallerNotCreditAccountOwnerException": [297], - "CallerNotCreditFacadeException": [306], - "CallerNotCreditManagerException": [303], - "CallerNotGaugeException": [318], - "CallerNotPausableAdminException": [312], - "CallerNotPoolQuotaKeeperException": [321], - "CallerNotUnPausableAdminException": [315], - "CallerNotVoterException": [324], - "CannotRampLTForUnderlyingException": [428], - "CantTransferLiquidatableAccountException": [378], - "ContractIsNotAnAllowedAdapterException": [348], - "CreditAccountNotExistsException": [419], - "CreditAccountNotLiquidatableException": [360], - "CreditFacadeNonBlacklistable": [454], - "CreditManagerCantBorrowException": [443], - "CustomHealthFactorTooLowException": [431], - "ExpectedBalancesAlreadySetException": [395], - "ExpectedLiquidityLimitException": [441], - "ExternalCallCreditAccountNotSetException": [469], - "ForbiddenDuringClosureException": [366], - "ForbiddenTokensException": [398], - "IncompatibleContractException": [345], - "IncompatibleCreditManagerException": [277], - "IncompatiblePoolQuotaKeeper": [445], - "IncorrectCallDataException": [363], - "IncorrectExpirationDateException": [339], - "IncorrectLimitsException": [336], - "IncorrectLiquidationThresholdException": [333], - "IncorrectParameterException": [267], - "IncorrectPriceFeedException": [294], - "IncorrectTokenContractException": [291], - "IncreaseAndDecreaseForbiddenInOneCallException": [369], - "InvalidBotException": [451], - "LiquiditySanityCheckException": [459], - "NoFreeQithdrawalSlotsException": [463], - "NoPermissionException": [467], - "NotAllowedAfterExpirationException": [392], - "NotAllowedForBlacklistedAddressException": [401], - "NotAllowedWhenNotExpirableException": [354], - "NotApprovedBotException": [404], - "NotEnoughCollateralException": [413], - "NotImplementedException": [264], - "NothingToClaimException": [457], - "ReceiveIsNotAllowedException": [275], - "RegisteredCreditManagerOnlyException": [269], - "RegisteredPoolOnlyException": [271], - "SetLTForUnderlyingException": [330], - "TargetContractNotAllowedException": [410], - "TokenAlreadyAddedException": [285], - "TokenIsNotQuotedException": [351], - "TokenNotAllowedException": [288], - "TooManyEnabledTokensException": [425], - "TooManyTokensException": [422], - "UnknownMethodException": [372], - "UserAlreadyHasAccountException": [407], - "ValueOutOfRangeException": [439], - "VotingContractNotAllowedException": [434], - "WethPoolsOnlyException": [273], - "ZeroAddressException": [261], - "ZeroCallsException": [461] - }, - "id": 470, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 258, - "literals": ["solidity", "^", "0.8", ".17"], - "nodeType": "PragmaDirective", - "src": "123:24:3" - }, - { - "documentation": { - "id": 259, - "nodeType": "StructuredDocumentation", - "src": "186:74:3", - "text": "@dev Thrown on attempting to set an important address to zero address" - }, - "errorSelector": "b2335f2e", - "id": 261, - "name": "ZeroAddressException", - "nameLocation": "266:20:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 260, - "nodeType": "ParameterList", - "parameters": [], - "src": "286:2:3" - }, - "src": "260:29:3" - }, - { - "documentation": { - "id": 262, - "nodeType": "StructuredDocumentation", - "src": "291:65:3", - "text": "@dev Thrown on attempting to call a non-implemented function" - }, - "errorSelector": "24e46f70", - "id": 264, - "name": "NotImplementedException", - "nameLocation": "362:23:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 263, - "nodeType": "ParameterList", - "parameters": [], - "src": "385:2:3" - }, - "src": "356:32:3" - }, - { - "documentation": { - "id": 265, - "nodeType": "StructuredDocumentation", - "src": "390:45:3", - "text": "@dev Thrown on incorrect input parameter" - }, - "errorSelector": "47fbaa97", - "id": 267, - "name": "IncorrectParameterException", - "nameLocation": "441:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 266, - "nodeType": "ParameterList", - "parameters": [], - "src": "468:2:3" - }, - "src": "435:36:3" - }, - { - "errorSelector": "bc6a488a", - "id": 269, - "name": "RegisteredCreditManagerOnlyException", - "nameLocation": "479:36:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 268, - "nodeType": "ParameterList", - "parameters": [], - "src": "515:2:3" - }, - "src": "473:45:3" - }, - { - "errorSelector": "4d0a5931", - "id": 271, - "name": "RegisteredPoolOnlyException", - "nameLocation": "525:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 270, - "nodeType": "ParameterList", - "parameters": [], - "src": "552:2:3" - }, - "src": "519:36:3" - }, - { - "errorSelector": "190633b2", - "id": 273, - "name": "WethPoolsOnlyException", - "nameLocation": "563:22:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 272, - "nodeType": "ParameterList", - "parameters": [], - "src": "585:2:3" - }, - "src": "557:31:3" - }, - { - "errorSelector": "efd5a10e", - "id": 275, - "name": "ReceiveIsNotAllowedException", - "nameLocation": "595:28:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 274, - "nodeType": "ParameterList", - "parameters": [], - "src": "623:2:3" - }, - "src": "589:37:3" - }, - { - "errorSelector": "2e47790c", - "id": 277, - "name": "IncompatibleCreditManagerException", - "nameLocation": "634:34:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 276, - "nodeType": "ParameterList", - "parameters": [], - "src": "668:2:3" - }, - "src": "628:43:3" - }, - { - "documentation": { - "id": 278, - "nodeType": "StructuredDocumentation", - "src": "673:83:3", - "text": "@dev Thrown on attempting to set an EOA as an important contract in the system" - }, - "errorSelector": "df4c572d", - "id": 282, - "name": "AddressIsNotContractException", - "nameLocation": "762:29:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 281, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 280, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 282, - "src": "792:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 279, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "792:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "791:9:3" - }, - "src": "756:45:3" - }, - { - "documentation": { - "id": 283, - "nodeType": "StructuredDocumentation", - "src": "803:82:3", - "text": "@dev Thrown on attempting to add a token that is already in a collateral list" - }, - "errorSelector": "2e5a5c77", - "id": 285, - "name": "TokenAlreadyAddedException", - "nameLocation": "891:26:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 284, - "nodeType": "ParameterList", - "parameters": [], - "src": "917:2:3" - }, - "src": "885:35:3" - }, - { - "documentation": { - "id": 286, - "nodeType": "StructuredDocumentation", - "src": "922:97:3", - "text": "@dev Thrown on attempting to receive a token that is not a collateral token or was forbidden" - }, - "errorSelector": "700ca0af", - "id": 288, - "name": "TokenNotAllowedException", - "nameLocation": "1025:24:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 287, - "nodeType": "ParameterList", - "parameters": [], - "src": "1049:2:3" - }, - "src": "1019:33:3" - }, - { - "documentation": { - "id": 289, - "nodeType": "StructuredDocumentation", - "src": "1054:79:3", - "text": "@dev Thrown on attempting to use a non-ERC20 contract or an EOA as a token" - }, - "errorSelector": "528ca31d", - "id": 291, - "name": "IncorrectTokenContractException", - "nameLocation": "1139:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 290, - "nodeType": "ParameterList", - "parameters": [], - "src": "1170:2:3" - }, - "src": "1133:40:3" - }, - { - "documentation": { - "id": 292, - "nodeType": "StructuredDocumentation", - "src": "1175:112:3", - "text": "@dev Thrown on attempting to set a token price feed to an address that is not a\n correct price feed" - }, - "errorSelector": "67a7cd43", - "id": 294, - "name": "IncorrectPriceFeedException", - "nameLocation": "1293:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 293, - "nodeType": "ParameterList", - "parameters": [], - "src": "1320:2:3" - }, - "src": "1287:36:3" - }, - { - "documentation": { - "id": 295, - "nodeType": "StructuredDocumentation", - "src": "1345:94:3", - "text": "@dev Thrown on attempting to perform an action for an address that owns no Credit Account" - }, - "errorSelector": "1e83c511", - "id": 297, - "name": "CallerNotCreditAccountOwnerException", - "nameLocation": "1445:36:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 296, - "nodeType": "ParameterList", - "parameters": [], - "src": "1481:2:3" - }, - "src": "1439:45:3" - }, - { - "documentation": { - "id": 298, - "nodeType": "StructuredDocumentation", - "src": "1486:90:3", - "text": "@dev Thrown on attempting to call an access restricted function as a non-Configurator" - }, - "errorSelector": "61081c15", - "id": 300, - "name": "CallerNotConfiguratorException", - "nameLocation": "1582:30:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 299, - "nodeType": "ParameterList", - "parameters": [], - "src": "1612:2:3" - }, - "src": "1576:39:3" - }, - { - "documentation": { - "id": 301, - "nodeType": "StructuredDocumentation", - "src": "1617:93:3", - "text": "@dev Thrown on attempting to call an access restricted function as a non-CreditManagerV3" - }, - "errorSelector": "1f511167", - "id": 303, - "name": "CallerNotCreditManagerException", - "nameLocation": "1716:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 302, - "nodeType": "ParameterList", - "parameters": [], - "src": "1747:2:3" - }, - "src": "1710:40:3" - }, - { - "documentation": { - "id": 304, - "nodeType": "StructuredDocumentation", - "src": "1752:122:3", - "text": "@dev Thrown if an access-restricted function is called by an address that is not\n the connected Credit Facade" - }, - "errorSelector": "0c1d6a3f", - "id": 306, - "name": "CallerNotCreditFacadeException", - "nameLocation": "1880:30:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 305, - "nodeType": "ParameterList", - "parameters": [], - "src": "1910:2:3" - }, - "src": "1874:39:3" - }, - { - "documentation": { - "id": 307, - "nodeType": "StructuredDocumentation", - "src": "1915:90:3", - "text": "@dev Thrown on attempting to call an access restricted function as a non-Configurator" - }, - "errorSelector": "0129bb99", - "id": 309, - "name": "CallerNotControllerException", - "nameLocation": "2011:28:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 308, - "nodeType": "ParameterList", - "parameters": [], - "src": "2039:2:3" - }, - "src": "2005:37:3" - }, - { - "documentation": { - "id": 310, - "nodeType": "StructuredDocumentation", - "src": "2044:74:3", - "text": "@dev Thrown on attempting to pause a contract as a non-Pausable admin" - }, - "errorSelector": "d794b1e7", - "id": 312, - "name": "CallerNotPausableAdminException", - "nameLocation": "2124:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 311, - "nodeType": "ParameterList", - "parameters": [], - "src": "2155:2:3" - }, - "src": "2118:40:3" - }, - { - "documentation": { - "id": 313, - "nodeType": "StructuredDocumentation", - "src": "2160:76:3", - "text": "@dev Thrown on attempting to pause a contract as a non-Unpausable admin" - }, - "errorSelector": "10332dee", - "id": 315, - "name": "CallerNotUnPausableAdminException", - "nameLocation": "2242:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 314, - "nodeType": "ParameterList", - "parameters": [], - "src": "2275:2:3" - }, - "src": "2236:42:3" - }, - { - "documentation": { - "id": 316, - "nodeType": "StructuredDocumentation", - "src": "2280:66:3", - "text": "@dev Thrown when a gauge-only function is called by non-gauge" - }, - "errorSelector": "5dd0cb24", - "id": 318, - "name": "CallerNotGaugeException", - "nameLocation": "2352:23:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 317, - "nodeType": "ParameterList", - "parameters": [], - "src": "2375:2:3" - }, - "src": "2346:32:3" - }, - { - "documentation": { - "id": 319, - "nodeType": "StructuredDocumentation", - "src": "2380:69:3", - "text": "@dev Thrown when a poolQuotaKeeper function is called by non-pqk" - }, - "errorSelector": "1534b9a8", - "id": 321, - "name": "CallerNotPoolQuotaKeeperException", - "nameLocation": "2455:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 320, - "nodeType": "ParameterList", - "parameters": [], - "src": "2488:2:3" - }, - "src": "2449:42:3" - }, - { - "documentation": { - "id": 322, - "nodeType": "StructuredDocumentation", - "src": "2493:74:3", - "text": "@dev Thrown when `vote` or `unvote` are called from non-voter address" - }, - "errorSelector": "ed9cd2af", - "id": 324, - "name": "CallerNotVoterException", - "nameLocation": "2573:23:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 323, - "nodeType": "ParameterList", - "parameters": [], - "src": "2596:2:3" - }, - "src": "2567:32:3" - }, - { - "documentation": { - "id": 325, - "nodeType": "StructuredDocumentation", - "src": "2601:145:3", - "text": "@dev Thrown if an access-restricted function is called by an address that is not\n the connected Credit Facade, or an allowed adapter" - }, - "errorSelector": "5535a8f1", - "id": 327, - "name": "CallerNotAdapterException", - "nameLocation": "2752:25:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 326, - "nodeType": "ParameterList", - "parameters": [], - "src": "2777:2:3" - }, - "src": "2746:34:3" - }, - { - "documentation": { - "id": 328, - "nodeType": "StructuredDocumentation", - "src": "2829:166:3", - "text": "@dev Thrown if the underlying's LT is set directly\n @notice Underlying LT is derived from fee parameters and is set automatically\n on updating fees" - }, - "errorSelector": "3b899cf9", - "id": 330, - "name": "SetLTForUnderlyingException", - "nameLocation": "3001:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 329, - "nodeType": "ParameterList", - "parameters": [], - "src": "3028:2:3" - }, - "src": "2995:36:3" - }, - { - "documentation": { - "id": 331, - "nodeType": "StructuredDocumentation", - "src": "3033:80:3", - "text": "@dev Thrown if the newly set LT if zero or greater than the underlying's LT" - }, - "errorSelector": "33c6608d", - "id": 333, - "name": "IncorrectLiquidationThresholdException", - "nameLocation": "3119:38:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 332, - "nodeType": "ParameterList", - "parameters": [], - "src": "3157:2:3" - }, - "src": "3113:47:3" - }, - { - "documentation": { - "id": 334, - "nodeType": "StructuredDocumentation", - "src": "3162:96:3", - "text": "@dev Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit" - }, - "errorSelector": "9aadd6f0", - "id": 336, - "name": "IncorrectLimitsException", - "nameLocation": "3264:24:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 335, - "nodeType": "ParameterList", - "parameters": [], - "src": "3288:2:3" - }, - "src": "3258:33:3" - }, - { - "documentation": { - "id": 337, - "nodeType": "StructuredDocumentation", - "src": "3293:103:3", - "text": "@dev Thrown if the new expiration date is less than the current expiration date or block.timestamp" - }, - "errorSelector": "e4eaca7f", - "id": 339, - "name": "IncorrectExpirationDateException", - "nameLocation": "3402:32:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 338, - "nodeType": "ParameterList", - "parameters": [], - "src": "3434:2:3" - }, - "src": "3396:41:3" - }, - { - "documentation": { - "id": 340, - "nodeType": "StructuredDocumentation", - "src": "3439:97:3", - "text": "@dev Thrown if an adapter that is already linked to a contract is being connected to another" - }, - "errorSelector": "21ff1e71", - "id": 342, - "name": "AdapterUsedTwiceException", - "nameLocation": "3542:25:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 341, - "nodeType": "ParameterList", - "parameters": [], - "src": "3567:2:3" - }, - "src": "3536:34:3" - }, - { - "documentation": { - "id": 343, - "nodeType": "StructuredDocumentation", - "src": "3572:173:3", - "text": "@dev Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager\n or retrieving the Credit Manager from it fails" - }, - "errorSelector": "e9eddd17", - "id": 345, - "name": "IncompatibleContractException", - "nameLocation": "3751:29:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 344, - "nodeType": "ParameterList", - "parameters": [], - "src": "3780:2:3" - }, - "src": "3745:38:3" - }, - { - "documentation": { - "id": 346, - "nodeType": "StructuredDocumentation", - "src": "3785:94:3", - "text": "@dev Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager" - }, - "errorSelector": "87d928a0", - "id": 348, - "name": "ContractIsNotAnAllowedAdapterException", - "nameLocation": "3885:38:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 347, - "nodeType": "ParameterList", - "parameters": [], - "src": "3923:2:3" - }, - "src": "3879:47:3" - }, - { - "documentation": { - "id": 349, - "nodeType": "StructuredDocumentation", - "src": "3928:89:3", - "text": "@dev Thrown when attempting to limit a token that is not quotable in PoolQuotaKeeper" - }, - "errorSelector": "bfb4633c", - "id": 351, - "name": "TokenIsNotQuotedException", - "nameLocation": "4023:25:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 350, - "nodeType": "ParameterList", - "parameters": [], - "src": "4048:2:3" - }, - "src": "4017:34:3" - }, - { - "documentation": { - "id": 352, - "nodeType": "StructuredDocumentation", - "src": "4122:119:3", - "text": "@dev Thrown if the CreditFacadeV3 is not expirable, and an aciton is attempted that\n requires expirability" - }, - "errorSelector": "50dd11fc", - "id": 354, - "name": "NotAllowedWhenNotExpirableException", - "nameLocation": "4247:35:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 353, - "nodeType": "ParameterList", - "parameters": [], - "src": "4282:2:3" - }, - "src": "4241:44:3" - }, - { - "documentation": { - "id": 355, - "nodeType": "StructuredDocumentation", - "src": "4287:119:3", - "text": "@dev Thrown if a user attempts to transfer a CA to an address that didn't allow it or transfer in whitelisted mode" - }, - "errorSelector": "85b07726", - "id": 357, - "name": "AccountTransferNotAllowedException", - "nameLocation": "4412:34:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 356, - "nodeType": "ParameterList", - "parameters": [], - "src": "4446:2:3" - }, - "src": "4406:43:3" - }, - { - "documentation": { - "id": 358, - "nodeType": "StructuredDocumentation", - "src": "4451:91:3", - "text": "@dev Thrown if a liquidator tries to liquidate an account with a health factor above 1" - }, - "errorSelector": "234b893b", - "id": 360, - "name": "CreditAccountNotLiquidatableException", - "nameLocation": "4548:37:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 359, - "nodeType": "ParameterList", - "parameters": [], - "src": "4585:2:3" - }, - "src": "4542:46:3" - }, - { - "documentation": { - "id": 361, - "nodeType": "StructuredDocumentation", - "src": "4590:64:3", - "text": "@dev Thrown if call data passed to a multicall is too short" - }, - "errorSelector": "e2b0e506", - "id": 363, - "name": "IncorrectCallDataException", - "nameLocation": "4660:26:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 362, - "nodeType": "ParameterList", - "parameters": [], - "src": "4686:2:3" - }, - "src": "4654:35:3" - }, - { - "documentation": { - "id": 364, - "nodeType": "StructuredDocumentation", - "src": "4691:133:3", - "text": "@dev Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing\n an account" - }, - "errorSelector": "5fb9107f", - "id": 366, - "name": "ForbiddenDuringClosureException", - "nameLocation": "4830:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 365, - "nodeType": "ParameterList", - "parameters": [], - "src": "4861:2:3" - }, - "src": "4824:40:3" - }, - { - "documentation": { - "id": 367, - "nodeType": "StructuredDocumentation", - "src": "4866:90:3", - "text": "@dev Thrown if debt increase and decrease are subsequently attempted in one multicall" - }, - "errorSelector": "c0b0caa8", - "id": 369, - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "nameLocation": "4962:46:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 368, - "nodeType": "ParameterList", - "parameters": [], - "src": "5008:2:3" - }, - "src": "4956:55:3" - }, - { - "documentation": { - "id": 370, - "nodeType": "StructuredDocumentation", - "src": "5013:129:3", - "text": "@dev Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade\n during a multicall" - }, - "errorSelector": "1e9e7e7a", - "id": 372, - "name": "UnknownMethodException", - "nameLocation": "5148:22:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 371, - "nodeType": "ParameterList", - "parameters": [], - "src": "5170:2:3" - }, - "src": "5142:31:3" - }, - { - "documentation": { - "id": 373, - "nodeType": "StructuredDocumentation", - "src": "5175:103:3", - "text": "@dev Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on" - }, - "errorSelector": "42ed9ade", - "id": 375, - "name": "BorrowingForbiddenException", - "nameLocation": "5284:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 374, - "nodeType": "ParameterList", - "parameters": [], - "src": "5311:2:3" - }, - "src": "5278:36:3" - }, - { - "documentation": { - "id": 376, - "nodeType": "StructuredDocumentation", - "src": "5316:76:3", - "text": "@dev Thrown if the account owner tries to transfer an unhealthy account" - }, - "errorSelector": "f713841e", - "id": 378, - "name": "CantTransferLiquidatableAccountException", - "nameLocation": "5398:40:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 377, - "nodeType": "ParameterList", - "parameters": [], - "src": "5438:2:3" - }, - "src": "5392:49:3" - }, - { - "documentation": { - "id": 379, - "nodeType": "StructuredDocumentation", - "src": "5443:69:3", - "text": "@dev Thrown if too much new debt was taken within a single block" - }, - "errorSelector": "675f1a56", - "id": 381, - "name": "BorrowedBlockLimitException", - "nameLocation": "5518:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 380, - "nodeType": "ParameterList", - "parameters": [], - "src": "5545:2:3" - }, - "src": "5512:36:3" - }, - { - "documentation": { - "id": 382, - "nodeType": "StructuredDocumentation", - "src": "5550:85:3", - "text": "@dev Thrown if the new debt principal for a CA falls outside of borrowing limits" - }, - "errorSelector": "ce167994", - "id": 384, - "name": "BorrowAmountOutOfLimitsException", - "nameLocation": "5641:32:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 383, - "nodeType": "ParameterList", - "parameters": [], - "src": "5673:2:3" - }, - "src": "5635:41:3" - }, - { - "documentation": { - "id": 385, - "nodeType": "StructuredDocumentation", - "src": "5678:156:3", - "text": "@dev Thrown if one of the balances on a Credit Account is less than expected\n at the end of a multicall, if revertIfReceivedLessThan was called" - }, - "errorSelector": "2f42bd87", - "id": 389, - "name": "BalanceLessThanMinimumDesiredException", - "nameLocation": "5840:38:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 387, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 389, - "src": "5879:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 386, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5879:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5878:9:3" - }, - "src": "5834:54:3" - }, - { - "documentation": { - "id": 390, - "nodeType": "StructuredDocumentation", - "src": "5890:90:3", - "text": "@dev Thrown if a user attempts to open an account on a Credit Facade that has expired" - }, - "errorSelector": "fd956fa5", - "id": 392, - "name": "NotAllowedAfterExpirationException", - "nameLocation": "5986:34:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 391, - "nodeType": "ParameterList", - "parameters": [], - "src": "6020:2:3" - }, - "src": "5980:43:3" - }, - { - "documentation": { - "id": 393, - "nodeType": "StructuredDocumentation", - "src": "6025:100:3", - "text": "@dev Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice" - }, - "errorSelector": "e61eedf5", - "id": 395, - "name": "ExpectedBalancesAlreadySetException", - "nameLocation": "6131:35:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 394, - "nodeType": "ParameterList", - "parameters": [], - "src": "6166:2:3" - }, - "src": "6125:44:3" - }, - { - "documentation": { - "id": 396, - "nodeType": "StructuredDocumentation", - "src": "6171:172:3", - "text": "@dev Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action\n that is not allowed with any forbidden tokens enabled" - }, - "errorSelector": "42f06e54", - "id": 398, - "name": "ForbiddenTokensException", - "nameLocation": "6349:24:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 397, - "nodeType": "ParameterList", - "parameters": [], - "src": "6373:2:3" - }, - "src": "6343:33:3" - }, - { - "documentation": { - "id": 399, - "nodeType": "StructuredDocumentation", - "src": "6378:121:3", - "text": "@dev Thrown when attempting to perform an action on behalf of a borrower that is blacklisted in the underlying token" - }, - "errorSelector": "03cd1712", - "id": 401, - "name": "NotAllowedForBlacklistedAddressException", - "nameLocation": "6505:40:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 400, - "nodeType": "ParameterList", - "parameters": [], - "src": "6545:2:3" - }, - "src": "6499:49:3" - }, - { - "documentation": { - "id": 402, - "nodeType": "StructuredDocumentation", - "src": "6550:99:3", - "text": "@dev Thrown if botMulticall is called by an address that is not a bot for a specified borrower" - }, - "errorSelector": "8fd689c1", - "id": 404, - "name": "NotApprovedBotException", - "nameLocation": "6655:23:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 403, - "nodeType": "ParameterList", - "parameters": [], - "src": "6678:2:3" - }, - "src": "6649:32:3" - }, - { - "documentation": { - "id": 405, - "nodeType": "StructuredDocumentation", - "src": "6691:166:3", - "text": "@dev Thrown on attempting to open a Credit Account for or transfer a Credit Account\n to the zero address or an address that already owns a Credit Account" - }, - "errorSelector": "7e157755", - "id": 407, - "name": "UserAlreadyHasAccountException", - "nameLocation": "6863:30:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 406, - "nodeType": "ParameterList", - "parameters": [], - "src": "6893:2:3" - }, - "src": "6857:39:3" - }, - { - "documentation": { - "id": 408, - "nodeType": "StructuredDocumentation", - "src": "6898:112:3", - "text": "@dev Thrown on attempting to execute an order to an address that is not an allowed\n target contract" - }, - "errorSelector": "fc1a5543", - "id": 410, - "name": "TargetContractNotAllowedException", - "nameLocation": "7016:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 409, - "nodeType": "ParameterList", - "parameters": [], - "src": "7049:2:3" - }, - "src": "7010:42:3" - }, - { - "documentation": { - "id": 411, - "nodeType": "StructuredDocumentation", - "src": "7054:70:3", - "text": "@dev Thrown on failing a full collateral check after an operation" - }, - "errorSelector": "532e7bb6", - "id": 413, - "name": "NotEnoughCollateralException", - "nameLocation": "7130:28:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 412, - "nodeType": "ParameterList", - "parameters": [], - "src": "7158:2:3" - }, - "src": "7124:37:3" - }, - { - "documentation": { - "id": 414, - "nodeType": "StructuredDocumentation", - "src": "7163:88:3", - "text": "@dev Thrown if an attempt to approve a collateral token to a target contract failed" - }, - "errorSelector": "2f10a7f3", - "id": 416, - "name": "AllowanceFailedException", - "nameLocation": "7257:24:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 415, - "nodeType": "ParameterList", - "parameters": [], - "src": "7281:2:3" - }, - "src": "7251:33:3" - }, - { - "documentation": { - "id": 417, - "nodeType": "StructuredDocumentation", - "src": "7286:94:3", - "text": "@dev Thrown on attempting to perform an action for an address that owns no Credit Account" - }, - "errorSelector": "06d37cb0", - "id": 419, - "name": "CreditAccountNotExistsException", - "nameLocation": "7386:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 418, - "nodeType": "ParameterList", - "parameters": [], - "src": "7417:2:3" - }, - "src": "7380:40:3" - }, - { - "documentation": { - "id": 420, - "nodeType": "StructuredDocumentation", - "src": "7422:82:3", - "text": "@dev Thrown on configurator attempting to add more than 256 collateral tokens" - }, - "errorSelector": "7e050c52", - "id": 422, - "name": "TooManyTokensException", - "nameLocation": "7510:22:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 421, - "nodeType": "ParameterList", - "parameters": [], - "src": "7532:2:3" - }, - "src": "7504:31:3" - }, - { - "documentation": { - "id": 423, - "nodeType": "StructuredDocumentation", - "src": "7537:150:3", - "text": "@dev Thrown if more than the maximal number of tokens were enabled on a Credit Account,\n and there are not enough unused token to disable" - }, - "errorSelector": "30b5495c", - "id": 425, - "name": "TooManyEnabledTokensException", - "nameLocation": "7693:29:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 424, - "nodeType": "ParameterList", - "parameters": [], - "src": "7722:2:3" - }, - "src": "7687:38:3" - }, - { - "documentation": { - "id": 426, - "nodeType": "StructuredDocumentation", - "src": "7727:58:3", - "text": "@dev Thrown when attempting to ramp LT for underlying" - }, - "errorSelector": "afa378be", - "id": 428, - "name": "CannotRampLTForUnderlyingException", - "nameLocation": "7791:34:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 427, - "nodeType": "ParameterList", - "parameters": [], - "src": "7825:2:3" - }, - "src": "7785:43:3" - }, - { - "documentation": { - "id": 429, - "nodeType": "StructuredDocumentation", - "src": "7830:99:3", - "text": "@dev Thrown when a custom HF parameter lower than 10000 is passed into a full collateral check" - }, - "errorSelector": "69bb8810", - "id": 431, - "name": "CustomHealthFactorTooLowException", - "nameLocation": "7935:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 430, - "nodeType": "ParameterList", - "parameters": [], - "src": "7968:2:3" - }, - "src": "7929:42:3" - }, - { - "documentation": { - "id": 432, - "nodeType": "StructuredDocumentation", - "src": "7973:67:3", - "text": "@dev Thrown when attempting to vote in a non-approved contract" - }, - "errorSelector": "b311e03a", - "id": 434, - "name": "VotingContractNotAllowedException", - "nameLocation": "8046:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 433, - "nodeType": "ParameterList", - "parameters": [], - "src": "8079:2:3" - }, - "src": "8040:42:3" - }, - { - "errorSelector": "6c66f096", - "id": 436, - "name": "BorrowingMoreU2ForbiddenException", - "nameLocation": "8090:33:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 435, - "nodeType": "ParameterList", - "parameters": [], - "src": "8123:2:3" - }, - "src": "8084:42:3" - }, - { - "documentation": { - "id": 437, - "nodeType": "StructuredDocumentation", - "src": "8166:70:3", - "text": "@dev Thrown on returning a value that violates the current bounds" - }, - "errorSelector": "6477ba08", - "id": 439, - "name": "ValueOutOfRangeException", - "nameLocation": "8242:24:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 438, - "nodeType": "ParameterList", - "parameters": [], - "src": "8266:2:3" - }, - "src": "8236:33:3" - }, - { - "errorSelector": "74573dc1", - "id": 441, - "name": "ExpectedLiquidityLimitException", - "nameLocation": "8312:31:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 440, - "nodeType": "ParameterList", - "parameters": [], - "src": "8343:2:3" - }, - "src": "8306:40:3" - }, - { - "errorSelector": "9abfd950", - "id": 443, - "name": "CreditManagerCantBorrowException", - "nameLocation": "8354:32:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 442, - "nodeType": "ParameterList", - "parameters": [], - "src": "8386:2:3" - }, - "src": "8348:41:3" - }, - { - "errorSelector": "26402006", - "id": 445, - "name": "IncompatiblePoolQuotaKeeper", - "nameLocation": "8397:27:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 444, - "nodeType": "ParameterList", - "parameters": [], - "src": "8424:2:3" - }, - "src": "8391:36:3" - }, - { - "documentation": { - "id": 446, - "nodeType": "StructuredDocumentation", - "src": "8429:85:3", - "text": "@dev Thrown when attempting to pass a zero amount to a funding-related operation" - }, - "errorSelector": "872160bd", - "id": 448, - "name": "AmountCantBeZeroException", - "nameLocation": "8520:25:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 447, - "nodeType": "ParameterList", - "parameters": [], - "src": "8545:2:3" - }, - "src": "8514:34:3" - }, - { - "documentation": { - "id": 449, - "nodeType": "StructuredDocumentation", - "src": "8550:100:3", - "text": "@dev Thrown when attempting to fund a bot that is forbidden or not directly allowed by the user" - }, - "errorSelector": "f4720680", - "id": 451, - "name": "InvalidBotException", - "nameLocation": "8656:19:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 450, - "nodeType": "ParameterList", - "parameters": [], - "src": "8675:2:3" - }, - "src": "8650:28:3" - }, - { - "documentation": { - "id": 452, - "nodeType": "StructuredDocumentation", - "src": "8680:93:3", - "text": "@dev Thrown when attempting to add a Credit Facade that has non-blacklistable underlying" - }, - "errorSelector": "28cfda1b", - "id": 454, - "name": "CreditFacadeNonBlacklistable", - "nameLocation": "8779:28:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 453, - "nodeType": "ParameterList", - "parameters": [], - "src": "8807:2:3" - }, - "src": "8773:37:3" - }, - { - "documentation": { - "id": 455, - "nodeType": "StructuredDocumentation", - "src": "8812:81:3", - "text": "@dev Thrown when attempting to claim funds without having anything claimable" - }, - "errorSelector": "45326b6d", - "id": 457, - "name": "NothingToClaimException", - "nameLocation": "8899:23:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 456, - "nodeType": "ParameterList", - "parameters": [], - "src": "8922:2:3" - }, - "src": "8893:32:3" - }, - { - "errorSelector": "1e05cdad", - "id": 459, - "name": "LiquiditySanityCheckException", - "nameLocation": "8933:29:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 458, - "nodeType": "ParameterList", - "parameters": [], - "src": "8962:2:3" - }, - "src": "8927:38:3" - }, - { - "errorSelector": "7c309fea", - "id": 461, - "name": "ZeroCallsException", - "nameLocation": "8973:18:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 460, - "nodeType": "ParameterList", - "parameters": [], - "src": "8991:2:3" - }, - "src": "8967:27:3" - }, - { - "errorSelector": "231e37fe", - "id": 463, - "name": "NoFreeQithdrawalSlotsException", - "nameLocation": "9002:30:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 462, - "nodeType": "ParameterList", - "parameters": [], - "src": "9032:2:3" - }, - "src": "8996:39:3" - }, - { - "errorSelector": "6b895d04", - "id": 467, - "name": "NoPermissionException", - "nameLocation": "9043:21:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 466, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 465, - "mutability": "mutable", - "name": "permission", - "nameLocation": "9073:10:3", - "nodeType": "VariableDeclaration", - "scope": 467, - "src": "9065:18:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 464, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9065:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9064:20:3" - }, - "src": "9037:48:3" - }, - { - "errorSelector": "50184f92", - "id": 469, - "name": "ExternalCallCreditAccountNotSetException", - "nameLocation": "9093:40:3", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 468, - "nodeType": "ParameterList", - "parameters": [], - "src": "9133:2:3" - }, - "src": "9087:49:3" - } - ], - "src": "123:9014:3" - }, - "id": 3 - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol", - "exportedSymbols": { - "AddressProvider": [2931], - "IERC4626": [16829], - "IPool4626": [722], - "IPool4626Events": [563], - "IVersion": [12963], - "Pool4626Opts": [488] - }, - "id": 723, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 471, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:4" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol", - "id": 473, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 723, - "sourceUnit": 16830, - "src": "149:113:4", - "symbolAliases": [ - { - "foreign": { - "id": 472, - "name": "IERC4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16829, - "src": "157:8:4", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 475, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 723, - "sourceUnit": 2932, - "src": "263:133:4", - "symbolAliases": [ - { - "foreign": { - "id": 474, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "271:15:4", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "id": 477, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 723, - "sourceUnit": 12964, - "src": "397:125:4", - "symbolAliases": [ - { - "foreign": { - "id": 476, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "405:8:4", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "Pool4626Opts", - "id": 488, - "members": [ - { - "constant": false, - "id": 479, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "558:15:4", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "550:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 478, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "550:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 481, - "mutability": "mutable", - "name": "underlyingToken", - "nameLocation": "587:15:4", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "579:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "579:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 483, - "mutability": "mutable", - "name": "interestRateModel", - "nameLocation": "616:17:4", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "608:25:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 482, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "608:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 485, - "mutability": "mutable", - "name": "expectedLiquidityLimit", - "nameLocation": "647:22:4", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "639:30:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 484, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "639:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 487, - "mutability": "mutable", - "name": "supportsQuotas", - "nameLocation": "680:14:4", - "nodeType": "VariableDeclaration", - "scope": 488, - "src": "675:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 486, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "675:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "Pool4626Opts", - "nameLocation": "531:12:4", - "nodeType": "StructDefinition", - "scope": 723, - "src": "524:173:4", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPool4626Events", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 563, - "linearizedBaseContracts": [563], - "name": "IPool4626Events", - "nameLocation": "709:15:4", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 489, - "nodeType": "StructuredDocumentation", - "src": "731:55:4", - "text": "@dev Emits on new liquidity being added to the pool" - }, - "eventSelector": "305df91d457db0db57de04473eaf8b96891169471a645974ecd34e933760ead9", - "id": 499, - "name": "DepositWithReferral", - "nameLocation": "797:19:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 498, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 491, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "833:6:4", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "817:22:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 490, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "817:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 493, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "857:10:4", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "841:26:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 492, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "841:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 495, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "877:6:4", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "869:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 494, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "869:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 497, - "indexed": false, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "892:12:4", - "nodeType": "VariableDeclaration", - "scope": 499, - "src": "885:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 496, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "885:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "816:89:4" - }, - "src": "791:115:4" - }, - { - "anonymous": false, - "documentation": { - "id": 500, - "nodeType": "StructuredDocumentation", - "src": "912:71:4", - "text": "@dev Emits on a Credit Manager borrowing funds for a Credit Account" - }, - "eventSelector": "312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b52", - "id": 508, - "name": "Borrow", - "nameLocation": "994:6:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 502, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1017:13:4", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1001:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 501, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1001:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 504, - "indexed": true, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "1048:13:4", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1032:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1032:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 506, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1071:6:4", - "nodeType": "VariableDeclaration", - "scope": 508, - "src": "1063:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 505, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1063:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1000:78:4" - }, - "src": "988:91:4" - }, - { - "anonymous": false, - "documentation": { - "id": 509, - "nodeType": "StructuredDocumentation", - "src": "1085:54:4", - "text": "@dev Emits on repayment of a Credit Account's debt" - }, - "eventSelector": "2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e09", - "id": 519, - "name": "Repay", - "nameLocation": "1150:5:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 511, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1172:13:4", - "nodeType": "VariableDeclaration", - "scope": 519, - "src": "1156:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 510, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1156:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 513, - "indexed": false, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "1195:14:4", - "nodeType": "VariableDeclaration", - "scope": 519, - "src": "1187:22:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 512, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1187:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 515, - "indexed": false, - "mutability": "mutable", - "name": "profit", - "nameLocation": "1219:6:4", - "nodeType": "VariableDeclaration", - "scope": 519, - "src": "1211:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 514, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1211:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 517, - "indexed": false, - "mutability": "mutable", - "name": "loss", - "nameLocation": "1235:4:4", - "nodeType": "VariableDeclaration", - "scope": 519, - "src": "1227:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1227:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1155:85:4" - }, - "src": "1144:97:4" - }, - { - "anonymous": false, - "documentation": { - "id": 520, - "nodeType": "StructuredDocumentation", - "src": "1247:50:4", - "text": "@dev Emits on updating the interest rate model" - }, - "eventSelector": "60d671e95013fc5fd0cf35d947791aa49209ad86fccf748e0b126f3f9f0a83ba", - "id": 524, - "name": "SetInterestRateModel", - "nameLocation": "1308:20:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 523, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 522, - "indexed": true, - "mutability": "mutable", - "name": "newInterestRateModel", - "nameLocation": "1345:20:4", - "nodeType": "VariableDeclaration", - "scope": 524, - "src": "1329:36:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 521, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1329:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1328:38:4" - }, - "src": "1302:65:4" - }, - { - "anonymous": false, - "documentation": { - "id": 525, - "nodeType": "StructuredDocumentation", - "src": "1373:60:4", - "text": "@dev Emits each time when new Pool Quota Manager updated" - }, - "eventSelector": "553438de7e02bc6929ef4f6c3653130beca086dd506f1aa2785b58e6a13c3264", - "id": 529, - "name": "SetPoolQuotaKeeper", - "nameLocation": "1444:18:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 528, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 527, - "indexed": true, - "mutability": "mutable", - "name": "newPoolQuotaKeeper", - "nameLocation": "1479:18:4", - "nodeType": "VariableDeclaration", - "scope": 529, - "src": "1463:34:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 526, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1463:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1462:36:4" - }, - "src": "1438:61:4" - }, - { - "anonymous": false, - "documentation": { - "id": 530, - "nodeType": "StructuredDocumentation", - "src": "1505:49:4", - "text": "@dev Emits on connecting a new Credit Manager" - }, - "eventSelector": "bca7ba46bb626fab79d5a673d0d8293df21968a25350c4d71433f98600618f5f", - "id": 534, - "name": "AddCreditManager", - "nameLocation": "1565:16:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 533, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 532, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1598:13:4", - "nodeType": "VariableDeclaration", - "scope": 534, - "src": "1582:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 531, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1582:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1581:31:4" - }, - "src": "1559:54:4" - }, - { - "anonymous": false, - "eventSelector": "3ee61c2f044c451ad3bef636b4d90f79cf2bc5eb7c220f35746410fdca1454e5", - "id": 538, - "name": "SetTotalBorrowedLimit", - "nameLocation": "1625:21:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 537, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 536, - "indexed": false, - "mutability": "mutable", - "name": "limit", - "nameLocation": "1655:5:4", - "nodeType": "VariableDeclaration", - "scope": 538, - "src": "1647:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 535, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1647:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1646:15:4" - }, - "src": "1619:43:4" - }, - { - "anonymous": false, - "documentation": { - "id": 539, - "nodeType": "StructuredDocumentation", - "src": "1668:59:4", - "text": "@dev Emits when a Credit Manager is forbidden to borrow" - }, - "eventSelector": "1c541143ba924600e99eb201e95ac461968f27ba63d6634fab56512b44aca5b6", - "id": 545, - "name": "BorrowLimitChanged", - "nameLocation": "1738:18:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 544, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 541, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1773:13:4", - "nodeType": "VariableDeclaration", - "scope": 545, - "src": "1757:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1757:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 543, - "indexed": false, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "1796:8:4", - "nodeType": "VariableDeclaration", - "scope": 545, - "src": "1788:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 542, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1788:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1756:49:4" - }, - "src": "1732:74:4" - }, - { - "anonymous": false, - "documentation": { - "id": 546, - "nodeType": "StructuredDocumentation", - "src": "1812:78:4", - "text": "@dev Emitted when loss is incurred that can't be covered by treasury funds" - }, - "eventSelector": "7d528e453efb5a35549949762cf468b4fb6ddb8bffb413a38ee315956cefbbf5", - "id": 552, - "name": "ReceiveUncoveredLoss", - "nameLocation": "1901:20:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 551, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 548, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1938:13:4", - "nodeType": "VariableDeclaration", - "scope": 552, - "src": "1922:29:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 547, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1922:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 550, - "indexed": false, - "mutability": "mutable", - "name": "loss", - "nameLocation": "1961:4:4", - "nodeType": "VariableDeclaration", - "scope": 552, - "src": "1953:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 549, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1953:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1921:45:4" - }, - "src": "1895:72:4" - }, - { - "anonymous": false, - "documentation": { - "id": 553, - "nodeType": "StructuredDocumentation", - "src": "1973:50:4", - "text": "@dev Emits when the liquidity limit is changed" - }, - "eventSelector": "889abeaa115c2c599e4407233eb41146a454d5111c38899e72d32f6f763210ad", - "id": 557, - "name": "SetExpectedLiquidityLimit", - "nameLocation": "2034:25:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 556, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 555, - "indexed": false, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "2068:8:4", - "nodeType": "VariableDeclaration", - "scope": 557, - "src": "2060:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 554, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2060:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2059:18:4" - }, - "src": "2028:50:4" - }, - { - "anonymous": false, - "documentation": { - "id": 558, - "nodeType": "StructuredDocumentation", - "src": "2084:49:4", - "text": "@dev Emits when the withdrawal fee is changed" - }, - "eventSelector": "7be0a744e4d6f887e4fd578978ae62cb2568d860f0f2eb0a54fd0de804b16440", - "id": 562, - "name": "SetWithdrawFee", - "nameLocation": "2144:14:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 560, - "indexed": false, - "mutability": "mutable", - "name": "fee", - "nameLocation": "2167:3:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "2159:11:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 559, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2159:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2158:13:4" - }, - "src": "2138:34:4" - } - ], - "scope": 723, - "src": "699:1475:4", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 565, - "name": "IPool4626Events", - "nameLocations": ["2289:15:4"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 563, - "src": "2289:15:4" - }, - "id": 566, - "nodeType": "InheritanceSpecifier", - "src": "2289:15:4" - }, - { - "baseName": { - "id": 567, - "name": "IERC4626", - "nameLocations": ["2306:8:4"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16829, - "src": "2306:8:4" - }, - "id": 568, - "nodeType": "InheritanceSpecifier", - "src": "2306:8:4" - }, - { - "baseName": { - "id": 569, - "name": "IVersion", - "nameLocations": ["2316:8:4"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "2316:8:4" - }, - "id": 570, - "nodeType": "InheritanceSpecifier", - "src": "2316:8:4" - } - ], - "canonicalName": "IPool4626", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 564, - "nodeType": "StructuredDocumentation", - "src": "2176:90:4", - "text": "@title Pool 4626\n More: https://dev.gearbox.fi/developers/pool/abstractpoolservice" - }, - "fullyImplemented": false, - "id": 722, - "linearizedBaseContracts": [722, 12963, 16829, 17930, 17905, 563], - "name": "IPool4626", - "nameLocation": "2276:9:4", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "d5989713", - "id": 581, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "depositReferral", - "nameLocation": "2340:15:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 577, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 572, - "mutability": "mutable", - "name": "assets", - "nameLocation": "2364:6:4", - "nodeType": "VariableDeclaration", - "scope": 581, - "src": "2356:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 571, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2356:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 574, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "2380:8:4", - "nodeType": "VariableDeclaration", - "scope": 581, - "src": "2372:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 573, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2372:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 576, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "2397:12:4", - "nodeType": "VariableDeclaration", - "scope": 581, - "src": "2390:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 575, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2390:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "2355:55:4" - }, - "returnParameters": { - "id": 580, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 579, - "mutability": "mutable", - "name": "shares", - "nameLocation": "2437:6:4", - "nodeType": "VariableDeclaration", - "scope": 581, - "src": "2429:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 578, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2429:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2428:16:4" - }, - "scope": 722, - "src": "2331:114:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "42966c68", - "id": 586, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nameLocation": "2460:4:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 584, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 583, - "mutability": "mutable", - "name": "shares", - "nameLocation": "2473:6:4", - "nodeType": "VariableDeclaration", - "scope": 586, - "src": "2465:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 582, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2465:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2464:16:4" - }, - "returnParameters": { - "id": 585, - "nodeType": "ParameterList", - "parameters": [], - "src": "2489:0:4" - }, - "scope": 722, - "src": "2451:39:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 587, - "nodeType": "StructuredDocumentation", - "src": "2531:161:4", - "text": "@dev Lends pool funds to a Credit Account\n @param borrowedAmount Credit Account's debt principal\n @param creditAccount Credit Account's address" - }, - "functionSelector": "bf28068b", - "id": 594, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lendCreditAccount", - "nameLocation": "2706:17:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 592, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 589, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "2732:14:4", - "nodeType": "VariableDeclaration", - "scope": 594, - "src": "2724:22:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 588, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2724:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 591, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "2756:13:4", - "nodeType": "VariableDeclaration", - "scope": 594, - "src": "2748:21:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 590, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2748:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2723:47:4" - }, - "returnParameters": { - "id": 593, - "nodeType": "ParameterList", - "parameters": [], - "src": "2779:0:4" - }, - "scope": 722, - "src": "2697:83:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 595, - "nodeType": "StructuredDocumentation", - "src": "2786:354:4", - "text": "@dev Repays the Credit Account's debt\n @param borrowedAmount Amount of principal ro repay\n @param profit The treasury profit from repayment\n @param loss Amount of underlying that the CA wan't able to repay\n @notice Assumes that the underlying (including principal + interest + fees)\n was already transferred" - }, - "functionSelector": "ca9505e4", - "id": 604, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "repayCreditAccount", - "nameLocation": "3154:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 602, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 597, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "3181:14:4", - "nodeType": "VariableDeclaration", - "scope": 604, - "src": "3173:22:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 596, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3173:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 599, - "mutability": "mutable", - "name": "profit", - "nameLocation": "3205:6:4", - "nodeType": "VariableDeclaration", - "scope": 604, - "src": "3197:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 598, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3197:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 601, - "mutability": "mutable", - "name": "loss", - "nameLocation": "3221:4:4", - "nodeType": "VariableDeclaration", - "scope": 604, - "src": "3213:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 600, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3213:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3172:54:4" - }, - "returnParameters": { - "id": 603, - "nodeType": "ParameterList", - "parameters": [], - "src": "3235:0:4" - }, - "scope": 722, - "src": "3145:91:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 605, - "nodeType": "StructuredDocumentation", - "src": "3242:28:4", - "text": "@dev Updates quota index" - }, - "functionSelector": "351f6ca3", - "id": 610, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "changeQuotaRevenue", - "nameLocation": "3284:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 608, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 607, - "mutability": "mutable", - "name": "_quotaRevenueChange", - "nameLocation": "3310:19:4", - "nodeType": "VariableDeclaration", - "scope": 610, - "src": "3303:26:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - }, - "typeName": { - "id": 606, - "name": "int128", - "nodeType": "ElementaryTypeName", - "src": "3303:6:4", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "visibility": "internal" - } - ], - "src": "3302:28:4" - }, - "returnParameters": { - "id": 609, - "nodeType": "ParameterList", - "parameters": [], - "src": "3339:0:4" - }, - "scope": 722, - "src": "3275:65:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "dfd8d233", - "id": 615, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "updateQuotaRevenue", - "nameLocation": "3355:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 613, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 612, - "mutability": "mutable", - "name": "newQuotaRevenue", - "nameLocation": "3382:15:4", - "nodeType": "VariableDeclaration", - "scope": 615, - "src": "3374:23:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 611, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "3374:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "3373:25:4" - }, - "returnParameters": { - "id": 614, - "nodeType": "ParameterList", - "parameters": [], - "src": "3407:0:4" - }, - "scope": 722, - "src": "3346:62:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 616, - "nodeType": "StructuredDocumentation", - "src": "3444:63:4", - "text": "@dev The same value like in total assets in ERC4626 standrt" - }, - "functionSelector": "fe14112d", - "id": 621, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "expectedLiquidity", - "nameLocation": "3521:17:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 617, - "nodeType": "ParameterList", - "parameters": [], - "src": "3538:2:4" - }, - "returnParameters": { - "id": 620, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 619, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 621, - "src": "3564:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 618, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3564:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3563:9:4" - }, - "scope": 722, - "src": "3512:61:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 622, - "nodeType": "StructuredDocumentation", - "src": "3579:65:4", - "text": "@dev Limit for expected liquidity, 2**256-1 if no limit there" - }, - "functionSelector": "ef8d9603", - "id": 627, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "expectedLiquidityLimit", - "nameLocation": "3658:22:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 623, - "nodeType": "ParameterList", - "parameters": [], - "src": "3680:2:4" - }, - "returnParameters": { - "id": 626, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 625, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 627, - "src": "3706:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 624, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3706:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3705:9:4" - }, - "scope": 722, - "src": "3649:66:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 628, - "nodeType": "StructuredDocumentation", - "src": "3721:63:4", - "text": "@dev Available liquidity (pool balance in underlying token)" - }, - "functionSelector": "74375359", - "id": 633, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "availableLiquidity", - "nameLocation": "3798:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 629, - "nodeType": "ParameterList", - "parameters": [], - "src": "3816:2:4" - }, - "returnParameters": { - "id": 632, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 631, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 633, - "src": "3842:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 630, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3842:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3841:9:4" - }, - "scope": 722, - "src": "3789:62:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 634, - "nodeType": "StructuredDocumentation", - "src": "3857:43:4", - "text": "@dev Current interest index, RAY format" - }, - "functionSelector": "0fce70fb", - "id": 639, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcLinearCumulative_RAY", - "nameLocation": "3914:24:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 635, - "nodeType": "ParameterList", - "parameters": [], - "src": "3938:2:4" - }, - "returnParameters": { - "id": 638, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 637, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 639, - "src": "3964:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 636, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3964:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3963:9:4" - }, - "scope": 722, - "src": "3905:68:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 640, - "nodeType": "StructuredDocumentation", - "src": "3979:55:4", - "text": "@dev Calculates the current borrow rate, RAY format" - }, - "functionSelector": "c914b437", - "id": 645, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "borrowRate", - "nameLocation": "4048:10:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 641, - "nodeType": "ParameterList", - "parameters": [], - "src": "4058:2:4" - }, - "returnParameters": { - "id": 644, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 643, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 645, - "src": "4084:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 642, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4084:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4083:9:4" - }, - "scope": 722, - "src": "4039:54:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 646, - "nodeType": "StructuredDocumentation", - "src": "4099:57:4", - "text": "@dev Total borrowed amount (includes principal only)" - }, - "functionSelector": "4c19386c", - "id": 651, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalBorrowed", - "nameLocation": "4170:13:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 647, - "nodeType": "ParameterList", - "parameters": [], - "src": "4183:2:4" - }, - "returnParameters": { - "id": 650, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 649, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 651, - "src": "4209:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 648, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4209:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4208:9:4" - }, - "scope": 722, - "src": "4161:57:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 652, - "nodeType": "StructuredDocumentation", - "src": "4224:34:4", - "text": "@dev Address of the underlying" - }, - "functionSelector": "2495a599", - "id": 657, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlyingToken", - "nameLocation": "4272:15:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 653, - "nodeType": "ParameterList", - "parameters": [], - "src": "4287:2:4" - }, - "returnParameters": { - "id": 656, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 655, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 657, - "src": "4313:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 654, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4313:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4312:9:4" - }, - "scope": 722, - "src": "4263:59:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 658, - "nodeType": "StructuredDocumentation", - "src": "4328:51:4", - "text": "@dev Addresses of all connected credit managers" - }, - "functionSelector": "dac54431", - "id": 664, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagers", - "nameLocation": "4393:14:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 659, - "nodeType": "ParameterList", - "parameters": [], - "src": "4407:2:4" - }, - "returnParameters": { - "id": 663, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 662, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 664, - "src": "4433:16:4", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 660, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4433:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 661, - "nodeType": "ArrayTypeName", - "src": "4433:9:4", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "4432:18:4" - }, - "scope": 722, - "src": "4384:67:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 665, - "nodeType": "StructuredDocumentation", - "src": "4457:51:4", - "text": "@dev Borrow limit for particular credit manager" - }, - "functionSelector": "7a99c017", - "id": 672, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagerBorrowed", - "nameLocation": "4522:21:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 668, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 667, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 672, - "src": "4544:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 666, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4544:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4543:9:4" - }, - "returnParameters": { - "id": 671, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 670, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 672, - "src": "4576:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 669, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4576:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4575:9:4" - }, - "scope": 722, - "src": "4513:72:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 673, - "nodeType": "StructuredDocumentation", - "src": "4591:51:4", - "text": "@dev Borrow limit for particular credit manager" - }, - "functionSelector": "74135a51", - "id": 680, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagerLimit", - "nameLocation": "4656:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 675, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 680, - "src": "4675:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4675:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4674:9:4" - }, - "returnParameters": { - "id": 679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 678, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 680, - "src": "4707:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4707:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4706:9:4" - }, - "scope": 722, - "src": "4647:69:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 681, - "nodeType": "StructuredDocumentation", - "src": "4722:41:4", - "text": "@dev Whether the pool supports quotas" - }, - "functionSelector": "9fd8a10c", - "id": 686, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "supportsQuotas", - "nameLocation": "4777:14:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 682, - "nodeType": "ParameterList", - "parameters": [], - "src": "4791:2:4" - }, - "returnParameters": { - "id": 685, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 684, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 686, - "src": "4817:4:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 683, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4817:4:4", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4816:6:4" - }, - "scope": 722, - "src": "4768:55:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 687, - "nodeType": "StructuredDocumentation", - "src": "4829:32:4", - "text": "@dev PoolQuotaKeeper address" - }, - "functionSelector": "be8da14b", - "id": 692, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "poolQuotaKeeper", - "nameLocation": "4875:15:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 688, - "nodeType": "ParameterList", - "parameters": [], - "src": "4890:2:4" - }, - "returnParameters": { - "id": 691, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 690, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 692, - "src": "4916:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 689, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4916:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4915:9:4" - }, - "scope": 722, - "src": "4866:59:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 693, - "nodeType": "StructuredDocumentation", - "src": "4931:23:4", - "text": "@dev Withdrawal fee" - }, - "functionSelector": "e941fa78", - "id": 698, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawFee", - "nameLocation": "4968:11:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 694, - "nodeType": "ParameterList", - "parameters": [], - "src": "4979:2:4" - }, - "returnParameters": { - "id": 697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 696, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 698, - "src": "5005:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 695, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "5005:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "5004:8:4" - }, - "scope": 722, - "src": "4959:54:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 699, - "nodeType": "StructuredDocumentation", - "src": "5019:44:4", - "text": "@dev Timestamp of the pool's last update" - }, - "functionSelector": "08182d58", - "id": 704, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "timestampLU", - "nameLocation": "5077:11:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 700, - "nodeType": "ParameterList", - "parameters": [], - "src": "5088:2:4" - }, - "returnParameters": { - "id": 703, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 702, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 704, - "src": "5114:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 701, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "5114:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "5113:8:4" - }, - "scope": 722, - "src": "5068:54:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "4f9d2aa4", - "id": 709, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalBorrowedLimit", - "nameLocation": "5137:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 705, - "nodeType": "ParameterList", - "parameters": [], - "src": "5155:2:4" - }, - "returnParameters": { - "id": 708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 707, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 709, - "src": "5181:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 706, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5181:7:4", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5180:9:4" - }, - "scope": 722, - "src": "5128:62:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 710, - "nodeType": "StructuredDocumentation", - "src": "5196:25:4", - "text": "@dev Address provider" - }, - "functionSelector": "2954018c", - "id": 716, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addressProvider", - "nameLocation": "5235:15:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 711, - "nodeType": "ParameterList", - "parameters": [], - "src": "5250:2:4" - }, - "returnParameters": { - "id": 715, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 714, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 716, - "src": "5276:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - }, - "typeName": { - "id": 713, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 712, - "name": "AddressProvider", - "nameLocations": ["5276:15:4"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "5276:15:4" - }, - "referencedDeclaration": 2931, - "src": "5276:15:4", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "visibility": "internal" - } - ], - "src": "5275:17:4" - }, - "scope": 722, - "src": "5226:67:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "02fe51a3", - "id": 721, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "connectPoolQuotaManager", - "nameLocation": "5348:23:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 718, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 721, - "src": "5372:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 717, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5372:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5371:9:4" - }, - "returnParameters": { - "id": 720, - "nodeType": "ParameterList", - "parameters": [], - "src": "5389:0:4" - }, - "scope": 722, - "src": "5339:51:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 723, - "src": "2266:3126:4", - "usedErrors": [] - } - ], - "src": "123:5270:4" - }, - "id": 4 - }, - "/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol", - "exportedSymbols": { - "IWETHGateway": [802] - }, - "id": 803, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 724, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:5" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IWETHGateway", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 802, - "linearizedBaseContracts": [802], - "name": "IWETHGateway", - "nameLocation": "159:12:5", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 725, - "nodeType": "StructuredDocumentation", - "src": "178:17:5", - "text": "@dev POOL V3:" - }, - "functionSelector": "f9609f08", - "id": 734, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nameLocation": "209:7:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 730, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 727, - "mutability": "mutable", - "name": "pool", - "nameLocation": "225:4:5", - "nodeType": "VariableDeclaration", - "scope": 734, - "src": "217:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 726, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "217:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 729, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "239:8:5", - "nodeType": "VariableDeclaration", - "scope": 734, - "src": "231:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 728, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "231:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "216:32:5" - }, - "returnParameters": { - "id": 733, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 732, - "mutability": "mutable", - "name": "shares", - "nameLocation": "283:6:5", - "nodeType": "VariableDeclaration", - "scope": 734, - "src": "275:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 731, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "275:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "274:16:5" - }, - "scope": 802, - "src": "200:91:5", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "cd604a31", - "id": 745, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "depositReferral", - "nameLocation": "306:15:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 741, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 736, - "mutability": "mutable", - "name": "pool", - "nameLocation": "330:4:5", - "nodeType": "VariableDeclaration", - "scope": 745, - "src": "322:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 735, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "322:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 738, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "344:8:5", - "nodeType": "VariableDeclaration", - "scope": 745, - "src": "336:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 737, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "336:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 740, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "361:12:5", - "nodeType": "VariableDeclaration", - "scope": 745, - "src": "354:19:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 739, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "354:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "321:53:5" - }, - "returnParameters": { - "id": 744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 743, - "mutability": "mutable", - "name": "shares", - "nameLocation": "433:6:5", - "nodeType": "VariableDeclaration", - "scope": 745, - "src": "425:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 742, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "425:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "424:16:5" - }, - "scope": 802, - "src": "297:144:5", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "0d4d1513", - "id": 756, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "456:4:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 747, - "mutability": "mutable", - "name": "pool", - "nameLocation": "469:4:5", - "nodeType": "VariableDeclaration", - "scope": 756, - "src": "461:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 746, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "461:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 749, - "mutability": "mutable", - "name": "shares", - "nameLocation": "483:6:5", - "nodeType": "VariableDeclaration", - "scope": 756, - "src": "475:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 748, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "475:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 751, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "499:8:5", - "nodeType": "VariableDeclaration", - "scope": 756, - "src": "491:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 750, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "491:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "460:48:5" - }, - "returnParameters": { - "id": 755, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 754, - "mutability": "mutable", - "name": "assets", - "nameLocation": "543:6:5", - "nodeType": "VariableDeclaration", - "scope": 756, - "src": "535:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 753, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "535:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "534:16:5" - }, - "scope": 802, - "src": "447:104:5", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "dfcd412e", - "id": 769, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nameLocation": "566:8:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 765, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 758, - "mutability": "mutable", - "name": "pool", - "nameLocation": "583:4:5", - "nodeType": "VariableDeclaration", - "scope": 769, - "src": "575:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 757, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "575:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 760, - "mutability": "mutable", - "name": "assets", - "nameLocation": "597:6:5", - "nodeType": "VariableDeclaration", - "scope": 769, - "src": "589:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 759, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "589:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 762, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "613:8:5", - "nodeType": "VariableDeclaration", - "scope": 769, - "src": "605:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 761, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "605:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 764, - "mutability": "mutable", - "name": "owner", - "nameLocation": "631:5:5", - "nodeType": "VariableDeclaration", - "scope": 769, - "src": "623:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 763, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "623:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "574:63:5" - }, - "returnParameters": { - "id": 768, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 767, - "mutability": "mutable", - "name": "shares", - "nameLocation": "680:6:5", - "nodeType": "VariableDeclaration", - "scope": 769, - "src": "672:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 766, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "672:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "671:16:5" - }, - "scope": 802, - "src": "557:131:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "fea53be1", - "id": 782, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "redeem", - "nameLocation": "703:6:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 778, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 771, - "mutability": "mutable", - "name": "pool", - "nameLocation": "718:4:5", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "710:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 770, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "710:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 773, - "mutability": "mutable", - "name": "shares", - "nameLocation": "732:6:5", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "724:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 772, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "724:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 775, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "748:8:5", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "740:16:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 774, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "740:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 777, - "mutability": "mutable", - "name": "owner", - "nameLocation": "766:5:5", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "758:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 776, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "758:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "709:63:5" - }, - "returnParameters": { - "id": 781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 780, - "mutability": "mutable", - "name": "assets", - "nameLocation": "799:6:5", - "nodeType": "VariableDeclaration", - "scope": 782, - "src": "791:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 779, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "791:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "790:16:5" - }, - "scope": 802, - "src": "694:113:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2f4f21e2", - "id": 789, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "depositFor", - "nameLocation": "822:10:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 784, - "mutability": "mutable", - "name": "to", - "nameLocation": "841:2:5", - "nodeType": "VariableDeclaration", - "scope": 789, - "src": "833:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "833:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 786, - "mutability": "mutable", - "name": "amount", - "nameLocation": "853:6:5", - "nodeType": "VariableDeclaration", - "scope": 789, - "src": "845:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 785, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "845:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "832:28:5" - }, - "returnParameters": { - "id": 788, - "nodeType": "ParameterList", - "parameters": [], - "src": "869:0:5" - }, - "scope": 802, - "src": "813:57:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "72b0d90c", - "id": 794, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawTo", - "nameLocation": "885:10:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 792, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 791, - "mutability": "mutable", - "name": "owner", - "nameLocation": "904:5:5", - "nodeType": "VariableDeclaration", - "scope": 794, - "src": "896:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 790, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "896:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "895:15:5" - }, - "returnParameters": { - "id": 793, - "nodeType": "ParameterList", - "parameters": [], - "src": "919:0:5" - }, - "scope": 802, - "src": "876:44:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "70a08231", - "id": 801, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "935:9:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 797, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 796, - "mutability": "mutable", - "name": "holder", - "nameLocation": "953:6:5", - "nodeType": "VariableDeclaration", - "scope": 801, - "src": "945:14:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 795, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "945:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "944:16:5" - }, - "returnParameters": { - "id": 800, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 799, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 801, - "src": "984:7:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 798, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "984:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "983:9:5" - }, - "scope": 802, - "src": "926:67:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 803, - "src": "149:846:5", - "usedErrors": [] - } - ], - "src": "123:873:5" - }, - "id": 5 - }, - "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol", - "exportedSymbols": { - "Address": [18720], - "AddressProvider": [2931], - "ContractsRegisterTrait": [1714], - "Errors": [14033], - "IERC20": [17905], - "IPool4626": [722], - "IPoolService": [12805], - "IWETH": [13602], - "IWETHGateway": [802], - "ReceiveIsNotAllowedException": [275], - "ReentrancyGuard": [17240], - "RegisteredPoolOnlyException": [271], - "SafeERC20": [18247], - "WETHGateway": [1272], - "WethPoolsOnlyException": [273], - "ZeroAddressException": [261] - }, - "id": 1273, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 804, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:6" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "id": 806, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 17241, - "src": "154:125:6", - "symbolAliases": [ - { - "foreign": { - "id": 805, - "name": "ReentrancyGuard", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17240, - "src": "162:15:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 808, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 18721, - "src": "280:106:6", - "symbolAliases": [ - { - "foreign": { - "id": 807, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "288:7:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 810, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 17906, - "src": "387:110:6", - "symbolAliases": [ - { - "foreign": { - "id": 809, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "395:6:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "id": 812, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 18248, - "src": "499:122:6", - "symbolAliases": [ - { - "foreign": { - "id": 811, - "name": "SafeERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18247, - "src": "507:9:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 814, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 2932, - "src": "623:133:6", - "symbolAliases": [ - { - "foreign": { - "id": 813, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "631:15:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol", - "file": "../traits/ContractsRegisterTrait.sol", - "id": 816, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 1715, - "src": "757:76:6", - "symbolAliases": [ - { - "foreign": { - "id": 815, - "name": "ContractsRegisterTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1714, - "src": "765:22:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol", - "id": 818, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 12806, - "src": "835:133:6", - "symbolAliases": [ - { - "foreign": { - "id": 817, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "843:12:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol", - "file": "../interfaces/IPool4626.sol", - "id": 820, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 723, - "src": "969:54:6", - "symbolAliases": [ - { - "foreign": { - "id": 819, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "977:9:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol", - "id": 822, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 13603, - "src": "1025:128:6", - "symbolAliases": [ - { - "foreign": { - "id": 821, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "1033:5:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol", - "file": "../interfaces/IWETHGateway.sol", - "id": 824, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 803, - "src": "1154:60:6", - "symbolAliases": [ - { - "foreign": { - "id": 823, - "name": "IWETHGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 802, - "src": "1162:12:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "id": 826, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 14034, - "src": "1215:120:6", - "symbolAliases": [ - { - "foreign": { - "id": 825, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "1223:6:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 831, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1273, - "sourceUnit": 470, - "src": "1337:168:6", - "symbolAliases": [ - { - "foreign": { - "id": 827, - "name": "RegisteredPoolOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "1350:27:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 828, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 261, - "src": "1383:20:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 829, - "name": "WethPoolsOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 273, - "src": "1409:22:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 830, - "name": "ReceiveIsNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 275, - "src": "1437:28:6", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 833, - "name": "IWETHGateway", - "nameLocations": ["1598:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 802, - "src": "1598:12:6" - }, - "id": 834, - "nodeType": "InheritanceSpecifier", - "src": "1598:12:6" - }, - { - "baseName": { - "id": 835, - "name": "ReentrancyGuard", - "nameLocations": ["1612:15:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17240, - "src": "1612:15:6" - }, - "id": 836, - "nodeType": "InheritanceSpecifier", - "src": "1612:15:6" - }, - { - "baseName": { - "id": 837, - "name": "ContractsRegisterTrait", - "nameLocations": ["1629:22:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1714, - "src": "1629:22:6" - }, - "id": 838, - "nodeType": "InheritanceSpecifier", - "src": "1629:22:6" - } - ], - "canonicalName": "WETHGateway", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 832, - "nodeType": "StructuredDocumentation", - "src": "1507:67:6", - "text": "@title WETHGateway\n @notice Used for converting ETH <> WETH" - }, - "fullyImplemented": true, - "id": 1272, - "linearizedBaseContracts": [1272, 1714, 1736, 17240, 802], - "name": "WETHGateway", - "nameLocation": "1583:11:6", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 842, - "libraryName": { - "id": 839, - "name": "SafeERC20", - "nameLocations": ["1664:9:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18247, - "src": "1664:9:6" - }, - "nodeType": "UsingForDirective", - "src": "1658:27:6", - "typeName": { - "id": 841, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 840, - "name": "IERC20", - "nameLocations": ["1678:6:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "1678:6:6" - }, - "referencedDeclaration": 17905, - "src": "1678:6:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - } - }, - { - "global": false, - "id": 845, - "libraryName": { - "id": 843, - "name": "Address", - "nameLocations": ["1696:7:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "1696:7:6" - }, - "nodeType": "UsingForDirective", - "src": "1690:34:6", - "typeName": { - "id": 844, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1708:15:6", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - }, - { - "constant": false, - "functionSelector": "3fc8cef3", - "id": 847, - "mutability": "immutable", - "name": "weth", - "nameLocation": "1755:4:6", - "nodeType": "VariableDeclaration", - "scope": 1272, - "src": "1730:29:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 846, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1730:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [801], - "constant": false, - "functionSelector": "70a08231", - "id": 853, - "mutability": "mutable", - "name": "balanceOf", - "nameLocation": "1824:9:6", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 852, - "nodeType": "OverrideSpecifier", - "overrides": [ - { - "id": 851, - "name": "IWETHGateway", - "nameLocations": ["1810:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 802, - "src": "1810:12:6" - } - ], - "src": "1801:22:6" - }, - "scope": 1272, - "src": "1766:67:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 850, - "keyType": { - "id": 848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1774:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1766:27:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 849, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1785:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "54fd4d50", - "id": 856, - "mutability": "constant", - "name": "version", - "nameLocation": "1888:7:6", - "nodeType": "VariableDeclaration", - "scope": 1272, - "src": "1864:38:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 854, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1864:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "335f3030", - "id": 855, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1898:4:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_300_by_1", - "typeString": "int_const 300" - }, - "value": "3_00" - }, - "visibility": "public" - }, - { - "body": { - "id": 881, - "nodeType": "Block", - "src": "2026:208:6", - "statements": [ - { - "condition": { - "id": 864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2040:23:6", - "subExpression": { - "arguments": [ - { - "id": 862, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 859, - "src": "2058:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 861, - "name": "isRegisteredPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1670, - "src": "2041:16:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2041:22:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 868, - "nodeType": "IfStatement", - "src": "2036:65:6", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 865, - "name": "RegisteredPoolOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "2072:27:6", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2072:29:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 867, - "nodeType": "RevertStatement", - "src": "2065:36:6" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 875, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 870, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 859, - "src": "2140:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 869, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "2127:12:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 871, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2127:18:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2146:15:6", - "memberName": "underlyingToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12735, - "src": "2127:34:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2127:36:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 874, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "2167:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2127:44:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 879, - "nodeType": "IfStatement", - "src": "2123:81:6", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 876, - "name": "WethPoolsOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 273, - "src": "2180:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2180:24:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 878, - "nodeType": "RevertStatement", - "src": "2173:31:6" - } - }, - { - "id": 880, - "nodeType": "PlaceholderStatement", - "src": "2226:1:6" - } - ] - }, - "documentation": { - "id": 857, - "nodeType": "StructuredDocumentation", - "src": "1909:76:6", - "text": "@dev Checks that the pool is registered and the underlying token is WETH" - }, - "id": 882, - "name": "wethPoolOnly", - "nameLocation": "1999:12:6", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 860, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 859, - "mutability": "mutable", - "name": "pool", - "nameLocation": "2020:4:6", - "nodeType": "VariableDeclaration", - "scope": 882, - "src": "2012:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 858, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2012:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2011:14:6" - }, - "src": "1990:244:6", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 924, - "nodeType": "Block", - "src": "2405:239:6", - "statements": [ - { - "assignments": [888], - "declarations": [ - { - "constant": false, - "id": 888, - "mutability": "mutable", - "name": "balanceBefore", - "nameLocation": "2423:13:6", - "nodeType": "VariableDeclaration", - "scope": 924, - "src": "2415:21:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 887, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2415:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 898, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 895, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2470:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 894, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2462:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 893, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2462:7:6", - "typeDescriptions": {} - } - }, - "id": 896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2462:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 890, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "2446:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 889, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "2439:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 891, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2439:12:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2452:9:6", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "2439:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2439:37:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2415:61:6" - }, - { - "id": 899, - "nodeType": "PlaceholderStatement", - "src": "2487:1:6" - }, - { - "assignments": [901], - "declarations": [ - { - "constant": false, - "id": 901, - "mutability": "mutable", - "name": "diff", - "nameLocation": "2507:4:6", - "nodeType": "VariableDeclaration", - "scope": 924, - "src": "2499:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 900, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2499:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 913, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 908, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2545:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 907, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2537:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 906, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2537:7:6", - "typeDescriptions": {} - } - }, - "id": 909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2537:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 903, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "2521:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 902, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "2514:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2514:12:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2527:9:6", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "2514:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2514:37:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 911, - "name": "balanceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 888, - "src": "2554:13:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2514:53:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2499:68:6" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 914, - "name": "diff", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 901, - "src": "2582:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 915, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2589:1:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "2582:8:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 923, - "nodeType": "IfStatement", - "src": "2578:60:6", - "trueBody": { - "id": 922, - "nodeType": "Block", - "src": "2592:46:6", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 918, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 885, - "src": "2618:2:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 919, - "name": "diff", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 901, - "src": "2622:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 917, - "name": "_unwrapWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1220, - "src": "2606:11:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 920, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2606:21:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 921, - "nodeType": "ExpressionStatement", - "src": "2606:21:6" - } - ] - } - } - ] - }, - "documentation": { - "id": 883, - "nodeType": "StructuredDocumentation", - "src": "2240:115:6", - "text": "@dev Measures WETH balance before and after function call and transfers\n difference to providced address" - }, - "id": 925, - "name": "unwrapAndTransferWethTo", - "nameLocation": "2369:23:6", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 885, - "mutability": "mutable", - "name": "to", - "nameLocation": "2401:2:6", - "nodeType": "VariableDeclaration", - "scope": 925, - "src": "2393:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 884, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2393:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2392:12:6" - }, - "src": "2360:284:6", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 952, - "nodeType": "Block", - "src": "2866:145:6", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 934, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "2880:15:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 937, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2907:1:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 936, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2899:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 935, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2899:7:6", - "typeDescriptions": {} - } - }, - "id": 938, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2899:10:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2880:29:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 943, - "nodeType": "IfStatement", - "src": "2876:64:6", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 940, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 261, - "src": "2918:20:6", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2918:22:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 942, - "nodeType": "RevertStatement", - "src": "2911:29:6" - } - }, - { - "expression": { - "id": 950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 944, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "2950:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 946, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "2973:15:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 945, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "2957:15:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2957:32:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2990:12:6", - "memberName": "getWethToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2817, - "src": "2957:45:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2957:47:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2950:54:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 951, - "nodeType": "ExpressionStatement", - "src": "2950:54:6" - } - ] - }, - "documentation": { - "id": 926, - "nodeType": "StructuredDocumentation", - "src": "2684:100:6", - "text": "@dev Constructor\n @param addressProvider Address Repository for upgradable contract model" - }, - "id": 953, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 931, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "2849:15:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 932, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 930, - "name": "ContractsRegisterTrait", - "nameLocations": ["2826:22:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1714, - "src": "2826:22:6" - }, - "nodeType": "ModifierInvocation", - "src": "2826:39:6" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 929, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 928, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "2809:15:6", - "nodeType": "VariableDeclaration", - "scope": 953, - "src": "2801:23:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 927, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2801:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2800:25:6" - }, - "returnParameters": { - "id": 933, - "nodeType": "ParameterList", - "parameters": [], - "src": "2866:0:6" - }, - "scope": 1272, - "src": "2789:222:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [734], - "body": { - "id": 991, - "nodeType": "Block", - "src": "3202:160:6", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 968, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "3218:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 967, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "3212:5:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3212:11:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3224:7:6", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 13585, - "src": "3212:19:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$", - "typeString": "function () payable external" - } - }, - "id": 973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "expression": { - "id": 971, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3239:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3243:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3239:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3212:37:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$value", - "typeString": "function () payable external" - } - }, - "id": 974, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3212:39:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 975, - "nodeType": "ExpressionStatement", - "src": "3212:39:6" - }, - { - "expression": { - "arguments": [ - { - "id": 977, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "3278:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 978, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3284:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3288:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3284:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 976, - "name": "_checkAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "3262:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3262:32:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 981, - "nodeType": "ExpressionStatement", - "src": "3262:32:6" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 986, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3335:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3339:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3335:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 988, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 958, - "src": "3346:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 983, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "3321:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 982, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "3311:9:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPool4626_$722_$", - "typeString": "type(contract IPool4626)" - } - }, - "id": 984, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3311:15:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPool4626_$722", - "typeString": "contract IPool4626" - } - }, - "id": 985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3327:7:6", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 16746, - "src": "3311:23:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) external returns (uint256)" - } - }, - "id": 989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3311:44:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 966, - "id": 990, - "nodeType": "Return", - "src": "3304:51:6" - } - ] - }, - "documentation": { - "id": 954, - "nodeType": "StructuredDocumentation", - "src": "3017:17:6", - "text": "FOR POOLS V3" - }, - "functionSelector": "f9609f08", - "id": 992, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 962, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 956, - "src": "3159:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 963, - "kind": "modifierInvocation", - "modifierName": { - "id": 961, - "name": "wethPoolOnly", - "nameLocations": ["3146:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 882, - "src": "3146:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "3146:18:6" - } - ], - "name": "deposit", - "nameLocation": "3048:7:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 960, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3129:8:6" - }, - "parameters": { - "id": 959, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 956, - "mutability": "mutable", - "name": "pool", - "nameLocation": "3064:4:6", - "nodeType": "VariableDeclaration", - "scope": 992, - "src": "3056:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 955, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3056:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 958, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3078:8:6", - "nodeType": "VariableDeclaration", - "scope": 992, - "src": "3070:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3070:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3055:32:6" - }, - "returnParameters": { - "id": 966, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 965, - "mutability": "mutable", - "name": "shares", - "nameLocation": "3190:6:6", - "nodeType": "VariableDeclaration", - "scope": 992, - "src": "3182:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 964, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3182:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3181:16:6" - }, - "scope": 1272, - "src": "3039:323:6", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [745], - "body": { - "id": 1032, - "nodeType": "Block", - "src": "3560:182:6", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1008, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "3576:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1007, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "3570:5:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 1009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3570:11:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 1010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3582:7:6", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 13585, - "src": "3570:19:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$", - "typeString": "function () payable external" - } - }, - "id": 1013, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "expression": { - "id": 1011, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3597:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3601:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3597:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3570:37:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$value", - "typeString": "function () payable external" - } - }, - "id": 1014, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3570:39:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1015, - "nodeType": "ExpressionStatement", - "src": "3570:39:6" - }, - { - "expression": { - "arguments": [ - { - "id": 1017, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 994, - "src": "3636:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 1018, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3642:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3646:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3642:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1016, - "name": "_checkAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "3620:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1020, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3620:32:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1021, - "nodeType": "ExpressionStatement", - "src": "3620:32:6" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1026, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3701:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3705:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "3701:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1028, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 996, - "src": "3712:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1029, - "name": "referralCode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 998, - "src": "3722:12:6", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - ], - "expression": { - "arguments": [ - { - "id": 1023, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 994, - "src": "3679:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1022, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "3669:9:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPool4626_$722_$", - "typeString": "type(contract IPool4626)" - } - }, - "id": 1024, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3669:15:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPool4626_$722", - "typeString": "contract IPool4626" - } - }, - "id": 1025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3685:15:6", - "memberName": "depositReferral", - "nodeType": "MemberAccess", - "referencedDeclaration": 581, - "src": "3669:31:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_uint16_$returns$_t_uint256_$", - "typeString": "function (uint256,address,uint16) external returns (uint256)" - } - }, - "id": 1030, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3669:66:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1006, - "id": 1031, - "nodeType": "Return", - "src": "3662:73:6" - } - ] - }, - "functionSelector": "cd604a31", - "id": 1033, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 1002, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 994, - "src": "3517:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1003, - "kind": "modifierInvocation", - "modifierName": { - "id": 1001, - "name": "wethPoolOnly", - "nameLocations": ["3504:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 882, - "src": "3504:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "3504:18:6" - } - ], - "name": "depositReferral", - "nameLocation": "3377:15:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1000, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3487:8:6" - }, - "parameters": { - "id": 999, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 994, - "mutability": "mutable", - "name": "pool", - "nameLocation": "3401:4:6", - "nodeType": "VariableDeclaration", - "scope": 1033, - "src": "3393:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 993, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3393:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 996, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3415:8:6", - "nodeType": "VariableDeclaration", - "scope": 1033, - "src": "3407:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 995, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3407:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 998, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "3432:12:6", - "nodeType": "VariableDeclaration", - "scope": 1033, - "src": "3425:19:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 997, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "3425:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "3392:53:6" - }, - "returnParameters": { - "id": 1006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1005, - "mutability": "mutable", - "name": "shares", - "nameLocation": "3548:6:6", - "nodeType": "VariableDeclaration", - "scope": 1033, - "src": "3540:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1004, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3540:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3539:16:6" - }, - "scope": 1272, - "src": "3368:374:6", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [756], - "body": { - "id": 1077, - "nodeType": "Block", - "src": "3968:156:6", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1053, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "3984:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1052, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "3978:5:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 1054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3978:11:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 1055, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3990:7:6", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 13585, - "src": "3978:19:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$", - "typeString": "function () payable external" - } - }, - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "expression": { - "id": 1056, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4005:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4009:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "4005:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3978:37:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$value", - "typeString": "function () payable external" - } - }, - "id": 1059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3978:39:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1060, - "nodeType": "ExpressionStatement", - "src": "3978:39:6" - }, - { - "expression": { - "arguments": [ - { - "id": 1062, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1035, - "src": "4044:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 1063, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4050:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1064, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4054:5:6", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "4050:9:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1061, - "name": "_checkAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "4028:15:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4028:32:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1066, - "nodeType": "ExpressionStatement", - "src": "4028:32:6" - }, - { - "expression": { - "id": 1075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1067, - "name": "assets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1050, - "src": "4070:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 1072, - "name": "shares", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "4100:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 1073, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1039, - "src": "4108:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 1069, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1035, - "src": "4089:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1068, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "4079:9:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPool4626_$722_$", - "typeString": "type(contract IPool4626)" - } - }, - "id": 1070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4079:15:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPool4626_$722", - "typeString": "contract IPool4626" - } - }, - "id": 1071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4095:4:6", - "memberName": "mint", - "nodeType": "MemberAccess", - "referencedDeclaration": 16772, - "src": "4079:20:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) external returns (uint256)" - } - }, - "id": 1074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4079:38:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4070:47:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1076, - "nodeType": "ExpressionStatement", - "src": "4070:47:6" - } - ] - }, - "functionSelector": "0d4d1513", - "id": 1078, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 1043, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1035, - "src": "3881:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1044, - "kind": "modifierInvocation", - "modifierName": { - "id": 1042, - "name": "wethPoolOnly", - "nameLocations": ["3868:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 882, - "src": "3868:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "3868:18:6" - }, - { - "arguments": [ - { - "expression": { - "id": 1046, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3919:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3923:6:6", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3919:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1048, - "kind": "modifierInvocation", - "modifierName": { - "id": 1045, - "name": "unwrapAndTransferWethTo", - "nameLocations": ["3895:23:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 925, - "src": "3895:23:6" - }, - "nodeType": "ModifierInvocation", - "src": "3895:35:6" - } - ], - "name": "mint", - "nameLocation": "3757:4:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1041, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3851:8:6" - }, - "parameters": { - "id": 1040, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1035, - "mutability": "mutable", - "name": "pool", - "nameLocation": "3770:4:6", - "nodeType": "VariableDeclaration", - "scope": 1078, - "src": "3762:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1034, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3762:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1037, - "mutability": "mutable", - "name": "shares", - "nameLocation": "3784:6:6", - "nodeType": "VariableDeclaration", - "scope": 1078, - "src": "3776:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1036, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3776:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1039, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3800:8:6", - "nodeType": "VariableDeclaration", - "scope": 1078, - "src": "3792:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1038, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3792:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3761:48:6" - }, - "returnParameters": { - "id": 1051, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1050, - "mutability": "mutable", - "name": "assets", - "nameLocation": "3956:6:6", - "nodeType": "VariableDeclaration", - "scope": 1078, - "src": "3948:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1049, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3948:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3947:16:6" - }, - "scope": 1272, - "src": "3748:376:6", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [769], - "body": { - "id": 1110, - "nodeType": "Block", - "src": "4351:78:6", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1102, - "name": "assets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1082, - "src": "4393:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 1105, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "4409:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 1104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4401:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1103, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4401:7:6", - "typeDescriptions": {} - } - }, - "id": 1106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4401:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1107, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1086, - "src": "4416:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 1099, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1080, - "src": "4378:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1098, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "4368:9:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPool4626_$722_$", - "typeString": "type(contract IPool4626)" - } - }, - "id": 1100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4368:15:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPool4626_$722", - "typeString": "contract IPool4626" - } - }, - "id": 1101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4384:8:6", - "memberName": "withdraw", - "nodeType": "MemberAccess", - "referencedDeclaration": 16800, - "src": "4368:24:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address,address) external returns (uint256)" - } - }, - "id": 1108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4368:54:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1097, - "id": 1109, - "nodeType": "Return", - "src": "4361:61:6" - } - ] - }, - "functionSelector": "dfcd412e", - "id": 1111, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 1090, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1080, - "src": "4266:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1091, - "kind": "modifierInvocation", - "modifierName": { - "id": 1089, - "name": "wethPoolOnly", - "nameLocations": ["4253:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 882, - "src": "4253:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "4253:18:6" - }, - { - "arguments": [ - { - "id": 1093, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1084, - "src": "4304:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1094, - "kind": "modifierInvocation", - "modifierName": { - "id": 1092, - "name": "unwrapAndTransferWethTo", - "nameLocations": ["4280:23:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 925, - "src": "4280:23:6" - }, - "nodeType": "ModifierInvocation", - "src": "4280:33:6" - } - ], - "name": "withdraw", - "nameLocation": "4139:8:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1088, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4236:8:6" - }, - "parameters": { - "id": 1087, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1080, - "mutability": "mutable", - "name": "pool", - "nameLocation": "4156:4:6", - "nodeType": "VariableDeclaration", - "scope": 1111, - "src": "4148:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1079, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4148:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1082, - "mutability": "mutable", - "name": "assets", - "nameLocation": "4170:6:6", - "nodeType": "VariableDeclaration", - "scope": 1111, - "src": "4162:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1081, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4162:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1084, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "4186:8:6", - "nodeType": "VariableDeclaration", - "scope": 1111, - "src": "4178:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1083, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4178:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1086, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4204:5:6", - "nodeType": "VariableDeclaration", - "scope": 1111, - "src": "4196:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1085, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4196:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4147:63:6" - }, - "returnParameters": { - "id": 1097, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1096, - "mutability": "mutable", - "name": "shares", - "nameLocation": "4339:6:6", - "nodeType": "VariableDeclaration", - "scope": 1111, - "src": "4331:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1095, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4331:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4330:16:6" - }, - "scope": 1272, - "src": "4130:299:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [782], - "body": { - "id": 1143, - "nodeType": "Block", - "src": "4654:76:6", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1135, - "name": "shares", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1115, - "src": "4694:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 1138, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "4710:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 1137, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4702:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1136, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4702:7:6", - "typeDescriptions": {} - } - }, - "id": 1139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4702:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1140, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1119, - "src": "4717:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 1132, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1113, - "src": "4681:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1131, - "name": "IPool4626", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 722, - "src": "4671:9:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPool4626_$722_$", - "typeString": "type(contract IPool4626)" - } - }, - "id": 1133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4671:15:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPool4626_$722", - "typeString": "contract IPool4626" - } - }, - "id": 1134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4687:6:6", - "memberName": "redeem", - "nodeType": "MemberAccess", - "referencedDeclaration": 16828, - "src": "4671:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address,address) external returns (uint256)" - } - }, - "id": 1141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4671:52:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1130, - "id": 1142, - "nodeType": "Return", - "src": "4664:59:6" - } - ] - }, - "functionSelector": "fea53be1", - "id": 1144, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 1123, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1113, - "src": "4569:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1124, - "kind": "modifierInvocation", - "modifierName": { - "id": 1122, - "name": "wethPoolOnly", - "nameLocations": ["4556:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 882, - "src": "4556:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "4556:18:6" - }, - { - "arguments": [ - { - "id": 1126, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1117, - "src": "4607:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1127, - "kind": "modifierInvocation", - "modifierName": { - "id": 1125, - "name": "unwrapAndTransferWethTo", - "nameLocations": ["4583:23:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 925, - "src": "4583:23:6" - }, - "nodeType": "ModifierInvocation", - "src": "4583:33:6" - } - ], - "name": "redeem", - "nameLocation": "4444:6:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1121, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4539:8:6" - }, - "parameters": { - "id": 1120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1113, - "mutability": "mutable", - "name": "pool", - "nameLocation": "4459:4:6", - "nodeType": "VariableDeclaration", - "scope": 1144, - "src": "4451:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4451:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1115, - "mutability": "mutable", - "name": "shares", - "nameLocation": "4473:6:6", - "nodeType": "VariableDeclaration", - "scope": 1144, - "src": "4465:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1114, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4465:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1117, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "4489:8:6", - "nodeType": "VariableDeclaration", - "scope": 1144, - "src": "4481:16:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1116, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4481:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1119, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4507:5:6", - "nodeType": "VariableDeclaration", - "scope": 1144, - "src": "4499:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4499:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4450:63:6" - }, - "returnParameters": { - "id": 1130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1129, - "mutability": "mutable", - "name": "assets", - "nameLocation": "4642:6:6", - "nodeType": "VariableDeclaration", - "scope": 1144, - "src": "4634:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1128, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4634:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4633:16:6" - }, - "scope": 1272, - "src": "4435:295:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [789], - "body": { - "id": 1162, - "nodeType": "Block", - "src": "4866:40:6", - "statements": [ - { - "expression": { - "id": 1160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1156, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 853, - "src": "4876:9:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1158, - "indexExpression": { - "id": 1157, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1146, - "src": "4886:2:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4876:13:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 1159, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1148, - "src": "4893:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4876:23:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1161, - "nodeType": "ExpressionStatement", - "src": "4876:23:6" - } - ] - }, - "functionSelector": "2f4f21e2", - "id": 1163, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "expression": { - "id": 1152, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4854:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4858:6:6", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4854:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1154, - "kind": "modifierInvocation", - "modifierName": { - "id": 1151, - "name": "registeredCreditManagerOnly", - "nameLocations": ["4826:27:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1698, - "src": "4826:27:6" - }, - "nodeType": "ModifierInvocation", - "src": "4826:39:6" - } - ], - "name": "depositFor", - "nameLocation": "4769:10:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1150, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4817:8:6" - }, - "parameters": { - "id": 1149, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1146, - "mutability": "mutable", - "name": "to", - "nameLocation": "4788:2:6", - "nodeType": "VariableDeclaration", - "scope": 1163, - "src": "4780:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1145, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4780:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1148, - "mutability": "mutable", - "name": "amount", - "nameLocation": "4800:6:6", - "nodeType": "VariableDeclaration", - "scope": 1163, - "src": "4792:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1147, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4792:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4779:28:6" - }, - "returnParameters": { - "id": 1155, - "nodeType": "ParameterList", - "parameters": [], - "src": "4866:0:6" - }, - "scope": 1272, - "src": "4760:146:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [794], - "body": { - "id": 1195, - "nodeType": "Block", - "src": "4978:167:6", - "statements": [ - { - "assignments": [1172], - "declarations": [ - { - "constant": false, - "id": 1172, - "mutability": "mutable", - "name": "balance", - "nameLocation": "4996:7:6", - "nodeType": "VariableDeclaration", - "scope": 1195, - "src": "4988:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1171, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4988:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1176, - "initialValue": { - "baseExpression": { - "id": 1173, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 853, - "src": "5006:9:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1175, - "indexExpression": { - "id": 1174, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1165, - "src": "5016:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5006:16:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4988:34:6" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1177, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1172, - "src": "5036:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 1178, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5046:1:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5036:11:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1194, - "nodeType": "IfStatement", - "src": "5032:107:6", - "trueBody": { - "id": 1193, - "nodeType": "Block", - "src": "5049:90:6", - "statements": [ - { - "expression": { - "id": 1184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1180, - "name": "balanceOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 853, - "src": "5063:9:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 1182, - "indexExpression": { - "id": 1181, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1165, - "src": "5073:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5063:16:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "31", - "id": 1183, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5082:1:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5063:20:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1185, - "nodeType": "ExpressionStatement", - "src": "5063:20:6" - }, - { - "expression": { - "arguments": [ - { - "id": 1187, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1165, - "src": "5109:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1188, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1172, - "src": "5116:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 1189, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5126:1:6", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5116:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1186, - "name": "_unwrapWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1220, - "src": "5097:11:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 1191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5097:31:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1192, - "nodeType": "ExpressionStatement", - "src": "5097:31:6" - } - ] - } - } - ] - }, - "functionSelector": "72b0d90c", - "id": 1196, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1169, - "kind": "modifierInvocation", - "modifierName": { - "id": 1168, - "name": "nonReentrant", - "nameLocations": ["4965:12:6"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "4965:12:6" - }, - "nodeType": "ModifierInvocation", - "src": "4965:12:6" - } - ], - "name": "withdrawTo", - "nameLocation": "4921:10:6", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1167, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4956:8:6" - }, - "parameters": { - "id": 1166, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1165, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4940:5:6", - "nodeType": "VariableDeclaration", - "scope": 1196, - "src": "4932:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1164, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4932:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4931:15:6" - }, - "returnParameters": { - "id": 1170, - "nodeType": "ParameterList", - "parameters": [], - "src": "4978:0:6" - }, - "scope": 1272, - "src": "4912:233:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1219, - "nodeType": "Block", - "src": "5260:110:6", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1208, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1201, - "src": "5291:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 1205, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "5276:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1204, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "5270:5:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 1206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5270:11:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 1207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5282:8:6", - "memberName": "withdraw", - "nodeType": "MemberAccess", - "referencedDeclaration": 13601, - "src": "5270:20:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256) external" - } - }, - "id": 1209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5270:28:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1210, - "nodeType": "ExpressionStatement", - "src": "5270:28:6" - }, - { - "expression": { - "arguments": [ - { - "id": 1216, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1201, - "src": "5343:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 1213, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1199, - "src": "5329:2:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1212, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5321:8:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_payable_$", - "typeString": "type(address payable)" - }, - "typeName": { - "id": 1211, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5321:8:6", - "stateMutability": "payable", - "typeDescriptions": {} - } - }, - "id": 1214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5321:11:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 1215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5333:9:6", - "memberName": "sendValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 18442, - "src": "5321:21:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$bound_to$_t_address_payable_$", - "typeString": "function (address payable,uint256)" - } - }, - "id": 1217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5321:29:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1218, - "nodeType": "ExpressionStatement", - "src": "5321:29:6" - } - ] - }, - "documentation": { - "id": 1197, - "nodeType": "StructuredDocumentation", - "src": "5151:46:6", - "text": "@dev Internal implementation for unwrapETH" - }, - "id": 1220, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_unwrapWETH", - "nameLocation": "5211:11:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1202, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1199, - "mutability": "mutable", - "name": "to", - "nameLocation": "5231:2:6", - "nodeType": "VariableDeclaration", - "scope": 1220, - "src": "5223:10:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1198, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5223:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1201, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5243:6:6", - "nodeType": "VariableDeclaration", - "scope": 1220, - "src": "5235:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1200, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5235:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5222:28:6" - }, - "returnParameters": { - "id": 1203, - "nodeType": "ParameterList", - "parameters": [], - "src": "5260:0:6" - }, - "scope": 1272, - "src": "5202:168:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1254, - "nodeType": "Block", - "src": "5649:150:6", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 1234, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "5694:4:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 1233, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5686:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1232, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5686:7:6", - "typeDescriptions": {} - } - }, - "id": 1235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5686:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1236, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1223, - "src": "5701:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 1229, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "5670:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1228, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "5663:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 1230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5663:12:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 1231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5676:9:6", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 17882, - "src": "5663:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 1237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5663:46:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 1238, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1225, - "src": "5712:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5663:55:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1253, - "nodeType": "IfStatement", - "src": "5659:134:6", - "trueBody": { - "id": 1252, - "nodeType": "Block", - "src": "5720:73:6", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1244, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1223, - "src": "5755:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "arguments": [ - { - "id": 1247, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5769:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 1246, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5769:7:6", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 1245, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5764:4:6", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1248, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5764:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 1249, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5778:3:6", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5764:17:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 1241, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "5741:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1240, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "5734:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 1242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5734:12:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 1243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5747:7:6", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 17892, - "src": "5734:20:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 1250, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5734:48:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1251, - "nodeType": "ExpressionStatement", - "src": "5734:48:6" - } - ] - } - } - ] - }, - "documentation": { - "id": 1221, - "nodeType": "StructuredDocumentation", - "src": "5376:201:6", - "text": "@dev Checks that the allowance is sufficient before a transaction, and sets to max if not\n @param spender Account that would spend WETH\n @param amount Amount to compare allowance with" - }, - "id": 1255, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAllowance", - "nameLocation": "5591:15:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1226, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1223, - "mutability": "mutable", - "name": "spender", - "nameLocation": "5615:7:6", - "nodeType": "VariableDeclaration", - "scope": 1255, - "src": "5607:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1222, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5607:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1225, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5632:6:6", - "nodeType": "VariableDeclaration", - "scope": 1255, - "src": "5624:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1224, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5624:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5606:33:6" - }, - "returnParameters": { - "id": 1227, - "nodeType": "ParameterList", - "parameters": [], - "src": "5649:0:6" - }, - "scope": 1272, - "src": "5582:217:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1270, - "nodeType": "Block", - "src": "5953:99:6", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 1259, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5967:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5971:6:6", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5967:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "id": 1263, - "name": "weth", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "5989:4:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5981:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1261, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5981:7:6", - "typeDescriptions": {} - } - }, - "id": 1264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5981:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5967:27:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1269, - "nodeType": "IfStatement", - "src": "5963:70:6", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1266, - "name": "ReceiveIsNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 275, - "src": "6003:28:6", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6003:30:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1268, - "nodeType": "RevertStatement", - "src": "5996:37:6" - } - } - ] - }, - "documentation": { - "id": 1256, - "nodeType": "StructuredDocumentation", - "src": "5805:116:6", - "text": "@dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract." - }, - "id": 1271, - "implemented": true, - "kind": "receive", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1257, - "nodeType": "ParameterList", - "parameters": [], - "src": "5933:2:6" - }, - "returnParameters": { - "id": 1258, - "nodeType": "ParameterList", - "parameters": [], - "src": "5953:0:6" - }, - "scope": 1272, - "src": "5926:126:6", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1273, - "src": "1574:4480:6", - "usedErrors": [261, 269, 271, 273, 275] - } - ], - "src": "128:5927:6" - }, - "id": 6 - }, - "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol", - "exportedSymbols": { - "ACL": [1959], - "AccountFactory": [2565], - "AccountFactoryV2": [138], - "AddressProvider": [2931], - "ContractsRegister": [3114], - "DataCompressor": [4723], - "GearToken": [16548], - "GenesisFactory": [1568], - "Ownable": [16661], - "PriceFeedConfig": [14722], - "PriceOracle": [15267], - "WETHGateway": [1272] - }, - "id": 1569, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1274, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "217:24:7" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "id": 1276, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 16662, - "src": "243:107:7", - "symbolAliases": [ - { - "foreign": { - "id": 1275, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16661, - "src": "251:7:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 1278, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 2932, - "src": "352:133:7", - "symbolAliases": [ - { - "foreign": { - "id": 1277, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "360:15:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "id": 1280, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 3115, - "src": "486:137:7", - "symbolAliases": [ - { - "foreign": { - "id": 1279, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "494:17:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol", - "id": 1282, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 1960, - "src": "624:109:7", - "symbolAliases": [ - { - "foreign": { - "id": 1281, - "name": "ACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1959, - "src": "632:3:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol", - "id": 1284, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 4724, - "src": "734:131:7", - "symbolAliases": [ - { - "foreign": { - "id": 1283, - "name": "DataCompressor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4723, - "src": "742:14:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol", - "id": 1286, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 2566, - "src": "866:131:7", - "symbolAliases": [ - { - "foreign": { - "id": 1285, - "name": "AccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2565, - "src": "874:14:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol", - "file": "../../core/AccountFactory.sol", - "id": 1288, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 139, - "src": "998:63:7", - "symbolAliases": [ - { - "foreign": { - "id": 1287, - "name": "AccountFactoryV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "1006:16:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol", - "file": "../../support/WETHGateway.sol", - "id": 1290, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 1273, - "src": "1063:58:7", - "symbolAliases": [ - { - "foreign": { - "id": 1289, - "name": "WETHGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "1071:11:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol", - "id": 1293, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 15268, - "src": "1122:145:7", - "symbolAliases": [ - { - "foreign": { - "id": 1291, - "name": "PriceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15267, - "src": "1130:11:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1292, - "name": "PriceFeedConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14722, - "src": "1143:15:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol", - "id": 1295, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 16549, - "src": "1268:123:7", - "symbolAliases": [ - { - "foreign": { - "id": 1294, - "name": "GearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16548, - "src": "1276:9:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1296, - "name": "Ownable", - "nameLocations": ["1420:7:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16661, - "src": "1420:7:7" - }, - "id": 1297, - "nodeType": "InheritanceSpecifier", - "src": "1420:7:7" - } - ], - "canonicalName": "GenesisFactory", - "contractDependencies": [ - 1272, 1959, 2565, 2931, 3114, 4723, 15267, 16548 - ], - "contractKind": "contract", - "fullyImplemented": true, - "id": 1568, - "linearizedBaseContracts": [1568, 16661, 18742], - "name": "GenesisFactory", - "nameLocation": "1402:14:7", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "2954018c", - "id": 1300, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "1457:15:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1434:38:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - }, - "typeName": { - "id": 1299, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1298, - "name": "AddressProvider", - "nameLocations": ["1434:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "1434:15:7" - }, - "referencedDeclaration": 2931, - "src": "1434:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "de287359", - "id": 1303, - "mutability": "mutable", - "name": "acl", - "nameLocation": "1489:3:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1478:14:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - }, - "typeName": { - "id": 1302, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1301, - "name": "ACL", - "nameLocations": ["1478:3:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1959, - "src": "1478:3:7" - }, - "referencedDeclaration": 1959, - "src": "1478:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "2630c12f", - "id": 1306, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "1517:11:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1498:30:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - }, - "typeName": { - "id": 1305, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1304, - "name": "PriceOracle", - "nameLocations": ["1498:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15267, - "src": "1498:11:7" - }, - "referencedDeclaration": 15267, - "src": "1498:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 1501, - "nodeType": "Block", - "src": "1584:1601:7", - "statements": [ - { - "expression": { - "id": 1318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1313, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1594:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1316, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1612:19:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_AddressProvider_$2931_$", - "typeString": "function () returns (contract AddressProvider)" - }, - "typeName": { - "id": 1315, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1314, - "name": "AddressProvider", - "nameLocations": ["1616:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "1616:15:7" - }, - "referencedDeclaration": 2931, - "src": "1616:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - }, - "id": 1317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1612:21:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "src": "1594:39:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1319, - "nodeType": "ExpressionStatement", - "src": "1594:39:7" - }, - { - "expression": { - "arguments": [ - { - "id": 1323, - "name": "wethToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1308, - "src": "1684:9:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1320, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1655:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1671:12:7", - "memberName": "setWethToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2831, - "src": "1655:28:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1655:39:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1325, - "nodeType": "ExpressionStatement", - "src": "1655:39:7" - }, - { - "expression": { - "arguments": [ - { - "id": 1329, - "name": "treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1310, - "src": "1752:8:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1326, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1716:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1732:19:7", - "memberName": "setTreasuryContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 2779, - "src": "1716:35:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1716:45:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1331, - "nodeType": "ExpressionStatement", - "src": "1716:45:7" - }, - { - "expression": { - "id": 1337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1332, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "1784:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1790:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_ACL_$1959_$", - "typeString": "function () returns (contract ACL)" - }, - "typeName": { - "id": 1334, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1333, - "name": "ACL", - "nameLocations": ["1794:3:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1959, - "src": "1794:3:7" - }, - "referencedDeclaration": 1959, - "src": "1794:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - } - }, - "id": 1336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1790:9:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "src": "1784:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1338, - "nodeType": "ExpressionStatement", - "src": "1784:15:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1344, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "1852:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - ], - "id": 1343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1844:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1844:7:7", - "typeDescriptions": {} - } - }, - "id": 1345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1844:12:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1339, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1821:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1837:6:7", - "memberName": "setACL", - "nodeType": "MemberAccess", - "referencedDeclaration": 2652, - "src": "1821:22:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1821:36:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1347, - "nodeType": "ExpressionStatement", - "src": "1821:36:7" - }, - { - "assignments": [1350], - "declarations": [ - { - "constant": false, - "id": 1350, - "mutability": "mutable", - "name": "contractsRegister", - "nameLocation": "1898:17:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "1880:35:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - }, - "typeName": { - "id": 1349, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1348, - "name": "ContractsRegister", - "nameLocations": ["1880:17:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "1880:17:7" - }, - "referencedDeclaration": 3114, - "src": "1880:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "visibility": "internal" - } - ], - "id": 1359, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1356, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1961:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1355, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1953:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1953:7:7", - "typeDescriptions": {} - } - }, - "id": 1357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1953:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1918:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ContractsRegister_$3114_$", - "typeString": "function (address) returns (contract ContractsRegister)" - }, - "typeName": { - "id": 1352, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1351, - "name": "ContractsRegister", - "nameLocations": ["1922:17:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "1922:17:7" - }, - "referencedDeclaration": 3114, - "src": "1922:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - } - }, - "id": 1358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1918:69:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1880:107:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1365, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1350, - "src": "2054:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - ], - "id": 1364, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2046:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1363, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2046:7:7", - "typeDescriptions": {} - } - }, - "id": 1366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2046:26:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1360, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2009:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2025:20:7", - "memberName": "setContractsRegister", - "nodeType": "MemberAccess", - "referencedDeclaration": 2677, - "src": "2009:36:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2009:64:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1368, - "nodeType": "ExpressionStatement", - "src": "2009:64:7" - }, - { - "assignments": [1371], - "declarations": [ - { - "constant": false, - "id": 1371, - "mutability": "mutable", - "name": "dataCompressor", - "nameLocation": "2111:14:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2096:29:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - }, - "typeName": { - "id": 1370, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1369, - "name": "DataCompressor", - "nameLocations": ["2096:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4723, - "src": "2096:14:7" - }, - "referencedDeclaration": 4723, - "src": "2096:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - }, - "visibility": "internal" - } - ], - "id": 1380, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1377, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2168:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1376, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2160:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1375, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2160:7:7", - "typeDescriptions": {} - } - }, - "id": 1378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2160:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2128:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_DataCompressor_$4723_$", - "typeString": "function (address) returns (contract DataCompressor)" - }, - "typeName": { - "id": 1373, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1372, - "name": "DataCompressor", - "nameLocations": ["2132:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4723, - "src": "2132:14:7" - }, - "referencedDeclaration": 4723, - "src": "2132:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - } - }, - "id": 1379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2128:66:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2096:98:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1386, - "name": "dataCompressor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1371, - "src": "2258:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - ], - "id": 1385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2250:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2250:7:7", - "typeDescriptions": {} - } - }, - "id": 1387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2250:23:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1381, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2216:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1383, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2232:17:7", - "memberName": "setDataCompressor", - "nodeType": "MemberAccess", - "referencedDeclaration": 2754, - "src": "2216:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2216:58:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1389, - "nodeType": "ExpressionStatement", - "src": "2216:58:7" - }, - { - "assignments": [1394], - "declarations": [ - { - "constant": false, - "id": 1394, - "mutability": "mutable", - "name": "config", - "nameLocation": "2322:6:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2297:31:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig[]" - }, - "typeName": { - "baseType": { - "id": 1392, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1391, - "name": "PriceFeedConfig", - "nameLocations": ["2297:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14722, - "src": "2297:15:7" - }, - "referencedDeclaration": 14722, - "src": "2297:15:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_storage_ptr", - "typeString": "struct PriceFeedConfig" - } - }, - "id": 1393, - "nodeType": "ArrayTypeName", - "src": "2297:17:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_storage_$dyn_storage_ptr", - "typeString": "struct PriceFeedConfig[]" - } - }, - "visibility": "internal" - } - ], - "id": 1395, - "nodeType": "VariableDeclarationStatement", - "src": "2297:31:7" - }, - { - "expression": { - "id": 1406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1396, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "2338:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 1402, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2376:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1401, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2368:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1400, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2368:7:7", - "typeDescriptions": {} - } - }, - "id": 1403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2368:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1404, - "name": "config", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1394, - "src": "2394:6:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - ], - "id": 1399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2352:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr_$returns$_t_contract$_PriceOracle_$15267_$", - "typeString": "function (address,struct PriceFeedConfig memory[] memory) returns (contract PriceOracle)" - }, - "typeName": { - "id": 1398, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1397, - "name": "PriceOracle", - "nameLocations": ["2356:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15267, - "src": "2356:11:7" - }, - "referencedDeclaration": 15267, - "src": "2356:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - } - }, - "id": 1405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2352:49:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "src": "2338:63:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "id": 1407, - "nodeType": "ExpressionStatement", - "src": "2338:63:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1413, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "2462:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - ], - "id": 1412, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2454:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1411, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2454:7:7", - "typeDescriptions": {} - } - }, - "id": 1414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2454:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1408, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2423:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2439:14:7", - "memberName": "setPriceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 2703, - "src": "2423:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2423:52:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1416, - "nodeType": "ExpressionStatement", - "src": "2423:52:7" - }, - { - "assignments": [1419], - "declarations": [ - { - "constant": false, - "id": 1419, - "mutability": "mutable", - "name": "accountFactory", - "nameLocation": "2513:14:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2498:29:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - }, - "typeName": { - "id": 1418, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1417, - "name": "AccountFactory", - "nameLocations": ["2498:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2565, - "src": "2498:14:7" - }, - "referencedDeclaration": 2565, - "src": "2498:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - }, - "visibility": "internal" - } - ], - "id": 1428, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1425, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2570:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2562:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1423, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2562:7:7", - "typeDescriptions": {} - } - }, - "id": 1426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2562:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2530:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_AccountFactory_$2565_$", - "typeString": "function (address) returns (contract AccountFactory)" - }, - "typeName": { - "id": 1421, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1420, - "name": "AccountFactory", - "nameLocations": ["2534:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2565, - "src": "2534:14:7" - }, - "referencedDeclaration": 2565, - "src": "2534:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - } - }, - "id": 1427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2530:66:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2498:98:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1434, - "name": "accountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1419, - "src": "2660:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - ], - "id": 1433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2652:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1432, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2652:7:7", - "typeDescriptions": {} - } - }, - "id": 1435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2652:23:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1429, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2618:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2634:17:7", - "memberName": "setAccountFactory", - "nodeType": "MemberAccess", - "referencedDeclaration": 2728, - "src": "2618:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2618:58:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1437, - "nodeType": "ExpressionStatement", - "src": "2618:58:7" - }, - { - "assignments": [1440], - "declarations": [ - { - "constant": false, - "id": 1440, - "mutability": "mutable", - "name": "wethGateway", - "nameLocation": "2711:11:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2699:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - }, - "typeName": { - "id": 1439, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1438, - "name": "WETHGateway", - "nameLocations": ["2699:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1272, - "src": "2699:11:7" - }, - "referencedDeclaration": 1272, - "src": "2699:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - }, - "visibility": "internal" - } - ], - "id": 1449, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1446, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2749:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1445, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2741:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1444, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2741:7:7", - "typeDescriptions": {} - } - }, - "id": 1447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2741:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2725:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_WETHGateway_$1272_$", - "typeString": "function (address) returns (contract WETHGateway)" - }, - "typeName": { - "id": 1442, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1441, - "name": "WETHGateway", - "nameLocations": ["2729:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1272, - "src": "2729:11:7" - }, - "referencedDeclaration": 1272, - "src": "2729:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - }, - "id": 1448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2725:41:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2699:67:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1455, - "name": "wethGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1440, - "src": "2827:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2819:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1453, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2819:7:7", - "typeDescriptions": {} - } - }, - "id": 1456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2819:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1450, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2788:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2804:14:7", - "memberName": "setWETHGateway", - "nodeType": "MemberAccess", - "referencedDeclaration": 2857, - "src": "2788:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2788:52:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1458, - "nodeType": "ExpressionStatement", - "src": "2788:52:7" - }, - { - "assignments": [1461], - "declarations": [ - { - "constant": false, - "id": 1461, - "mutability": "mutable", - "name": "gearToken", - "nameLocation": "2873:9:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2863:19:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - }, - "typeName": { - "id": 1460, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1459, - "name": "GearToken", - "nameLocations": ["2863:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16548, - "src": "2863:9:7" - }, - "referencedDeclaration": 16548, - "src": "2863:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "visibility": "internal" - } - ], - "id": 1470, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1467, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2907:4:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GenesisFactory_$1568", - "typeString": "contract GenesisFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GenesisFactory_$1568", - "typeString": "contract GenesisFactory" - } - ], - "id": 1466, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2899:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1465, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2899:7:7", - "typeDescriptions": {} - } - }, - "id": 1468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2899:13:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2885:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_GearToken_$16548_$", - "typeString": "function (address) returns (contract GearToken)" - }, - "typeName": { - "id": 1463, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1462, - "name": "GearToken", - "nameLocations": ["2889:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16548, - "src": "2889:9:7" - }, - "referencedDeclaration": 16548, - "src": "2889:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - }, - "id": 1469, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2885:28:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2863:50:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1476, - "name": "gearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "2972:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - ], - "id": 1475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2964:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1474, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2964:7:7", - "typeDescriptions": {} - } - }, - "id": 1477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2964:18:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1471, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2935:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2951:12:7", - "memberName": "setGearToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2805, - "src": "2935:28:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2935:48:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1479, - "nodeType": "ExpressionStatement", - "src": "2935:48:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1483, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3033:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3037:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3033:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1480, - "name": "gearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "3005:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "id": 1482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3015:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 15482, - "src": "3005:27:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3005:39:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1486, - "nodeType": "ExpressionStatement", - "src": "3005:39:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1490, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3100:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3104:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3100:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1487, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "3066:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3082:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3066:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3066:45:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1493, - "nodeType": "ExpressionStatement", - "src": "3066:45:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1497, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3155:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3159:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3155:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1494, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3133:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3137:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3133:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3133:33:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1500, - "nodeType": "ExpressionStatement", - "src": "3133:33:7" - } - ] - }, - "id": 1502, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1308, - "mutability": "mutable", - "name": "wethToken", - "nameLocation": "1555:9:7", - "nodeType": "VariableDeclaration", - "scope": 1502, - "src": "1547:17:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1547:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1310, - "mutability": "mutable", - "name": "treasury", - "nameLocation": "1574:8:7", - "nodeType": "VariableDeclaration", - "scope": 1502, - "src": "1566:16:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1566:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1546:37:7" - }, - "returnParameters": { - "id": 1312, - "nodeType": "ParameterList", - "parameters": [], - "src": "1584:0:7" - }, - "scope": 1568, - "src": "1535:1650:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 1544, - "nodeType": "Block", - "src": "3302:227:7", - "statements": [ - { - "body": { - "id": 1535, - "nodeType": "Block", - "src": "3360:107:7", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 1525, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3399:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1527, - "indexExpression": { - "id": 1526, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3410:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3399:13:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 1528, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3413:5:7", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14719, - "src": "3399:19:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "baseExpression": { - "id": 1529, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3420:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1531, - "indexExpression": { - "id": 1530, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3431:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3420:13:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 1532, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3434:9:7", - "memberName": "priceFeed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14721, - "src": "3420:23:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1522, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "3374:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "id": 1524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3386:12:7", - "memberName": "addPriceFeed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14806, - "src": "3374:24:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 1533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3374:70:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1534, - "nodeType": "ExpressionStatement", - "src": "3374:70:7" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1515, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3332:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 1516, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3336:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3347:6:7", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3336:17:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3332:21:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1536, - "initializationExpression": { - "assignments": [1512], - "declarations": [ - { - "constant": false, - "id": 1512, - "mutability": "mutable", - "name": "i", - "nameLocation": "3325:1:7", - "nodeType": "VariableDeclaration", - "scope": 1536, - "src": "3317:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3317:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1514, - "initialValue": { - "hexValue": "30", - "id": 1513, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3329:1:7", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3317:13:7" - }, - "loopExpression": { - "expression": { - "id": 1520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3355:3:7", - "subExpression": { - "id": 1519, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3357:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1521, - "nodeType": "ExpressionStatement", - "src": "3355:3:7" - }, - "nodeType": "ForStatement", - "src": "3312:155:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1540, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3499:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3503:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3499:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1537, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3477:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3481:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3477:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3477:33:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1543, - "nodeType": "ExpressionStatement", - "src": "3477:33:7" - } - ] - }, - "functionSelector": "8874ff1f", - "id": 1545, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1509, - "kind": "modifierInvocation", - "modifierName": { - "id": 1508, - "name": "onlyOwner", - "nameLocations": ["3276:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3276:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3276:9:7" - } - ], - "name": "addPriceFeeds", - "nameLocation": "3200:13:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1506, - "mutability": "mutable", - "name": "priceFeeds", - "nameLocation": "3239:10:7", - "nodeType": "VariableDeclaration", - "scope": 1545, - "src": "3214:35:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig[]" - }, - "typeName": { - "baseType": { - "id": 1504, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1503, - "name": "PriceFeedConfig", - "nameLocations": ["3214:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14722, - "src": "3214:15:7" - }, - "referencedDeclaration": 14722, - "src": "3214:15:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_storage_ptr", - "typeString": "struct PriceFeedConfig" - } - }, - "id": 1505, - "nodeType": "ArrayTypeName", - "src": "3214:17:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_storage_$dyn_storage_ptr", - "typeString": "struct PriceFeedConfig[]" - } - }, - "visibility": "internal" - } - ], - "src": "3213:37:7" - }, - "returnParameters": { - "id": 1510, - "nodeType": "ParameterList", - "parameters": [], - "src": "3302:0:7" - }, - "scope": 1568, - "src": "3191:338:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1555, - "nodeType": "Block", - "src": "3583:37:7", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1550, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3593:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3597:14:7", - "memberName": "claimOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4790, - "src": "3593:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 1553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3593:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1554, - "nodeType": "ExpressionStatement", - "src": "3593:20:7" - } - ] - }, - "functionSelector": "abd45ac6", - "id": 1556, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1548, - "kind": "modifierInvocation", - "modifierName": { - "id": 1547, - "name": "onlyOwner", - "nameLocations": ["3573:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3573:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3573:9:7" - } - ], - "name": "claimACLOwnership", - "nameLocation": "3544:17:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1546, - "nodeType": "ParameterList", - "parameters": [], - "src": "3561:2:7" - }, - "returnParameters": { - "id": 1549, - "nodeType": "ParameterList", - "parameters": [], - "src": "3583:0:7" - }, - "scope": 1568, - "src": "3535:85:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1566, - "nodeType": "Block", - "src": "3686:49:7", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1561, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "3696:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3712:14:7", - "memberName": "claimOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4790, - "src": "3696:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 1564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3696:32:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1565, - "nodeType": "ExpressionStatement", - "src": "3696:32:7" - } - ] - }, - "functionSelector": "f9d68c81", - "id": 1567, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1559, - "kind": "modifierInvocation", - "modifierName": { - "id": 1558, - "name": "onlyOwner", - "nameLocations": ["3676:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3676:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3676:9:7" - } - ], - "name": "claimAddressProviderOwnership", - "nameLocation": "3635:29:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1557, - "nodeType": "ParameterList", - "parameters": [], - "src": "3664:2:7" - }, - "returnParameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [], - "src": "3686:0:7" - }, - "scope": 1568, - "src": "3626:109:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1569, - "src": "1393:2344:7", - "usedErrors": [] - } - ], - "src": "217:3521:7" - }, - "id": 7 - }, - "/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol", - "exportedSymbols": { - "ACLTrait": [1620], - "AccountTransferNotAllowedException": [357], - "AdapterUsedTwiceException": [342], - "AddressIsNotContractException": [282], - "AddressProvider": [2931], - "AllowanceFailedException": [416], - "AmountCantBeZeroException": [448], - "BalanceLessThanMinimumDesiredException": [389], - "BorrowAmountOutOfLimitsException": [384], - "BorrowedBlockLimitException": [381], - "BorrowingForbiddenException": [375], - "BorrowingMoreU2ForbiddenException": [436], - "CallerNotAdapterException": [327], - "CallerNotConfiguratorException": [300], - "CallerNotControllerException": [309], - "CallerNotCreditAccountOwnerException": [297], - "CallerNotCreditFacadeException": [306], - "CallerNotCreditManagerException": [303], - "CallerNotGaugeException": [318], - "CallerNotPausableAdminException": [312], - "CallerNotPoolQuotaKeeperException": [321], - "CallerNotUnPausableAdminException": [315], - "CallerNotVoterException": [324], - "CannotRampLTForUnderlyingException": [428], - "CantTransferLiquidatableAccountException": [378], - "ContractIsNotAnAllowedAdapterException": [348], - "CreditAccountNotExistsException": [419], - "CreditAccountNotLiquidatableException": [360], - "CreditFacadeNonBlacklistable": [454], - "CreditManagerCantBorrowException": [443], - "CustomHealthFactorTooLowException": [431], - "ExpectedBalancesAlreadySetException": [395], - "ExpectedLiquidityLimitException": [441], - "ExternalCallCreditAccountNotSetException": [469], - "ForbiddenDuringClosureException": [366], - "ForbiddenTokensException": [398], - "IACL": [10623], - "IncompatibleContractException": [345], - "IncompatibleCreditManagerException": [277], - "IncompatiblePoolQuotaKeeper": [445], - "IncorrectCallDataException": [363], - "IncorrectExpirationDateException": [339], - "IncorrectLimitsException": [336], - "IncorrectLiquidationThresholdException": [333], - "IncorrectParameterException": [267], - "IncorrectPriceFeedException": [294], - "IncorrectTokenContractException": [291], - "IncreaseAndDecreaseForbiddenInOneCallException": [369], - "InvalidBotException": [451], - "LiquiditySanityCheckException": [459], - "NoFreeQithdrawalSlotsException": [463], - "NoPermissionException": [467], - "NotAllowedAfterExpirationException": [392], - "NotAllowedForBlacklistedAddressException": [401], - "NotAllowedWhenNotExpirableException": [354], - "NotApprovedBotException": [404], - "NotEnoughCollateralException": [413], - "NotImplementedException": [264], - "NothingToClaimException": [457], - "ReceiveIsNotAllowedException": [275], - "RegisteredCreditManagerOnlyException": [269], - "RegisteredPoolOnlyException": [271], - "SanityCheckTrait": [1736], - "SetLTForUnderlyingException": [330], - "TargetContractNotAllowedException": [410], - "TokenAlreadyAddedException": [285], - "TokenIsNotQuotedException": [351], - "TokenNotAllowedException": [288], - "TooManyEnabledTokensException": [425], - "TooManyTokensException": [422], - "UnknownMethodException": [372], - "UserAlreadyHasAccountException": [407], - "ValueOutOfRangeException": [439], - "VotingContractNotAllowedException": [434], - "WethPoolsOnlyException": [273], - "ZeroAddressException": [261], - "ZeroCallsException": [461] - }, - "id": 1621, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1570, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:8" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 1572, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1621, - "sourceUnit": 2932, - "src": "154:133:8", - "symbolAliases": [ - { - "foreign": { - "id": 1571, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "162:15:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol", - "id": 1574, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1621, - "sourceUnit": 10624, - "src": "288:117:8", - "symbolAliases": [ - { - "foreign": { - "id": 1573, - "name": "IACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10623, - "src": "296:4:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 1575, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1621, - "sourceUnit": 470, - "src": "406:39:8", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol", - "file": "./SanityCheckTrait.sol", - "id": 1577, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1621, - "sourceUnit": 1737, - "src": "447:56:8", - "symbolAliases": [ - { - "foreign": { - "id": 1576, - "name": "SanityCheckTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "455:16:8", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1579, - "name": "SanityCheckTrait", - "nameLocations": ["600:16:8"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1736, - "src": "600:16:8" - }, - "id": 1580, - "nodeType": "InheritanceSpecifier", - "src": "600:16:8" - } - ], - "canonicalName": "ACLTrait", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1578, - "nodeType": "StructuredDocumentation", - "src": "505:65:8", - "text": "@title ACL Trait\n @notice Utility class for ACL consumers" - }, - "fullyImplemented": true, - "id": 1620, - "linearizedBaseContracts": [1620, 1736], - "name": "ACLTrait", - "nameLocation": "588:8:8", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "a50cf2c8", - "id": 1583, - "mutability": "immutable", - "name": "_acl", - "nameLocation": "681:4:8", - "nodeType": "VariableDeclaration", - "scope": 1620, - "src": "659:26:8", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - }, - "typeName": { - "id": 1582, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1581, - "name": "IACL", - "nameLocations": ["659:4:8"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10623, - "src": "659:4:8" - }, - "referencedDeclaration": 10623, - "src": "659:4:8", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 1602, - "nodeType": "Block", - "src": "847:71:8", - "statements": [ - { - "expression": { - "id": 1600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1592, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1583, - "src": "857:4:8", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1595, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "885:15:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1594, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "869:15:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 1596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "869:32:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "902:6:8", - "memberName": "getACL", - "nodeType": "MemberAccess", - "referencedDeclaration": 2638, - "src": "869:39:8", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "869:41:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1593, - "name": "IACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10623, - "src": "864:4:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IACL_$10623_$", - "typeString": "type(contract IACL)" - } - }, - "id": 1599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "864:47:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "src": "857:54:8", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 1601, - "nodeType": "ExpressionStatement", - "src": "857:54:8" - } - ] - }, - "documentation": { - "id": 1584, - "nodeType": "StructuredDocumentation", - "src": "692:81:8", - "text": "@dev constructor\n @param addressProvider Address of address repository" - }, - "id": 1603, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 1589, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1586, - "src": "830:15:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1590, - "kind": "modifierInvocation", - "modifierName": { - "id": 1588, - "name": "nonZeroAddress", - "nameLocations": ["815:14:8"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1735, - "src": "815:14:8" - }, - "nodeType": "ModifierInvocation", - "src": "815:31:8" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1586, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "798:15:8", - "nodeType": "VariableDeclaration", - "scope": 1603, - "src": "790:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1585, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "790:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "789:25:8" - }, - "returnParameters": { - "id": 1591, - "nodeType": "ParameterList", - "parameters": [], - "src": "847:0:8" - }, - "scope": 1620, - "src": "778:140:8", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1618, - "nodeType": "Block", - "src": "1008:129:8", - "statements": [ - { - "condition": { - "id": 1611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1022:32:8", - "subExpression": { - "arguments": [ - { - "expression": { - "id": 1608, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1043:3:8", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1047:6:8", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1043:10:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1606, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1583, - "src": "1023:4:8", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 1607, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1028:14:8", - "memberName": "isConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 10616, - "src": "1023:19:8", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 1610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1023:31:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1616, - "nodeType": "IfStatement", - "src": "1018:102:8", - "trueBody": { - "id": 1615, - "nodeType": "Block", - "src": "1056:64:8", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1612, - "name": "CallerNotConfiguratorException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 300, - "src": "1077:30:8", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1613, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1077:32:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1614, - "nodeType": "RevertStatement", - "src": "1070:39:8" - } - ] - } - }, - { - "id": 1617, - "nodeType": "PlaceholderStatement", - "src": "1129:1:8" - } - ] - }, - "documentation": { - "id": 1604, - "nodeType": "StructuredDocumentation", - "src": "924:51:8", - "text": "@dev Reverts if msg.sender is not configurator" - }, - "id": 1619, - "name": "configuratorOnly", - "nameLocation": "989:16:8", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1605, - "nodeType": "ParameterList", - "parameters": [], - "src": "1005:2:8" - }, - "src": "980:157:8", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1621, - "src": "570:569:8", - "usedErrors": [261] - } - ], - "src": "128:1012:8" - }, - "id": 8 - }, - "/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol", - "exportedSymbols": { - "AddressProvider": [2931], - "ContractsRegister": [3114], - "ContractsRegisterTrait": [1714], - "RegisteredCreditManagerOnlyException": [269], - "RegisteredPoolOnlyException": [271], - "SanityCheckTrait": [1736], - "ZeroAddressException": [261] - }, - "id": 1715, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1622, - "literals": ["solidity", "^", "0.8", ".17"], - "nodeType": "PragmaDirective", - "src": "128:24:9" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 1624, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1715, - "sourceUnit": 2932, - "src": "154:133:9", - "symbolAliases": [ - { - "foreign": { - "id": 1623, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "162:15:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "id": 1626, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1715, - "sourceUnit": 3115, - "src": "288:137:9", - "symbolAliases": [ - { - "foreign": { - "id": 1625, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "296:17:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 1630, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1715, - "sourceUnit": 470, - "src": "427:148:9", - "symbolAliases": [ - { - "foreign": { - "id": 1627, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 261, - "src": "440:20:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1628, - "name": "RegisteredCreditManagerOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 269, - "src": "466:36:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1629, - "name": "RegisteredPoolOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "508:27:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol", - "file": "./SanityCheckTrait.sol", - "id": 1632, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1715, - "sourceUnit": 1737, - "src": "577:56:9", - "symbolAliases": [ - { - "foreign": { - "id": 1631, - "name": "SanityCheckTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "585:16:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1634, - "name": "SanityCheckTrait", - "nameLocations": ["785:16:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1736, - "src": "785:16:9" - }, - "id": 1635, - "nodeType": "InheritanceSpecifier", - "src": "785:16:9" - } - ], - "canonicalName": "ContractsRegisterTrait", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1633, - "nodeType": "StructuredDocumentation", - "src": "635:106:9", - "text": "@title ContractsRegister Trait\n @notice Trait enables checks for registered pools & creditManagers" - }, - "fullyImplemented": true, - "id": 1714, - "linearizedBaseContracts": [1714, 1736], - "name": "ContractsRegisterTrait", - "nameLocation": "759:22:9", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 1638, - "mutability": "immutable", - "name": "_cr", - "nameLocation": "872:3:9", - "nodeType": "VariableDeclaration", - "scope": 1714, - "src": "844:31:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - }, - "typeName": { - "id": 1637, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1636, - "name": "ContractsRegister", - "nameLocations": ["844:17:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "844:17:9" - }, - "referencedDeclaration": 3114, - "src": "844:17:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "visibility": "internal" - }, - { - "body": { - "id": 1656, - "nodeType": "Block", - "src": "951:97:9", - "statements": [ - { - "expression": { - "id": 1654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1646, - "name": "_cr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1638, - "src": "961:3:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1649, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1640, - "src": "1001:15:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1648, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "985:15:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 1650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "985:32:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1018:20:9", - "memberName": "getContractsRegister", - "nodeType": "MemberAccess", - "referencedDeclaration": 2663, - "src": "985:53:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "985:55:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1647, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "967:17:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ContractsRegister_$3114_$", - "typeString": "type(contract ContractsRegister)" - } - }, - "id": 1653, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "967:74:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "src": "961:80:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 1655, - "nodeType": "ExpressionStatement", - "src": "961:80:9" - } - ] - }, - "id": 1657, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 1643, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1640, - "src": "934:15:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1644, - "kind": "modifierInvocation", - "modifierName": { - "id": 1642, - "name": "nonZeroAddress", - "nameLocations": ["919:14:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1735, - "src": "919:14:9" - }, - "nodeType": "ModifierInvocation", - "src": "919:31:9" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1641, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1640, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "902:15:9", - "nodeType": "VariableDeclaration", - "scope": 1657, - "src": "894:23:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "894:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "893:25:9" - }, - "returnParameters": { - "id": 1645, - "nodeType": "ParameterList", - "parameters": [], - "src": "951:0:9" - }, - "scope": 1714, - "src": "882:166:9", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1669, - "nodeType": "Block", - "src": "1124:41:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1666, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1659, - "src": "1152:5:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1664, - "name": "_cr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1638, - "src": "1141:3:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 1665, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1145:6:9", - "memberName": "isPool", - "nodeType": "MemberAccess", - "referencedDeclaration": 2955, - "src": "1141:10:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 1667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1141:17:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1663, - "id": 1668, - "nodeType": "Return", - "src": "1134:24:9" - } - ] - }, - "id": 1670, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isRegisteredPool", - "nameLocation": "1063:16:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1660, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1659, - "mutability": "mutable", - "name": "_pool", - "nameLocation": "1088:5:9", - "nodeType": "VariableDeclaration", - "scope": 1670, - "src": "1080:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1658, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1080:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1079:15:9" - }, - "returnParameters": { - "id": 1663, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1662, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1670, - "src": "1118:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1661, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1118:4:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1117:6:9" - }, - "scope": 1714, - "src": "1054:111:9", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1682, - "nodeType": "Block", - "src": "1250:50:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1679, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1672, - "src": "1287:5:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1677, - "name": "_cr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1638, - "src": "1267:3:9", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 1678, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1271:15:9", - "memberName": "isCreditManager", - "nodeType": "MemberAccess", - "referencedDeclaration": 2966, - "src": "1267:19:9", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 1680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1267:26:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1676, - "id": 1681, - "nodeType": "Return", - "src": "1260:33:9" - } - ] - }, - "id": 1683, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isRegisteredCreditManager", - "nameLocation": "1180:25:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1673, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1672, - "mutability": "mutable", - "name": "_pool", - "nameLocation": "1214:5:9", - "nodeType": "VariableDeclaration", - "scope": 1683, - "src": "1206:13:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1671, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1206:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1205:15:9" - }, - "returnParameters": { - "id": 1676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1675, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1683, - "src": "1244:4:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1674, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1244:4:9", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1243:6:9" - }, - "scope": 1714, - "src": "1171:129:9", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1697, - "nodeType": "Block", - "src": "1411:124:9", - "statements": [ - { - "condition": { - "id": 1691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1425:32:9", - "subExpression": { - "arguments": [ - { - "id": 1689, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1686, - "src": "1452:4:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1688, - "name": "isRegisteredCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1683, - "src": "1426:25:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 1690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1426:31:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1695, - "nodeType": "IfStatement", - "src": "1421:83:9", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1692, - "name": "RegisteredCreditManagerOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 269, - "src": "1466:36:9", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1466:38:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1694, - "nodeType": "RevertStatement", - "src": "1459:45:9" - } - }, - { - "id": 1696, - "nodeType": "PlaceholderStatement", - "src": "1527:1:9" - } - ] - }, - "documentation": { - "id": 1684, - "nodeType": "StructuredDocumentation", - "src": "1306:49:9", - "text": "@dev Checks that credit manager is registered" - }, - "id": 1698, - "name": "registeredCreditManagerOnly", - "nameLocation": "1369:27:9", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1686, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1405:4:9", - "nodeType": "VariableDeclaration", - "scope": 1698, - "src": "1397:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1685, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1397:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1396:14:9" - }, - "src": "1360:175:9", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1712, - "nodeType": "Block", - "src": "1637:94:9", - "statements": [ - { - "condition": { - "id": 1706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1651:23:9", - "subExpression": { - "arguments": [ - { - "id": 1704, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1701, - "src": "1669:4:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1703, - "name": "isRegisteredPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1670, - "src": "1652:16:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 1705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1652:22:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1710, - "nodeType": "IfStatement", - "src": "1647:65:9", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1707, - "name": "RegisteredPoolOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 271, - "src": "1683:27:9", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1708, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1683:29:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1709, - "nodeType": "RevertStatement", - "src": "1676:36:9" - } - }, - { - "id": 1711, - "nodeType": "PlaceholderStatement", - "src": "1723:1:9" - } - ] - }, - "documentation": { - "id": 1699, - "nodeType": "StructuredDocumentation", - "src": "1541:49:9", - "text": "@dev Checks that credit manager is registered" - }, - "id": 1713, - "name": "registeredPoolOnly", - "nameLocation": "1604:18:9", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1702, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1701, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1631:4:9", - "nodeType": "VariableDeclaration", - "scope": 1713, - "src": "1623:12:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1700, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1623:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1622:14:9" - }, - "src": "1595:136:9", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1715, - "src": "741:992:9", - "usedErrors": [261] - } - ], - "src": "128:1606:9" - }, - "id": 9 - }, - "/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol", - "exportedSymbols": { - "SanityCheckTrait": [1736], - "ZeroAddressException": [261] - }, - "id": 1737, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1716, - "literals": ["solidity", "^", "0.8", ".17"], - "nodeType": "PragmaDirective", - "src": "128:24:10" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol", - "file": "../interfaces/IExceptions.sol", - "id": 1718, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1737, - "sourceUnit": 470, - "src": "154:67:10", - "symbolAliases": [ - { - "foreign": { - "id": 1717, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 261, - "src": "162:20:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "SanityCheckTrait", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1719, - "nodeType": "StructuredDocumentation", - "src": "223:65:10", - "text": "@title ACL Trait\n @notice Utility class for ACL consumers" - }, - "fullyImplemented": true, - "id": 1736, - "linearizedBaseContracts": [1736], - "name": "SanityCheckTrait", - "nameLocation": "306:16:10", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1734, - "nodeType": "Block", - "src": "367:93:10", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1723, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1721, - "src": "381:4:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 1726, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "397:1:10", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1725, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "389:7:10", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1724, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "389:7:10", - "typeDescriptions": {} - } - }, - "id": 1727, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "389:10:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "381:18:10", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1732, - "nodeType": "IfStatement", - "src": "377:53:10", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1729, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 261, - "src": "408:20:10", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "408:22:10", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1731, - "nodeType": "RevertStatement", - "src": "401:29:10" - } - }, - { - "id": 1733, - "nodeType": "PlaceholderStatement", - "src": "452:1:10" - } - ] - }, - "id": 1735, - "name": "nonZeroAddress", - "nameLocation": "338:14:10", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 1722, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1721, - "mutability": "mutable", - "name": "addr", - "nameLocation": "361:4:10", - "nodeType": "VariableDeclaration", - "scope": 1735, - "src": "353:12:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "353:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "352:14:10" - }, - "src": "329:131:10", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1737, - "src": "288:174:10", - "usedErrors": [] - } - ], - "src": "128:335:10" - }, - "id": 10 - }, - "/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol", - "exportedSymbols": { - "AggregatorV3Interface": [1782] - }, - "id": 1783, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1738, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "32:23:11" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "AggregatorV3Interface", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 1782, - "linearizedBaseContracts": [1782], - "name": "AggregatorV3Interface", - "nameLocation": "67:21:11", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "313ce567", - "id": 1743, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "102:8:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1739, - "nodeType": "ParameterList", - "parameters": [], - "src": "110:2:11" - }, - "returnParameters": { - "id": 1742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1741, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1743, - "src": "136:5:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1740, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "136:5:11", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "135:7:11" - }, - "scope": 1782, - "src": "93:50:11", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "7284e416", - "id": 1748, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "description", - "nameLocation": "156:11:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1744, - "nodeType": "ParameterList", - "parameters": [], - "src": "167:2:11" - }, - "returnParameters": { - "id": 1747, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1746, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1748, - "src": "193:13:11", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1745, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "193:6:11", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "192:15:11" - }, - "scope": 1782, - "src": "147:61:11", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "54fd4d50", - "id": 1753, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "221:7:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1749, - "nodeType": "ParameterList", - "parameters": [], - "src": "228:2:11" - }, - "returnParameters": { - "id": 1752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1751, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1753, - "src": "254:7:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "254:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "253:9:11" - }, - "scope": 1782, - "src": "212:51:11", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9a6fc8f5", - "id": 1768, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getRoundData", - "nameLocation": "276:12:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1756, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1755, - "mutability": "mutable", - "name": "_roundId", - "nameLocation": "296:8:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "289:15:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 1754, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "289:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "288:17:11" - }, - "returnParameters": { - "id": 1767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1758, - "mutability": "mutable", - "name": "roundId", - "nameLocation": "355:7:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "348:14:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 1757, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "348:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1760, - "mutability": "mutable", - "name": "answer", - "nameLocation": "377:6:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "370:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 1759, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "370:6:11", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1762, - "mutability": "mutable", - "name": "startedAt", - "nameLocation": "399:9:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "391:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1761, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "391:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1764, - "mutability": "mutable", - "name": "updatedAt", - "nameLocation": "424:9:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "416:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1763, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "416:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1766, - "mutability": "mutable", - "name": "answeredInRound", - "nameLocation": "448:15:11", - "nodeType": "VariableDeclaration", - "scope": 1768, - "src": "441:22:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 1765, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "441:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "340:129:11" - }, - "scope": 1782, - "src": "267:203:11", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "feaf968c", - "id": 1781, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "latestRoundData", - "nameLocation": "483:15:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1769, - "nodeType": "ParameterList", - "parameters": [], - "src": "498:2:11" - }, - "returnParameters": { - "id": 1780, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1771, - "mutability": "mutable", - "name": "roundId", - "nameLocation": "550:7:11", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "543:14:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 1770, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "543:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1773, - "mutability": "mutable", - "name": "answer", - "nameLocation": "572:6:11", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "565:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 1772, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "565:6:11", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1775, - "mutability": "mutable", - "name": "startedAt", - "nameLocation": "594:9:11", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "586:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1774, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "586:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1777, - "mutability": "mutable", - "name": "updatedAt", - "nameLocation": "619:9:11", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "611:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1776, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "611:7:11", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1779, - "mutability": "mutable", - "name": "answeredInRound", - "nameLocation": "643:15:11", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "636:22:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 1778, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "636:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "535:129:11" - }, - "scope": 1782, - "src": "474:191:11", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1783, - "src": "57:610:11", - "usedErrors": [] - } - ], - "src": "32:636:11" - }, - "id": 11 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol", - "exportedSymbols": { - "ACL": [1959], - "Claimable": [4791], - "IACL": [10623], - "Ownable": [16661] - }, - "id": 1960, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1784, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:12" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "id": 1786, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1960, - "sourceUnit": 16662, - "src": "154:109:12", - "symbolAliases": [ - { - "foreign": { - "id": 1785, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16661, - "src": "163:7:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol", - "file": "./access/Claimable.sol", - "id": 1788, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1960, - "sourceUnit": 4792, - "src": "264:51:12", - "symbolAliases": [ - { - "foreign": { - "id": 1787, - "name": "Claimable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4791, - "src": "273:9:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol", - "file": "../interfaces/IACL.sol", - "id": 1790, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1960, - "sourceUnit": 10624, - "src": "316:46:12", - "symbolAliases": [ - { - "foreign": { - "id": 1789, - "name": "IACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10623, - "src": "325:4:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1792, - "name": "IACL", - "nameLocations": ["485:4:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10623, - "src": "485:4:12" - }, - "id": 1793, - "nodeType": "InheritanceSpecifier", - "src": "485:4:12" - }, - { - "baseName": { - "id": 1794, - "name": "Claimable", - "nameLocations": ["491:9:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4791, - "src": "491:9:12" - }, - "id": 1795, - "nodeType": "InheritanceSpecifier", - "src": "491:9:12" - } - ], - "canonicalName": "ACL", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1791, - "nodeType": "StructuredDocumentation", - "src": "364:105:12", - "text": "@title ACL contract that stores admin addresses\n More info: https://dev.gearbox.fi/security/roles" - }, - "fullyImplemented": true, - "id": 1959, - "linearizedBaseContracts": [ - 1959, 4791, 16661, 18742, 10623, 12963, 10564, 10585 - ], - "name": "ACL", - "nameLocation": "478:3:12", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "35914829", - "id": 1799, - "mutability": "mutable", - "name": "pausableAdminSet", - "nameLocation": "539:16:12", - "nodeType": "VariableDeclaration", - "scope": 1959, - "src": "507:48:12", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1798, - "keyType": { - "id": 1796, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "515:7:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "507:24:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1797, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "526:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "73281819", - "id": 1803, - "mutability": "mutable", - "name": "unpausableAdminSet", - "nameLocation": "593:18:12", - "nodeType": "VariableDeclaration", - "scope": 1959, - "src": "561:50:12", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 1802, - "keyType": { - "id": 1800, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "569:7:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "561:24:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 1801, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "580:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "functionSelector": "54fd4d50", - "id": 1806, - "mutability": "constant", - "name": "version", - "nameLocation": "666:7:12", - "nodeType": "VariableDeclaration", - "scope": 1959, - "src": "642:35:12", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1804, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "642:7:12", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 1805, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "676:1:12", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "public" - }, - { - "body": { - "id": 1824, - "nodeType": "Block", - "src": "911:119:12", - "statements": [ - { - "expression": { - "id": 1818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1814, - "name": "pausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1799, - "src": "921:16:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1816, - "indexExpression": { - "id": 1815, - "name": "newAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1809, - "src": "938:8:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "921:26:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 1817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "950:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "921:33:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1819, - "nodeType": "ExpressionStatement", - "src": "921:33:12" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1821, - "name": "newAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1809, - "src": "1001:8:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1820, - "name": "PausableAdminAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10569, - "src": "982:18:12", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "982:28:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1823, - "nodeType": "EmitStatement", - "src": "977:33:12" - } - ] - }, - "documentation": { - "id": 1807, - "nodeType": "StructuredDocumentation", - "src": "684:126:12", - "text": "@dev Adds an address to the set of admins that can pause contracts\n @param newAdmin Address of a new pausable admin" - }, - "functionSelector": "4910832f", - "id": 1825, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1812, - "kind": "modifierInvocation", - "modifierName": { - "id": 1811, - "name": "onlyOwner", - "nameLocations": ["884:9:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "884:9:12" - }, - "nodeType": "ModifierInvocation", - "src": "884:9:12" - } - ], - "name": "addPausableAdmin", - "nameLocation": "824:16:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1810, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1809, - "mutability": "mutable", - "name": "newAdmin", - "nameLocation": "849:8:12", - "nodeType": "VariableDeclaration", - "scope": 1825, - "src": "841:16:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "841:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "840:18:12" - }, - "returnParameters": { - "id": 1813, - "nodeType": "ParameterList", - "parameters": [], - "src": "911:0:12" - }, - "scope": 1959, - "src": "815:215:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1853, - "nodeType": "Block", - "src": "1264:226:12", - "statements": [ - { - "condition": { - "id": 1836, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1278:24:12", - "subExpression": { - "baseExpression": { - "id": 1833, - "name": "pausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1799, - "src": "1279:16:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1835, - "indexExpression": { - "id": 1834, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1296:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1279:23:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1842, - "nodeType": "IfStatement", - "src": "1274:101:12", - "trueBody": { - "id": 1841, - "nodeType": "Block", - "src": "1304:71:12", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 1838, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1358:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1837, - "name": "AddressNotPausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10558, - "src": "1325:32:12", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 1839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1325:39:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1840, - "nodeType": "RevertStatement", - "src": "1318:46:12" - } - ] - } - }, - { - "expression": { - "id": 1847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1843, - "name": "pausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1799, - "src": "1384:16:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1845, - "indexExpression": { - "id": 1844, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1401:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1384:23:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 1846, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1410:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "1384:31:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1848, - "nodeType": "ExpressionStatement", - "src": "1384:31:12" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1850, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1828, - "src": "1464:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1849, - "name": "PausableAdminRemoved", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10574, - "src": "1443:20:12", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1443:27:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1852, - "nodeType": "EmitStatement", - "src": "1438:32:12" - } - ] - }, - "documentation": { - "id": 1826, - "nodeType": "StructuredDocumentation", - "src": "1036:127:12", - "text": "@dev Removes an address from the set of admins that can pause contracts\n @param admin Address of admin to be removed" - }, - "functionSelector": "ba306df1", - "id": 1854, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1831, - "kind": "modifierInvocation", - "modifierName": { - "id": 1830, - "name": "onlyOwner", - "nameLocations": ["1237:9:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "1237:9:12" - }, - "nodeType": "ModifierInvocation", - "src": "1237:9:12" - } - ], - "name": "removePausableAdmin", - "nameLocation": "1177:19:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1829, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1828, - "mutability": "mutable", - "name": "admin", - "nameLocation": "1205:5:12", - "nodeType": "VariableDeclaration", - "scope": 1854, - "src": "1197:13:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1827, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1197:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1196:15:12" - }, - "returnParameters": { - "id": 1832, - "nodeType": "ParameterList", - "parameters": [], - "src": "1264:0:12" - }, - "scope": 1959, - "src": "1168:322:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10600], - "body": { - "id": 1867, - "nodeType": "Block", - "src": "1724:61:12", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 1863, - "name": "pausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1799, - "src": "1741:16:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1865, - "indexExpression": { - "id": 1864, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1857, - "src": "1758:4:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1741:22:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1862, - "id": 1866, - "nodeType": "Return", - "src": "1734:29:12" - } - ] - }, - "documentation": { - "id": 1855, - "nodeType": "StructuredDocumentation", - "src": "1496:110:12", - "text": "@dev Returns true if the address is a pausable admin and false if not\n @param addr Address to check" - }, - "functionSelector": "3a41ec64", - "id": 1868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isPausableAdmin", - "nameLocation": "1620:15:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1859, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1688:8:12" - }, - "parameters": { - "id": 1858, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1857, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1644:4:12", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "1636:12:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1856, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1636:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1635:14:12" - }, - "returnParameters": { - "id": 1862, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1861, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1868, - "src": "1714:4:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1860, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1714:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1713:6:12" - }, - "scope": 1959, - "src": "1611:174:12", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1886, - "nodeType": "Block", - "src": "2000:123:12", - "statements": [ - { - "expression": { - "id": 1880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1876, - "name": "unpausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1803, - "src": "2010:18:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1878, - "indexExpression": { - "id": 1877, - "name": "newAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "2029:8:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2010:28:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 1879, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2041:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "2010:35:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1881, - "nodeType": "ExpressionStatement", - "src": "2010:35:12" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1883, - "name": "newAdmin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1871, - "src": "2094:8:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1882, - "name": "UnpausableAdminAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10579, - "src": "2073:20:12", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1884, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2073:30:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1885, - "nodeType": "EmitStatement", - "src": "2068:35:12" - } - ] - }, - "documentation": { - "id": 1869, - "nodeType": "StructuredDocumentation", - "src": "1791:106:12", - "text": "@dev Adds unpausable admin address to the list\n @param newAdmin Address of new unpausable admin" - }, - "functionSelector": "819ad68e", - "id": 1887, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1874, - "kind": "modifierInvocation", - "modifierName": { - "id": 1873, - "name": "onlyOwner", - "nameLocations": ["1973:9:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "1973:9:12" - }, - "nodeType": "ModifierInvocation", - "src": "1973:9:12" - } - ], - "name": "addUnpausableAdmin", - "nameLocation": "1911:18:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1872, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1871, - "mutability": "mutable", - "name": "newAdmin", - "nameLocation": "1938:8:12", - "nodeType": "VariableDeclaration", - "scope": 1887, - "src": "1930:16:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1870, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1930:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1929:18:12" - }, - "returnParameters": { - "id": 1875, - "nodeType": "ParameterList", - "parameters": [], - "src": "2000:0:12" - }, - "scope": 1959, - "src": "1902:221:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1915, - "nodeType": "Block", - "src": "2356:234:12", - "statements": [ - { - "condition": { - "id": 1898, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2370:26:12", - "subExpression": { - "baseExpression": { - "id": 1895, - "name": "unpausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1803, - "src": "2371:18:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1897, - "indexExpression": { - "id": 1896, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1890, - "src": "2390:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2371:25:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1904, - "nodeType": "IfStatement", - "src": "2366:105:12", - "trueBody": { - "id": 1903, - "nodeType": "Block", - "src": "2398:73:12", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 1900, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1890, - "src": "2454:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1899, - "name": "AddressNotUnpausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10563, - "src": "2419:34:12", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 1901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2419:41:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1902, - "nodeType": "RevertStatement", - "src": "2412:48:12" - } - ] - } - }, - { - "expression": { - "id": 1909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1905, - "name": "unpausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1803, - "src": "2480:18:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1907, - "indexExpression": { - "id": 1906, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1890, - "src": "2499:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2480:25:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 1908, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2508:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2480:33:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1910, - "nodeType": "ExpressionStatement", - "src": "2480:33:12" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1912, - "name": "admin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1890, - "src": "2564:5:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1911, - "name": "UnpausableAdminRemoved", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10584, - "src": "2541:22:12", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 1913, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2541:29:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1914, - "nodeType": "EmitStatement", - "src": "2536:34:12" - } - ] - }, - "documentation": { - "id": 1888, - "nodeType": "StructuredDocumentation", - "src": "2129:124:12", - "text": "@dev Adds an address to the set of admins that can unpause contracts\n @param admin Address of admin to be removed" - }, - "functionSelector": "adce758d", - "id": 1916, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1893, - "kind": "modifierInvocation", - "modifierName": { - "id": 1892, - "name": "onlyOwner", - "nameLocations": ["2329:9:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "2329:9:12" - }, - "nodeType": "ModifierInvocation", - "src": "2329:9:12" - } - ], - "name": "removeUnpausableAdmin", - "nameLocation": "2267:21:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1891, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1890, - "mutability": "mutable", - "name": "admin", - "nameLocation": "2297:5:12", - "nodeType": "VariableDeclaration", - "scope": 1916, - "src": "2289:13:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1889, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2289:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2288:15:12" - }, - "returnParameters": { - "id": 1894, - "nodeType": "ParameterList", - "parameters": [], - "src": "2356:0:12" - }, - "scope": 1959, - "src": "2258:332:12", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10608], - "body": { - "id": 1929, - "nodeType": "Block", - "src": "2826:63:12", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 1925, - "name": "unpausableAdminSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1803, - "src": "2843:18:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 1927, - "indexExpression": { - "id": 1926, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1919, - "src": "2862:4:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2843:24:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1924, - "id": 1928, - "nodeType": "Return", - "src": "2836:31:12" - } - ] - }, - "documentation": { - "id": 1917, - "nodeType": "StructuredDocumentation", - "src": "2596:110:12", - "text": "@dev Returns true if the address is unpausable admin and false if not\n @param addr Address to check" - }, - "functionSelector": "d4eb5db0", - "id": 1930, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isUnpausableAdmin", - "nameLocation": "2720:17:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1921, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2790:8:12" - }, - "parameters": { - "id": 1920, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1919, - "mutability": "mutable", - "name": "addr", - "nameLocation": "2746:4:12", - "nodeType": "VariableDeclaration", - "scope": 1930, - "src": "2738:12:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1918, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2738:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2737:14:12" - }, - "returnParameters": { - "id": 1924, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1923, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1930, - "src": "2816:4:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1922, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2816:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2815:6:12" - }, - "scope": 1959, - "src": "2711:178:12", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10616], - "body": { - "id": 1944, - "nodeType": "Block", - "src": "3114:55:12", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1939, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1933, - "src": "3131:7:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1940, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [1958], - "referencedDeclaration": 1958, - "src": "3142:5:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 1941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3142:7:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3131:18:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1938, - "id": 1943, - "nodeType": "Return", - "src": "3124:25:12" - } - ] - }, - "documentation": { - "id": 1931, - "nodeType": "StructuredDocumentation", - "src": "2895:99:12", - "text": "@dev Returns true if an address has configurator rights\n @param account Address to check" - }, - "functionSelector": "5f259aba", - "id": 1945, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isConfigurator", - "nameLocation": "3008:14:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1935, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3078:8:12" - }, - "parameters": { - "id": 1934, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1933, - "mutability": "mutable", - "name": "account", - "nameLocation": "3031:7:12", - "nodeType": "VariableDeclaration", - "scope": 1945, - "src": "3023:15:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3023:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3022:17:12" - }, - "returnParameters": { - "id": 1938, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1937, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1945, - "src": "3104:4:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1936, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3104:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3103:6:12" - }, - "scope": 1959, - "src": "2999:170:12", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10622, 16589], - "body": { - "id": 1957, - "nodeType": "Block", - "src": "3246:39:12", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1953, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16661, - "src": "3263:7:12", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Ownable_$16661_$", - "typeString": "type(contract Ownable)" - } - }, - "id": 1954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3271:5:12", - "memberName": "owner", - "nodeType": "MemberAccess", - "referencedDeclaration": 16589, - "src": "3263:13:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 1955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3263:15:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 1952, - "id": 1956, - "nodeType": "Return", - "src": "3256:22:12" - } - ] - }, - "functionSelector": "8da5cb5b", - "id": 1958, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "owner", - "nameLocation": "3184:5:12", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1949, - "nodeType": "OverrideSpecifier", - "overrides": [ - { - "id": 1947, - "name": "IACL", - "nameLocations": ["3213:4:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10623, - "src": "3213:4:12" - }, - { - "id": 1948, - "name": "Ownable", - "nameLocations": ["3219:7:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16661, - "src": "3219:7:12" - } - ], - "src": "3204:23:12" - }, - "parameters": { - "id": 1946, - "nodeType": "ParameterList", - "parameters": [], - "src": "3189:2:12" - }, - "returnParameters": { - "id": 1952, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1951, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1958, - "src": "3237:7:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1950, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3237:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3236:9:12" - }, - "scope": 1959, - "src": "3175:110:12", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - } - ], - "scope": 1960, - "src": "469:2818:12", - "usedErrors": [10558, 10563] - } - ], - "src": "128:3160:12" - }, - "id": 12 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol", - "exportedSymbols": { - "ACLTrait": [2057], - "AddressProvider": [2931], - "CallerNotConfiguratorException": [12551], - "CallerNotPausableAdminException": [12557], - "CallerNotUnPausableAdminException": [12560], - "IACL": [10623], - "Pausable": [17186], - "ZeroAddressException": [12534] - }, - "id": 2058, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1961, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:13" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol", - "id": 1963, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2058, - "sourceUnit": 17187, - "src": "154:113:13", - "symbolAliases": [ - { - "foreign": { - "id": 1962, - "name": "Pausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17186, - "src": "163:8:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "./AddressProvider.sol", - "id": 1965, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2058, - "sourceUnit": 2932, - "src": "268:56:13", - "symbolAliases": [ - { - "foreign": { - "id": 1964, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "277:15:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol", - "file": "../interfaces/IACL.sol", - "id": 1967, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2058, - "sourceUnit": 10624, - "src": "325:46:13", - "symbolAliases": [ - { - "foreign": { - "id": 1966, - "name": "IACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10623, - "src": "334:4:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol", - "file": "../interfaces/IErrors.sol", - "id": 1972, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2058, - "sourceUnit": 12561, - "src": "372:165:13", - "symbolAliases": [ - { - "foreign": { - "id": 1968, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "381:20:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1969, - "name": "CallerNotConfiguratorException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12551, - "src": "403:30:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1970, - "name": "CallerNotPausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12557, - "src": "435:31:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1971, - "name": "CallerNotUnPausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12560, - "src": "468:33:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1974, - "name": "Pausable", - "nameLocations": ["634:8:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17186, - "src": "634:8:13" - }, - "id": 1975, - "nodeType": "InheritanceSpecifier", - "src": "634:8:13" - } - ], - "canonicalName": "ACLTrait", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1973, - "nodeType": "StructuredDocumentation", - "src": "539:65:13", - "text": "@title ACL Trait\n @notice Utility class for ACL consumers" - }, - "fullyImplemented": true, - "id": 2057, - "linearizedBaseContracts": [2057, 17186, 18742], - "name": "ACLTrait", - "nameLocation": "622:8:13", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "a50cf2c8", - "id": 1978, - "mutability": "immutable", - "name": "_acl", - "nameLocation": "707:4:13", - "nodeType": "VariableDeclaration", - "scope": 2057, - "src": "685:26:13", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - }, - "typeName": { - "id": 1977, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1976, - "name": "IACL", - "nameLocations": ["685:4:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10623, - "src": "685:4:13" - }, - "referencedDeclaration": 10623, - "src": "685:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 2004, - "nodeType": "Block", - "src": "841:158:13", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1989, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1984, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1981, - "src": "855:15:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 1987, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "882:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1986, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "874:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1985, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "874:7:13", - "typeDescriptions": {} - } - }, - "id": 1988, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "874:10:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "855:29:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1993, - "nodeType": "IfStatement", - "src": "851:64:13", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1990, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "893:20:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "893:22:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1992, - "nodeType": "RevertStatement", - "src": "886:29:13" - } - }, - { - "expression": { - "id": 2002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1994, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1978, - "src": "938:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1997, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1981, - "src": "966:15:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1996, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "950:15:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 1998, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "950:32:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "983:6:13", - "memberName": "getACL", - "nodeType": "MemberAccess", - "referencedDeclaration": 2638, - "src": "950:39:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 2000, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "950:41:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1995, - "name": "IACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10623, - "src": "945:4:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IACL_$10623_$", - "typeString": "type(contract IACL)" - } - }, - "id": 2001, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "945:47:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "src": "938:54:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 2003, - "nodeType": "ExpressionStatement", - "src": "938:54:13" - } - ] - }, - "documentation": { - "id": 1979, - "nodeType": "StructuredDocumentation", - "src": "718:81:13", - "text": "@dev constructor\n @param addressProvider Address of address repository" - }, - "id": 2005, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1982, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1981, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "824:15:13", - "nodeType": "VariableDeclaration", - "scope": 2005, - "src": "816:23:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1980, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "816:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "815:25:13" - }, - "returnParameters": { - "id": 1983, - "nodeType": "ParameterList", - "parameters": [], - "src": "841:0:13" - }, - "scope": 2057, - "src": "804:195:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2019, - "nodeType": "Block", - "src": "1089:117:13", - "statements": [ - { - "condition": { - "id": 2013, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1103:32:13", - "subExpression": { - "arguments": [ - { - "expression": { - "id": 2010, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1124:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2011, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1128:6:13", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1124:10:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2008, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1978, - "src": "1104:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 2009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1109:14:13", - "memberName": "isConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 10616, - "src": "1104:19:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 2012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1104:31:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2017, - "nodeType": "IfStatement", - "src": "1099:89:13", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2014, - "name": "CallerNotConfiguratorException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12551, - "src": "1156:30:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2015, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1156:32:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2016, - "nodeType": "RevertStatement", - "src": "1149:39:13" - } - }, - { - "id": 2018, - "nodeType": "PlaceholderStatement", - "src": "1198:1:13" - } - ] - }, - "documentation": { - "id": 2006, - "nodeType": "StructuredDocumentation", - "src": "1005:51:13", - "text": "@dev Reverts if msg.sender is not configurator" - }, - "id": 2020, - "name": "configuratorOnly", - "nameLocation": "1070:16:13", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 2007, - "nodeType": "ParameterList", - "parameters": [], - "src": "1086:2:13" - }, - "src": "1061:145:13", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2037, - "nodeType": "Block", - "src": "1265:126:13", - "statements": [ - { - "condition": { - "id": 2029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1279:33:13", - "subExpression": { - "arguments": [ - { - "expression": { - "id": 2026, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1301:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1305:6:13", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1301:10:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2024, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1978, - "src": "1280:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 2025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1285:15:13", - "memberName": "isPausableAdmin", - "nodeType": "MemberAccess", - "referencedDeclaration": 10600, - "src": "1280:20:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 2028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1280:32:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2033, - "nodeType": "IfStatement", - "src": "1275:91:13", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2030, - "name": "CallerNotPausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12557, - "src": "1333:31:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1333:33:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2032, - "nodeType": "RevertStatement", - "src": "1326:40:13" - } - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2034, - "name": "_pause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17169, - "src": "1376:6:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1376:8:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2036, - "nodeType": "ExpressionStatement", - "src": "1376:8:13" - } - ] - }, - "documentation": { - "id": 2021, - "nodeType": "StructuredDocumentation", - "src": "1212:22:13", - "text": "@dev Pause contract" - }, - "functionSelector": "8456cb59", - "id": 2038, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "pause", - "nameLocation": "1248:5:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2022, - "nodeType": "ParameterList", - "parameters": [], - "src": "1253:2:13" - }, - "returnParameters": { - "id": 2023, - "nodeType": "ParameterList", - "parameters": [], - "src": "1265:0:13" - }, - "scope": 2057, - "src": "1239:152:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2055, - "nodeType": "Block", - "src": "1455:133:13", - "statements": [ - { - "condition": { - "id": 2047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1469:35:13", - "subExpression": { - "arguments": [ - { - "expression": { - "id": 2044, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1493:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2045, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1497:6:13", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1493:10:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2042, - "name": "_acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1978, - "src": "1470:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IACL_$10623", - "typeString": "contract IACL" - } - }, - "id": 2043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1475:17:13", - "memberName": "isUnpausableAdmin", - "nodeType": "MemberAccess", - "referencedDeclaration": 10608, - "src": "1470:22:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 2046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1470:34:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2051, - "nodeType": "IfStatement", - "src": "1465:95:13", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2048, - "name": "CallerNotUnPausableAdminException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12560, - "src": "1525:33:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1525:35:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2050, - "nodeType": "RevertStatement", - "src": "1518:42:13" - } - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2052, - "name": "_unpause", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17185, - "src": "1571:8:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1571:10:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2054, - "nodeType": "ExpressionStatement", - "src": "1571:10:13" - } - ] - }, - "documentation": { - "id": 2039, - "nodeType": "StructuredDocumentation", - "src": "1397:25:13", - "text": "@dev Unpause contract" - }, - "functionSelector": "3f4ba83a", - "id": 2056, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "unpause", - "nameLocation": "1436:7:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2040, - "nodeType": "ParameterList", - "parameters": [], - "src": "1443:2:13" - }, - "returnParameters": { - "id": 2041, - "nodeType": "ParameterList", - "parameters": [], - "src": "1455:0:13" - }, - "scope": 2057, - "src": "1427:161:13", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2058, - "src": "604:986:13", - "usedErrors": [12534, 12557, 12560] - } - ], - "src": "128:1463:13" - }, - "id": 13 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol", - "exportedSymbols": { - "ACLTrait": [2057], - "AccountFactory": [2565], - "AddressProvider": [2931], - "Clones": [16909], - "ContractsRegister": [3114], - "CreditAccount": [4990], - "EnumerableSet": [20908], - "Errors": [14033], - "IAccountFactory": [10721], - "ICreditAccount": [11064], - "ReentrancyGuard": [17240] - }, - "id": 2566, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2059, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:14" - }, - { - "id": 2060, - "literals": ["abicoder", "v2"], - "nodeType": "PragmaDirective", - "src": "153:19:14" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "id": 2062, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 20909, - "src": "174:128:14", - "symbolAliases": [ - { - "foreign": { - "id": 2061, - "name": "EnumerableSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20908, - "src": "183:13:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol", - "id": 2064, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 16910, - "src": "303:106:14", - "symbolAliases": [ - { - "foreign": { - "id": 2063, - "name": "Clones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16909, - "src": "312:6:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol", - "file": "../interfaces/IAccountFactory.sol", - "id": 2066, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 10722, - "src": "410:68:14", - "symbolAliases": [ - { - "foreign": { - "id": 2065, - "name": "IAccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10721, - "src": "419:15:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol", - "file": "../interfaces/ICreditAccount.sol", - "id": 2068, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 11065, - "src": "479:66:14", - "symbolAliases": [ - { - "foreign": { - "id": 2067, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "488:14:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "./AddressProvider.sol", - "id": 2070, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 2932, - "src": "547:56:14", - "symbolAliases": [ - { - "foreign": { - "id": 2069, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "556:15:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "file": "./ContractsRegister.sol", - "id": 2072, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 3115, - "src": "604:60:14", - "symbolAliases": [ - { - "foreign": { - "id": 2071, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "613:17:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol", - "file": "../credit/CreditAccount.sol", - "id": 2074, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 4991, - "src": "665:60:14", - "symbolAliases": [ - { - "foreign": { - "id": 2073, - "name": "CreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4990, - "src": "674:13:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol", - "file": "./ACLTrait.sol", - "id": 2076, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 2058, - "src": "726:42:14", - "symbolAliases": [ - { - "foreign": { - "id": 2075, - "name": "ACLTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2057, - "src": "735:8:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "id": 2078, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 17241, - "src": "769:127:14", - "symbolAliases": [ - { - "foreign": { - "id": 2077, - "name": "ReentrancyGuard", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17240, - "src": "778:15:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "file": "../libraries/Errors.sol", - "id": 2080, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2566, - "sourceUnit": 14034, - "src": "898:49:14", - "symbolAliases": [ - { - "foreign": { - "id": 2079, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "907:6:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2082, - "name": "IAccountFactory", - "nameLocations": ["1099:15:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10721, - "src": "1099:15:14" - }, - "id": 2083, - "nodeType": "InheritanceSpecifier", - "src": "1099:15:14" - }, - { - "baseName": { - "id": 2084, - "name": "ACLTrait", - "nameLocations": ["1116:8:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "1116:8:14" - }, - "id": 2085, - "nodeType": "InheritanceSpecifier", - "src": "1116:8:14" - }, - { - "baseName": { - "id": 2086, - "name": "ReentrancyGuard", - "nameLocations": ["1126:15:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17240, - "src": "1126:15:14" - }, - "id": 2087, - "nodeType": "InheritanceSpecifier", - "src": "1126:15:14" - } - ], - "canonicalName": "AccountFactory", - "contractDependencies": [4990], - "contractKind": "contract", - "documentation": { - "id": 2081, - "nodeType": "StructuredDocumentation", - "src": "949:123:14", - "text": "@title Abstract reusable credit accounts factory\n @notice Creates, holds & lends credit accounts to Credit Managers" - }, - "fullyImplemented": true, - "id": 2565, - "linearizedBaseContracts": [ - 2565, 17240, 2057, 17186, 18742, 10721, 12963, 10657, 10698 - ], - "name": "AccountFactory", - "nameLocation": "1081:14:14", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 2091, - "libraryName": { - "id": 2088, - "name": "EnumerableSet", - "nameLocations": ["1154:13:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20908, - "src": "1154:13:14" - }, - "nodeType": "UsingForDirective", - "src": "1148:49:14", - "typeName": { - "id": 2090, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2089, - "name": "EnumerableSet.AddressSet", - "nameLocations": ["1172:13:14", "1186:10:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "1172:24:14" - }, - "referencedDeclaration": 20621, - "src": "1172:24:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - } - }, - { - "constant": false, - "documentation": { - "id": 2092, - "nodeType": "StructuredDocumentation", - "src": "1575:35:14", - "text": "@dev Credit account linked list" - }, - "id": 2096, - "mutability": "mutable", - "name": "_nextCreditAccount", - "nameLocation": "1651:18:14", - "nodeType": "VariableDeclaration", - "scope": 2565, - "src": "1615:54:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 2095, - "keyType": { - "id": 2093, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1623:7:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1615:27:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 2094, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1634:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "private" - }, - { - "baseFunctions": [10671], - "constant": false, - "documentation": { - "id": 2097, - "nodeType": "StructuredDocumentation", - "src": "1676:28:14", - "text": "@dev Head of linked list" - }, - "functionSelector": "8f7dcfa3", - "id": 2100, - "mutability": "mutable", - "name": "head", - "nameLocation": "1733:4:14", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2099, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1724:8:14" - }, - "scope": 2565, - "src": "1709:28:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1709:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [10677], - "constant": false, - "documentation": { - "id": 2101, - "nodeType": "StructuredDocumentation", - "src": "1744:28:14", - "text": "@dev Tail of linked list" - }, - "functionSelector": "13d8c840", - "id": 2104, - "mutability": "mutable", - "name": "tail", - "nameLocation": "1801:4:14", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2103, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1792:8:14" - }, - "scope": 2565, - "src": "1777:28:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2102, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1777:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2105, - "nodeType": "StructuredDocumentation", - "src": "1812:53:14", - "text": "@dev Address of master credit account for cloning" - }, - "functionSelector": "5da33c5b", - "id": 2107, - "mutability": "immutable", - "name": "masterCreditAccount", - "nameLocation": "1895:19:14", - "nodeType": "VariableDeclaration", - "scope": 2565, - "src": "1870:44:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2106, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1870:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 2108, - "nodeType": "StructuredDocumentation", - "src": "1921:35:14", - "text": "@dev Set of all Credit Accounts" - }, - "id": 2111, - "mutability": "mutable", - "name": "creditAccountsSet", - "nameLocation": "1994:17:14", - "nodeType": "VariableDeclaration", - "scope": 2565, - "src": "1961:50:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 2110, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2109, - "name": "EnumerableSet.AddressSet", - "nameLocations": ["1961:13:14", "1975:10:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "1961:24:14" - }, - "referencedDeclaration": 20621, - "src": "1961:24:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 2112, - "nodeType": "StructuredDocumentation", - "src": "2018:27:14", - "text": "@dev Contracts register" - }, - "functionSelector": "88f64c54", - "id": 2115, - "mutability": "immutable", - "name": "_contractsRegister", - "nameLocation": "2085:18:14", - "nodeType": "VariableDeclaration", - "scope": 2565, - "src": "2050:53:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - }, - "typeName": { - "id": 2114, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2113, - "name": "ContractsRegister", - "nameLocations": ["2050:17:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "2050:17:14" - }, - "referencedDeclaration": 3114, - "src": "2050:17:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "documentation": { - "id": 2116, - "nodeType": "StructuredDocumentation", - "src": "2110:25:14", - "text": "@dev Contract version" - }, - "functionSelector": "54fd4d50", - "id": 2119, - "mutability": "constant", - "name": "version", - "nameLocation": "2164:7:14", - "nodeType": "VariableDeclaration", - "scope": 2565, - "src": "2140:35:14", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2117, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2140:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 2118, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2174:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "public" - }, - { - "body": { - "id": 2133, - "nodeType": "Block", - "src": "2296:165:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 2125, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2362:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2366:6:14", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2362:10:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2123, - "name": "_contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2115, - "src": "2327:18:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 2124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2346:15:14", - "memberName": "isCreditManager", - "nodeType": "MemberAccess", - "referencedDeclaration": 2966, - "src": "2327:34:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 2127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2327:46:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2128, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "2387:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2129, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2394:39:14", - "memberName": "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - "nodeType": "MemberAccess", - "referencedDeclaration": 13948, - "src": "2387:46:14", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2122, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2306:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2130, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2306:137:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2131, - "nodeType": "ExpressionStatement", - "src": "2306:137:14" - }, - { - "id": 2132, - "nodeType": "PlaceholderStatement", - "src": "2453:1:14" - } - ] - }, - "documentation": { - "id": 2120, - "nodeType": "StructuredDocumentation", - "src": "2182:80:14", - "text": "@dev Modifier restricting access to Credit Managers registered in the system" - }, - "id": 2134, - "name": "creditManagerOnly", - "nameLocation": "2276:17:14", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 2121, - "nodeType": "ParameterList", - "parameters": [], - "src": "2293:2:14" - }, - "src": "2267:194:14", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2199, - "nodeType": "Block", - "src": "2853:546:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2144, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "2884:15:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2147, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2911:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2146, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2903:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2145, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2903:7:14", - "typeDescriptions": {} - } - }, - "id": 2148, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2903:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2884:29:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2150, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "2927:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2151, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2934:27:14", - "memberName": "ZERO_ADDRESS_IS_NOT_ALLOWED", - "nodeType": "MemberAccess", - "referencedDeclaration": 13936, - "src": "2927:34:14", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2143, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2863:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2863:108:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2153, - "nodeType": "ExpressionStatement", - "src": "2863:108:14" - }, - { - "expression": { - "id": 2162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2154, - "name": "_contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2115, - "src": "2982:18:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 2157, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "3050:15:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2156, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "3034:15:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 2158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3034:32:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 2159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3067:20:14", - "memberName": "getContractsRegister", - "nodeType": "MemberAccess", - "referencedDeclaration": 2663, - "src": "3034:53:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 2160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3034:55:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2155, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "3003:17:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ContractsRegister_$3114_$", - "typeString": "type(contract ContractsRegister)" - } - }, - "id": 2161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3003:96:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "src": "2982:117:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 2163, - "nodeType": "ExpressionStatement", - "src": "2982:117:14" - }, - { - "expression": { - "id": 2172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2164, - "name": "masterCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2107, - "src": "3122:19:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "3152:17:14", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_CreditAccount_$4990_$", - "typeString": "function () returns (contract CreditAccount)" - }, - "typeName": { - "id": 2168, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2167, - "name": "CreditAccount", - "nameLocations": ["3156:13:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4990, - "src": "3156:13:14" - }, - "referencedDeclaration": 4990, - "src": "3156:13:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditAccount_$4990", - "typeString": "contract CreditAccount" - } - } - }, - "id": 2170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3152:19:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditAccount_$4990", - "typeString": "contract CreditAccount" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_CreditAccount_$4990", - "typeString": "contract CreditAccount" - } - ], - "id": 2166, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3144:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2165, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3144:7:14", - "typeDescriptions": {} - } - }, - "id": 2171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3144:28:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3122:50:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2173, - "nodeType": "ExpressionStatement", - "src": "3122:50:14" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 2175, - "name": "masterCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2107, - "src": "3208:19:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2174, - "name": "CreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4990, - "src": "3194:13:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_CreditAccount_$4990_$", - "typeString": "type(contract CreditAccount)" - } - }, - "id": 2176, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3194:34:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditAccount_$4990", - "typeString": "contract CreditAccount" - } - }, - "id": 2177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3229:10:14", - "memberName": "initialize", - "nodeType": "MemberAccess", - "referencedDeclaration": 4877, - "src": "3194:45:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 2178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3194:47:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2179, - "nodeType": "ExpressionStatement", - "src": "3194:47:14" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2180, - "name": "addCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2352, - "src": "3264:16:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3264:18:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2182, - "nodeType": "ExpressionStatement", - "src": "3264:18:14" - }, - { - "expression": { - "id": 2185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2183, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "3304:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2184, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "3311:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3304:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2186, - "nodeType": "ExpressionStatement", - "src": "3304:11:14" - }, - { - "expression": { - "id": 2197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2187, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "3337:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2192, - "indexExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2190, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3364:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2189, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3356:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2188, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3356:7:14", - "typeDescriptions": {} - } - }, - "id": 2191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3356:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3337:30:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 2195, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3378:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3370:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2193, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3370:7:14", - "typeDescriptions": {} - } - }, - "id": 2196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3370:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3337:43:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2198, - "nodeType": "ExpressionStatement", - "src": "3337:43:14" - } - ] - }, - "documentation": { - "id": 2135, - "nodeType": "StructuredDocumentation", - "src": "2467:318:14", - "text": " @dev constructor\n After the constructor is executed, the list should look as follows\n head\n ⬇\n -------\n | CA1 | -> address(0)\n -------\n ⬆\n tail\n @param addressProvider Address of address repository" - }, - "id": 2200, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 2140, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2137, - "src": "2836:15:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 2141, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 2139, - "name": "ACLTrait", - "nameLocations": ["2827:8:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "2827:8:14" - }, - "nodeType": "ModifierInvocation", - "src": "2827:25:14" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2138, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2137, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "2810:15:14", - "nodeType": "VariableDeclaration", - "scope": 2200, - "src": "2802:23:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2136, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2802:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2801:25:14" - }, - "returnParameters": { - "id": 2142, - "nodeType": "ParameterList", - "parameters": [], - "src": "2853:0:14" - }, - "scope": 2565, - "src": "2790:609:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [10714], - "body": { - "id": 2253, - "nodeType": "Block", - "src": "4803:571:14", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2213, - "name": "_checkStock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2467, - "src": "4879:11:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4879:13:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2215, - "nodeType": "ExpressionStatement", - "src": "4879:13:14" - }, - { - "assignments": [2217], - "declarations": [ - { - "constant": false, - "id": 2217, - "mutability": "mutable", - "name": "result", - "nameLocation": "4923:6:14", - "nodeType": "VariableDeclaration", - "scope": 2253, - "src": "4915:14:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2216, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4915:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 2219, - "initialValue": { - "id": 2218, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "4932:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4915:21:14" - }, - { - "expression": { - "id": 2224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2220, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "4946:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 2221, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "4953:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2223, - "indexExpression": { - "id": 2222, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "4972:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4953:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4946:31:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2225, - "nodeType": "ExpressionStatement", - "src": "4946:31:14" - }, - { - "expression": { - "id": 2233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2226, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "4999:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2228, - "indexExpression": { - "id": 2227, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2217, - "src": "5018:6:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4999:26:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 2231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5036:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5028:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2229, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5028:7:14", - "typeDescriptions": {} - } - }, - "id": 2232, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5028:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4999:39:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2234, - "nodeType": "ExpressionStatement", - "src": "4999:39:14" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 2239, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5158:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5162:6:14", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5158:10:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2241, - "name": "_borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2203, - "src": "5182:15:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2242, - "name": "_cumulativeIndexAtOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2205, - "src": "5211:22:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 2236, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2217, - "src": "5127:6:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2235, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "5112:14:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 2237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5112:22:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 2238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5135:9:14", - "memberName": "connectTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 10997, - "src": "5112:32:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256) external" - } - }, - "id": 2243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5112:131:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2244, - "nodeType": "ExpressionStatement", - "src": "5112:131:14" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2246, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2217, - "src": "5300:6:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 2247, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5308:3:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5312:6:14", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5308:10:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2245, - "name": "InitializeCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10644, - "src": "5276:23:14", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 2249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5276:43:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2250, - "nodeType": "EmitStatement", - "src": "5271:48:14" - }, - { - "expression": { - "id": 2251, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2217, - "src": "5348:6:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2212, - "id": 2252, - "nodeType": "Return", - "src": "5341:13:14" - } - ] - }, - "documentation": { - "id": 2201, - "nodeType": "StructuredDocumentation", - "src": "3405:1184:14", - "text": " @dev Provides a new credit account to a Credit Manager\n Before:\n ---------\n head\n ⬇\n ------- ------- ------- -------\n | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0)\n ------- ------- ------- -------\n ⬆\n tail\n After:\n ---------\n head\n ⬇\n ------- ------- -------\n | CA2 | -> | CA3 | -> | CA4 | -> address(0)\n ------- ------- -------\n ⬆\n tail\n -------\n | CA1 | -> address(0)\n -------\n If the taken Credit Account is the last one, creates a new one\n head\n ⬇\n -------\n | CA2 | -> address(0) => _addNewCreditAccount()\n -------\n ⬆\n tail\n @return Address of credit account" - }, - "functionSelector": "21d18456", - "id": 2254, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2209, - "kind": "modifierInvocation", - "modifierName": { - "id": 2208, - "name": "creditManagerOnly", - "nameLocations": ["4742:17:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2134, - "src": "4742:17:14" - }, - "nodeType": "ModifierInvocation", - "src": "4742:17:14" - } - ], - "name": "takeCreditAccount", - "nameLocation": "4603:17:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2207, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4725:8:14" - }, - "parameters": { - "id": 2206, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2203, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "4638:15:14", - "nodeType": "VariableDeclaration", - "scope": 2254, - "src": "4630:23:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2202, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4630:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2205, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "4671:22:14", - "nodeType": "VariableDeclaration", - "scope": 2254, - "src": "4663:30:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2204, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4663:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4620:79:14" - }, - "returnParameters": { - "id": 2212, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2211, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2254, - "src": "4790:7:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2210, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4790:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4789:9:14" - }, - "scope": 2565, - "src": "4594:780:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10720], - "body": { - "id": 2299, - "nodeType": "Block", - "src": "6601:474:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 2266, - "name": "usedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2257, - "src": "6659:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2264, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "6632:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2265, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6650:8:14", - "memberName": "contains", - "nodeType": "MemberAccess", - "referencedDeclaration": 20702, - "src": "6632:26:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$20621_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)" - } - }, - "id": 2267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6632:39:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2268, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "6685:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6692:34:14", - "memberName": "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - "nodeType": "MemberAccess", - "referencedDeclaration": 13990, - "src": "6685:41:14", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2263, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "6611:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6611:125:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2271, - "nodeType": "ExpressionStatement", - "src": "6611:125:14" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 2274, - "name": "usedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2257, - "src": "6782:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2273, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "6767:14:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 2275, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6767:27:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 2276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6795:5:14", - "memberName": "since", - "nodeType": "MemberAccess", - "referencedDeclaration": 11041, - "src": "6767:33:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 2277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6767:35:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 2278, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "6806:5:14", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 2279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6812:6:14", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "6806:12:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6767:51:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2281, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "6832:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2282, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6839:46:14", - "memberName": "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - "nodeType": "MemberAccess", - "referencedDeclaration": 13981, - "src": "6832:53:14", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2272, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "6746:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6746:149:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2284, - "nodeType": "ExpressionStatement", - "src": "6746:149:14" - }, - { - "expression": { - "id": 2289, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2285, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "6919:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2287, - "indexExpression": { - "id": 2286, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "6938:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6919:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2288, - "name": "usedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2257, - "src": "6946:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6919:38:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2290, - "nodeType": "ExpressionStatement", - "src": "6919:38:14" - }, - { - "expression": { - "id": 2293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2291, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "6979:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2292, - "name": "usedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2257, - "src": "6986:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6979:18:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2294, - "nodeType": "ExpressionStatement", - "src": "6979:18:14" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2296, - "name": "usedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2257, - "src": "7044:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2295, - "name": "ReturnCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10649, - "src": "7024:19:14", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 2297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7024:32:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2298, - "nodeType": "EmitStatement", - "src": "7019:37:14" - } - ] - }, - "documentation": { - "id": 2255, - "nodeType": "StructuredDocumentation", - "src": "5380:1089:14", - "text": " @dev Retrieves the Credit Account from the Credit Manager and adds it to the stock\n Before:\n ---------\n head\n ⬇\n ------- ------- ------- -------\n | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0)\n ------- ------- ------- -------\n ⬆\n tail\n After:\n ---------\n head\n ⬇\n ------- ------- ------- ------- ---------------\n | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | usedAccount | -> address(0)\n ------- ------- ------- ------- ---------------\n ⬆\n tail\n @param usedAccount Address of returned credit account" - }, - "functionSelector": "89b77b3e", - "id": 2300, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2261, - "kind": "modifierInvocation", - "modifierName": { - "id": 2260, - "name": "creditManagerOnly", - "nameLocations": ["6566:17:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2134, - "src": "6566:17:14" - }, - "nodeType": "ModifierInvocation", - "src": "6566:17:14" - } - ], - "name": "returnCreditAccount", - "nameLocation": "6483:19:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2259, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6549:8:14" - }, - "parameters": { - "id": 2258, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2257, - "mutability": "mutable", - "name": "usedAccount", - "nameLocation": "6511:11:14", - "nodeType": "VariableDeclaration", - "scope": 2300, - "src": "6503:19:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2256, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6503:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6502:21:14" - }, - "returnParameters": { - "id": 2262, - "nodeType": "ParameterList", - "parameters": [], - "src": "6601:0:14" - }, - "scope": 2565, - "src": "6474:601:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10665], - "body": { - "id": 2313, - "nodeType": "Block", - "src": "7396:57:14", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 2309, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "7413:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2311, - "indexExpression": { - "id": 2310, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2303, - "src": "7432:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7413:33:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2308, - "id": 2312, - "nodeType": "Return", - "src": "7406:40:14" - } - ] - }, - "documentation": { - "id": 2301, - "nodeType": "StructuredDocumentation", - "src": "7081:193:14", - "text": "@dev Gets the next available credit account after the passed one, or address(0) if the passed account is the tail\n @param creditAccount Credit Account previous to the one to retrieve" - }, - "functionSelector": "765e0159", - "id": 2314, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getNext", - "nameLocation": "7288:7:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2305, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "7357:8:14" - }, - "parameters": { - "id": 2304, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2303, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "7304:13:14", - "nodeType": "VariableDeclaration", - "scope": 2314, - "src": "7296:21:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2302, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7296:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7295:23:14" - }, - "returnParameters": { - "id": 2308, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2307, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2314, - "src": "7383:7:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2306, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7383:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7382:9:14" - }, - "scope": 2565, - "src": "7279:174:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2351, - "nodeType": "Block", - "src": "8502:351:14", - "statements": [ - { - "assignments": [2319], - "declarations": [ - { - "constant": false, - "id": 2319, - "mutability": "mutable", - "name": "clonedAccount", - "nameLocation": "8520:13:14", - "nodeType": "VariableDeclaration", - "scope": 2351, - "src": "8512:21:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2318, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8512:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 2324, - "initialValue": { - "arguments": [ - { - "id": 2322, - "name": "masterCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2107, - "src": "8549:19:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2320, - "name": "Clones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16909, - "src": "8536:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Clones_$16909_$", - "typeString": "type(library Clones)" - } - }, - "id": 2321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8543:5:14", - "memberName": "clone", - "nodeType": "MemberAccess", - "referencedDeclaration": 16852, - "src": "8536:12:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_address_$", - "typeString": "function (address) returns (address)" - } - }, - "id": 2323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8536:33:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8512:57:14" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 2326, - "name": "clonedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2319, - "src": "8606:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2325, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "8591:14:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 2327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8591:29:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 2328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8621:10:14", - "memberName": "initialize", - "nodeType": "MemberAccess", - "referencedDeclaration": 10987, - "src": "8591:40:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 2329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8591:42:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2330, - "nodeType": "ExpressionStatement", - "src": "8591:42:14" - }, - { - "expression": { - "id": 2335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2331, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "8643:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2333, - "indexExpression": { - "id": 2332, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "8662:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "8643:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2334, - "name": "clonedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2319, - "src": "8670:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8643:40:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2336, - "nodeType": "ExpressionStatement", - "src": "8643:40:14" - }, - { - "expression": { - "id": 2339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2337, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "8705:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2338, - "name": "clonedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2319, - "src": "8712:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8705:20:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2340, - "nodeType": "ExpressionStatement", - "src": "8705:20:14" - }, - { - "expression": { - "arguments": [ - { - "id": 2344, - "name": "clonedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2319, - "src": "8769:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2341, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "8747:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2343, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8765:3:14", - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 20648, - "src": "8747:21:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$20621_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" - } - }, - "id": 2345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8747:36:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2346, - "nodeType": "ExpressionStatement", - "src": "8747:36:14" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2348, - "name": "clonedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2319, - "src": "8832:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2347, - "name": "NewCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10637, - "src": "8815:16:14", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 2349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8815:31:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2350, - "nodeType": "EmitStatement", - "src": "8810:36:14" - } - ] - }, - "documentation": { - "id": 2315, - "nodeType": "StructuredDocumentation", - "src": "7459:1003:14", - "text": " @dev Deploys a new Credit Account and sets it as a list's tail\n Before:\n ---------\n head\n ⬇\n ------- ------- ------- -------\n | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> address(0)\n ------- ------- ------- -------\n ⬆\n tail\n After:\n ---------\n head\n ⬇\n ------- ------- ------- ------- --------------\n | CA1 | -> | CA2 | -> | CA3 | -> | CA4 | -> | newAccount | -> address(0)\n ------- ------- ------- ------- --------------\n ⬆\n tail" - }, - "functionSelector": "f23953ab", - "id": 2352, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addCreditAccount", - "nameLocation": "8476:16:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2316, - "nodeType": "ParameterList", - "parameters": [], - "src": "8492:2:14" - }, - "returnParameters": { - "id": 2317, - "nodeType": "ParameterList", - "parameters": [], - "src": "8502:0:14" - }, - "scope": 2565, - "src": "8467:386:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 2448, - "nodeType": "Block", - "src": "9312:975:14", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2364, - "name": "_checkStock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2467, - "src": "9322:11:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2365, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9322:13:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2366, - "nodeType": "ExpressionStatement", - "src": "9322:13:14" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2367, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "9350:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 2368, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9358:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9350:21:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 2426, - "nodeType": "Block", - "src": "9597:484:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 2391, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "9636:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2393, - "indexExpression": { - "id": 2392, - "name": "prev", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2355, - "src": "9655:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9636:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 2394, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9664:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9636:41:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2396, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "9695:6:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2397, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9702:30:14", - "memberName": "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - "nodeType": "MemberAccess", - "referencedDeclaration": 13987, - "src": "9695:37:14", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2390, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "9611:7:14", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9611:135:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2399, - "nodeType": "ExpressionStatement", - "src": "9611:135:14" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2400, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9830:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 2401, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "9847:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9830:21:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2408, - "nodeType": "IfStatement", - "src": "9826:84:14", - "trueBody": { - "id": 2407, - "nodeType": "Block", - "src": "9853:57:14", - "statements": [ - { - "expression": { - "id": 2405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2403, - "name": "tail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2104, - "src": "9871:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2404, - "name": "prev", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2355, - "src": "9878:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9871:11:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2406, - "nodeType": "ExpressionStatement", - "src": "9871:11:14" - } - ] - } - }, - { - "expression": { - "id": 2415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2409, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "9924:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2411, - "indexExpression": { - "id": 2410, - "name": "prev", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2355, - "src": "9943:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9924:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 2412, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "9951:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2414, - "indexExpression": { - "id": 2413, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "9970:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9951:33:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9924:60:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2416, - "nodeType": "ExpressionStatement", - "src": "9924:60:14" - }, - { - "expression": { - "id": 2424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2417, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "10011:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2419, - "indexExpression": { - "id": 2418, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "10030:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10011:33:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 2422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10055:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10047:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2420, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10047:7:14", - "typeDescriptions": {} - } - }, - "id": 2423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10047:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10011:46:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2425, - "nodeType": "ExpressionStatement", - "src": "10011:46:14" - } - ] - }, - "id": 2427, - "nodeType": "IfStatement", - "src": "9346:735:14", - "trueBody": { - "id": 2389, - "nodeType": "Block", - "src": "9373:218:14", - "statements": [ - { - "assignments": [2371], - "declarations": [ - { - "constant": false, - "id": 2371, - "mutability": "mutable", - "name": "prevHead", - "nameLocation": "9395:8:14", - "nodeType": "VariableDeclaration", - "scope": 2389, - "src": "9387:16:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2370, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9387:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 2373, - "initialValue": { - "id": 2372, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "9406:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9387:23:14" - }, - { - "expression": { - "id": 2378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2374, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "9424:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 2375, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "9431:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2377, - "indexExpression": { - "id": 2376, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "9450:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9431:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9424:31:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2379, - "nodeType": "ExpressionStatement", - "src": "9424:31:14" - }, - { - "expression": { - "id": 2387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2380, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "9526:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2382, - "indexExpression": { - "id": 2381, - "name": "prevHead", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2371, - "src": "9545:8:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9526:28:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 2385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9565:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9557:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2383, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9557:7:14", - "typeDescriptions": {} - } - }, - "id": 2386, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9557:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9526:41:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2388, - "nodeType": "ExpressionStatement", - "src": "9526:41:14" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 2432, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2359, - "src": "10130:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 2433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10134:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "hexValue": "30", - "id": 2434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10137:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "arguments": [ - { - "id": 2429, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "10105:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2428, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "10090:14:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 2430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10090:29:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 2431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10120:9:14", - "memberName": "connectTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 10997, - "src": "10090:39:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256) external" - } - }, - "id": 2435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10090:49:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2436, - "nodeType": "ExpressionStatement", - "src": "10090:49:14" - }, - { - "expression": { - "arguments": [ - { - "id": 2440, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "10191:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2437, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "10166:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2439, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10184:6:14", - "memberName": "remove", - "nodeType": "MemberAccess", - "referencedDeclaration": 20675, - "src": "10166:24:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_AddressSet_$20621_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)" - } - }, - "id": 2441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10166:39:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2442, - "nodeType": "ExpressionStatement", - "src": "10166:39:14" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2444, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2357, - "src": "10245:13:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2445, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2359, - "src": "10260:2:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2443, - "name": "TakeForever", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10656, - "src": "10233:11:14", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 2446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10233:30:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2447, - "nodeType": "EmitStatement", - "src": "10228:35:14" - } - ] - }, - "documentation": { - "id": 2353, - "nodeType": "StructuredDocumentation", - "src": "8859:293:14", - "text": "@dev Removes an unused Credit Account from the list forever and connects it to the \"to\" parameter\n @param prev Credit Account before the taken one in the linked list\n @param creditAccount Credit Account to take\n @param to Address to connect the taken Credit Account to" - }, - "functionSelector": "2932472f", - "id": 2449, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2362, - "kind": "modifierInvocation", - "modifierName": { - "id": 2361, - "name": "configuratorOnly", - "nameLocations": ["9278:16:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2020, - "src": "9278:16:14" - }, - "nodeType": "ModifierInvocation", - "src": "9278:16:14" - } - ], - "name": "takeOut", - "nameLocation": "9166:7:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2355, - "mutability": "mutable", - "name": "prev", - "nameLocation": "9191:4:14", - "nodeType": "VariableDeclaration", - "scope": 2449, - "src": "9183:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9183:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2357, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "9213:13:14", - "nodeType": "VariableDeclaration", - "scope": 2449, - "src": "9205:21:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9205:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2359, - "mutability": "mutable", - "name": "to", - "nameLocation": "9244:2:14", - "nodeType": "VariableDeclaration", - "scope": 2449, - "src": "9236:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2358, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9236:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9173:79:14" - }, - "returnParameters": { - "id": 2363, - "nodeType": "ParameterList", - "parameters": [], - "src": "9312:0:14" - }, - "scope": 2565, - "src": "9157:1130:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2466, - "nodeType": "Block", - "src": "10895:135:14", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 2453, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "10929:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2455, - "indexExpression": { - "id": 2454, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "10948:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10929:24:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2458, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10965:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2457, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10957:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2456, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10957:7:14", - "typeDescriptions": {} - } - }, - "id": 2459, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10957:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10929:38:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2465, - "nodeType": "IfStatement", - "src": "10925:99:14", - "trueBody": { - "id": 2464, - "nodeType": "Block", - "src": "10969:55:14", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2461, - "name": "addCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2352, - "src": "10983:16:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 2462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10983:18:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2463, - "nodeType": "ExpressionStatement", - "src": "10983:18:14" - } - ] - } - } - ] - }, - "documentation": { - "id": 2450, - "nodeType": "StructuredDocumentation", - "src": "10293:565:14", - "text": " @dev Checks available accounts in stock and deploy a new one if only one remains\n If:\n ---------\n head\n ⬇\n -------\n | CA1 | -> address(0)\n -------\n ⬆\n tail\n Then:\n ---------\n head\n ⬇\n ------- --------------\n | CA1 | -> | newAccount | -> address(0)\n ------- --------------\n ⬆\n tail" - }, - "id": 2467, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkStock", - "nameLocation": "10872:11:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2451, - "nodeType": "ParameterList", - "parameters": [], - "src": "10883:2:14" - }, - "returnParameters": { - "id": 2452, - "nodeType": "ParameterList", - "parameters": [], - "src": "10895:0:14" - }, - "scope": 2565, - "src": "10863:167:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2487, - "nodeType": "Block", - "src": "11483:92:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2483, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2472, - "src": "11533:5:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2484, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2474, - "src": "11540:14:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 2480, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2470, - "src": "11508:7:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2479, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "11493:14:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 2481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11493:23:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 2482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11517:15:14", - "memberName": "cancelAllowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 11013, - "src": "11493:39:14", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 2485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11493:62:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2486, - "nodeType": "ExpressionStatement", - "src": "11493:62:14" - } - ] - }, - "documentation": { - "id": 2468, - "nodeType": "StructuredDocumentation", - "src": "11036:272:14", - "text": "@dev Cancels token allowance from a Credit Acocunt to a target contract\n @param account Address of credit account to be cancelled allowance\n @param token Address of token for allowance\n @param targetContract Address of contract to cancel allowance" - }, - "functionSelector": "a904aab6", - "id": 2488, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2477, - "kind": "modifierInvocation", - "modifierName": { - "id": 2476, - "name": "configuratorOnly", - "nameLocations": ["11449:16:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2020, - "src": "11449:16:14" - }, - "nodeType": "ModifierInvocation", - "src": "11449:16:14" - } - ], - "name": "cancelAllowance", - "nameLocation": "11322:15:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2470, - "mutability": "mutable", - "name": "account", - "nameLocation": "11355:7:14", - "nodeType": "VariableDeclaration", - "scope": 2488, - "src": "11347:15:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2469, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11347:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2472, - "mutability": "mutable", - "name": "token", - "nameLocation": "11380:5:14", - "nodeType": "VariableDeclaration", - "scope": 2488, - "src": "11372:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2471, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11372:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2474, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "11403:14:14", - "nodeType": "VariableDeclaration", - "scope": 2488, - "src": "11395:22:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2473, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11395:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11337:86:14" - }, - "returnParameters": { - "id": 2478, - "nodeType": "ParameterList", - "parameters": [], - "src": "11483:0:14" - }, - "scope": 2565, - "src": "11313:262:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10683], - "body": { - "id": 2522, - "nodeType": "Block", - "src": "11793:210:14", - "statements": [ - { - "assignments": [2496], - "declarations": [ - { - "constant": false, - "id": 2496, - "mutability": "mutable", - "name": "count", - "nameLocation": "11811:5:14", - "nodeType": "VariableDeclaration", - "scope": 2522, - "src": "11803:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2495, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11803:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2498, - "initialValue": { - "hexValue": "30", - "id": 2497, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11819:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "11803:17:14" - }, - { - "assignments": [2500], - "declarations": [ - { - "constant": false, - "id": 2500, - "mutability": "mutable", - "name": "pointer", - "nameLocation": "11838:7:14", - "nodeType": "VariableDeclaration", - "scope": 2522, - "src": "11830:15:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2499, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11830:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 2502, - "initialValue": { - "id": 2501, - "name": "head", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2100, - "src": "11848:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11830:22:14" - }, - { - "body": { - "id": 2518, - "nodeType": "Block", - "src": "11892:83:14", - "statements": [ - { - "expression": { - "id": 2513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2509, - "name": "pointer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2500, - "src": "11906:7:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 2510, - "name": "_nextCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2096, - "src": "11916:18:14", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 2512, - "indexExpression": { - "id": 2511, - "name": "pointer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2500, - "src": "11935:7:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11916:27:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11906:37:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2514, - "nodeType": "ExpressionStatement", - "src": "11906:37:14" - }, - { - "expression": { - "id": 2516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "11957:7:14", - "subExpression": { - "id": 2515, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2496, - "src": "11957:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2517, - "nodeType": "ExpressionStatement", - "src": "11957:7:14" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2503, - "name": "pointer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2500, - "src": "11869:7:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2506, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11888:1:14", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2505, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11880:7:14", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2504, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11880:7:14", - "typeDescriptions": {} - } - }, - "id": 2507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11880:10:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11869:21:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2519, - "nodeType": "WhileStatement", - "src": "11862:113:14" - }, - { - "expression": { - "id": 2520, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2496, - "src": "11991:5:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2494, - "id": 2521, - "nodeType": "Return", - "src": "11984:12:14" - } - ] - }, - "documentation": { - "id": 2489, - "nodeType": "StructuredDocumentation", - "src": "11611:62:14", - "text": "@dev Returns the number of unused credit accounts in stock" - }, - "functionSelector": "b1939763", - "id": 2523, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "countCreditAccountsInStock", - "nameLocation": "11687:26:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2491, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "11754:8:14" - }, - "parameters": { - "id": 2490, - "nodeType": "ParameterList", - "parameters": [], - "src": "11713:2:14" - }, - "returnParameters": { - "id": 2494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2493, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2523, - "src": "11780:7:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2492, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11780:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11779:9:14" - }, - "scope": 2565, - "src": "11678:325:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10697], - "body": { - "id": 2534, - "nodeType": "Block", - "src": "12141:63:14", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2530, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "12158:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2531, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12176:6:14", - "memberName": "length", - "nodeType": "MemberAccess", - "referencedDeclaration": 20717, - "src": "12158:24:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$20621_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)" - } - }, - "id": 2532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12158:26:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2529, - "id": 2533, - "nodeType": "Return", - "src": "12151:33:14" - } - ] - }, - "documentation": { - "id": 2524, - "nodeType": "StructuredDocumentation", - "src": "12009:55:14", - "text": "@dev Returns the number of deployed credit accounts" - }, - "functionSelector": "b60e8518", - "id": 2535, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "countCreditAccounts", - "nameLocation": "12078:19:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2526, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12114:8:14" - }, - "parameters": { - "id": 2525, - "nodeType": "ParameterList", - "parameters": [], - "src": "12097:2:14" - }, - "returnParameters": { - "id": 2529, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2528, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2535, - "src": "12132:7:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2527, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12132:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12131:9:14" - }, - "scope": 2565, - "src": "12069:135:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10691], - "body": { - "id": 2549, - "nodeType": "Block", - "src": "12439:48:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2546, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2538, - "src": "12477:2:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 2544, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "12456:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2545, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12474:2:14", - "memberName": "at", - "nodeType": "MemberAccess", - "referencedDeclaration": 20744, - "src": "12456:20:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$20621_storage_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)" - } - }, - "id": 2547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12456:24:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2543, - "id": 2548, - "nodeType": "Return", - "src": "12449:31:14" - } - ] - }, - "documentation": { - "id": 2536, - "nodeType": "StructuredDocumentation", - "src": "12210:111:14", - "text": "@dev Returns the credit account address under the passed id\n @param id The index of the requested CA" - }, - "functionSelector": "e3ba9ace", - "id": 2550, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "creditAccounts", - "nameLocation": "12335:14:14", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2540, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12400:8:14" - }, - "parameters": { - "id": 2539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2538, - "mutability": "mutable", - "name": "id", - "nameLocation": "12358:2:14", - "nodeType": "VariableDeclaration", - "scope": 2550, - "src": "12350:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12350:7:14", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12349:12:14" - }, - "returnParameters": { - "id": 2543, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2542, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2550, - "src": "12426:7:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2541, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12426:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12425:9:14" - }, - "scope": 2565, - "src": "12326:161:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2563, - "nodeType": "Block", - "src": "12700:69:14", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2560, - "name": "addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2553, - "src": "12744:4:14", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 2558, - "name": "creditAccountsSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2111, - "src": "12717:17:14", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage", - "typeString": "struct EnumerableSet.AddressSet storage ref" - } - }, - "id": 2559, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12735:8:14", - "memberName": "contains", - "nodeType": "MemberAccess", - "referencedDeclaration": 20702, - "src": "12717:26:14", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_AddressSet_$20621_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_AddressSet_$20621_storage_ptr_$", - "typeString": "function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)" - } - }, - "id": 2561, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12717:32:14", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 2557, - "id": 2562, - "nodeType": "Return", - "src": "12710:39:14" - } - ] - }, - "documentation": { - "id": 2551, - "nodeType": "StructuredDocumentation", - "src": "12493:134:14", - "text": "@dev Returns whether the Credit Account is registered with this factory\n @param addr Address of the Credit Account to check" - }, - "functionSelector": "d82ecc48", - "id": 2564, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isCreditAccount", - "nameLocation": "12641:15:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2554, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2553, - "mutability": "mutable", - "name": "addr", - "nameLocation": "12665:4:14", - "nodeType": "VariableDeclaration", - "scope": 2564, - "src": "12657:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2552, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12657:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12656:14:14" - }, - "returnParameters": { - "id": 2557, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2556, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2564, - "src": "12694:4:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2555, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "12694:4:14", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "12693:6:14" - }, - "scope": 2565, - "src": "12632:137:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2566, - "src": "1072:11699:14", - "usedErrors": [12534, 12551, 12557, 12560] - } - ], - "src": "128:12644:14" - }, - "id": 14 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "exportedSymbols": { - "ACCOUNT_FACTORY": [2585], - "ACL": [2579], - "AddressProvider": [2931], - "CONTRACTS_REGISTER": [2576], - "Claimable": [4791], - "DATA_COMPRESSOR": [2588], - "Errors": [14033], - "GEAR_TOKEN": [2594], - "IAddressProvider": [10799], - "LEVERAGED_ACTIONS": [2603], - "PRICE_ORACLE": [2582], - "TREASURY_CONTRACT": [2591], - "WETH_GATEWAY": [2600], - "WETH_TOKEN": [2597] - }, - "id": 2932, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2567, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:15" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol", - "file": "../interfaces/IAddressProvider.sol", - "id": 2569, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2932, - "sourceUnit": 10800, - "src": "154:70:15", - "symbolAliases": [ - { - "foreign": { - "id": 2568, - "name": "IAddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10799, - "src": "163:16:15", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol", - "file": "./access/Claimable.sol", - "id": 2571, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2932, - "sourceUnit": 4792, - "src": "225:51:15", - "symbolAliases": [ - { - "foreign": { - "id": 2570, - "name": "Claimable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4791, - "src": "234:9:15", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "file": "../libraries/Errors.sol", - "id": 2573, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2932, - "sourceUnit": 14034, - "src": "277:49:15", - "symbolAliases": [ - { - "foreign": { - "id": 2572, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "286:6:15", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "constant": true, - "id": 2576, - "mutability": "constant", - "name": "CONTRACTS_REGISTER", - "nameLocation": "372:18:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "355:58:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2574, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "355:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "434f4e5452414354535f5245474953544552", - "id": 2575, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "393:20:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e911b2bd8d5a4b4f4d4dc2ee547e9a571c3217a681aa5167e4f36f16a28d67b3", - "typeString": "literal_string \"CONTRACTS_REGISTER\"" - }, - "value": "CONTRACTS_REGISTER" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2579, - "mutability": "constant", - "name": "ACL", - "nameLocation": "432:3:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "415:28:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2577, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "415:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "41434c", - "id": 2578, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "438:5:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d1310f513cc4ddd443d6a770d8cfbb4e511d0722c0f875bb78587f952a7e3637", - "typeString": "literal_string \"ACL\"" - }, - "value": "ACL" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2582, - "mutability": "constant", - "name": "PRICE_ORACLE", - "nameLocation": "462:12:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "445:46:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2580, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "445:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "50524943455f4f5241434c45", - "id": 2581, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "477:14:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_dd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d8", - "typeString": "literal_string \"PRICE_ORACLE\"" - }, - "value": "PRICE_ORACLE" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2585, - "mutability": "constant", - "name": "ACCOUNT_FACTORY", - "nameLocation": "510:15:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "493:52:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2583, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "493:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "4143434f554e545f464143544f5259", - "id": 2584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "528:17:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0bfaef83fa377d77b08e85431f03f80f997d04ca993da8a4bc3e084e8b17032e", - "typeString": "literal_string \"ACCOUNT_FACTORY\"" - }, - "value": "ACCOUNT_FACTORY" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2588, - "mutability": "constant", - "name": "DATA_COMPRESSOR", - "nameLocation": "564:15:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "547:52:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2586, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "547:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "444154415f434f4d50524553534f52", - "id": 2587, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "582:17:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a5c8d57526035ece18d4993a6db85b62a84f8828c636737a320860d9aeee9ff4", - "typeString": "literal_string \"DATA_COMPRESSOR\"" - }, - "value": "DATA_COMPRESSOR" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2591, - "mutability": "constant", - "name": "TREASURY_CONTRACT", - "nameLocation": "618:17:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "601:56:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2589, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "601:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "54524541535552595f434f4e5452414354", - "id": 2590, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "638:19:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a34ea2ceed6e9b6dd50292aa3f34b931d342b9667303c6f313c588454bca7e8a", - "typeString": "literal_string \"TREASURY_CONTRACT\"" - }, - "value": "TREASURY_CONTRACT" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2594, - "mutability": "constant", - "name": "GEAR_TOKEN", - "nameLocation": "676:10:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "659:42:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2592, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "659:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "474541525f544f4b454e", - "id": 2593, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "689:12:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_575fb0cb6ff7b489103c482b1b01307539f42f6db078636811e1d0f6198529d2", - "typeString": "literal_string \"GEAR_TOKEN\"" - }, - "value": "GEAR_TOKEN" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2597, - "mutability": "constant", - "name": "WETH_TOKEN", - "nameLocation": "720:10:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "703:42:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2595, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "703:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "574554485f544f4b454e", - "id": 2596, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "733:12:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_641571901ab14f599ca9232149cf699f3b3f2573091ef1e19cd524b0542618c9", - "typeString": "literal_string \"WETH_TOKEN\"" - }, - "value": "WETH_TOKEN" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2600, - "mutability": "constant", - "name": "WETH_GATEWAY", - "nameLocation": "764:12:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "747:46:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2598, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "747:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "574554485f47415445574159", - "id": 2599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "779:14:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8c6c451a3c78b1a61d300b75cea4e998723915c4ab1ff7888c30dbbfcaf39efb", - "typeString": "literal_string \"WETH_GATEWAY\"" - }, - "value": "WETH_GATEWAY" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 2603, - "mutability": "constant", - "name": "LEVERAGED_ACTIONS", - "nameLocation": "812:17:15", - "nodeType": "VariableDeclaration", - "scope": 2932, - "src": "795:56:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2601, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "795:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "hexValue": "4c45564552414745445f414354494f4e53", - "id": 2602, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "832:19:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b9ae6f47adfc55baae12c085719033a8cd859bda3c7a82ebb86b7dda1c2ab498", - "typeString": "literal_string \"LEVERAGED_ACTIONS\"" - }, - "value": "LEVERAGED_ACTIONS" - }, - "visibility": "internal" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2605, - "name": "Claimable", - "nameLocations": ["962:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4791, - "src": "962:9:15" - }, - "id": 2606, - "nodeType": "InheritanceSpecifier", - "src": "962:9:15" - }, - { - "baseName": { - "id": 2607, - "name": "IAddressProvider", - "nameLocations": ["973:16:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10799, - "src": "973:16:15" - }, - "id": 2608, - "nodeType": "InheritanceSpecifier", - "src": "973:16:15" - } - ], - "canonicalName": "AddressProvider", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2604, - "nodeType": "StructuredDocumentation", - "src": "854:80:15", - "text": "@title AddressRepository\n @notice Stores addresses of deployed contracts" - }, - "fullyImplemented": true, - "id": 2931, - "linearizedBaseContracts": [ - 2931, 10799, 12963, 10733, 4791, 16661, 18742 - ], - "name": "AddressProvider", - "nameLocation": "943:15:15", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "699f200f", - "id": 2612, - "mutability": "mutable", - "name": "addresses", - "nameLocation": "1089:9:15", - "nodeType": "VariableDeclaration", - "scope": 2931, - "src": "1054:44:15", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", - "typeString": "mapping(bytes32 => address)" - }, - "typeName": { - "id": 2611, - "keyType": { - "id": 2609, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1062:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "1054:27:15", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", - "typeString": "mapping(bytes32 => address)" - }, - "valueType": { - "id": 2610, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1073:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "functionSelector": "54fd4d50", - "id": 2615, - "mutability": "constant", - "name": "version", - "nameLocation": "1153:7:15", - "nodeType": "VariableDeclaration", - "scope": 2931, - "src": "1129:35:15", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2613, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1129:7:15", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "32", - "id": 2614, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1163:1:15", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "public" - }, - { - "body": { - "id": 2626, - "nodeType": "Block", - "src": "1185:124:15", - "statements": [ - { - "eventCall": { - "arguments": [ - { - "hexValue": "414444524553535f50524f5649444552", - "id": 2619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1268:18:15", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d833762afa5298dc6d804f571e7b934fd54a0f7b926c90ff79912e7379744b31", - "typeString": "literal_string \"ADDRESS_PROVIDER\"" - }, - "value": "ADDRESS_PROVIDER" - }, - { - "arguments": [ - { - "id": 2622, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "1296:4:15", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 2621, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1288:7:15", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2620, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1288:7:15", - "typeDescriptions": {} - } - }, - "id": 2623, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1288:13:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_d833762afa5298dc6d804f571e7b934fd54a0f7b926c90ff79912e7379744b31", - "typeString": "literal_string \"ADDRESS_PROVIDER\"" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2618, - "name": "AddressSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10732, - "src": "1257:10:15", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1257:45:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2625, - "nodeType": "EmitStatement", - "src": "1252:50:15" - } - ] - }, - "id": 2627, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2616, - "nodeType": "ParameterList", - "parameters": [], - "src": "1182:2:15" - }, - "returnParameters": { - "id": 2617, - "nodeType": "ParameterList", - "parameters": [], - "src": "1185:0:15" - }, - "scope": 2931, - "src": "1171:138:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [10744], - "body": { - "id": 2637, - "nodeType": "Block", - "src": "1405:52:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2634, - "name": "ACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2579, - "src": "1434:3:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2633, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "1422:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1422:16:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2632, - "id": 2636, - "nodeType": "Return", - "src": "1415:23:15" - } - ] - }, - "documentation": { - "id": 2628, - "nodeType": "StructuredDocumentation", - "src": "1315:35:15", - "text": "@return Address of ACL contract" - }, - "functionSelector": "08737695", - "id": 2638, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getACL", - "nameLocation": "1364:6:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2629, - "nodeType": "ParameterList", - "parameters": [], - "src": "1370:2:15" - }, - "returnParameters": { - "id": 2632, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2631, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2638, - "src": "1396:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2630, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1396:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1395:9:15" - }, - "scope": 2931, - "src": "1355:102:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2651, - "nodeType": "Block", - "src": "1639:55:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2647, - "name": "ACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2579, - "src": "1661:3:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2648, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2641, - "src": "1666:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2646, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "1649:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1649:26:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2650, - "nodeType": "ExpressionStatement", - "src": "1649:26:15" - } - ] - }, - "documentation": { - "id": 2639, - "nodeType": "StructuredDocumentation", - "src": "1463:85:15", - "text": "@dev Sets address of ACL contract\n @param _address Address of ACL contract" - }, - "functionSelector": "76aad605", - "id": 2652, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2644, - "kind": "modifierInvocation", - "modifierName": { - "id": 2643, - "name": "onlyOwner", - "nameLocations": ["1612:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "1612:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "1612:9:15" - } - ], - "name": "setACL", - "nameLocation": "1562:6:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2642, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2641, - "mutability": "mutable", - "name": "_address", - "nameLocation": "1577:8:15", - "nodeType": "VariableDeclaration", - "scope": 2652, - "src": "1569:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2640, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1569:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1568:18:15" - }, - "returnParameters": { - "id": 2645, - "nodeType": "ParameterList", - "parameters": [], - "src": "1639:0:15" - }, - "scope": 2931, - "src": "1553:141:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10750], - "body": { - "id": 2662, - "nodeType": "Block", - "src": "1809:67:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2659, - "name": "CONTRACTS_REGISTER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2576, - "src": "1838:18:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2658, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "1826:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1826:31:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2657, - "id": 2661, - "nodeType": "Return", - "src": "1819:38:15" - } - ] - }, - "documentation": { - "id": 2653, - "nodeType": "StructuredDocumentation", - "src": "1700:40:15", - "text": "@return Address of ContractsRegister" - }, - "functionSelector": "c513c9bb", - "id": 2663, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getContractsRegister", - "nameLocation": "1754:20:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2654, - "nodeType": "ParameterList", - "parameters": [], - "src": "1774:2:15" - }, - "returnParameters": { - "id": 2657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2656, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2663, - "src": "1800:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2655, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1800:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1799:9:15" - }, - "scope": 2931, - "src": "1745:131:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2676, - "nodeType": "Block", - "src": "2082:70:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2672, - "name": "CONTRACTS_REGISTER", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2576, - "src": "2104:18:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2673, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2666, - "src": "2124:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2671, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "2092:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2092:41:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2675, - "nodeType": "ExpressionStatement", - "src": "2092:41:15" - } - ] - }, - "documentation": { - "id": 2664, - "nodeType": "StructuredDocumentation", - "src": "1882:95:15", - "text": "@dev Sets address of ContractsRegister\n @param _address Address of ContractsRegister" - }, - "functionSelector": "ce3c4ae4", - "id": 2677, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2669, - "kind": "modifierInvocation", - "modifierName": { - "id": 2668, - "name": "onlyOwner", - "nameLocations": ["2055:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "2055:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "2055:9:15" - } - ], - "name": "setContractsRegister", - "nameLocation": "1991:20:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2667, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2666, - "mutability": "mutable", - "name": "_address", - "nameLocation": "2020:8:15", - "nodeType": "VariableDeclaration", - "scope": 2677, - "src": "2012:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2665, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2012:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2011:18:15" - }, - "returnParameters": { - "id": 2670, - "nodeType": "ParameterList", - "parameters": [], - "src": "2082:0:15" - }, - "scope": 2931, - "src": "1982:170:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10786], - "body": { - "id": 2688, - "nodeType": "Block", - "src": "2264:61:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2685, - "name": "PRICE_ORACLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2582, - "src": "2293:12:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2684, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "2281:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2281:25:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2683, - "id": 2687, - "nodeType": "Return", - "src": "2274:32:15" - } - ] - }, - "documentation": { - "id": 2678, - "nodeType": "StructuredDocumentation", - "src": "2158:34:15", - "text": "@return Address of PriceOracle" - }, - "functionSelector": "fca513a8", - "id": 2689, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPriceOracle", - "nameLocation": "2206:14:15", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2680, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2237:8:15" - }, - "parameters": { - "id": 2679, - "nodeType": "ParameterList", - "parameters": [], - "src": "2220:2:15" - }, - "returnParameters": { - "id": 2683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2682, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2689, - "src": "2255:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2255:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2254:9:15" - }, - "scope": 2931, - "src": "2197:128:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2702, - "nodeType": "Block", - "src": "2513:64:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2698, - "name": "PRICE_ORACLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2582, - "src": "2535:12:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2699, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2692, - "src": "2549:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2697, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "2523:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2523:35:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2701, - "nodeType": "ExpressionStatement", - "src": "2523:35:15" - } - ] - }, - "documentation": { - "id": 2690, - "nodeType": "StructuredDocumentation", - "src": "2331:83:15", - "text": "@dev Sets address of PriceOracle\n @param _address Address of PriceOracle" - }, - "functionSelector": "530e784f", - "id": 2703, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2695, - "kind": "modifierInvocation", - "modifierName": { - "id": 2694, - "name": "onlyOwner", - "nameLocations": ["2486:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "2486:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "2486:9:15" - } - ], - "name": "setPriceOracle", - "nameLocation": "2428:14:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2693, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2692, - "mutability": "mutable", - "name": "_address", - "nameLocation": "2451:8:15", - "nodeType": "VariableDeclaration", - "scope": 2703, - "src": "2443:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2691, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2443:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2442:18:15" - }, - "returnParameters": { - "id": 2696, - "nodeType": "ParameterList", - "parameters": [], - "src": "2513:0:15" - }, - "scope": 2931, - "src": "2419:158:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10756], - "body": { - "id": 2713, - "nodeType": "Block", - "src": "2686:64:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2710, - "name": "ACCOUNT_FACTORY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2585, - "src": "2715:15:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2709, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "2703:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2703:28:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2708, - "id": 2712, - "nodeType": "Return", - "src": "2696:35:15" - } - ] - }, - "documentation": { - "id": 2704, - "nodeType": "StructuredDocumentation", - "src": "2583:37:15", - "text": "@return Address of AccountFactory" - }, - "functionSelector": "9068a868", - "id": 2714, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getAccountFactory", - "nameLocation": "2634:17:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2705, - "nodeType": "ParameterList", - "parameters": [], - "src": "2651:2:15" - }, - "returnParameters": { - "id": 2708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2707, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2714, - "src": "2677:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2706, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2677:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2676:9:15" - }, - "scope": 2931, - "src": "2625:125:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2727, - "nodeType": "Block", - "src": "2947:67:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2723, - "name": "ACCOUNT_FACTORY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2585, - "src": "2969:15:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2724, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2717, - "src": "2986:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2722, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "2957:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2725, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2957:38:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2726, - "nodeType": "ExpressionStatement", - "src": "2957:38:15" - } - ] - }, - "documentation": { - "id": 2715, - "nodeType": "StructuredDocumentation", - "src": "2756:89:15", - "text": "@dev Sets address of AccountFactory\n @param _address Address of AccountFactory" - }, - "functionSelector": "addc1a76", - "id": 2728, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2720, - "kind": "modifierInvocation", - "modifierName": { - "id": 2719, - "name": "onlyOwner", - "nameLocations": ["2920:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "2920:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "2920:9:15" - } - ], - "name": "setAccountFactory", - "nameLocation": "2859:17:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2718, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2717, - "mutability": "mutable", - "name": "_address", - "nameLocation": "2885:8:15", - "nodeType": "VariableDeclaration", - "scope": 2728, - "src": "2877:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2716, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2877:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2876:18:15" - }, - "returnParameters": { - "id": 2721, - "nodeType": "ParameterList", - "parameters": [], - "src": "2947:0:15" - }, - "scope": 2931, - "src": "2850:164:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10762], - "body": { - "id": 2739, - "nodeType": "Block", - "src": "3132:64:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2736, - "name": "DATA_COMPRESSOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2588, - "src": "3161:15:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2735, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "3149:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3149:28:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2734, - "id": 2738, - "nodeType": "Return", - "src": "3142:35:15" - } - ] - }, - "documentation": { - "id": 2729, - "nodeType": "StructuredDocumentation", - "src": "3020:37:15", - "text": "@return Address of DataCompressor" - }, - "functionSelector": "060678c2", - "id": 2740, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getDataCompressor", - "nameLocation": "3071:17:15", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2731, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3105:8:15" - }, - "parameters": { - "id": 2730, - "nodeType": "ParameterList", - "parameters": [], - "src": "3088:2:15" - }, - "returnParameters": { - "id": 2734, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2733, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2740, - "src": "3123:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2732, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3123:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3122:9:15" - }, - "scope": 2931, - "src": "3062:134:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2753, - "nodeType": "Block", - "src": "3393:67:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2749, - "name": "DATA_COMPRESSOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2588, - "src": "3415:15:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2750, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2743, - "src": "3432:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2748, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "3403:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3403:38:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2752, - "nodeType": "ExpressionStatement", - "src": "3403:38:15" - } - ] - }, - "documentation": { - "id": 2741, - "nodeType": "StructuredDocumentation", - "src": "3202:89:15", - "text": "@dev Sets address of AccountFactory\n @param _address Address of AccountFactory" - }, - "functionSelector": "c5120b39", - "id": 2754, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2746, - "kind": "modifierInvocation", - "modifierName": { - "id": 2745, - "name": "onlyOwner", - "nameLocations": ["3366:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3366:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "3366:9:15" - } - ], - "name": "setDataCompressor", - "nameLocation": "3305:17:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2743, - "mutability": "mutable", - "name": "_address", - "nameLocation": "3331:8:15", - "nodeType": "VariableDeclaration", - "scope": 2754, - "src": "3323:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2742, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3323:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3322:18:15" - }, - "returnParameters": { - "id": 2747, - "nodeType": "ParameterList", - "parameters": [], - "src": "3393:0:15" - }, - "scope": 2931, - "src": "3296:164:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10792], - "body": { - "id": 2764, - "nodeType": "Block", - "src": "3574:66:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2761, - "name": "TREASURY_CONTRACT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2591, - "src": "3603:17:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2760, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "3591:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3591:30:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2759, - "id": 2763, - "nodeType": "Return", - "src": "3584:37:15" - } - ] - }, - "documentation": { - "id": 2755, - "nodeType": "StructuredDocumentation", - "src": "3466:40:15", - "text": "@return Address of Treasury contract" - }, - "functionSelector": "26c74fc3", - "id": 2765, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getTreasuryContract", - "nameLocation": "3520:19:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2756, - "nodeType": "ParameterList", - "parameters": [], - "src": "3539:2:15" - }, - "returnParameters": { - "id": 2759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2758, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2765, - "src": "3565:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2757, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3565:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3564:9:15" - }, - "scope": 2931, - "src": "3511:129:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2778, - "nodeType": "Block", - "src": "3845:69:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2774, - "name": "TREASURY_CONTRACT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2591, - "src": "3867:17:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2775, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2768, - "src": "3886:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2773, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "3855:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3855:40:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2777, - "nodeType": "ExpressionStatement", - "src": "3855:40:15" - } - ] - }, - "documentation": { - "id": 2766, - "nodeType": "StructuredDocumentation", - "src": "3646:95:15", - "text": "@dev Sets address of Treasury Contract\n @param _address Address of Treasury Contract" - }, - "functionSelector": "1ed65110", - "id": 2779, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2771, - "kind": "modifierInvocation", - "modifierName": { - "id": 2770, - "name": "onlyOwner", - "nameLocations": ["3818:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3818:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "3818:9:15" - } - ], - "name": "setTreasuryContract", - "nameLocation": "3755:19:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2768, - "mutability": "mutable", - "name": "_address", - "nameLocation": "3783:8:15", - "nodeType": "VariableDeclaration", - "scope": 2779, - "src": "3775:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2767, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3775:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3774:18:15" - }, - "returnParameters": { - "id": 2772, - "nodeType": "ParameterList", - "parameters": [], - "src": "3845:0:15" - }, - "scope": 2931, - "src": "3746:168:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10768], - "body": { - "id": 2790, - "nodeType": "Block", - "src": "4023:59:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2787, - "name": "GEAR_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2594, - "src": "4052:10:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2786, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "4040:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4040:23:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2785, - "id": 2789, - "nodeType": "Return", - "src": "4033:30:15" - } - ] - }, - "documentation": { - "id": 2780, - "nodeType": "StructuredDocumentation", - "src": "3920:33:15", - "text": "@return Address of GEAR token" - }, - "functionSelector": "affd9243", - "id": 2791, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getGearToken", - "nameLocation": "3967:12:15", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2782, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3996:8:15" - }, - "parameters": { - "id": 2781, - "nodeType": "ParameterList", - "parameters": [], - "src": "3979:2:15" - }, - "returnParameters": { - "id": 2785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2784, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2791, - "src": "4014:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4014:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4013:9:15" - }, - "scope": 2931, - "src": "3958:124:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2804, - "nodeType": "Block", - "src": "4266:62:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2800, - "name": "GEAR_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2594, - "src": "4288:10:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2801, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2794, - "src": "4300:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2799, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "4276:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4276:33:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2803, - "nodeType": "ExpressionStatement", - "src": "4276:33:15" - } - ] - }, - "documentation": { - "id": 2792, - "nodeType": "StructuredDocumentation", - "src": "4088:81:15", - "text": "@dev Sets address of GEAR token\n @param _address Address of GEAR token" - }, - "functionSelector": "bcaead98", - "id": 2805, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2797, - "kind": "modifierInvocation", - "modifierName": { - "id": 2796, - "name": "onlyOwner", - "nameLocations": ["4239:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "4239:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "4239:9:15" - } - ], - "name": "setGearToken", - "nameLocation": "4183:12:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2795, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2794, - "mutability": "mutable", - "name": "_address", - "nameLocation": "4204:8:15", - "nodeType": "VariableDeclaration", - "scope": 2805, - "src": "4196:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2793, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4196:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4195:18:15" - }, - "returnParameters": { - "id": 2798, - "nodeType": "ParameterList", - "parameters": [], - "src": "4266:0:15" - }, - "scope": 2931, - "src": "4174:154:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10774], - "body": { - "id": 2816, - "nodeType": "Block", - "src": "4437:60:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2813, - "name": "WETH_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2597, - "src": "4466:10:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2812, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "4454:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4454:23:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2811, - "id": 2815, - "nodeType": "Return", - "src": "4447:30:15" - } - ] - }, - "documentation": { - "id": 2806, - "nodeType": "StructuredDocumentation", - "src": "4334:33:15", - "text": "@return Address of WETH token" - }, - "functionSelector": "4c252f91", - "id": 2817, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getWethToken", - "nameLocation": "4381:12:15", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2808, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4410:8:15" - }, - "parameters": { - "id": 2807, - "nodeType": "ParameterList", - "parameters": [], - "src": "4393:2:15" - }, - "returnParameters": { - "id": 2811, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2810, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2817, - "src": "4428:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2809, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4428:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4427:9:15" - }, - "scope": 2931, - "src": "4372:125:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2830, - "nodeType": "Block", - "src": "4681:63:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2826, - "name": "WETH_TOKEN", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2597, - "src": "4703:10:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2827, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2820, - "src": "4715:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2825, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "4691:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4691:33:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2829, - "nodeType": "ExpressionStatement", - "src": "4691:33:15" - } - ] - }, - "documentation": { - "id": 2818, - "nodeType": "StructuredDocumentation", - "src": "4503:81:15", - "text": "@dev Sets address of WETH token\n @param _address Address of WETH token" - }, - "functionSelector": "86e09c08", - "id": 2831, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2823, - "kind": "modifierInvocation", - "modifierName": { - "id": 2822, - "name": "onlyOwner", - "nameLocations": ["4654:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "4654:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "4654:9:15" - } - ], - "name": "setWethToken", - "nameLocation": "4598:12:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2821, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2820, - "mutability": "mutable", - "name": "_address", - "nameLocation": "4619:8:15", - "nodeType": "VariableDeclaration", - "scope": 2831, - "src": "4611:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4611:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4610:18:15" - }, - "returnParameters": { - "id": 2824, - "nodeType": "ParameterList", - "parameters": [], - "src": "4681:0:15" - }, - "scope": 2931, - "src": "4589:155:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10780], - "body": { - "id": 2842, - "nodeType": "Block", - "src": "4855:62:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2839, - "name": "WETH_GATEWAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2600, - "src": "4884:12:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2838, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "4872:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2840, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4872:25:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2837, - "id": 2841, - "nodeType": "Return", - "src": "4865:32:15" - } - ] - }, - "documentation": { - "id": 2832, - "nodeType": "StructuredDocumentation", - "src": "4750:33:15", - "text": "@return Address of WETH token" - }, - "functionSelector": "77532ed9", - "id": 2843, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getWETHGateway", - "nameLocation": "4797:14:15", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2834, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4828:8:15" - }, - "parameters": { - "id": 2833, - "nodeType": "ParameterList", - "parameters": [], - "src": "4811:2:15" - }, - "returnParameters": { - "id": 2837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2836, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2843, - "src": "4846:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2835, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4846:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4845:9:15" - }, - "scope": 2931, - "src": "4788:129:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2856, - "nodeType": "Block", - "src": "5103:65:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2852, - "name": "WETH_GATEWAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2600, - "src": "5125:12:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2853, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2846, - "src": "5139:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2851, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "5113:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5113:35:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2855, - "nodeType": "ExpressionStatement", - "src": "5113:35:15" - } - ] - }, - "documentation": { - "id": 2844, - "nodeType": "StructuredDocumentation", - "src": "4923:81:15", - "text": "@dev Sets address of WETH token\n @param _address Address of WETH token" - }, - "functionSelector": "21da5837", - "id": 2857, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2849, - "kind": "modifierInvocation", - "modifierName": { - "id": 2848, - "name": "onlyOwner", - "nameLocations": ["5076:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "5076:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "5076:9:15" - } - ], - "name": "setWETHGateway", - "nameLocation": "5018:14:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2847, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2846, - "mutability": "mutable", - "name": "_address", - "nameLocation": "5041:8:15", - "nodeType": "VariableDeclaration", - "scope": 2857, - "src": "5033:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2845, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5033:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5032:18:15" - }, - "returnParameters": { - "id": 2850, - "nodeType": "ParameterList", - "parameters": [], - "src": "5103:0:15" - }, - "scope": 2931, - "src": "5009:159:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10798], - "body": { - "id": 2867, - "nodeType": "Block", - "src": "5275:66:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2864, - "name": "LEVERAGED_ACTIONS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2603, - "src": "5304:17:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2863, - "name": "_getAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2910, - "src": "5292:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32) view returns (address)" - } - }, - "id": 2865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5292:30:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2862, - "id": 2866, - "nodeType": "Return", - "src": "5285:37:15" - } - ] - }, - "documentation": { - "id": 2858, - "nodeType": "StructuredDocumentation", - "src": "5174:33:15", - "text": "@return Address of PathFinder" - }, - "functionSelector": "44b88563", - "id": 2868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getLeveragedActions", - "nameLocation": "5221:19:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2859, - "nodeType": "ParameterList", - "parameters": [], - "src": "5240:2:15" - }, - "returnParameters": { - "id": 2862, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2861, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2868, - "src": "5266:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2860, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5266:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5265:9:15" - }, - "scope": 2931, - "src": "5212:129:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2881, - "nodeType": "Block", - "src": "5534:69:15", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2877, - "name": "LEVERAGED_ACTIONS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2603, - "src": "5556:17:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2878, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2871, - "src": "5575:8:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2876, - "name": "_setAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2930, - "src": "5544:11:15", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5544:40:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2880, - "nodeType": "ExpressionStatement", - "src": "5544:40:15" - } - ] - }, - "documentation": { - "id": 2869, - "nodeType": "StructuredDocumentation", - "src": "5347:83:15", - "text": "@dev Sets address of PathFinder\n @param _address Address of PathFinder" - }, - "functionSelector": "7b6757ff", - "id": 2882, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2874, - "kind": "modifierInvocation", - "modifierName": { - "id": 2873, - "name": "onlyOwner", - "nameLocations": ["5507:9:15"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "5507:9:15" - }, - "nodeType": "ModifierInvocation", - "src": "5507:9:15" - } - ], - "name": "setLeveragedActions", - "nameLocation": "5444:19:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2872, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2871, - "mutability": "mutable", - "name": "_address", - "nameLocation": "5472:8:15", - "nodeType": "VariableDeclaration", - "scope": 2882, - "src": "5464:16:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2870, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5464:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5463:18:15" - }, - "returnParameters": { - "id": 2875, - "nodeType": "ParameterList", - "parameters": [], - "src": "5534:0:15" - }, - "scope": 2931, - "src": "5435:168:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 2909, - "nodeType": "Block", - "src": "5740:189:15", - "statements": [ - { - "assignments": [2891], - "declarations": [ - { - "constant": false, - "id": 2891, - "mutability": "mutable", - "name": "result", - "nameLocation": "5758:6:15", - "nodeType": "VariableDeclaration", - "scope": 2909, - "src": "5750:14:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2890, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5750:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 2895, - "initialValue": { - "baseExpression": { - "id": 2892, - "name": "addresses", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2612, - "src": "5767:9:15", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", - "typeString": "mapping(bytes32 => address)" - } - }, - "id": 2894, - "indexExpression": { - "id": 2893, - "name": "key", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2885, - "src": "5777:3:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5767:14:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5750:31:15" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2897, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2891, - "src": "5799:6:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2900, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5817:1:15", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2899, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5809:7:15", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5809:7:15", - "typeDescriptions": {} - } - }, - "id": 2901, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5809:10:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5799:20:15", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2903, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "5821:6:15", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5828:20:15", - "memberName": "AS_ADDRESS_NOT_FOUND", - "nodeType": "MemberAccess", - "referencedDeclaration": 13993, - "src": "5821:27:15", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2896, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "5791:7:15", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5791:58:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2906, - "nodeType": "ExpressionStatement", - "src": "5791:58:15" - }, - { - "expression": { - "id": 2907, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2891, - "src": "5878:6:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2889, - "id": 2908, - "nodeType": "Return", - "src": "5871:13:15" - } - ] - }, - "documentation": { - "id": 2883, - "nodeType": "StructuredDocumentation", - "src": "5609:60:15", - "text": "@return Address of key, reverts if the key doesn't exist" - }, - "id": 2910, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getAddress", - "nameLocation": "5683:11:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2885, - "mutability": "mutable", - "name": "key", - "nameLocation": "5703:3:15", - "nodeType": "VariableDeclaration", - "scope": 2910, - "src": "5695:11:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2884, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5695:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5694:13:15" - }, - "returnParameters": { - "id": 2889, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2888, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2910, - "src": "5731:7:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2887, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5731:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5730:9:15" - }, - "scope": 2931, - "src": "5674:255:15", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2929, - "nodeType": "Block", - "src": "6106:126:15", - "statements": [ - { - "expression": { - "id": 2922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2918, - "name": "addresses", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2612, - "src": "6116:9:15", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$", - "typeString": "mapping(bytes32 => address)" - } - }, - "id": 2920, - "indexExpression": { - "id": 2919, - "name": "key", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2913, - "src": "6126:3:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6116:14:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2921, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2915, - "src": "6133:5:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6116:22:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2923, - "nodeType": "ExpressionStatement", - "src": "6116:22:15" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2925, - "name": "key", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2913, - "src": "6202:3:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2926, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2915, - "src": "6207:5:15", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2924, - "name": "AddressSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10732, - "src": "6191:10:15", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$", - "typeString": "function (bytes32,address)" - } - }, - "id": 2927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6191:22:15", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2928, - "nodeType": "EmitStatement", - "src": "6186:27:15" - } - ] - }, - "documentation": { - "id": 2911, - "nodeType": "StructuredDocumentation", - "src": "5935:108:15", - "text": "@dev Sets address to map by its key\n @param key Key in string format\n @param value Address" - }, - "id": 2930, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setAddress", - "nameLocation": "6057:11:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2916, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2913, - "mutability": "mutable", - "name": "key", - "nameLocation": "6077:3:15", - "nodeType": "VariableDeclaration", - "scope": 2930, - "src": "6069:11:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2912, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6069:7:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2915, - "mutability": "mutable", - "name": "value", - "nameLocation": "6090:5:15", - "nodeType": "VariableDeclaration", - "scope": 2930, - "src": "6082:13:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2914, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6082:7:15", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6068:28:15" - }, - "returnParameters": { - "id": 2917, - "nodeType": "ParameterList", - "parameters": [], - "src": "6106:0:15" - }, - "scope": 2931, - "src": "6048:184:15", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 2932, - "src": "934:5300:15", - "usedErrors": [] - } - ], - "src": "128:6107:15" - }, - "id": 15 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "exportedSymbols": { - "ACLTrait": [2057], - "ContractsRegister": [3114], - "Errors": [14033], - "IContractsRegister": [10967] - }, - "id": 3115, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2933, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:16" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol", - "file": "../interfaces/IContractsRegister.sol", - "id": 2935, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3115, - "sourceUnit": 10968, - "src": "154:74:16", - "symbolAliases": [ - { - "foreign": { - "id": 2934, - "name": "IContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10967, - "src": "163:18:16", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "file": "../libraries/Errors.sol", - "id": 2937, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3115, - "sourceUnit": 14034, - "src": "229:49:16", - "symbolAliases": [ - { - "foreign": { - "id": 2936, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "238:6:16", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol", - "file": "./ACLTrait.sol", - "id": 2939, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3115, - "sourceUnit": 2058, - "src": "279:42:16", - "symbolAliases": [ - { - "foreign": { - "id": 2938, - "name": "ACLTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2057, - "src": "288:8:16", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 2941, - "name": "IContractsRegister", - "nameLocations": ["453:18:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10967, - "src": "453:18:16" - }, - "id": 2942, - "nodeType": "InheritanceSpecifier", - "src": "453:18:16" - }, - { - "baseName": { - "id": 2943, - "name": "ACLTrait", - "nameLocations": ["473:8:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "473:8:16" - }, - "id": 2944, - "nodeType": "InheritanceSpecifier", - "src": "473:8:16" - } - ], - "canonicalName": "ContractsRegister", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2940, - "nodeType": "StructuredDocumentation", - "src": "323:100:16", - "text": "@title Pool & Credit Manager registry\n @notice Stores addresses of Pools and Credit Managers" - }, - "fullyImplemented": true, - "id": 3114, - "linearizedBaseContracts": [ - 3114, 2057, 17186, 18742, 10967, 12963, 10904 - ], - "name": "ContractsRegister", - "nameLocation": "432:17:16", - "nodeType": "ContractDefinition", - "nodes": [ - { - "baseFunctions": [10923], - "constant": false, - "documentation": { - "id": 2945, - "nodeType": "StructuredDocumentation", - "src": "488:37:16", - "text": "@dev List of all registered pools" - }, - "functionSelector": "ac4afa38", - "id": 2949, - "mutability": "mutable", - "name": "pools", - "nameLocation": "556:5:16", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2948, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "547:8:16" - }, - "scope": 3114, - "src": "530:31:16", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 2946, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "530:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2947, - "nodeType": "ArrayTypeName", - "src": "530:9:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [10937], - "constant": false, - "documentation": { - "id": 2950, - "nodeType": "StructuredDocumentation", - "src": "568:53:16", - "text": "@dev Mapping storing whether an address is a pool" - }, - "functionSelector": "5b16ebb7", - "id": 2955, - "mutability": "mutable", - "name": "isPool", - "nameLocation": "667:6:16", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2954, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "658:8:16" - }, - "scope": 3114, - "src": "626:47:16", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 2953, - "keyType": { - "id": 2951, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "634:7:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "626:24:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 2952, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "645:4:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [10952], - "constant": false, - "documentation": { - "id": 2956, - "nodeType": "StructuredDocumentation", - "src": "680:47:16", - "text": "@dev List of all registered Credit Managers" - }, - "functionSelector": "1e16e4fc", - "id": 2960, - "mutability": "mutable", - "name": "creditManagers", - "nameLocation": "758:14:16", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2959, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "749:8:16" - }, - "scope": 3114, - "src": "732:40:16", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 2957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "732:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2958, - "nodeType": "ArrayTypeName", - "src": "732:9:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [10966], - "constant": false, - "documentation": { - "id": 2961, - "nodeType": "StructuredDocumentation", - "src": "779:63:16", - "text": "@dev Mapping storing whether an address is a Credit Manager" - }, - "functionSelector": "6fbc6f6b", - "id": 2966, - "mutability": "mutable", - "name": "isCreditManager", - "nameLocation": "888:15:16", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 2965, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "879:8:16" - }, - "scope": 3114, - "src": "847:56:16", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 2964, - "keyType": { - "id": 2962, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "855:7:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "847:24:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 2963, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "866:4:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "documentation": { - "id": 2967, - "nodeType": "StructuredDocumentation", - "src": "910:25:16", - "text": "@dev Contract version" - }, - "functionSelector": "54fd4d50", - "id": 2970, - "mutability": "constant", - "name": "version", - "nameLocation": "964:7:16", - "nodeType": "VariableDeclaration", - "scope": 3114, - "src": "940:35:16", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2968, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "940:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 2969, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "974:1:16", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "public" - }, - { - "body": { - "id": 2978, - "nodeType": "Block", - "src": "1045:2:16", - "statements": [] - }, - "id": 2979, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 2975, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2972, - "src": "1028:15:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 2976, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 2974, - "name": "ACLTrait", - "nameLocations": ["1019:8:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "1019:8:16" - }, - "nodeType": "ModifierInvocation", - "src": "1019:25:16" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2973, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2972, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "1002:15:16", - "nodeType": "VariableDeclaration", - "scope": 2979, - "src": "994:23:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2971, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "994:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "993:25:16" - }, - "returnParameters": { - "id": 2977, - "nodeType": "ParameterList", - "parameters": [], - "src": "1045:0:16" - }, - "scope": 3114, - "src": "982:65:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 3023, - "nodeType": "Block", - "src": "1243:363:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2988, - "name": "newPoolAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2982, - "src": "1274:14:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 2991, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1300:1:16", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2990, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1292:7:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2989, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1292:7:16", - "typeDescriptions": {} - } - }, - "id": 2992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1292:10:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1274:28:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 2994, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "1316:6:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 2995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1323:27:16", - "memberName": "ZERO_ADDRESS_IS_NOT_ALLOWED", - "nodeType": "MemberAccess", - "referencedDeclaration": 13936, - "src": "1316:34:16", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2987, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1253:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 2996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1253:107:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2997, - "nodeType": "ExpressionStatement", - "src": "1253:107:16" - }, - { - "expression": { - "arguments": [ - { - "id": 3002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1378:23:16", - "subExpression": { - "baseExpression": { - "id": 2999, - "name": "isPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2955, - "src": "1379:6:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 3001, - "indexExpression": { - "id": 3000, - "name": "newPoolAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2982, - "src": "1386:14:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1379:22:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 3003, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "1403:6:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 3004, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1410:21:16", - "memberName": "CR_POOL_ALREADY_ADDED", - "nodeType": "MemberAccess", - "referencedDeclaration": 13996, - "src": "1403:28:16", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 2998, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1370:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1370:62:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3006, - "nodeType": "ExpressionStatement", - "src": "1370:62:16" - }, - { - "expression": { - "arguments": [ - { - "id": 3010, - "name": "newPoolAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2982, - "src": "1465:14:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3007, - "name": "pools", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2949, - "src": "1454:5:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 3009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1460:4:16", - "memberName": "push", - "nodeType": "MemberAccess", - "src": "1454:10:16", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$", - "typeString": "function (address[] storage pointer,address)" - } - }, - "id": 3011, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1454:26:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3012, - "nodeType": "ExpressionStatement", - "src": "1454:26:16" - }, - { - "expression": { - "id": 3017, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 3013, - "name": "isPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2955, - "src": "1502:6:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 3015, - "indexExpression": { - "id": 3014, - "name": "newPoolAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2982, - "src": "1509:14:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1502:22:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 3016, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1527:4:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "1502:29:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3018, - "nodeType": "ExpressionStatement", - "src": "1502:29:16" - }, - { - "eventCall": { - "arguments": [ - { - "id": 3020, - "name": "newPoolAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2982, - "src": "1572:14:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3019, - "name": "NewPoolAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10898, - "src": "1559:12:16", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 3021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1559:28:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3022, - "nodeType": "EmitStatement", - "src": "1554:33:16" - } - ] - }, - "documentation": { - "id": 2980, - "nodeType": "StructuredDocumentation", - "src": "1053:86:16", - "text": "@dev Adds a pool to the list\n @param newPoolAddress Address of the new pool" - }, - "functionSelector": "d914cd4b", - "id": 3024, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2985, - "kind": "modifierInvocation", - "modifierName": { - "id": 2984, - "name": "configuratorOnly", - "nameLocations": ["1210:16:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2020, - "src": "1210:16:16" - }, - "nodeType": "ModifierInvocation", - "src": "1210:16:16" - } - ], - "name": "addPool", - "nameLocation": "1153:7:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2982, - "mutability": "mutable", - "name": "newPoolAddress", - "nameLocation": "1169:14:16", - "nodeType": "VariableDeclaration", - "scope": 3024, - "src": "1161:22:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2981, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1161:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1160:24:16" - }, - "returnParameters": { - "id": 2986, - "nodeType": "ParameterList", - "parameters": [], - "src": "1243:0:16" - }, - "scope": 3114, - "src": "1144:462:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10915], - "body": { - "id": 3034, - "nodeType": "Block", - "src": "1742:29:16", - "statements": [ - { - "expression": { - "id": 3032, - "name": "pools", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2949, - "src": "1759:5:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "functionReturnParameters": 3031, - "id": 3033, - "nodeType": "Return", - "src": "1752:12:16" - } - ] - }, - "documentation": { - "id": 3025, - "nodeType": "StructuredDocumentation", - "src": "1612:55:16", - "text": "@dev Returns the array of registered pool addresses" - }, - "functionSelector": "673a2a1f", - "id": 3035, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPools", - "nameLocation": "1681:8:16", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3027, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1706:8:16" - }, - "parameters": { - "id": 3026, - "nodeType": "ParameterList", - "parameters": [], - "src": "1689:2:16" - }, - "returnParameters": { - "id": 3031, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3030, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3035, - "src": "1724:16:16", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 3028, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1724:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3029, - "nodeType": "ArrayTypeName", - "src": "1724:9:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "1723:18:16" - }, - "scope": 3114, - "src": "1672:99:16", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10929], - "body": { - "id": 3045, - "nodeType": "Block", - "src": "1898:48:16", - "statements": [ - { - "expression": { - "expression": { - "id": 3042, - "name": "pools", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2949, - "src": "1915:5:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 3043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1921:6:16", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1915:12:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3041, - "id": 3044, - "nodeType": "Return", - "src": "1908:19:16" - } - ] - }, - "documentation": { - "id": 3036, - "nodeType": "StructuredDocumentation", - "src": "1777:50:16", - "text": "@return Returns the number of registered pools" - }, - "functionSelector": "b4ac6860", - "id": 3046, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPoolsCount", - "nameLocation": "1841:13:16", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3038, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1871:8:16" - }, - "parameters": { - "id": 3037, - "nodeType": "ParameterList", - "parameters": [], - "src": "1854:2:16" - }, - "returnParameters": { - "id": 3041, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3040, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3046, - "src": "1889:7:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3039, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1889:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1888:9:16" - }, - "scope": 3114, - "src": "1832:114:16", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 3090, - "nodeType": "Block", - "src": "2194:454:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3060, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3055, - "name": "newCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3049, - "src": "2225:16:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3058, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2253:1:16", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3057, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2245:7:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3056, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2245:7:16", - "typeDescriptions": {} - } - }, - "id": 3059, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2245:10:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2225:30:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 3061, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "2269:6:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 3062, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2276:27:16", - "memberName": "ZERO_ADDRESS_IS_NOT_ALLOWED", - "nodeType": "MemberAccess", - "referencedDeclaration": 13936, - "src": "2269:34:16", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 3054, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2204:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3063, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2204:109:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3064, - "nodeType": "ExpressionStatement", - "src": "2204:109:16" - }, - { - "expression": { - "arguments": [ - { - "id": 3069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2345:34:16", - "subExpression": { - "baseExpression": { - "id": 3066, - "name": "isCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2966, - "src": "2346:15:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 3068, - "indexExpression": { - "id": 3067, - "name": "newCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3049, - "src": "2362:16:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2346:33:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 3070, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "2393:6:16", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 3071, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2400:31:16", - "memberName": "CR_CREDIT_MANAGER_ALREADY_ADDED", - "nodeType": "MemberAccess", - "referencedDeclaration": 13999, - "src": "2393:38:16", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 3065, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2324:7:16", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 3072, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2324:117:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3073, - "nodeType": "ExpressionStatement", - "src": "2324:117:16" - }, - { - "expression": { - "arguments": [ - { - "id": 3077, - "name": "newCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3049, - "src": "2483:16:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3074, - "name": "creditManagers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2960, - "src": "2463:14:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 3076, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2478:4:16", - "memberName": "push", - "nodeType": "MemberAccess", - "src": "2463:19:16", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$", - "typeString": "function (address[] storage pointer,address)" - } - }, - "id": 3078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2463:37:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3079, - "nodeType": "ExpressionStatement", - "src": "2463:37:16" - }, - { - "expression": { - "id": 3084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 3080, - "name": "isCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2966, - "src": "2522:15:16", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 3082, - "indexExpression": { - "id": 3081, - "name": "newCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3049, - "src": "2538:16:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2522:33:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 3083, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2558:4:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "2522:40:16", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3085, - "nodeType": "ExpressionStatement", - "src": "2522:40:16" - }, - { - "eventCall": { - "arguments": [ - { - "id": 3087, - "name": "newCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3049, - "src": "2612:16:16", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3086, - "name": "NewCreditManagerAdded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10903, - "src": "2590:21:16", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 3088, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2590:39:16", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3089, - "nodeType": "EmitStatement", - "src": "2585:44:16" - } - ] - }, - "documentation": { - "id": 3047, - "nodeType": "StructuredDocumentation", - "src": "1952:127:16", - "text": "@dev Adds credit accounts manager address to the registry\n @param newCreditManager Address of the new Credit Manager" - }, - "functionSelector": "e26b2f63", - "id": 3091, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 3052, - "kind": "modifierInvocation", - "modifierName": { - "id": 3051, - "name": "configuratorOnly", - "nameLocations": ["2161:16:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2020, - "src": "2161:16:16" - }, - "nodeType": "ModifierInvocation", - "src": "2161:16:16" - } - ], - "name": "addCreditManager", - "nameLocation": "2093:16:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3050, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3049, - "mutability": "mutable", - "name": "newCreditManager", - "nameLocation": "2118:16:16", - "nodeType": "VariableDeclaration", - "scope": 3091, - "src": "2110:24:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3048, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2110:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2109:26:16" - }, - "returnParameters": { - "id": 3053, - "nodeType": "ParameterList", - "parameters": [], - "src": "2194:0:16" - }, - "scope": 3114, - "src": "2084:564:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10944], - "body": { - "id": 3101, - "nodeType": "Block", - "src": "2839:38:16", - "statements": [ - { - "expression": { - "id": 3099, - "name": "creditManagers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2960, - "src": "2856:14:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "functionReturnParameters": 3098, - "id": 3100, - "nodeType": "Return", - "src": "2849:21:16" - } - ] - }, - "documentation": { - "id": 3092, - "nodeType": "StructuredDocumentation", - "src": "2654:65:16", - "text": "@dev Returns the array of registered credit manager addresses" - }, - "functionSelector": "94144856", - "id": 3102, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditManagers", - "nameLocation": "2733:17:16", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3094, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2791:8:16" - }, - "parameters": { - "id": 3093, - "nodeType": "ParameterList", - "parameters": [], - "src": "2750:2:16" - }, - "returnParameters": { - "id": 3098, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3097, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3102, - "src": "2817:16:16", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 3095, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2817:7:16", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3096, - "nodeType": "ArrayTypeName", - "src": "2817:9:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "2816:18:16" - }, - "scope": 3114, - "src": "2724:153:16", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10958], - "body": { - "id": 3112, - "nodeType": "Block", - "src": "3023:57:16", - "statements": [ - { - "expression": { - "expression": { - "id": 3109, - "name": "creditManagers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2960, - "src": "3040:14:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage", - "typeString": "address[] storage ref" - } - }, - "id": 3110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3055:6:16", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3040:21:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3108, - "id": 3111, - "nodeType": "Return", - "src": "3033:28:16" - } - ] - }, - "documentation": { - "id": 3103, - "nodeType": "StructuredDocumentation", - "src": "2883:60:16", - "text": "@return Returns the number of registered credit managers" - }, - "functionSelector": "c29277cd", - "id": 3113, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditManagersCount", - "nameLocation": "2957:22:16", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3105, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2996:8:16" - }, - "parameters": { - "id": 3104, - "nodeType": "ParameterList", - "parameters": [], - "src": "2979:2:16" - }, - "returnParameters": { - "id": 3108, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3107, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3113, - "src": "3014:7:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3106, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3014:7:16", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3013:9:16" - }, - "scope": 3114, - "src": "2948:132:16", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 3115, - "src": "423:2659:16", - "usedErrors": [12534, 12551, 12557, 12560] - } - ], - "src": "128:2955:16" - }, - "id": 16 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol", - "exportedSymbols": { - "AddressProvider": [2931], - "ContractAdapter": [14492], - "ContractsRegister": [3114], - "CreditAccountData": [14533], - "CreditManagerData": [14590], - "DataCompressor": [4723], - "ICreditAccount": [11064], - "ICreditConfigurator": [11424], - "ICreditFacade": [11919], - "ICreditFilter": [13277], - "ICreditManager": [13579], - "ICreditManagerV2": [12355], - "IDataCompressor": [12451], - "IERC20": [17905], - "IPoolService": [12805], - "IVersion": [12963], - "PERCENTAGE_FACTOR": [14398], - "PercentageMath": [14470], - "PoolData": [14623], - "TokenBalance": [14487], - "TokenInfo": [14630], - "ZeroAddressException": [12534] - }, - "id": 4724, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3116, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:17" - }, - { - "id": 3117, - "literals": ["experimental", "ABIEncoderV2"], - "nodeType": "PragmaDirective", - "src": "153:33:17" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 3119, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 17906, - "src": "188:112:17", - "symbolAliases": [ - { - "foreign": { - "id": 3118, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "197:6:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol", - "file": "../libraries/PercentageMath.sol", - "id": 3122, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 14471, - "src": "301:84:17", - "symbolAliases": [ - { - "foreign": { - "id": 3120, - "name": "PercentageMath", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14470, - "src": "310:14:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3121, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "326:17:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol", - "file": "../interfaces/IDataCompressor.sol", - "id": 3124, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 12452, - "src": "387:68:17", - "symbolAliases": [ - { - "foreign": { - "id": 3123, - "name": "IDataCompressor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12451, - "src": "396:15:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol", - "file": "../interfaces/V1/ICreditManager.sol", - "id": 3126, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 13580, - "src": "456:69:17", - "symbolAliases": [ - { - "foreign": { - "id": 3125, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "465:14:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol", - "file": "../interfaces/ICreditManagerV2.sol", - "id": 3128, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 12356, - "src": "526:70:17", - "symbolAliases": [ - { - "foreign": { - "id": 3127, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "535:16:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol", - "file": "../interfaces/ICreditFacade.sol", - "id": 3130, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 11931, - "src": "597:64:17", - "symbolAliases": [ - { - "foreign": { - "id": 3129, - "name": "ICreditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "606:13:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol", - "file": "../interfaces/V1/ICreditFilter.sol", - "id": 3132, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 13278, - "src": "662:67:17", - "symbolAliases": [ - { - "foreign": { - "id": 3131, - "name": "ICreditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13277, - "src": "671:13:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol", - "file": "../interfaces/ICreditConfigurator.sol", - "id": 3134, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 11425, - "src": "730:76:17", - "symbolAliases": [ - { - "foreign": { - "id": 3133, - "name": "ICreditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11424, - "src": "739:19:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol", - "file": "../interfaces/ICreditAccount.sol", - "id": 3136, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 11065, - "src": "807:66:17", - "symbolAliases": [ - { - "foreign": { - "id": 3135, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "816:14:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol", - "file": "../interfaces/IPoolService.sol", - "id": 3138, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 12806, - "src": "874:62:17", - "symbolAliases": [ - { - "foreign": { - "id": 3137, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "883:12:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "../interfaces/IVersion.sol", - "id": 3140, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 12964, - "src": "938:54:17", - "symbolAliases": [ - { - "foreign": { - "id": 3139, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "947:8:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "./AddressProvider.sol", - "id": 3142, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 2932, - "src": "994:56:17", - "symbolAliases": [ - { - "foreign": { - "id": 3141, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "1003:15:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "file": "./ContractsRegister.sol", - "id": 3144, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 3115, - "src": "1051:60:17", - "symbolAliases": [ - { - "foreign": { - "id": 3143, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "1060:17:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol", - "file": "../libraries/Types.sol", - "id": 3151, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 14659, - "src": "1113:130:17", - "symbolAliases": [ - { - "foreign": { - "id": 3145, - "name": "CreditAccountData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14533, - "src": "1122:17:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3146, - "name": "CreditManagerData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14590, - "src": "1141:17:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3147, - "name": "PoolData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14623, - "src": "1160:8:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3148, - "name": "TokenInfo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14630, - "src": "1170:9:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3149, - "name": "TokenBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14487, - "src": "1181:12:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3150, - "name": "ContractAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14492, - "src": "1195:15:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol", - "file": "../interfaces/IErrors.sol", - "id": 3153, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4724, - "sourceUnit": 12561, - "src": "1259:65:17", - "symbolAliases": [ - { - "foreign": { - "id": 3152, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "1268:20:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 3155, - "name": "IDataCompressor", - "nameLocations": ["1523:15:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12451, - "src": "1523:15:17" - }, - "id": 3156, - "nodeType": "InheritanceSpecifier", - "src": "1523:15:17" - } - ], - "canonicalName": "DataCompressor", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 3154, - "nodeType": "StructuredDocumentation", - "src": "1326:170:17", - "text": "@title Data compressor\n @notice Collects data from various contracts for use in the dApp\n Do not use for data from data compressor for state-changing functions" - }, - "fullyImplemented": true, - "id": 4723, - "linearizedBaseContracts": [4723, 12451, 12963, 12371], - "name": "DataCompressor", - "nameLocation": "1505:14:17", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 3159, - "libraryName": { - "id": 3157, - "name": "PercentageMath", - "nameLocations": ["1551:14:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14470, - "src": "1551:14:17" - }, - "nodeType": "UsingForDirective", - "src": "1545:33:17", - "typeName": { - "id": 3158, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1570:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "documentation": { - "id": 3160, - "nodeType": "StructuredDocumentation", - "src": "1584:39:17", - "text": "@dev Address of the AddressProvider" - }, - "functionSelector": "2954018c", - "id": 3163, - "mutability": "immutable", - "name": "addressProvider", - "nameLocation": "1661:15:17", - "nodeType": "VariableDeclaration", - "scope": 4723, - "src": "1628:48:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - }, - "typeName": { - "id": 3162, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3161, - "name": "AddressProvider", - "nameLocations": ["1628:15:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "1628:15:17" - }, - "referencedDeclaration": 2931, - "src": "1628:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 3164, - "nodeType": "StructuredDocumentation", - "src": "1683:41:17", - "text": "@dev Address of the ContractsRegister" - }, - "functionSelector": "7a0c7b21", - "id": 3167, - "mutability": "immutable", - "name": "contractsRegister", - "nameLocation": "1764:17:17", - "nodeType": "VariableDeclaration", - "scope": 4723, - "src": "1729:52:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - }, - "typeName": { - "id": 3166, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3165, - "name": "ContractsRegister", - "nameLocations": ["1729:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "1729:17:17" - }, - "referencedDeclaration": 3114, - "src": "1729:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 3168, - "nodeType": "StructuredDocumentation", - "src": "1788:24:17", - "text": "@dev Address of WETH" - }, - "functionSelector": "4b2f336d", - "id": 3170, - "mutability": "immutable", - "name": "WETHToken", - "nameLocation": "1842:9:17", - "nodeType": "VariableDeclaration", - "scope": 4723, - "src": "1817:34:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3169, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1817:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "functionSelector": "54fd4d50", - "id": 3173, - "mutability": "constant", - "name": "version", - "nameLocation": "1906:7:17", - "nodeType": "VariableDeclaration", - "scope": 4723, - "src": "1882:35:17", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3171, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1882:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "32", - "id": 3172, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1916:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "public" - }, - { - "body": { - "id": 3188, - "nodeType": "Block", - "src": "2055:102:17", - "statements": [ - { - "condition": { - "id": 3182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2069:31:17", - "subExpression": { - "arguments": [ - { - "id": 3180, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3176, - "src": "2095:4:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3178, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "2070:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2088:6:17", - "memberName": "isPool", - "nodeType": "MemberAccess", - "referencedDeclaration": 2955, - "src": "2070:24:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 3181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2070:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3186, - "nodeType": "IfStatement", - "src": "2065:62:17", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3183, - "name": "NotPoolException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12370, - "src": "2109:16:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2109:18:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3185, - "nodeType": "RevertStatement", - "src": "2102:25:17" - } - }, - { - "id": 3187, - "nodeType": "PlaceholderStatement", - "src": "2149:1:17" - } - ] - }, - "documentation": { - "id": 3174, - "nodeType": "StructuredDocumentation", - "src": "1924:80:17", - "text": "@dev Prevents function usage for target contracts that are not Gearbox pools" - }, - "id": 3189, - "name": "targetIsRegisteredPool", - "nameLocation": "2018:22:17", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 3177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3176, - "mutability": "mutable", - "name": "pool", - "nameLocation": "2049:4:17", - "nodeType": "VariableDeclaration", - "scope": 3189, - "src": "2041:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3175, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2041:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2040:14:17" - }, - "src": "2009:148:17", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3204, - "nodeType": "Block", - "src": "2322:141:17", - "statements": [ - { - "condition": { - "id": 3198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2336:49:17", - "subExpression": { - "arguments": [ - { - "id": 3196, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3192, - "src": "2371:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3194, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "2337:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2355:15:17", - "memberName": "isCreditManager", - "nodeType": "MemberAccess", - "referencedDeclaration": 2966, - "src": "2337:33:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 3197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2337:48:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3202, - "nodeType": "IfStatement", - "src": "2332:101:17", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3199, - "name": "NotCreditManagerException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12367, - "src": "2406:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2406:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3201, - "nodeType": "RevertStatement", - "src": "2399:34:17" - } - }, - { - "id": 3203, - "nodeType": "PlaceholderStatement", - "src": "2455:1:17" - } - ] - }, - "documentation": { - "id": 3190, - "nodeType": "StructuredDocumentation", - "src": "2163:90:17", - "text": "@dev Prevents function usage for target contracts that are not Gearbox Credit Managers" - }, - "id": 3205, - "name": "targetIsRegisteredCreditManager", - "nameLocation": "2267:31:17", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 3193, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3192, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "2307:13:17", - "nodeType": "VariableDeclaration", - "scope": 3205, - "src": "2299:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3191, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2299:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2298:23:17" - }, - "src": "2258:205:17", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3240, - "nodeType": "Block", - "src": "2507:305:17", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3210, - "name": "_addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3207, - "src": "2521:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3213, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2549:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3212, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2541:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3211, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2541:7:17", - "typeDescriptions": {} - } - }, - "id": 3214, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2541:10:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2521:30:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3219, - "nodeType": "IfStatement", - "src": "2517:65:17", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3216, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "2560:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 3217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2560:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3218, - "nodeType": "RevertStatement", - "src": "2553:29:17" - } - }, - { - "expression": { - "id": 3224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3220, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3163, - "src": "2593:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3222, - "name": "_addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3207, - "src": "2627:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3221, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "2611:15:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AddressProvider_$2931_$", - "typeString": "type(contract AddressProvider)" - } - }, - "id": 3223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2611:33:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "src": "2593:51:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 3225, - "nodeType": "ExpressionStatement", - "src": "2593:51:17" - }, - { - "expression": { - "id": 3232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3226, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "2654:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3228, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3163, - "src": "2705:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 3229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2721:20:17", - "memberName": "getContractsRegister", - "nodeType": "MemberAccess", - "referencedDeclaration": 2663, - "src": "2705:36:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2705:38:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3227, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "2674:17:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ContractsRegister_$3114_$", - "typeString": "type(contract ContractsRegister)" - } - }, - "id": 3231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2674:79:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "src": "2654:99:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3233, - "nodeType": "ExpressionStatement", - "src": "2654:99:17" - }, - { - "expression": { - "id": 3238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3234, - "name": "WETHToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3170, - "src": "2763:9:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3235, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3163, - "src": "2775:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 3236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2791:12:17", - "memberName": "getWethToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2817, - "src": "2775:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2775:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2763:42:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3239, - "nodeType": "ExpressionStatement", - "src": "2763:42:17" - } - ] - }, - "id": 3241, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3208, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3207, - "mutability": "mutable", - "name": "_addressProvider", - "nameLocation": "2489:16:17", - "nodeType": "VariableDeclaration", - "scope": 3241, - "src": "2481:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3206, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2481:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2480:26:17" - }, - "returnParameters": { - "id": 3209, - "nodeType": "ParameterList", - "parameters": [], - "src": "2507:0:17" - }, - "scope": 4723, - "src": "2469:343:17", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12385], - "body": { - "id": 3340, - "nodeType": "Block", - "src": "3080:1087:17", - "statements": [ - { - "assignments": [3252], - "declarations": [ - { - "constant": false, - "id": 3252, - "mutability": "mutable", - "name": "count", - "nameLocation": "3156:5:17", - "nodeType": "VariableDeclaration", - "scope": 3340, - "src": "3148:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3251, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3148:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3253, - "nodeType": "VariableDeclarationStatement", - "src": "3148:13:17" - }, - { - "assignments": [3255], - "declarations": [ - { - "constant": false, - "id": 3255, - "mutability": "mutable", - "name": "creditManagersLength", - "nameLocation": "3179:20:17", - "nodeType": "VariableDeclaration", - "scope": 3340, - "src": "3171:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3254, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3171:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3259, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3256, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "3202:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3233:22:17", - "memberName": "getCreditManagersCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 3113, - "src": "3202:53:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3202:55:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3171:86:17" - }, - { - "body": { - "id": 3287, - "nodeType": "Block", - "src": "3316:265:17", - "statements": [ - { - "id": 3286, - "nodeType": "UncheckedBlock", - "src": "3330:241:17", - "statements": [ - { - "assignments": [3268], - "declarations": [ - { - "constant": false, - "id": 3268, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "3366:13:17", - "nodeType": "VariableDeclaration", - "scope": 3286, - "src": "3358:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3267, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3358:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3273, - "initialValue": { - "arguments": [ - { - "id": 3271, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3261, - "src": "3415:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 3269, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "3382:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3400:14:17", - "memberName": "creditManagers", - "nodeType": "MemberAccess", - "referencedDeclaration": 2960, - "src": "3382:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 3272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3382:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3358:59:17" - }, - { - "condition": { - "arguments": [ - { - "id": 3275, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3268, - "src": "3462:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3276, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3244, - "src": "3477:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3274, - "name": "hasOpenedCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3360, - "src": "3439:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view returns (bool)" - } - }, - "id": 3277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3439:47:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3282, - "nodeType": "IfStatement", - "src": "3435:101:17", - "trueBody": { - "id": 3281, - "nodeType": "Block", - "src": "3488:48:17", - "statements": [ - { - "expression": { - "id": 3279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3510:7:17", - "subExpression": { - "id": 3278, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3252, - "src": "3512:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3280, - "nodeType": "ExpressionStatement", - "src": "3510:7:17" - } - ] - } - }, - { - "expression": { - "id": 3284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3553:3:17", - "subExpression": { - "id": 3283, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3261, - "src": "3555:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3285, - "nodeType": "ExpressionStatement", - "src": "3553:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3264, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3261, - "src": "3288:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3265, - "name": "creditManagersLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3255, - "src": "3292:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3288:24:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3288, - "initializationExpression": { - "assignments": [3261], - "declarations": [ - { - "constant": false, - "id": 3261, - "mutability": "mutable", - "name": "i", - "nameLocation": "3281:1:17", - "nodeType": "VariableDeclaration", - "scope": 3288, - "src": "3273:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3260, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3273:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3263, - "initialValue": { - "hexValue": "30", - "id": 3262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3285:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3273:13:17" - }, - "nodeType": "ForStatement", - "src": "3268:313:17" - }, - { - "expression": { - "id": 3296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3289, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3249, - "src": "3591:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3294, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3252, - "src": "3624:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3293, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "3600:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct CreditAccountData memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 3291, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3290, - "name": "CreditAccountData", - "nameLocations": ["3604:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14533, - "src": "3604:17:17" - }, - "referencedDeclaration": 14533, - "src": "3604:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_storage_ptr", - "typeString": "struct CreditAccountData" - } - }, - "id": 3292, - "nodeType": "ArrayTypeName", - "src": "3604:19:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_storage_$dyn_storage_ptr", - "typeString": "struct CreditAccountData[]" - } - } - }, - "id": 3295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3600:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData memory[] memory" - } - }, - "src": "3591:39:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData memory[] memory" - } - }, - "id": 3297, - "nodeType": "ExpressionStatement", - "src": "3591:39:17" - }, - { - "expression": { - "id": 3300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3298, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3252, - "src": "3678:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 3299, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3686:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3678:9:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3301, - "nodeType": "ExpressionStatement", - "src": "3678:9:17" - }, - { - "body": { - "id": 3338, - "nodeType": "Block", - "src": "3745:416:17", - "statements": [ - { - "assignments": [3310], - "declarations": [ - { - "constant": false, - "id": 3310, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "3767:13:17", - "nodeType": "VariableDeclaration", - "scope": 3338, - "src": "3759:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3759:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3315, - "initialValue": { - "arguments": [ - { - "id": 3313, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3303, - "src": "3816:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 3311, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "3783:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3801:14:17", - "memberName": "creditManagers", - "nodeType": "MemberAccess", - "referencedDeclaration": 2960, - "src": "3783:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 3314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3783:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3759:59:17" - }, - { - "id": 3337, - "nodeType": "UncheckedBlock", - "src": "3832:319:17", - "statements": [ - { - "condition": { - "arguments": [ - { - "id": 3317, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3310, - "src": "3887:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3318, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3244, - "src": "3902:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3316, - "name": "hasOpenedCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3360, - "src": "3864:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view returns (bool)" - } - }, - "id": 3319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3864:47:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3333, - "nodeType": "IfStatement", - "src": "3860:255:17", - "trueBody": { - "id": 3332, - "nodeType": "Block", - "src": "3913:202:17", - "statements": [ - { - "expression": { - "id": 3327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 3320, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3249, - "src": "3935:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData memory[] memory" - } - }, - "id": 3322, - "indexExpression": { - "id": 3321, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3252, - "src": "3942:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3935:13:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3324, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3310, - "src": "3997:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3325, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3244, - "src": "4036:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3323, - "name": "getCreditAccountData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3793, - "src": "3951:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_struct$_CreditAccountData_$14533_memory_ptr_$", - "typeString": "function (address,address) view returns (struct CreditAccountData memory)" - } - }, - "id": 3326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3951:115:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "src": "3935:131:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3328, - "nodeType": "ExpressionStatement", - "src": "3935:131:17" - }, - { - "expression": { - "id": 3330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "4089:7:17", - "subExpression": { - "id": 3329, - "name": "count", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3252, - "src": "4089:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3331, - "nodeType": "ExpressionStatement", - "src": "4089:7:17" - } - ] - } - }, - { - "expression": { - "id": 3335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "4133:3:17", - "subExpression": { - "id": 3334, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3303, - "src": "4135:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3336, - "nodeType": "ExpressionStatement", - "src": "4133:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3308, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3306, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3303, - "src": "3717:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3307, - "name": "creditManagersLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3255, - "src": "3721:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3717:24:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3339, - "initializationExpression": { - "assignments": [3303], - "declarations": [ - { - "constant": false, - "id": 3303, - "mutability": "mutable", - "name": "i", - "nameLocation": "3710:1:17", - "nodeType": "VariableDeclaration", - "scope": 3339, - "src": "3702:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3302, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3702:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3305, - "initialValue": { - "hexValue": "30", - "id": 3304, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3714:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3702:13:17" - }, - "nodeType": "ForStatement", - "src": "3697:464:17" - } - ] - }, - "documentation": { - "id": 3242, - "nodeType": "StructuredDocumentation", - "src": "2818:123:17", - "text": "@dev Returns CreditAccountData for all opened accounts for particular borrower\n @param borrower Borrower address" - }, - "functionSelector": "a80deda3", - "id": 3341, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountList", - "nameLocation": "2955:20:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3245, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3244, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "2984:8:17", - "nodeType": "VariableDeclaration", - "scope": 3341, - "src": "2976:16:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3243, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2976:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2975:18:17" - }, - "returnParameters": { - "id": 3250, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3249, - "mutability": "mutable", - "name": "result", - "nameLocation": "3068:6:17", - "nodeType": "VariableDeclaration", - "scope": 3341, - "src": "3041:33:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData[]" - }, - "typeName": { - "baseType": { - "id": 3247, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3246, - "name": "CreditAccountData", - "nameLocations": ["3041:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14533, - "src": "3041:17:17" - }, - "referencedDeclaration": 14533, - "src": "3041:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_storage_ptr", - "typeString": "struct CreditAccountData" - } - }, - "id": 3248, - "nodeType": "ArrayTypeName", - "src": "3041:19:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_storage_$dyn_storage_ptr", - "typeString": "struct CreditAccountData[]" - } - }, - "visibility": "internal" - } - ], - "src": "3040:35:17" - }, - "scope": 4723, - "src": "2946:1221:17", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12395], - "body": { - "id": 3359, - "nodeType": "Block", - "src": "4547:73:17", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 3355, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3344, - "src": "4588:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3356, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3346, - "src": "4604:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3354, - "name": "_hasOpenedCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4642, - "src": "4564:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view returns (bool)" - } - }, - "id": 3357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4564:49:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 3353, - "id": 3358, - "nodeType": "Return", - "src": "4557:56:17" - } - ] - }, - "documentation": { - "id": 3342, - "nodeType": "StructuredDocumentation", - "src": "4173:184:17", - "text": "@dev Returns whether the borrower has an open credit account with the credit manager\n @param _creditManager Credit manager to check\n @param borrower Borrower to check" - }, - "functionSelector": "fc9914cb", - "id": 3360, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 3349, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3344, - "src": "4504:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 3350, - "kind": "modifierInvocation", - "modifierName": { - "id": 3348, - "name": "targetIsRegisteredCreditManager", - "nameLocations": ["4472:31:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3205, - "src": "4472:31:17" - }, - "nodeType": "ModifierInvocation", - "src": "4472:47:17" - } - ], - "name": "hasOpenedCreditAccount", - "nameLocation": "4371:22:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3344, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "4402:14:17", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "4394:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3343, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4394:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3346, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4426:8:17", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "4418:16:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3345, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4418:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4393:42:17" - }, - "returnParameters": { - "id": 3353, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3352, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "4537:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3351, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4537:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4536:6:17" - }, - "scope": 4723, - "src": "4362:258:17", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12406], - "body": { - "id": 3792, - "nodeType": "Block", - "src": "4990:4329:17", - "statements": [ - { - "assignments": [3372, 3375, 3378, 3381, 3384, null], - "declarations": [ - { - "constant": false, - "id": 3372, - "mutability": "mutable", - "name": "ver", - "nameLocation": "5020:3:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5014:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3371, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5014:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3375, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "5052:13:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5037:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - }, - "typeName": { - "id": 3374, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3373, - "name": "ICreditManager", - "nameLocations": ["5037:14:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13579, - "src": "5037:14:17" - }, - "referencedDeclaration": 13579, - "src": "5037:14:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3378, - "mutability": "mutable", - "name": "creditFilter", - "nameLocation": "5093:12:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5079:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - }, - "typeName": { - "id": 3377, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3376, - "name": "ICreditFilter", - "nameLocations": ["5079:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13277, - "src": "5079:13:17" - }, - "referencedDeclaration": 13277, - "src": "5079:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3381, - "mutability": "mutable", - "name": "creditManagerV2", - "nameLocation": "5136:15:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5119:32:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 3380, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3379, - "name": "ICreditManagerV2", - "nameLocations": ["5119:16:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "5119:16:17" - }, - "referencedDeclaration": 12355, - "src": "5119:16:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3384, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "5179:12:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5165:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - }, - "typeName": { - "id": 3383, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3382, - "name": "ICreditFacade", - "nameLocations": ["5165:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11919, - "src": "5165:13:17" - }, - "referencedDeclaration": 11919, - "src": "5165:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "visibility": "internal" - }, - null - ], - "id": 3388, - "initialValue": { - "arguments": [ - { - "id": 3386, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3363, - "src": "5225:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3385, - "name": "getCreditContracts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4722, - "src": "5206:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "function (address) view returns (uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "id": 3387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5206:34:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "tuple(uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5000:240:17" - }, - { - "assignments": [3390], - "declarations": [ - { - "constant": false, - "id": 3390, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "5259:13:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "5251:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3389, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5251:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3404, - "initialValue": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3391, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "5276:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3392, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5283:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5276:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3394, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5275:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "id": 3401, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3365, - "src": "5404:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3399, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "5363:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5379:24:17", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "5363:40:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 3402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5363:50:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "5275:138:17", - "trueExpression": { - "arguments": [ - { - "id": 3397, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3365, - "src": "5339:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3395, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "5300:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5314:24:17", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 13534, - "src": "5300:38:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 3398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5300:48:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5251:162:17" - }, - { - "expression": { - "id": 3409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3405, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5424:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3407, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5431:7:17", - "memberName": "version", - "nodeType": "MemberAccess", - "referencedDeclaration": 14530, - "src": "5424:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3408, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "5441:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "5424:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3410, - "nodeType": "ExpressionStatement", - "src": "5424:20:17" - }, - { - "expression": { - "id": 3415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3411, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5455:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3413, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5462:8:17", - "memberName": "borrower", - "nodeType": "MemberAccess", - "referencedDeclaration": 14496, - "src": "5455:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3414, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3365, - "src": "5473:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5455:26:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3416, - "nodeType": "ExpressionStatement", - "src": "5455:26:17" - }, - { - "expression": { - "id": 3421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3417, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5491:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3419, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5498:13:17", - "memberName": "creditManager", - "nodeType": "MemberAccess", - "referencedDeclaration": 14500, - "src": "5491:20:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3420, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3363, - "src": "5514:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5491:37:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3422, - "nodeType": "ExpressionStatement", - "src": "5491:37:17" - }, - { - "expression": { - "id": 3427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3423, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5538:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3425, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5545:4:17", - "memberName": "addr", - "nodeType": "MemberAccess", - "referencedDeclaration": 14494, - "src": "5538:11:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3426, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "5552:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5538:27:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3428, - "nodeType": "ExpressionStatement", - "src": "5538:27:17" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3429, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "5580:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5587:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "5580:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 3594, - "nodeType": "Block", - "src": "6966:519:17", - "statements": [ - { - "expression": { - "id": 3559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3553, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6980:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3555, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6987:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14502, - "src": "6980:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3556, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "7000:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3557, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7016:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 12251, - "src": "7000:26:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7000:28:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6980:48:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3560, - "nodeType": "ExpressionStatement", - "src": "6980:48:17" - }, - { - "expression": { - "id": 3569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 3561, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7043:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3563, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7050:10:17", - "memberName": "totalValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 14508, - "src": "7043:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - null - ], - "id": 3564, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "7042:21:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$__$", - "typeString": "tuple(uint256,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3567, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "7094:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3565, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3384, - "src": "7066:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 3566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7079:14:17", - "memberName": "calcTotalValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 11827, - "src": "7066:27:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256)" - } - }, - "id": 3568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7066:42:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "src": "7042:66:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3570, - "nodeType": "ExpressionStatement", - "src": "7042:66:17" - }, - { - "expression": { - "id": 3578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3571, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7122:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3573, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7129:12:17", - "memberName": "healthFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 14510, - "src": "7122:19:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3576, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "7204:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3574, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3384, - "src": "7144:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 3575, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7157:29:17", - "memberName": "calcCreditAccountHealthFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 11835, - "src": "7144:42:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7144:87:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7122:109:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3579, - "nodeType": "ExpressionStatement", - "src": "7122:109:17" - }, - { - "expression": { - "id": 3592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 3580, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7264:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3582, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7271:14:17", - "memberName": "borrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14524, - "src": "7264:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3583, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7303:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3584, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7310:26:17", - "memberName": "borrowedAmountPlusInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 14504, - "src": "7303:33:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3585, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7354:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3586, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7361:33:17", - "memberName": "borrowedAmountPlusInterestAndFees", - "nodeType": "MemberAccess", - "referencedDeclaration": 14506, - "src": "7354:40:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3587, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "7246:162:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3590, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "7460:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3588, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "7411:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7427:32:17", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "7411:48:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 3591, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7411:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "src": "7246:228:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3593, - "nodeType": "ExpressionStatement", - "src": "7246:228:17" - } - ] - }, - "id": 3595, - "nodeType": "IfStatement", - "src": "5576:1909:17", - "trueBody": { - "id": 3552, - "nodeType": "Block", - "src": "5590:1370:17", - "statements": [ - { - "expression": { - "id": 3438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3432, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5604:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3434, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5611:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14502, - "src": "5604:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3435, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "5624:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5638:15:17", - "memberName": "underlyingToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 13470, - "src": "5624:29:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5624:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5604:51:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3439, - "nodeType": "ExpressionStatement", - "src": "5604:51:17" - }, - { - "expression": { - "id": 3447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3440, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5669:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3442, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5676:10:17", - "memberName": "totalValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 14508, - "src": "5669:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3445, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "5717:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3443, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "5689:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5702:14:17", - "memberName": "calcTotalValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 13170, - "src": "5689:27:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5689:42:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5669:62:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3448, - "nodeType": "ExpressionStatement", - "src": "5669:62:17" - }, - { - "expression": { - "id": 3456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3449, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "5745:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3451, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "5752:12:17", - "memberName": "healthFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 14510, - "src": "5745:19:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3454, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "5827:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3452, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "5767:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5780:29:17", - "memberName": "calcCreditAccountHealthFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 13215, - "src": "5767:42:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5767:87:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5745:109:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3457, - "nodeType": "ExpressionStatement", - "src": "5745:109:17" - }, - { - "clauses": [ - { - "block": { - "id": 3474, - "nodeType": "Block", - "src": "5988:59:17", - "statements": [ - { - "expression": { - "id": 3472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3468, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6006:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3470, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6013:11:17", - "memberName": "repayAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14518, - "src": "6006:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3471, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3466, - "src": "6027:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6006:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3473, - "nodeType": "ExpressionStatement", - "src": "6006:26:17" - } - ] - }, - "errorName": "", - "id": 3475, - "nodeType": "TryCatchClause", - "parameters": { - "id": 3467, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3466, - "mutability": "mutable", - "name": "value", - "nameLocation": "5981:5:17", - "nodeType": "VariableDeclaration", - "scope": 3475, - "src": "5973:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3465, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5973:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5972:15:17" - }, - "src": "5964:83:17" - }, - { - "block": { - "id": 3476, - "nodeType": "Block", - "src": "6054:2:17", - "statements": [] - }, - "errorName": "", - "id": 3477, - "nodeType": "TryCatchClause", - "src": "6048:8:17" - } - ], - "externalCall": { - "arguments": [ - { - "id": 3462, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3365, - "src": "5935:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "66616c7365", - "id": 3463, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5945:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "arguments": [ - { - "id": 3459, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "5904:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - ], - "id": 3458, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "5889:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManager_$13579_$", - "typeString": "type(contract ICreditManager)" - } - }, - "id": 3460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5889:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5919:15:17", - "memberName": "calcRepayAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13446, - "src": "5889:45:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,bool) view external returns (uint256)" - } - }, - "id": 3464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5889:62:17", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3478, - "nodeType": "TryStatement", - "src": "5869:187:17" - }, - { - "clauses": [ - { - "block": { - "id": 3495, - "nodeType": "Block", - "src": "6188:65:17", - "statements": [ - { - "expression": { - "id": 3493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3489, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6206:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3491, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6213:17:17", - "memberName": "liquidationAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14520, - "src": "6206:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3492, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3487, - "src": "6233:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6206:32:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3494, - "nodeType": "ExpressionStatement", - "src": "6206:32:17" - } - ] - }, - "errorName": "", - "id": 3496, - "nodeType": "TryCatchClause", - "parameters": { - "id": 3488, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3487, - "mutability": "mutable", - "name": "value", - "nameLocation": "6181:5:17", - "nodeType": "VariableDeclaration", - "scope": 3496, - "src": "6173:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3486, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6173:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6172:15:17" - }, - "src": "6164:89:17" - }, - { - "block": { - "id": 3497, - "nodeType": "Block", - "src": "6260:2:17", - "statements": [] - }, - "errorName": "", - "id": 3498, - "nodeType": "TryCatchClause", - "src": "6254:8:17" - } - ], - "externalCall": { - "arguments": [ - { - "id": 3483, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3365, - "src": "6136:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "74727565", - "id": 3484, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6146:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "arguments": [ - { - "id": 3480, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "6105:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - ], - "id": 3479, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "6090:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManager_$13579_$", - "typeString": "type(contract ICreditManager)" - } - }, - "id": 3481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6090:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6120:15:17", - "memberName": "calcRepayAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13446, - "src": "6090:45:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,bool) view external returns (uint256)" - } - }, - "id": 3485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6090:61:17", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3499, - "nodeType": "TryStatement", - "src": "6070:192:17" - }, - { - "clauses": [ - { - "block": { - "id": 3528, - "nodeType": "Block", - "src": "6639:72:17", - "statements": [ - { - "expression": { - "id": 3526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3520, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6657:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3522, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6664:11:17", - "memberName": "canBeClosed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14522, - "src": "6657:18:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3525, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3523, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3514, - "src": "6678:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 3524, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6695:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6678:18:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6657:39:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3527, - "nodeType": "ExpressionStatement", - "src": "6657:39:17" - } - ] - }, - "errorName": "", - "id": 3529, - "nodeType": "TryCatchClause", - "parameters": { - "id": 3519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3510, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3529, - "src": "6502:7:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3509, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6502:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3512, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3529, - "src": "6527:7:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6527:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3514, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "6560:14:17", - "nodeType": "VariableDeclaration", - "scope": 3529, - "src": "6552:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3513, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6552:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3516, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3529, - "src": "6592:7:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3515, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6592:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3518, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3529, - "src": "6617:7:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3517, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6617:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6484:154:17" - }, - "src": "6476:235:17" - }, - { - "block": { - "id": 3530, - "nodeType": "Block", - "src": "6718:2:17", - "statements": [] - }, - "errorName": "", - "id": 3531, - "nodeType": "TryCatchClause", - "src": "6712:8:17" - } - ], - "externalCall": { - "arguments": [ - { - "id": 3504, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "6366:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 3505, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6401:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3506, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6408:10:17", - "memberName": "totalValue", - "nodeType": "MemberAccess", - "referencedDeclaration": 14508, - "src": "6401:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 3507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6440:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "arguments": [ - { - "id": 3501, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "6311:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - ], - "id": 3500, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "6296:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManager_$13579_$", - "typeString": "type(contract ICreditManager)" - } - }, - "id": 3502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6296:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6326:18:17", - "memberName": "_calcClosePayments", - "nodeType": "MemberAccess", - "referencedDeclaration": 13578, - "src": "6296:48:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address,uint256,bool) view external returns (uint256,uint256,uint256,uint256,uint256)" - } - }, - "id": 3508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6296:167:17", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256,uint256,uint256)" - } - }, - "id": 3532, - "nodeType": "TryStatement", - "src": "6276:444:17" - }, - { - "expression": { - "id": 3541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3533, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6734:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3535, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6741:14:17", - "memberName": "borrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14524, - "src": "6734:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 3537, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "6773:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3536, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "6758:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 3538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6758:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 3539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6805:14:17", - "memberName": "borrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 11029, - "src": "6758:61:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6758:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6734:87:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3542, - "nodeType": "ExpressionStatement", - "src": "6734:87:17" - }, - { - "expression": { - "id": 3550, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3543, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "6836:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3545, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6843:26:17", - "memberName": "borrowedAmountPlusInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 14504, - "src": "6836:33:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3548, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "6935:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3546, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "6872:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6902:32:17", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 13223, - "src": "6872:62:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6872:77:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6836:113:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3551, - "nodeType": "ExpressionStatement", - "src": "6836:113:17" - } - ] - } - }, - { - "assignments": [3597], - "declarations": [ - { - "constant": false, - "id": 3597, - "mutability": "mutable", - "name": "pool", - "nameLocation": "7503:4:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "7495:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3596, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7495:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3612, - "initialValue": { - "arguments": [ - { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3602, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3600, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "7532:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7539:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7532:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3603, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7531:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3607, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "7574:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7590:4:17", - "memberName": "pool", - "nodeType": "MemberAccess", - "referencedDeclaration": 12257, - "src": "7574:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7574:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "7531:65:17", - "trueExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3604, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3375, - "src": "7544:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7558:11:17", - "memberName": "poolService", - "nodeType": "MemberAccess", - "referencedDeclaration": 13476, - "src": "7544:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7544:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7510:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3598, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7510:7:17", - "typeDescriptions": {} - } - }, - "id": 3611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7510:96:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7495:111:17" - }, - { - "expression": { - "id": 3621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3613, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7616:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3615, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7623:10:17", - "memberName": "borrowRate", - "nodeType": "MemberAccess", - "referencedDeclaration": 14512, - "src": "7616:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 3617, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3597, - "src": "7649:4:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3616, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "7636:12:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 3618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7636:18:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 3619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7655:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12717, - "src": "7636:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7636:34:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7616:54:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3622, - "nodeType": "ExpressionStatement", - "src": "7616:54:17" - }, - { - "assignments": [3624], - "declarations": [ - { - "constant": false, - "id": 3624, - "mutability": "mutable", - "name": "collateralTokenCount", - "nameLocation": "7689:20:17", - "nodeType": "VariableDeclaration", - "scope": 3792, - "src": "7681:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3623, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7681:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3636, - "initialValue": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3625, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "7713:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3626, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7720:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7713:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3628, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7712:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3632, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "7785:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7801:21:17", - "memberName": "collateralTokensCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12215, - "src": "7785:37:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7785:39:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "7712:112:17", - "trueExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3629, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "7737:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7750:18:17", - "memberName": "allowedTokensCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13154, - "src": "7737:31:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7737:33:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7681:143:17" - }, - { - "expression": { - "id": 3653, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3637, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "7835:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3639, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "7842:16:17", - "memberName": "enabledTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 14532, - "src": "7835:23:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3640, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "7862:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3641, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7869:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "7862:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3643, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7861:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "id": 3650, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "7975:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3648, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "7942:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7958:16:17", - "memberName": "enabledTokensMap", - "nodeType": "MemberAccess", - "referencedDeclaration": 12181, - "src": "7942:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7942:47:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "7861:128:17", - "trueExpression": { - "arguments": [ - { - "id": 3646, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "7913:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3644, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "7886:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7899:13:17", - "memberName": "enabledTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 13231, - "src": "7886:26:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7886:41:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7835:154:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3654, - "nodeType": "ExpressionStatement", - "src": "7835:154:17" - }, - { - "expression": { - "id": 3664, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3655, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "8000:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3657, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8007:8:17", - "memberName": "balances", - "nodeType": "MemberAccess", - "referencedDeclaration": 14516, - "src": "8000:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_memory_ptr_$dyn_memory_ptr", - "typeString": "struct TokenBalance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3662, - "name": "collateralTokenCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3624, - "src": "8037:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3661, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "8018:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenBalance_$14487_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct TokenBalance memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 3659, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3658, - "name": "TokenBalance", - "nameLocations": ["8022:12:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14487, - "src": "8022:12:17" - }, - "referencedDeclaration": 14487, - "src": "8022:12:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_storage_ptr", - "typeString": "struct TokenBalance" - } - }, - "id": 3660, - "nodeType": "ArrayTypeName", - "src": "8022:14:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_storage_$dyn_storage_ptr", - "typeString": "struct TokenBalance[]" - } - } - }, - "id": 3663, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8018:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_memory_ptr_$dyn_memory_ptr", - "typeString": "struct TokenBalance memory[] memory" - } - }, - "src": "8000:58:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_memory_ptr_$dyn_memory_ptr", - "typeString": "struct TokenBalance memory[] memory" - } - }, - "id": 3665, - "nodeType": "ExpressionStatement", - "src": "8000:58:17" - }, - { - "body": { - "id": 3770, - "nodeType": "Block", - "src": "8116:1026:17", - "statements": [ - { - "id": 3769, - "nodeType": "UncheckedBlock", - "src": "8130:1002:17", - "statements": [ - { - "assignments": [3675], - "declarations": [ - { - "constant": false, - "id": 3675, - "mutability": "mutable", - "name": "balance", - "nameLocation": "8178:7:17", - "nodeType": "VariableDeclaration", - "scope": 3769, - "src": "8158:27:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance" - }, - "typeName": { - "id": 3674, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3673, - "name": "TokenBalance", - "nameLocations": ["8158:12:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14487, - "src": "8158:12:17" - }, - "referencedDeclaration": 14487, - "src": "8158:12:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_storage_ptr", - "typeString": "struct TokenBalance" - } - }, - "visibility": "internal" - } - ], - "id": 3676, - "nodeType": "VariableDeclarationStatement", - "src": "8158:27:17" - }, - { - "assignments": [3678], - "declarations": [ - { - "constant": false, - "id": 3678, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "8211:9:17", - "nodeType": "VariableDeclaration", - "scope": 3769, - "src": "8203:17:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8203:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3682, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 3679, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8223:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 3680, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "8228:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8223:6:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8203:26:17" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3683, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3372, - "src": "8251:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3684, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8258:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "8251:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 3742, - "nodeType": "Block", - "src": "8558:358:17", - "statements": [ - { - "expression": { - "id": 3718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 3710, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8581:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3712, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8589:5:17", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14480, - "src": "8581:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - null - ], - "id": 3713, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "8580:17:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$__$", - "typeString": "tuple(address,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3716, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "8633:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 3714, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3381, - "src": "8600:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8616:16:17", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 12199, - "src": "8600:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view external returns (address,uint16)" - } - }, - "id": 3717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8600:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "src": "8580:55:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3719, - "nodeType": "ExpressionStatement", - "src": "8580:55:17" - }, - { - "expression": { - "id": 3730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3720, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8657:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3722, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8665:7:17", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 14482, - "src": "8657:15:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3728, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "8732:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "expression": { - "id": 3724, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8682:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3725, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8690:5:17", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14480, - "src": "8682:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3723, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "8675:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 3726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8675:21:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 3727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8697:9:17", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "8675:31:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 3729, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8675:92:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8657:110:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3731, - "nodeType": "ExpressionStatement", - "src": "8657:110:17" - }, - { - "expression": { - "id": 3740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3732, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8789:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3734, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8797:9:17", - "memberName": "isAllowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14484, - "src": "8789:17:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 3737, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8862:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3738, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8870:5:17", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14480, - "src": "8862:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3735, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3384, - "src": "8809:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 3736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8822:14:17", - "memberName": "isTokenAllowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 11843, - "src": "8809:27:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 3739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8809:88:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8789:108:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3741, - "nodeType": "ExpressionStatement", - "src": "8789:108:17" - } - ] - }, - "id": 3743, - "nodeType": "IfStatement", - "src": "8247:669:17", - "trueBody": { - "id": 3709, - "nodeType": "Block", - "src": "8261:291:17", - "statements": [ - { - "expression": { - "id": 3697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 3686, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8284:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3688, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8292:5:17", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14480, - "src": "8284:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 3689, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8299:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3690, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8307:7:17", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 14482, - "src": "8299:15:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - null, - null - ], - "id": 3691, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "8283:36:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$__$__$", - "typeString": "tuple(address,uint256,,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3694, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "8386:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3695, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "8401:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 3692, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "8322:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8360:25:17", - "memberName": "getCreditAccountTokenById", - "nodeType": "MemberAccess", - "referencedDeclaration": 13207, - "src": "8322:63:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address,uint256) view external returns (address,uint256,uint256,uint256)" - } - }, - "id": 3696, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8322:81:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(address,uint256,uint256,uint256)" - } - }, - "src": "8283:120:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3698, - "nodeType": "ExpressionStatement", - "src": "8283:120:17" - }, - { - "expression": { - "id": 3707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3699, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8425:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3701, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8433:9:17", - "memberName": "isAllowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14484, - "src": "8425:17:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 3704, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8498:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3705, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8506:5:17", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14480, - "src": "8498:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3702, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3378, - "src": "8445:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 3703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8458:14:17", - "memberName": "isTokenAllowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 13148, - "src": "8445:27:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 3706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8445:88:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8425:108:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3708, - "nodeType": "ExpressionStatement", - "src": "8425:108:17" - } - ] - } - }, - { - "expression": { - "id": 3756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3744, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "8933:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3746, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8941:9:17", - "memberName": "isEnabled", - "nodeType": "MemberAccess", - "referencedDeclaration": 14486, - "src": "8933:17:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3747, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3678, - "src": "8953:9:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "expression": { - "id": 3748, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "8965:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3749, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8972:16:17", - "memberName": "enabledTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 14532, - "src": "8965:23:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8953:35:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 3751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8992:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8953:40:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "74727565", - "id": 3754, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9044:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "id": 3755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "8953:95:17", - "trueExpression": { - "hexValue": "66616c7365", - "id": 3753, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9016:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8933:115:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3757, - "nodeType": "ExpressionStatement", - "src": "8933:115:17" - }, - { - "expression": { - "id": 3764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 3758, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "9067:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3761, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9074:8:17", - "memberName": "balances", - "nodeType": "MemberAccess", - "referencedDeclaration": 14516, - "src": "9067:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_memory_ptr_$dyn_memory_ptr", - "typeString": "struct TokenBalance memory[] memory" - } - }, - "id": 3762, - "indexExpression": { - "id": 3760, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "9083:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9067:18:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3763, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3675, - "src": "9088:7:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "src": "9067:28:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_memory_ptr", - "typeString": "struct TokenBalance memory" - } - }, - "id": 3765, - "nodeType": "ExpressionStatement", - "src": "9067:28:17" - }, - { - "expression": { - "id": 3767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "9114:3:17", - "subExpression": { - "id": 3766, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "9116:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3768, - "nodeType": "ExpressionStatement", - "src": "9114:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3670, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3667, - "src": "8088:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3671, - "name": "collateralTokenCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3624, - "src": "8092:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8088:24:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3771, - "initializationExpression": { - "assignments": [3667], - "declarations": [ - { - "constant": false, - "id": 3667, - "mutability": "mutable", - "name": "i", - "nameLocation": "8081:1:17", - "nodeType": "VariableDeclaration", - "scope": 3771, - "src": "8073:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3666, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8073:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3669, - "initialValue": { - "hexValue": "30", - "id": 3668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8085:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "8073:13:17" - }, - "nodeType": "ForStatement", - "src": "8068:1074:17" - }, - { - "expression": { - "id": 3780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3772, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "9152:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3774, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "9159:21:17", - "memberName": "cumulativeIndexAtOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 14526, - "src": "9152:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 3776, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "9198:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3775, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "9183:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 3777, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9183:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 3778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9226:21:17", - "memberName": "cumulativeIndexAtOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11035, - "src": "9183:64:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9183:66:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9152:97:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3781, - "nodeType": "ExpressionStatement", - "src": "9152:97:17" - }, - { - "expression": { - "id": 3790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3782, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3369, - "src": "9260:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData memory" - } - }, - "id": 3784, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "9267:5:17", - "memberName": "since", - "nodeType": "MemberAccess", - "referencedDeclaration": 14528, - "src": "9260:12:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 3786, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3390, - "src": "9290:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3785, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "9275:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 3787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9275:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 3788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9305:5:17", - "memberName": "since", - "nodeType": "MemberAccess", - "referencedDeclaration": 11041, - "src": "9275:35:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3789, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9275:37:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9260:52:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3791, - "nodeType": "ExpressionStatement", - "src": "9260:52:17" - } - ] - }, - "documentation": { - "id": 3361, - "nodeType": "StructuredDocumentation", - "src": "4626:205:17", - "text": "@dev Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower\n @param _creditManager Credit manager address\n @param borrower Borrower address" - }, - "functionSelector": "0dbd616d", - "id": 3793, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountData", - "nameLocation": "4845:20:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3366, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3363, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "4874:14:17", - "nodeType": "VariableDeclaration", - "scope": 3793, - "src": "4866:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3362, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4866:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3365, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4898:8:17", - "nodeType": "VariableDeclaration", - "scope": 3793, - "src": "4890:16:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3364, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4890:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4865:42:17" - }, - "returnParameters": { - "id": 3370, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3369, - "mutability": "mutable", - "name": "result", - "nameLocation": "4978:6:17", - "nodeType": "VariableDeclaration", - "scope": 3793, - "src": "4953:31:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData" - }, - "typeName": { - "id": 3368, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3367, - "name": "CreditAccountData", - "nameLocations": ["4953:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14533, - "src": "4953:17:17" - }, - "referencedDeclaration": 14533, - "src": "4953:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_storage_ptr", - "typeString": "struct CreditAccountData" - } - }, - "visibility": "internal" - } - ], - "src": "4952:33:17" - }, - "scope": 4723, - "src": "4836:4483:17", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12414], - "body": { - "id": 3844, - "nodeType": "Block", - "src": "9507:427:17", - "statements": [ - { - "assignments": [3802], - "declarations": [ - { - "constant": false, - "id": 3802, - "mutability": "mutable", - "name": "creditManagersCount", - "nameLocation": "9525:19:17", - "nodeType": "VariableDeclaration", - "scope": 3844, - "src": "9517:27:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3801, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9517:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3806, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3803, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "9547:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9578:22:17", - "memberName": "getCreditManagersCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 3113, - "src": "9547:53:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9547:55:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9517:85:17" - }, - { - "expression": { - "id": 3814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3807, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3799, - "src": "9613:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3812, - "name": "creditManagersCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3802, - "src": "9646:19:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3811, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "9622:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct CreditManagerData memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 3809, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3808, - "name": "CreditManagerData", - "nameLocations": ["9626:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14590, - "src": "9626:17:17" - }, - "referencedDeclaration": 14590, - "src": "9626:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_storage_ptr", - "typeString": "struct CreditManagerData" - } - }, - "id": 3810, - "nodeType": "ArrayTypeName", - "src": "9626:19:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_storage_$dyn_storage_ptr", - "typeString": "struct CreditManagerData[]" - } - } - }, - "id": 3813, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9622:44:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData memory[] memory" - } - }, - "src": "9613:53:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData memory[] memory" - } - }, - "id": 3815, - "nodeType": "ExpressionStatement", - "src": "9613:53:17" - }, - { - "body": { - "id": 3842, - "nodeType": "Block", - "src": "9724:204:17", - "statements": [ - { - "assignments": [3824], - "declarations": [ - { - "constant": false, - "id": 3824, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "9746:13:17", - "nodeType": "VariableDeclaration", - "scope": 3842, - "src": "9738:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3823, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9738:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3829, - "initialValue": { - "arguments": [ - { - "id": 3827, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "9795:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 3825, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "9762:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 3826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9780:14:17", - "memberName": "creditManagers", - "nodeType": "MemberAccess", - "referencedDeclaration": 2960, - "src": "9762:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 3828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9762:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9738:59:17" - }, - { - "expression": { - "id": 3836, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 3830, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3799, - "src": "9811:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData memory[] memory" - } - }, - "id": 3832, - "indexExpression": { - "id": 3831, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "9818:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9811:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3834, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3824, - "src": "9844:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3833, - "name": "getCreditManagerData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4332, - "src": "9823:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_CreditManagerData_$14590_memory_ptr_$", - "typeString": "function (address) view returns (struct CreditManagerData memory)" - } - }, - "id": 3835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9823:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "src": "9811:47:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3837, - "nodeType": "ExpressionStatement", - "src": "9811:47:17" - }, - { - "id": 3841, - "nodeType": "UncheckedBlock", - "src": "9872:46:17", - "statements": [ - { - "expression": { - "id": 3839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "9900:3:17", - "subExpression": { - "id": 3838, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "9902:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3840, - "nodeType": "ExpressionStatement", - "src": "9900:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3820, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3817, - "src": "9697:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3821, - "name": "creditManagersCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3802, - "src": "9701:19:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9697:23:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3843, - "initializationExpression": { - "assignments": [3817], - "declarations": [ - { - "constant": false, - "id": 3817, - "mutability": "mutable", - "name": "i", - "nameLocation": "9690:1:17", - "nodeType": "VariableDeclaration", - "scope": 3843, - "src": "9682:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3816, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9682:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3819, - "initialValue": { - "hexValue": "30", - "id": 3818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9694:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "9682:13:17" - }, - "nodeType": "ForStatement", - "src": "9677:251:17" - } - ] - }, - "documentation": { - "id": 3794, - "nodeType": "StructuredDocumentation", - "src": "9325:58:17", - "text": "@dev Returns CreditManagerData for all Credit Managers" - }, - "functionSelector": "663b8fdb", - "id": 3845, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditManagersList", - "nameLocation": "9397:21:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3795, - "nodeType": "ParameterList", - "parameters": [], - "src": "9418:2:17" - }, - "returnParameters": { - "id": 3800, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3799, - "mutability": "mutable", - "name": "result", - "nameLocation": "9495:6:17", - "nodeType": "VariableDeclaration", - "scope": 3845, - "src": "9468:33:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData[]" - }, - "typeName": { - "baseType": { - "id": 3797, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3796, - "name": "CreditManagerData", - "nameLocations": ["9468:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14590, - "src": "9468:17:17" - }, - "referencedDeclaration": 14590, - "src": "9468:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_storage_ptr", - "typeString": "struct CreditManagerData" - } - }, - "id": 3798, - "nodeType": "ArrayTypeName", - "src": "9468:19:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_storage_$dyn_storage_ptr", - "typeString": "struct CreditManagerData[]" - } - }, - "visibility": "internal" - } - ], - "src": "9467:35:17" - }, - "scope": 4723, - "src": "9388:546:17", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12423], - "body": { - "id": 4331, - "nodeType": "Block", - "src": "10199:4999:17", - "statements": [ - { - "assignments": [3855, 3858, 3861, 3864, 3867, 3870], - "declarations": [ - { - "constant": false, - "id": 3855, - "mutability": "mutable", - "name": "ver", - "nameLocation": "10229:3:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10223:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3854, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "10223:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3858, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "10261:13:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10246:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - }, - "typeName": { - "id": 3857, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3856, - "name": "ICreditManager", - "nameLocations": ["10246:14:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13579, - "src": "10246:14:17" - }, - "referencedDeclaration": 13579, - "src": "10246:14:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3861, - "mutability": "mutable", - "name": "creditFilter", - "nameLocation": "10302:12:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10288:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - }, - "typeName": { - "id": 3860, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3859, - "name": "ICreditFilter", - "nameLocations": ["10288:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13277, - "src": "10288:13:17" - }, - "referencedDeclaration": 13277, - "src": "10288:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3864, - "mutability": "mutable", - "name": "creditManagerV2", - "nameLocation": "10345:15:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10328:32:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 3863, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3862, - "name": "ICreditManagerV2", - "nameLocations": ["10328:16:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "10328:16:17" - }, - "referencedDeclaration": 12355, - "src": "10328:16:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3867, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "10388:12:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10374:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - }, - "typeName": { - "id": 3866, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3865, - "name": "ICreditFacade", - "nameLocations": ["10374:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11919, - "src": "10374:13:17" - }, - "referencedDeclaration": 11919, - "src": "10374:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3870, - "mutability": "mutable", - "name": "creditConfigurator", - "nameLocation": "10434:18:17", - "nodeType": "VariableDeclaration", - "scope": 4331, - "src": "10414:38:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - }, - "typeName": { - "id": 3869, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3868, - "name": "ICreditConfigurator", - "nameLocations": ["10414:19:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11424, - "src": "10414:19:17" - }, - "referencedDeclaration": 11424, - "src": "10414:19:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "visibility": "internal" - } - ], - "id": 3874, - "initialValue": { - "arguments": [ - { - "id": 3872, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3848, - "src": "10484:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3871, - "name": "getCreditContracts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4722, - "src": "10465:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "function (address) view returns (uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "id": 3873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10465:34:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "tuple(uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10209:290:17" - }, - { - "expression": { - "id": 3879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3875, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10510:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3877, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10517:4:17", - "memberName": "addr", - "nodeType": "MemberAccess", - "referencedDeclaration": 14535, - "src": "10510:11:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3878, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3848, - "src": "10524:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10510:28:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3880, - "nodeType": "ExpressionStatement", - "src": "10510:28:17" - }, - { - "expression": { - "id": 3885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3881, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10548:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3883, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10555:7:17", - "memberName": "version", - "nodeType": "MemberAccess", - "referencedDeclaration": 14565, - "src": "10548:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3884, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "10565:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "10548:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3886, - "nodeType": "ExpressionStatement", - "src": "10548:20:17" - }, - { - "expression": { - "id": 3901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3887, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10579:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3889, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10586:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14537, - "src": "10579:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3890, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "10600:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10607:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10600:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3893, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10599:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3897, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "10670:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3898, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10686:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 12251, - "src": "10670:26:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10670:28:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3900, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "10599:99:17", - "trueExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3894, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "10624:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10638:15:17", - "memberName": "underlyingToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 13470, - "src": "10624:29:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10624:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10579:119:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3902, - "nodeType": "ExpressionStatement", - "src": "10579:119:17" - }, - { - "expression": { - "id": 3910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3903, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10708:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3905, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10715:6:17", - "memberName": "isWETH", - "nodeType": "MemberAccess", - "referencedDeclaration": 14541, - "src": "10708:13:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3906, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10724:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3907, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10731:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14537, - "src": "10724:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 3908, - "name": "WETHToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3170, - "src": "10745:9:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10724:30:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "10708:46:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3911, - "nodeType": "ExpressionStatement", - "src": "10708:46:17" - }, - { - "id": 3963, - "nodeType": "Block", - "src": "10765:433:17", - "statements": [ - { - "assignments": [3914], - "declarations": [ - { - "constant": false, - "id": 3914, - "mutability": "mutable", - "name": "pool", - "nameLocation": "10792:4:17", - "nodeType": "VariableDeclaration", - "scope": 3963, - "src": "10779:17:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - }, - "typeName": { - "id": 3913, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3912, - "name": "IPoolService", - "nameLocations": ["10779:12:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12805, - "src": "10779:12:17" - }, - "referencedDeclaration": 12805, - "src": "10779:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "visibility": "internal" - } - ], - "id": 3928, - "initialValue": { - "arguments": [ - { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3916, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "10830:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3917, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10837:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10830:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3919, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10829:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3923, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "10912:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 3924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10928:4:17", - "memberName": "pool", - "nodeType": "MemberAccess", - "referencedDeclaration": 12257, - "src": "10912:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10912:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "10829:105:17", - "trueExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3920, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "10862:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10876:11:17", - "memberName": "poolService", - "nodeType": "MemberAccess", - "referencedDeclaration": 13476, - "src": "10862:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 3922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10862:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3915, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "10799:12:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 3927, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10799:149:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10779:169:17" - }, - { - "expression": { - "id": 3936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3929, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "10962:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3931, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "10969:4:17", - "memberName": "pool", - "nodeType": "MemberAccess", - "referencedDeclaration": 14539, - "src": "10962:11:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3934, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3914, - "src": "10984:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - ], - "id": 3933, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10976:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10976:7:17", - "typeDescriptions": {} - } - }, - "id": 3935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10976:13:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10962:27:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3937, - "nodeType": "ExpressionStatement", - "src": "10962:27:17" - }, - { - "expression": { - "id": 3945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3938, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11003:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3940, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11010:9:17", - "memberName": "canBorrow", - "nodeType": "MemberAccess", - "referencedDeclaration": 14543, - "src": "11003:16:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3943, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3848, - "src": "11051:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 3941, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3914, - "src": "11022:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 3942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11027:23:17", - "memberName": "creditManagersCanBorrow", - "nodeType": "MemberAccess", - "referencedDeclaration": 12763, - "src": "11022:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view external returns (bool)" - } - }, - "id": 3944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11022:44:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "11003:63:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3946, - "nodeType": "ExpressionStatement", - "src": "11003:63:17" - }, - { - "expression": { - "id": 3953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3947, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11080:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3949, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11087:10:17", - "memberName": "borrowRate", - "nodeType": "MemberAccess", - "referencedDeclaration": 14545, - "src": "11080:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3950, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3914, - "src": "11100:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 3951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11105:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12717, - "src": "11100:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11100:20:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11080:40:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3954, - "nodeType": "ExpressionStatement", - "src": "11080:40:17" - }, - { - "expression": { - "id": 3961, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3955, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11134:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3957, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11141:18:17", - "memberName": "availableLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 14553, - "src": "11134:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3958, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3914, - "src": "11162:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 3959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11167:18:17", - "memberName": "availableLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 12705, - "src": "11162:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3960, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11162:25:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11134:53:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3962, - "nodeType": "ExpressionStatement", - "src": "11134:53:17" - } - ] - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 3966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3964, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "11212:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 3965, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11219:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11212:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 3995, - "nodeType": "Block", - "src": "11355:85:17", - "statements": [ - { - "expression": { - "id": 3993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 3984, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11370:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3986, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11377:9:17", - "memberName": "minAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14547, - "src": "11370:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3987, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11388:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3988, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11395:9:17", - "memberName": "maxAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14549, - "src": "11388:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3989, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "11369:36:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3990, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3867, - "src": "11408:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 3991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11421:6:17", - "memberName": "limits", - "nodeType": "MemberAccess", - "referencedDeclaration": 11880, - "src": "11408:19:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint128_$_t_uint128_$", - "typeString": "function () view external returns (uint128,uint128)" - } - }, - "id": 3992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11408:21:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint128_$_t_uint128_$", - "typeString": "tuple(uint128,uint128)" - } - }, - "src": "11369:60:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3994, - "nodeType": "ExpressionStatement", - "src": "11369:60:17" - } - ] - }, - "id": 3996, - "nodeType": "IfStatement", - "src": "11208:232:17", - "trueBody": { - "id": 3983, - "nodeType": "Block", - "src": "11222:127:17", - "statements": [ - { - "expression": { - "id": 3973, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3967, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11236:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3969, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11243:9:17", - "memberName": "minAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14547, - "src": "11236:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3970, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "11255:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11269:9:17", - "memberName": "minAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13452, - "src": "11255:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11255:25:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11236:44:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3974, - "nodeType": "ExpressionStatement", - "src": "11236:44:17" - }, - { - "expression": { - "id": 3981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 3975, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11294:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 3977, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11301:9:17", - "memberName": "maxAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14549, - "src": "11294:16:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3978, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "11313:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 3979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11327:9:17", - "memberName": "maxAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13458, - "src": "11313:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 3980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11313:25:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11294:44:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3982, - "nodeType": "ExpressionStatement", - "src": "11294:44:17" - } - ] - } - }, - { - "id": 4092, - "nodeType": "Block", - "src": "11449:1012:17", - "statements": [ - { - "assignments": [3998], - "declarations": [ - { - "constant": false, - "id": 3998, - "mutability": "mutable", - "name": "collateralTokenCount", - "nameLocation": "11471:20:17", - "nodeType": "VariableDeclaration", - "scope": 4092, - "src": "11463:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3997, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11463:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4010, - "initialValue": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4001, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3999, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "11495:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4000, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11502:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11495:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 4002, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "11494:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4006, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "11575:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11591:21:17", - "memberName": "collateralTokensCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12215, - "src": "11575:37:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4008, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11575:39:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11494:120:17", - "trueExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4003, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "11523:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4004, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11536:18:17", - "memberName": "allowedTokensCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13154, - "src": "11523:31:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11523:33:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11463:151:17" - }, - { - "expression": { - "id": 4019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4011, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11629:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4013, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11636:16:17", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 14556, - "src": "11629:23:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4017, - "name": "collateralTokenCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3998, - "src": "11669:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4016, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "11655:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (address[] memory)" - }, - "typeName": { - "baseType": { - "id": 4014, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11659:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4015, - "nodeType": "ArrayTypeName", - "src": "11659:9:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - } - }, - "id": 4018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11655:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "src": "11629:61:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 4020, - "nodeType": "ExpressionStatement", - "src": "11629:61:17" - }, - { - "expression": { - "id": 4029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4021, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11704:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4023, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "11711:21:17", - "memberName": "liquidationThresholds", - "nodeType": "MemberAccess", - "referencedDeclaration": 14563, - "src": "11704:28:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4027, - "name": "collateralTokenCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3998, - "src": "11749:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4026, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "11735:13:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (uint256[] memory)" - }, - "typeName": { - "baseType": { - "id": 4024, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11739:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4025, - "nodeType": "ArrayTypeName", - "src": "11739:9:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - } - }, - "id": 4028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11735:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "src": "11704:66:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 4030, - "nodeType": "ExpressionStatement", - "src": "11704:66:17" - }, - { - "id": 4091, - "nodeType": "UncheckedBlock", - "src": "11784:667:17", - "statements": [ - { - "body": { - "id": 4089, - "nodeType": "Block", - "src": "11863:574:17", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4041, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "11889:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4042, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11896:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11889:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4087, - "nodeType": "Block", - "src": "12189:230:17", - "statements": [ - { - "expression": { - "id": 4085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "baseExpression": { - "expression": { - "id": 4071, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "12245:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4074, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12252:16:17", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 14556, - "src": "12245:23:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 4075, - "indexExpression": { - "id": 4073, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "12269:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12245:26:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "baseExpression": { - "expression": { - "id": 4076, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "12301:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4077, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12308:21:17", - "memberName": "liquidationThresholds", - "nodeType": "MemberAccess", - "referencedDeclaration": 14563, - "src": "12301:28:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 4079, - "indexExpression": { - "id": 4078, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "12330:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12301:31:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4080, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "12215:143:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", - "typeString": "tuple(address,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4083, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "12394:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 4081, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "12361:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12377:16:17", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 12199, - "src": "12361:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view external returns (address,uint16)" - } - }, - "id": 4084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12361:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "src": "12215:181:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4086, - "nodeType": "ExpressionStatement", - "src": "12215:181:17" - } - ] - }, - "id": 4088, - "nodeType": "IfStatement", - "src": "11885:534:17", - "trueBody": { - "id": 4070, - "nodeType": "Block", - "src": "11899:284:17", - "statements": [ - { - "assignments": [4045], - "declarations": [ - { - "constant": false, - "id": 4045, - "mutability": "mutable", - "name": "token", - "nameLocation": "11933:5:17", - "nodeType": "VariableDeclaration", - "scope": 4070, - "src": "11925:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4044, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11925:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4050, - "initialValue": { - "arguments": [ - { - "id": 4048, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "11968:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 4046, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "11941:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11954:13:17", - "memberName": "allowedTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 13162, - "src": "11941:26:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 4049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11941:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11925:45:17" - }, - { - "expression": { - "id": 4057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 4051, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "11996:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4054, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12003:16:17", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 14556, - "src": "11996:23:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 4055, - "indexExpression": { - "id": 4053, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "12020:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "11996:26:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4056, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4045, - "src": "12025:5:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11996:34:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4058, - "nodeType": "ExpressionStatement", - "src": "11996:34:17" - }, - { - "expression": { - "id": 4068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 4059, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "12056:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4062, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12063:21:17", - "memberName": "liquidationThresholds", - "nodeType": "MemberAccess", - "referencedDeclaration": 14563, - "src": "12056:28:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 4063, - "indexExpression": { - "id": 4061, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "12085:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12056:31:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4066, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4045, - "src": "12154:5:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4064, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "12090:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12132:21:17", - "memberName": "liquidationThresholds", - "nodeType": "MemberAccess", - "referencedDeclaration": 13238, - "src": "12090:63:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 4067, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12090:70:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12056:104:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4069, - "nodeType": "ExpressionStatement", - "src": "12056:104:17" - } - ] - } - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4035, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "11832:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4036, - "name": "collateralTokenCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3998, - "src": "11836:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11832:24:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4090, - "initializationExpression": { - "assignments": [4032], - "declarations": [ - { - "constant": false, - "id": 4032, - "mutability": "mutable", - "name": "i", - "nameLocation": "11825:1:17", - "nodeType": "VariableDeclaration", - "scope": 4090, - "src": "11817:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4031, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11817:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4034, - "initialValue": { - "hexValue": "30", - "id": 4033, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11829:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "11817:13:17" - }, - "loopExpression": { - "expression": { - "id": 4039, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "11858:3:17", - "subExpression": { - "id": 4038, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4032, - "src": "11860:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4040, - "nodeType": "ExpressionStatement", - "src": "11858:3:17" - }, - "nodeType": "ForStatement", - "src": "11812:625:17" - } - ] - } - ] - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4093, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "12474:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4094, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12481:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "12474:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4206, - "nodeType": "Block", - "src": "13108:627:17", - "statements": [ - { - "assignments": [4152], - "declarations": [ - { - "constant": false, - "id": 4152, - "mutability": "mutable", - "name": "allowedContracts", - "nameLocation": "13139:16:17", - "nodeType": "VariableDeclaration", - "scope": 4206, - "src": "13122:33:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 4150, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13122:7:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4151, - "nodeType": "ArrayTypeName", - "src": "13122:9:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "id": 4156, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4153, - "name": "creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3870, - "src": "13158:18:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "id": 4154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13194:16:17", - "memberName": "allowedContracts", - "nodeType": "MemberAccess", - "referencedDeclaration": 11423, - "src": "13158:52:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$", - "typeString": "function () view external returns (address[] memory)" - } - }, - "id": 4155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13158:54:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13122:90:17" - }, - { - "assignments": [4158], - "declarations": [ - { - "constant": false, - "id": 4158, - "mutability": "mutable", - "name": "len", - "nameLocation": "13234:3:17", - "nodeType": "VariableDeclaration", - "scope": 4206, - "src": "13226:11:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4157, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13226:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4161, - "initialValue": { - "expression": { - "id": 4159, - "name": "allowedContracts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4152, - "src": "13240:16:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 4160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13257:6:17", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "13240:23:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13226:37:17" - }, - { - "expression": { - "id": 4171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4162, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "13277:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4164, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "13284:8:17", - "memberName": "adapters", - "nodeType": "MemberAccess", - "referencedDeclaration": 14560, - "src": "13277:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4169, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4158, - "src": "13317:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4168, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "13295:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct ContractAdapter memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 4166, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4165, - "name": "ContractAdapter", - "nameLocations": ["13299:15:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14492, - "src": "13299:15:17" - }, - "referencedDeclaration": 14492, - "src": "13299:15:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_storage_ptr", - "typeString": "struct ContractAdapter" - } - }, - "id": 4167, - "nodeType": "ArrayTypeName", - "src": "13299:17:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_storage_$dyn_storage_ptr", - "typeString": "struct ContractAdapter[]" - } - } - }, - "id": 4170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13295:26:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "src": "13277:44:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "id": 4172, - "nodeType": "ExpressionStatement", - "src": "13277:44:17" - }, - { - "body": { - "id": 4204, - "nodeType": "Block", - "src": "13366:359:17", - "statements": [ - { - "assignments": [4181], - "declarations": [ - { - "constant": false, - "id": 4181, - "mutability": "mutable", - "name": "allowedContract", - "nameLocation": "13392:15:17", - "nodeType": "VariableDeclaration", - "scope": 4204, - "src": "13384:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4180, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13384:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4185, - "initialValue": { - "baseExpression": { - "id": 4182, - "name": "allowedContracts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4152, - "src": "13410:16:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "id": 4184, - "indexExpression": { - "id": 4183, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4174, - "src": "13427:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13410:19:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13384:45:17" - }, - { - "expression": { - "id": 4198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 4186, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "13448:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4189, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13455:8:17", - "memberName": "adapters", - "nodeType": "MemberAccess", - "referencedDeclaration": 14560, - "src": "13448:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "id": 4190, - "indexExpression": { - "id": 4188, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4174, - "src": "13464:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "13448:18:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4192, - "name": "allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4181, - "src": "13524:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4195, - "name": "allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4181, - "src": "13604:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4193, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "13570:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13586:17:17", - "memberName": "contractToAdapter", - "nodeType": "MemberAccess", - "referencedDeclaration": 12245, - "src": "13570:33:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 4196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13570:50:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4191, - "name": "ContractAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14492, - "src": "13469:15:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_ContractAdapter_$14492_storage_ptr_$", - "typeString": "type(struct ContractAdapter storage pointer)" - } - }, - "id": 4197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "13507:15:17", - "13561:7:17" - ], - "names": ["allowedContract", "adapter"], - "nodeType": "FunctionCall", - "src": "13469:170:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "src": "13448:191:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "id": 4199, - "nodeType": "ExpressionStatement", - "src": "13448:191:17" - }, - { - "id": 4203, - "nodeType": "UncheckedBlock", - "src": "13657:54:17", - "statements": [ - { - "expression": { - "id": 4201, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "13689:3:17", - "subExpression": { - "id": 4200, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4174, - "src": "13691:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4202, - "nodeType": "ExpressionStatement", - "src": "13689:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4177, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4174, - "src": "13355:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4178, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4158, - "src": "13359:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13355:7:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4205, - "initializationExpression": { - "assignments": [4174], - "declarations": [ - { - "constant": false, - "id": 4174, - "mutability": "mutable", - "name": "i", - "nameLocation": "13348:1:17", - "nodeType": "VariableDeclaration", - "scope": 4205, - "src": "13340:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4173, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13340:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4176, - "initialValue": { - "hexValue": "30", - "id": 4175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13352:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "13340:13:17" - }, - "nodeType": "ForStatement", - "src": "13335:390:17" - } - ] - }, - "id": 4207, - "nodeType": "IfStatement", - "src": "12470:1265:17", - "trueBody": { - "id": 4147, - "nodeType": "Block", - "src": "12484:618:17", - "statements": [ - { - "assignments": [4097], - "declarations": [ - { - "constant": false, - "id": 4097, - "mutability": "mutable", - "name": "allowedContractsCount", - "nameLocation": "12506:21:17", - "nodeType": "VariableDeclaration", - "scope": 4147, - "src": "12498:29:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4096, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12498:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4101, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4098, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "12530:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12560:21:17", - "memberName": "allowedContractsCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 13126, - "src": "12530:51:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12530:53:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12498:85:17" - }, - { - "expression": { - "id": 4111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4102, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "12598:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4104, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "12605:8:17", - "memberName": "adapters", - "nodeType": "MemberAccess", - "referencedDeclaration": 14560, - "src": "12598:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4109, - "name": "allowedContractsCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4097, - "src": "12638:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4108, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "12616:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct ContractAdapter memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 4106, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4105, - "name": "ContractAdapter", - "nameLocations": ["12620:15:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14492, - "src": "12620:15:17" - }, - "referencedDeclaration": 14492, - "src": "12620:15:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_storage_ptr", - "typeString": "struct ContractAdapter" - } - }, - "id": 4107, - "nodeType": "ArrayTypeName", - "src": "12620:17:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_storage_$dyn_storage_ptr", - "typeString": "struct ContractAdapter[]" - } - } - }, - "id": 4110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12616:44:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "src": "12598:62:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "id": 4112, - "nodeType": "ExpressionStatement", - "src": "12598:62:17" - }, - { - "body": { - "id": 4145, - "nodeType": "Block", - "src": "12723:369:17", - "statements": [ - { - "assignments": [4121], - "declarations": [ - { - "constant": false, - "id": 4121, - "mutability": "mutable", - "name": "allowedContract", - "nameLocation": "12749:15:17", - "nodeType": "VariableDeclaration", - "scope": 4145, - "src": "12741:23:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4120, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12741:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4126, - "initialValue": { - "arguments": [ - { - "id": 4124, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4114, - "src": "12797:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 4122, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "12767:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12780:16:17", - "memberName": "allowedContracts", - "nodeType": "MemberAccess", - "referencedDeclaration": 13134, - "src": "12767:29:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 4125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12767:32:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12741:58:17" - }, - { - "expression": { - "id": 4139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 4127, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "12818:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4130, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12825:8:17", - "memberName": "adapters", - "nodeType": "MemberAccess", - "referencedDeclaration": 14560, - "src": "12818:15:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_memory_ptr_$dyn_memory_ptr", - "typeString": "struct ContractAdapter memory[] memory" - } - }, - "id": 4131, - "indexExpression": { - "id": 4129, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4114, - "src": "12834:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12818:18:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4133, - "name": "allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4121, - "src": "12894:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 4136, - "name": "allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4121, - "src": "12971:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4134, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3861, - "src": "12940:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12953:17:17", - "memberName": "contractToAdapter", - "nodeType": "MemberAccess", - "referencedDeclaration": 13185, - "src": "12940:30:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 4137, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12940:47:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4132, - "name": "ContractAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14492, - "src": "12839:15:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_ContractAdapter_$14492_storage_ptr_$", - "typeString": "type(struct ContractAdapter storage pointer)" - } - }, - "id": 4138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "12877:15:17", - "12931:7:17" - ], - "names": ["allowedContract", "adapter"], - "nodeType": "FunctionCall", - "src": "12839:167:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "src": "12818:188:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_memory_ptr", - "typeString": "struct ContractAdapter memory" - } - }, - "id": 4140, - "nodeType": "ExpressionStatement", - "src": "12818:188:17" - }, - { - "id": 4144, - "nodeType": "UncheckedBlock", - "src": "13024:54:17", - "statements": [ - { - "expression": { - "id": 4142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "13056:3:17", - "subExpression": { - "id": 4141, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4114, - "src": "13058:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4143, - "nodeType": "ExpressionStatement", - "src": "13056:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4117, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4114, - "src": "12694:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4118, - "name": "allowedContractsCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4097, - "src": "12698:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12694:25:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4146, - "initializationExpression": { - "assignments": [4114], - "declarations": [ - { - "constant": false, - "id": 4114, - "mutability": "mutable", - "name": "i", - "nameLocation": "12687:1:17", - "nodeType": "VariableDeclaration", - "scope": 4146, - "src": "12679:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4113, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12679:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4116, - "initialValue": { - "hexValue": "30", - "id": 4115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12691:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "12679:13:17" - }, - "nodeType": "ForStatement", - "src": "12674:418:17" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4208, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3855, - "src": "13749:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13756:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "13749:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4329, - "nodeType": "Block", - "src": "14200:992:17", - "statements": [ - { - "expression": { - "id": 4268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4261, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14255:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4263, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14262:12:17", - "memberName": "creditFacade", - "nodeType": "MemberAccess", - "referencedDeclaration": 14567, - "src": "14255:19:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4266, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3867, - "src": "14285:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - ], - "id": 4265, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14277:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4264, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14277:7:17", - "typeDescriptions": {} - } - }, - "id": 4267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14277:21:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14255:43:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4269, - "nodeType": "ExpressionStatement", - "src": "14255:43:17" - }, - { - "expression": { - "id": 4276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4270, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14312:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4272, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14319:18:17", - "memberName": "creditConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 14569, - "src": "14312:25:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4273, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "14340:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14356:18:17", - "memberName": "creditConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 12277, - "src": "14340:34:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4275, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14340:36:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14312:64:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4277, - "nodeType": "ExpressionStatement", - "src": "14312:64:17" - }, - { - "expression": { - "id": 4284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4278, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14390:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4280, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14397:8:17", - "memberName": "degenNFT", - "nodeType": "MemberAccess", - "referencedDeclaration": 14573, - "src": "14390:15:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4281, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3867, - "src": "14408:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 4282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14421:8:17", - "memberName": "degenNFT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11900, - "src": "14408:21:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14408:23:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14390:41:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4285, - "nodeType": "ExpressionStatement", - "src": "14390:41:17" - }, - { - "expression": { - "id": 4293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - null, - { - "expression": { - "id": 4286, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14448:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4288, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14455:23:17", - "memberName": "isIncreaseDebtForbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 14575, - "src": "14448:30:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - null, - null - ], - "id": 4289, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "14445:38:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$_t_bool_$__$__$", - "typeString": "tuple(,bool,,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4290, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3867, - "src": "14486:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 4291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14499:6:17", - "memberName": "params", - "nodeType": "MemberAccess", - "referencedDeclaration": 11872, - "src": "14486:19:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint128_$_t_bool_$_t_uint40_$_t_uint16_$", - "typeString": "function () view external returns (uint128,bool,uint40,uint16)" - } - }, - "id": 4292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14486:21:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint128_$_t_bool_$_t_uint40_$_t_uint16_$", - "typeString": "tuple(uint128,bool,uint40,uint16)" - } - }, - "src": "14445:62:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4294, - "nodeType": "ExpressionStatement", - "src": "14445:62:17" - }, - { - "expression": { - "id": 4301, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4295, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14570:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4297, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14577:18:17", - "memberName": "forbiddenTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 14577, - "src": "14570:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4298, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "14598:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14614:18:17", - "memberName": "forbiddenTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 12229, - "src": "14598:34:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14598:36:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "14570:64:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4302, - "nodeType": "ExpressionStatement", - "src": "14570:64:17" - }, - { - "expression": { - "id": 4309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4303, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14702:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4305, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14709:22:17", - "memberName": "maxEnabledTokensLength", - "nodeType": "MemberAccess", - "referencedDeclaration": 14579, - "src": "14702:29:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4306, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "14734:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14767:28:17", - "memberName": "maxAllowedEnabledTokenLength", - "nodeType": "MemberAccess", - "referencedDeclaration": 12297, - "src": "14734:61:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 4308, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14734:63:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "14702:95:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 4310, - "nodeType": "ExpressionStatement", - "src": "14702:95:17" - }, - { - "id": 4328, - "nodeType": "Block", - "src": "14870:312:17", - "statements": [ - { - "expression": { - "id": 4326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "expression": { - "id": 4311, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14910:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4313, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14917:11:17", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 14581, - "src": "14910:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - { - "expression": { - "id": 4314, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14950:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4315, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14957:14:17", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 14583, - "src": "14950:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - { - "expression": { - "id": 4316, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14993:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4317, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15000:19:17", - "memberName": "liquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14585, - "src": "14993:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - { - "expression": { - "id": 4318, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "15041:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4319, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15048:21:17", - "memberName": "feeLiquidationExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 14587, - "src": "15041:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - { - "expression": { - "id": 4320, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "15091:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4321, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15098:26:17", - "memberName": "liquidationDiscountExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 14589, - "src": "15091:33:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "id": 4322, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "14888:254:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$", - "typeString": "tuple(uint16,uint16,uint16,uint16,uint16)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4323, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3864, - "src": "15145:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15161:4:17", - "memberName": "fees", - "nodeType": "MemberAccess", - "referencedDeclaration": 12319, - "src": "15145:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$", - "typeString": "function () view external returns (uint16,uint16,uint16,uint16,uint16)" - } - }, - "id": 4325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15145:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$_t_uint16_$", - "typeString": "tuple(uint16,uint16,uint16,uint16,uint16)" - } - }, - "src": "14888:279:17", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4327, - "nodeType": "ExpressionStatement", - "src": "14888:279:17" - } - ] - } - ] - }, - "id": 4330, - "nodeType": "IfStatement", - "src": "13745:1447:17", - "trueBody": { - "id": 4260, - "nodeType": "Block", - "src": "13759:435:17", - "statements": [ - { - "expression": { - "id": 4219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4211, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "13814:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4213, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "13821:17:17", - "memberName": "maxLeverageFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 14551, - "src": "13814:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 4215, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "13856:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - ], - "id": 4214, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "13841:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManager_$13579_$", - "typeString": "type(contract ICreditManager)" - } - }, - "id": 4216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13841:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13888:17:17", - "memberName": "maxLeverageFactor", - "nodeType": "MemberAccess", - "referencedDeclaration": 13464, - "src": "13841:64:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4218, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13841:66:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13814:93:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4220, - "nodeType": "ExpressionStatement", - "src": "13814:93:17" - }, - { - "expression": { - "id": 4225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4221, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "13921:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4223, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "13928:22:17", - "memberName": "maxEnabledTokensLength", - "nodeType": "MemberAccess", - "referencedDeclaration": 14579, - "src": "13921:29:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "323535", - "id": 4224, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13953:3:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_255_by_1", - "typeString": "int_const 255" - }, - "value": "255" - }, - "src": "13921:35:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 4226, - "nodeType": "ExpressionStatement", - "src": "13921:35:17" - }, - { - "expression": { - "id": 4236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4227, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "13970:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4229, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "13977:11:17", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 14581, - "src": "13970:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4232, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "13998:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14012:11:17", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 13539, - "src": "13998:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13998:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13991:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - }, - "typeName": { - "id": 4230, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "13991:6:17", - "typeDescriptions": {} - } - }, - "id": 4235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13991:35:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "13970:56:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 4237, - "nodeType": "ExpressionStatement", - "src": "13970:56:17" - }, - { - "expression": { - "id": 4247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4238, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14040:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4240, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14047:14:17", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 14583, - "src": "14040:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4243, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "14071:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14085:14:17", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 13544, - "src": "14071:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14071:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4242, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14064:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - }, - "typeName": { - "id": 4241, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "14064:6:17", - "typeDescriptions": {} - } - }, - "id": 4246, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14064:38:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "14040:62:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 4248, - "nodeType": "ExpressionStatement", - "src": "14040:62:17" - }, - { - "expression": { - "id": 4258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4249, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3852, - "src": "14116:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData memory" - } - }, - "id": 4251, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "14123:19:17", - "memberName": "liquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 14585, - "src": "14116:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4254, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3858, - "src": "14152:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14166:14:17", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 13544, - "src": "14152:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4256, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14152:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4253, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14145:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - }, - "typeName": { - "id": 4252, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "14145:6:17", - "typeDescriptions": {} - } - }, - "id": 4257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14145:38:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "14116:67:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 4259, - "nodeType": "ExpressionStatement", - "src": "14116:67:17" - } - ] - } - } - ] - }, - "documentation": { - "id": 3846, - "nodeType": "StructuredDocumentation", - "src": "9940:118:17", - "text": "@dev Returns CreditManagerData for a particular _creditManager\n @param _creditManager CreditManager address" - }, - "functionSelector": "ae093f3f", - "id": 4332, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditManagerData", - "nameLocation": "10072:20:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3848, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "10101:14:17", - "nodeType": "VariableDeclaration", - "scope": 4332, - "src": "10093:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3847, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10093:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10092:24:17" - }, - "returnParameters": { - "id": 3853, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3852, - "mutability": "mutable", - "name": "result", - "nameLocation": "10187:6:17", - "nodeType": "VariableDeclaration", - "scope": 4332, - "src": "10162:31:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData" - }, - "typeName": { - "id": 3851, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3850, - "name": "CreditManagerData", - "nameLocations": ["10162:17:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14590, - "src": "10162:17:17" - }, - "referencedDeclaration": 14590, - "src": "10162:17:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_storage_ptr", - "typeString": "struct CreditManagerData" - } - }, - "visibility": "internal" - } - ], - "src": "10161:33:17" - }, - "scope": 4723, - "src": "10063:5135:17", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12432], - "body": { - "id": 4524, - "nodeType": "Block", - "src": "15437:1333:17", - "statements": [ - { - "assignments": [4346], - "declarations": [ - { - "constant": false, - "id": 4346, - "mutability": "mutable", - "name": "pool", - "nameLocation": "15460:4:17", - "nodeType": "VariableDeclaration", - "scope": 4524, - "src": "15447:17:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - }, - "typeName": { - "id": 4345, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4344, - "name": "IPoolService", - "nameLocations": ["15447:12:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12805, - "src": "15447:12:17" - }, - "referencedDeclaration": 12805, - "src": "15447:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "visibility": "internal" - } - ], - "id": 4350, - "initialValue": { - "arguments": [ - { - "id": 4348, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4335, - "src": "15480:5:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4347, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "15467:12:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 4349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15467:19:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15447:39:17" - }, - { - "expression": { - "id": 4355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4351, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15497:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4353, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15504:4:17", - "memberName": "addr", - "nodeType": "MemberAccess", - "referencedDeclaration": 14592, - "src": "15497:11:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4354, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4335, - "src": "15511:5:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "15497:19:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4356, - "nodeType": "ExpressionStatement", - "src": "15497:19:17" - }, - { - "expression": { - "id": 4363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4357, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15526:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4359, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15533:17:17", - "memberName": "expectedLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 14604, - "src": "15526:24:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4360, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15553:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4361, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15558:17:17", - "memberName": "expectedLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 12693, - "src": "15553:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15553:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15526:51:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4364, - "nodeType": "ExpressionStatement", - "src": "15526:51:17" - }, - { - "expression": { - "id": 4371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4365, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15587:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4367, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15594:22:17", - "memberName": "expectedLiquidityLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 14606, - "src": "15587:29:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4368, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15619:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15624:22:17", - "memberName": "expectedLiquidityLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 12699, - "src": "15619:27:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4370, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15619:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15587:61:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4372, - "nodeType": "ExpressionStatement", - "src": "15587:61:17" - }, - { - "expression": { - "id": 4379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4373, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15658:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4375, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15665:18:17", - "memberName": "availableLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 14602, - "src": "15658:25:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4376, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15686:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15691:18:17", - "memberName": "availableLiquidity", - "nodeType": "MemberAccess", - "referencedDeclaration": 12705, - "src": "15686:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15686:25:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15658:53:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4380, - "nodeType": "ExpressionStatement", - "src": "15658:53:17" - }, - { - "expression": { - "id": 4387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4381, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15721:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4383, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15728:13:17", - "memberName": "totalBorrowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14608, - "src": "15721:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4384, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15744:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15749:13:17", - "memberName": "totalBorrowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 12723, - "src": "15744:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4386, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15744:20:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15721:43:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4388, - "nodeType": "ExpressionStatement", - "src": "15721:43:17" - }, - { - "expression": { - "id": 4395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4389, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15774:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4391, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15781:14:17", - "memberName": "dieselRate_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14614, - "src": "15774:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4392, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15798:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15803:17:17", - "memberName": "getDieselRate_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12729, - "src": "15798:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15798:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15774:48:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4396, - "nodeType": "ExpressionStatement", - "src": "15774:48:17" - }, - { - "expression": { - "id": 4403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4397, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15832:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4399, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15839:21:17", - "memberName": "linearCumulativeIndex", - "nodeType": "MemberAccess", - "referencedDeclaration": 14600, - "src": "15832:28:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4400, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15863:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15868:24:17", - "memberName": "calcLinearCumulative_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12711, - "src": "15863:29:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15863:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15832:62:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4404, - "nodeType": "ExpressionStatement", - "src": "15832:62:17" - }, - { - "expression": { - "id": 4411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4405, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15904:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4407, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15911:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14612, - "src": "15904:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4408, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15927:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15932:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12717, - "src": "15927:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15927:20:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15904:43:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4412, - "nodeType": "ExpressionStatement", - "src": "15904:43:17" - }, - { - "expression": { - "id": 4419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4413, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "15957:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4415, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "15964:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14596, - "src": "15957:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4416, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "15977:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15982:15:17", - "memberName": "underlyingToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12735, - "src": "15977:20:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15977:22:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "15957:42:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4420, - "nodeType": "ExpressionStatement", - "src": "15957:42:17" - }, - { - "expression": { - "id": 4427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4421, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16009:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4423, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16016:11:17", - "memberName": "dieselToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 14598, - "src": "16009:18:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4424, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16030:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16035:11:17", - "memberName": "dieselToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12741, - "src": "16030:16:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16030:18:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "16009:39:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4428, - "nodeType": "ExpressionStatement", - "src": "16009:39:17" - }, - { - "expression": { - "id": 4435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4429, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16058:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4431, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16065:14:17", - "memberName": "dieselRate_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14614, - "src": "16058:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4432, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16082:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16087:17:17", - "memberName": "getDieselRate_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12729, - "src": "16082:22:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16082:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16058:48:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4436, - "nodeType": "ExpressionStatement", - "src": "16058:48:17" - }, - { - "expression": { - "id": 4443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4437, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16116:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4439, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16123:11:17", - "memberName": "withdrawFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 14616, - "src": "16116:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4440, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16137:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4441, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16142:11:17", - "memberName": "withdrawFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 12785, - "src": "16137:16:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16137:18:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16116:39:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4444, - "nodeType": "ExpressionStatement", - "src": "16116:39:17" - }, - { - "expression": { - "id": 4452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4445, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16165:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4447, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16172:6:17", - "memberName": "isWETH", - "nodeType": "MemberAccess", - "referencedDeclaration": 14594, - "src": "16165:13:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4448, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16181:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4449, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16188:10:17", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 14596, - "src": "16181:17:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 4450, - "name": "WETHToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3170, - "src": "16202:9:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "16181:30:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16165:46:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4453, - "nodeType": "ExpressionStatement", - "src": "16165:46:17" - }, - { - "expression": { - "id": 4460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4454, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16221:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4456, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16228:11:17", - "memberName": "timestampLU", - "nodeType": "MemberAccess", - "referencedDeclaration": 14620, - "src": "16221:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4457, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16242:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16247:12:17", - "memberName": "_timestampLU", - "nodeType": "MemberAccess", - "referencedDeclaration": 12791, - "src": "16242:17:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16242:19:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16221:40:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4461, - "nodeType": "ExpressionStatement", - "src": "16221:40:17" - }, - { - "expression": { - "id": 4468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4462, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16271:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4464, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16278:19:17", - "memberName": "cumulativeIndex_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14618, - "src": "16271:26:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4465, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16300:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16305:20:17", - "memberName": "_cumulativeIndex_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12797, - "src": "16300:25:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16300:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16271:56:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4469, - "nodeType": "ExpressionStatement", - "src": "16271:56:17" - }, - { - "assignments": [4471], - "declarations": [ - { - "constant": false, - "id": 4471, - "mutability": "mutable", - "name": "dieselSupply", - "nameLocation": "16346:12:17", - "nodeType": "VariableDeclaration", - "scope": 4524, - "src": "16338:20:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16338:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4478, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "expression": { - "id": 4473, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16368:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4474, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16375:11:17", - "memberName": "dieselToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 14598, - "src": "16368:18:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4472, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "16361:6:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 4475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16361:26:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 4476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16388:11:17", - "memberName": "totalSupply", - "nodeType": "MemberAccess", - "referencedDeclaration": 17854, - "src": "16361:38:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16361:40:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16338:63:17" - }, - { - "assignments": [4480], - "declarations": [ - { - "constant": false, - "id": 4480, - "mutability": "mutable", - "name": "totalLP", - "nameLocation": "16419:7:17", - "nodeType": "VariableDeclaration", - "scope": 4524, - "src": "16411:15:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4479, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16411:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4485, - "initialValue": { - "arguments": [ - { - "id": 4483, - "name": "dieselSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4471, - "src": "16445:12:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 4481, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16429:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16434:10:17", - "memberName": "fromDiesel", - "nodeType": "MemberAccess", - "referencedDeclaration": 12779, - "src": "16429:15:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) view external returns (uint256)" - } - }, - "id": 4484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16429:29:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16411:47:17" - }, - { - "expression": { - "id": 4509, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4486, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16468:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4488, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16475:14:17", - "memberName": "depositAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14610, - "src": "16468:21:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4489, - "name": "totalLP", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4480, - "src": "16492:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 4490, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16503:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "16492:12:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4501, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "16628:17:17", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "expression": { - "id": 4502, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16648:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4503, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16655:11:17", - "memberName": "withdrawFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 14616, - "src": "16648:18:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16628:38:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4494, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16555:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4495, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16562:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14612, - "src": "16555:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 4496, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16578:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4497, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16585:13:17", - "memberName": "totalBorrowed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14608, - "src": "16578:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16555:43:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4499, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16554:45:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16600:10:17", - "memberName": "percentMul", - "nodeType": "MemberAccess", - "referencedDeclaration": 14435, - "src": "16554:56:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 4505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16554:126:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 4506, - "name": "totalLP", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4480, - "src": "16683:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16554:136:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "16492:198:17", - "trueExpression": { - "expression": { - "id": 4492, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16519:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4493, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16526:13:17", - "memberName": "borrowAPY_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 14612, - "src": "16519:20:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16468:222:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4510, - "nodeType": "ExpressionStatement", - "src": "16468:222:17" - }, - { - "expression": { - "id": 4520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 4511, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16701:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4513, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16708:7:17", - "memberName": "version", - "nodeType": "MemberAccess", - "referencedDeclaration": 14622, - "src": "16701:14:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4516, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4346, - "src": "16724:4:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 4517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16729:7:17", - "memberName": "version", - "nodeType": "MemberAccess", - "referencedDeclaration": 12962, - "src": "16724:12:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16724:14:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4515, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "16718:5:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 4514, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "16718:5:17", - "typeDescriptions": {} - } - }, - "id": 4519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16718:21:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "16701:38:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 4521, - "nodeType": "ExpressionStatement", - "src": "16701:38:17" - }, - { - "expression": { - "id": 4522, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4342, - "src": "16757:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "functionReturnParameters": 4343, - "id": 4523, - "nodeType": "Return", - "src": "16750:13:17" - } - ] - }, - "documentation": { - "id": 4333, - "nodeType": "StructuredDocumentation", - "src": "15204:81:17", - "text": "@dev Returns PoolData for a particular pool\n @param _pool Pool address" - }, - "functionSelector": "13d21cdf", - "id": 4525, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 4338, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4335, - "src": "15385:5:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 4339, - "kind": "modifierInvocation", - "modifierName": { - "id": 4337, - "name": "targetIsRegisteredPool", - "nameLocations": ["15362:22:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3189, - "src": "15362:22:17" - }, - "nodeType": "ModifierInvocation", - "src": "15362:29:17" - } - ], - "name": "getPoolData", - "nameLocation": "15299:11:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4336, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4335, - "mutability": "mutable", - "name": "_pool", - "nameLocation": "15319:5:17", - "nodeType": "VariableDeclaration", - "scope": 4525, - "src": "15311:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4334, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15311:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15310:15:17" - }, - "returnParameters": { - "id": 4343, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4342, - "mutability": "mutable", - "name": "result", - "nameLocation": "15425:6:17", - "nodeType": "VariableDeclaration", - "scope": 4525, - "src": "15409:22:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData" - }, - "typeName": { - "id": 4341, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4340, - "name": "PoolData", - "nameLocations": ["15409:8:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14623, - "src": "15409:8:17" - }, - "referencedDeclaration": 14623, - "src": "15409:8:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_storage_ptr", - "typeString": "struct PoolData" - } - }, - "visibility": "internal" - } - ], - "src": "15408:24:17" - }, - "scope": 4723, - "src": "15290:1480:17", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12440], - "body": { - "id": 4576, - "nodeType": "Block", - "src": "16904:336:17", - "statements": [ - { - "assignments": [4534], - "declarations": [ - { - "constant": false, - "id": 4534, - "mutability": "mutable", - "name": "poolsLength", - "nameLocation": "16922:11:17", - "nodeType": "VariableDeclaration", - "scope": 4576, - "src": "16914:19:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4533, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16914:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4538, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4535, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "16936:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 4536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16954:13:17", - "memberName": "getPoolsCount", - "nodeType": "MemberAccess", - "referencedDeclaration": 3046, - "src": "16936:31:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16936:33:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16914:55:17" - }, - { - "expression": { - "id": 4546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4539, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4531, - "src": "16980:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4544, - "name": "poolsLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4534, - "src": "17004:11:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4543, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "16989:14:17", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct PoolData memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 4541, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4540, - "name": "PoolData", - "nameLocations": ["16993:8:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14623, - "src": "16993:8:17" - }, - "referencedDeclaration": 14623, - "src": "16993:8:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_storage_ptr", - "typeString": "struct PoolData" - } - }, - "id": 4542, - "nodeType": "ArrayTypeName", - "src": "16993:10:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_storage_$dyn_storage_ptr", - "typeString": "struct PoolData[]" - } - } - }, - "id": 4545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16989:27:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData memory[] memory" - } - }, - "src": "16980:36:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData memory[] memory" - } - }, - "id": 4547, - "nodeType": "ExpressionStatement", - "src": "16980:36:17" - }, - { - "body": { - "id": 4574, - "nodeType": "Block", - "src": "17066:168:17", - "statements": [ - { - "assignments": [4556], - "declarations": [ - { - "constant": false, - "id": 4556, - "mutability": "mutable", - "name": "pool", - "nameLocation": "17088:4:17", - "nodeType": "VariableDeclaration", - "scope": 4574, - "src": "17080:12:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17080:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4561, - "initialValue": { - "arguments": [ - { - "id": 4559, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4549, - "src": "17119:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 4557, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3167, - "src": "17095:17:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "id": 4558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17113:5:17", - "memberName": "pools", - "nodeType": "MemberAccess", - "referencedDeclaration": 2949, - "src": "17095:23:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256) view external returns (address)" - } - }, - "id": 4560, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17095:26:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17080:41:17" - }, - { - "expression": { - "id": 4568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 4562, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4531, - "src": "17135:6:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData memory[] memory" - } - }, - "id": 4564, - "indexExpression": { - "id": 4563, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4549, - "src": "17142:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "17135:9:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4566, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4556, - "src": "17159:4:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4565, - "name": "getPoolData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4525, - "src": "17147:11:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_struct$_PoolData_$14623_memory_ptr_$", - "typeString": "function (address) view returns (struct PoolData memory)" - } - }, - "id": 4567, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17147:17:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "src": "17135:29:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData memory" - } - }, - "id": 4569, - "nodeType": "ExpressionStatement", - "src": "17135:29:17" - }, - { - "id": 4573, - "nodeType": "UncheckedBlock", - "src": "17178:46:17", - "statements": [ - { - "expression": { - "id": 4571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "17206:3:17", - "subExpression": { - "id": 4570, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4549, - "src": "17208:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4572, - "nodeType": "ExpressionStatement", - "src": "17206:3:17" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4554, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4552, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4549, - "src": "17047:1:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4553, - "name": "poolsLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4534, - "src": "17051:11:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17047:15:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4575, - "initializationExpression": { - "assignments": [4549], - "declarations": [ - { - "constant": false, - "id": 4549, - "mutability": "mutable", - "name": "i", - "nameLocation": "17040:1:17", - "nodeType": "VariableDeclaration", - "scope": 4575, - "src": "17032:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4548, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17032:7:17", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4551, - "initialValue": { - "hexValue": "30", - "id": 4550, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17044:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "17032:13:17" - }, - "nodeType": "ForStatement", - "src": "17027:207:17" - } - ] - }, - "documentation": { - "id": 4526, - "nodeType": "StructuredDocumentation", - "src": "16776:50:17", - "text": "@dev Returns PoolData for all registered pools" - }, - "functionSelector": "1bcd8fc0", - "id": 4577, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPoolsList", - "nameLocation": "16840:12:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4527, - "nodeType": "ParameterList", - "parameters": [], - "src": "16852:2:17" - }, - "returnParameters": { - "id": 4532, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4531, - "mutability": "mutable", - "name": "result", - "nameLocation": "16896:6:17", - "nodeType": "VariableDeclaration", - "scope": 4577, - "src": "16878:24:17", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData[]" - }, - "typeName": { - "baseType": { - "id": 4529, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4528, - "name": "PoolData", - "nameLocations": ["16878:8:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14623, - "src": "16878:8:17" - }, - "referencedDeclaration": 14623, - "src": "16878:8:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_storage_ptr", - "typeString": "struct PoolData" - } - }, - "id": 4530, - "nodeType": "ArrayTypeName", - "src": "16878:10:17", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_storage_$dyn_storage_ptr", - "typeString": "struct PoolData[]" - } - }, - "visibility": "internal" - } - ], - "src": "16877:26:17" - }, - "scope": 4723, - "src": "16831:409:17", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12450], - "body": { - "id": 4618, - "nodeType": "Block", - "src": "17531:363:17", - "statements": [ - { - "assignments": [4591, null, 4594, 4597, null, null], - "declarations": [ - { - "constant": false, - "id": 4591, - "mutability": "mutable", - "name": "ver", - "nameLocation": "17561:3:17", - "nodeType": "VariableDeclaration", - "scope": 4618, - "src": "17555:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 4590, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "17555:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - null, - { - "constant": false, - "id": 4594, - "mutability": "mutable", - "name": "creditFilter", - "nameLocation": "17606:12:17", - "nodeType": "VariableDeclaration", - "scope": 4618, - "src": "17592:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - }, - "typeName": { - "id": 4593, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4592, - "name": "ICreditFilter", - "nameLocations": ["17592:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13277, - "src": "17592:13:17" - }, - "referencedDeclaration": 13277, - "src": "17592:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4597, - "mutability": "mutable", - "name": "creditManagerV2", - "nameLocation": "17649:15:17", - "nodeType": "VariableDeclaration", - "scope": 4618, - "src": "17632:32:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 4596, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4595, - "name": "ICreditManagerV2", - "nameLocations": ["17632:16:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "17632:16:17" - }, - "referencedDeclaration": 12355, - "src": "17632:16:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "internal" - }, - null, - null - ], - "id": 4601, - "initialValue": { - "arguments": [ - { - "id": 4599, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4580, - "src": "17712:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4598, - "name": "getCreditContracts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4722, - "src": "17693:18:17", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "function (address) view returns (uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "id": 4600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17693:34:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint8_$_t_contract$_ICreditManager_$13579_$_t_contract$_ICreditFilter_$13277_$_t_contract$_ICreditManagerV2_$12355_$_t_contract$_ICreditFacade_$11919_$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "tuple(uint8,contract ICreditManager,contract ICreditFilter,contract ICreditManagerV2,contract ICreditFacade,contract ICreditConfigurator)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17541:186:17" - }, - { - "expression": { - "id": 4616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4602, - "name": "adapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4588, - "src": "17738:7:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4603, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4591, - "src": "17749:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4604, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17756:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "17749:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 4606, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "17748:10:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "id": 4613, - "name": "_allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4582, - "src": "17870:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4611, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4597, - "src": "17836:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17852:17:17", - "memberName": "contractToAdapter", - "nodeType": "MemberAccess", - "referencedDeclaration": 12245, - "src": "17836:33:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 4614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17836:51:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "17748:139:17", - "trueExpression": { - "arguments": [ - { - "id": 4609, - "name": "_allowedContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4582, - "src": "17804:16:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4607, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4594, - "src": "17773:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17786:17:17", - "memberName": "contractToAdapter", - "nodeType": "MemberAccess", - "referencedDeclaration": 13185, - "src": "17773:30:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 4610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17773:48:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "17738:149:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4617, - "nodeType": "ExpressionStatement", - "src": "17738:149:17" - } - ] - }, - "documentation": { - "id": 4578, - "nodeType": "StructuredDocumentation", - "src": "17246:86:17", - "text": "@dev Returns the adapter address for a particular creditManager and targetContract" - }, - "functionSelector": "4c472fc9", - "id": 4619, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 4585, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4580, - "src": "17477:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 4586, - "kind": "modifierInvocation", - "modifierName": { - "id": 4584, - "name": "targetIsRegisteredCreditManager", - "nameLocations": ["17445:31:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3205, - "src": "17445:31:17" - }, - "nodeType": "ModifierInvocation", - "src": "17445:47:17" - } - ], - "name": "getAdapter", - "nameLocation": "17346:10:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4583, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4580, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "17365:14:17", - "nodeType": "VariableDeclaration", - "scope": 4619, - "src": "17357:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4579, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17357:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4582, - "mutability": "mutable", - "name": "_allowedContract", - "nameLocation": "17389:16:17", - "nodeType": "VariableDeclaration", - "scope": 4619, - "src": "17381:24:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17381:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17356:50:17" - }, - "returnParameters": { - "id": 4589, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4588, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "17518:7:17", - "nodeType": "VariableDeclaration", - "scope": 4619, - "src": "17510:15:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4587, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17510:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17509:17:17" - }, - "scope": 4723, - "src": "17337:557:17", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 4641, - "nodeType": "Block", - "src": "18095:118:17", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 4633, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4624, - "src": "18171:8:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 4630, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4622, - "src": "18141:13:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4629, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "18124:16:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 4631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18124:31:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18156:14:17", - "memberName": "creditAccounts", - "nodeType": "MemberAccess", - "referencedDeclaration": 12271, - "src": "18124:46:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 4634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18124:56:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4637, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18204:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18196:7:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18196:7:17", - "typeDescriptions": {} - } - }, - "id": 4638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18196:10:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "18124:82:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 4628, - "id": 4640, - "nodeType": "Return", - "src": "18105:101:17" - } - ] - }, - "documentation": { - "id": 4620, - "nodeType": "StructuredDocumentation", - "src": "17900:59:17", - "text": "@dev Internal implementation for hasOpenedCreditAccount" - }, - "id": 4642, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_hasOpenedCreditAccount", - "nameLocation": "17973:23:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4625, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4622, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "18005:13:17", - "nodeType": "VariableDeclaration", - "scope": 4642, - "src": "17997:21:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4621, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17997:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4624, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "18028:8:17", - "nodeType": "VariableDeclaration", - "scope": 4642, - "src": "18020:16:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4623, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18020:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17996:41:17" - }, - "returnParameters": { - "id": 4628, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4627, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4642, - "src": "18085:4:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4626, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "18085:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "18084:6:17" - }, - "scope": 4723, - "src": "17964:249:17", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4721, - "nodeType": "Block", - "src": "18716:507:17", - "statements": [ - { - "expression": { - "id": 4677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4668, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4651, - "src": "18726:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 4672, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4645, - "src": "18747:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4671, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "18738:8:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IVersion_$12963_$", - "typeString": "type(contract IVersion)" - } - }, - "id": 4673, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18738:24:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IVersion_$12963", - "typeString": "contract IVersion" - } - }, - "id": 4674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18763:7:17", - "memberName": "version", - "nodeType": "MemberAccess", - "referencedDeclaration": 12962, - "src": "18738:32:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 4675, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18738:34:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4670, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18732:5:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 4669, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "18732:5:17", - "typeDescriptions": {} - } - }, - "id": 4676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18732:41:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "18726:47:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 4678, - "nodeType": "ExpressionStatement", - "src": "18726:47:17" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 4681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4679, - "name": "ver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4651, - "src": "18787:3:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 4680, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18794:1:17", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "18787:8:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4719, - "nodeType": "Block", - "src": "18946:271:17", - "statements": [ - { - "expression": { - "id": 4701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4697, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4660, - "src": "18960:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4699, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4645, - "src": "18995:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4698, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "18978:16:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 4700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18978:32:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "src": "18960:50:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4702, - "nodeType": "ExpressionStatement", - "src": "18960:50:17" - }, - { - "expression": { - "id": 4709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4703, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4663, - "src": "19024:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4705, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4660, - "src": "19053:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19069:12:17", - "memberName": "creditFacade", - "nodeType": "MemberAccess", - "referencedDeclaration": 12325, - "src": "19053:28:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19053:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4704, - "name": "ICreditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "19039:13:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacade_$11919_$", - "typeString": "type(contract ICreditFacade)" - } - }, - "id": 4708, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19039:45:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "src": "19024:60:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "id": 4710, - "nodeType": "ExpressionStatement", - "src": "19024:60:17" - }, - { - "expression": { - "id": 4717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4711, - "name": "creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4666, - "src": "19098:18:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4713, - "name": "creditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4660, - "src": "19156:15:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 4714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19172:18:17", - "memberName": "creditConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 12277, - "src": "19156:34:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 4715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19156:36:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4712, - "name": "ICreditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11424, - "src": "19119:19:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditConfigurator_$11424_$", - "typeString": "type(contract ICreditConfigurator)" - } - }, - "id": 4716, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19119:87:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "src": "19098:108:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "id": 4718, - "nodeType": "ExpressionStatement", - "src": "19098:108:17" - } - ] - }, - "id": 4720, - "nodeType": "IfStatement", - "src": "18783:434:17", - "trueBody": { - "id": 4696, - "nodeType": "Block", - "src": "18797:143:17", - "statements": [ - { - "expression": { - "id": 4686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4682, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4654, - "src": "18811:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 4684, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4645, - "src": "18842:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4683, - "name": "ICreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13579, - "src": "18827:14:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManager_$13579_$", - "typeString": "type(contract ICreditManager)" - } - }, - "id": 4685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18827:30:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "src": "18811:46:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4687, - "nodeType": "ExpressionStatement", - "src": "18811:46:17" - }, - { - "expression": { - "id": 4694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4688, - "name": "creditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4657, - "src": "18871:12:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 4690, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4654, - "src": "18900:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "id": 4691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "18914:12:17", - "memberName": "creditFilter", - "nodeType": "MemberAccess", - "referencedDeclaration": 13483, - "src": "18900:26:17", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ICreditFilter_$13277_$", - "typeString": "function () view external returns (contract ICreditFilter)" - } - }, - "id": 4692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18900:28:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - ], - "id": 4689, - "name": "ICreditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13277, - "src": "18886:13:17", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFilter_$13277_$", - "typeString": "type(contract ICreditFilter)" - } - }, - "id": 4693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18886:43:17", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "src": "18871:58:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "id": 4695, - "nodeType": "ExpressionStatement", - "src": "18871:58:17" - } - ] - } - } - ] - }, - "documentation": { - "id": 4643, - "nodeType": "StructuredDocumentation", - "src": "18219:80:17", - "text": "@dev Retrieves all relevant credit contracts for a particular Credit Manager" - }, - "id": 4722, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "arguments": [ - { - "id": 4648, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4645, - "src": "18426:14:17", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 4649, - "kind": "modifierInvocation", - "modifierName": { - "id": 4647, - "name": "targetIsRegisteredCreditManager", - "nameLocations": ["18394:31:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3205, - "src": "18394:31:17" - }, - "nodeType": "ModifierInvocation", - "src": "18394:47:17" - } - ], - "name": "getCreditContracts", - "nameLocation": "18313:18:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4646, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4645, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "18340:14:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18332:22:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4644, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18332:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18331:24:17" - }, - "returnParameters": { - "id": 4667, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4651, - "mutability": "mutable", - "name": "ver", - "nameLocation": "18478:3:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18472:9:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 4650, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "18472:5:17", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4654, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "18510:13:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18495:28:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - }, - "typeName": { - "id": 4653, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4652, - "name": "ICreditManager", - "nameLocations": ["18495:14:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13579, - "src": "18495:14:17" - }, - "referencedDeclaration": 13579, - "src": "18495:14:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManager_$13579", - "typeString": "contract ICreditManager" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4657, - "mutability": "mutable", - "name": "creditFilter", - "nameLocation": "18551:12:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18537:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - }, - "typeName": { - "id": 4656, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4655, - "name": "ICreditFilter", - "nameLocations": ["18537:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13277, - "src": "18537:13:17" - }, - "referencedDeclaration": 13277, - "src": "18537:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4660, - "mutability": "mutable", - "name": "creditManagerV2", - "nameLocation": "18594:15:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18577:32:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 4659, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4658, - "name": "ICreditManagerV2", - "nameLocations": ["18577:16:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "18577:16:17" - }, - "referencedDeclaration": 12355, - "src": "18577:16:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4663, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "18637:12:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18623:26:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - }, - "typeName": { - "id": 4662, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4661, - "name": "ICreditFacade", - "nameLocations": ["18623:13:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11919, - "src": "18623:13:17" - }, - "referencedDeclaration": 11919, - "src": "18623:13:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFacade_$11919", - "typeString": "contract ICreditFacade" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4666, - "mutability": "mutable", - "name": "creditConfigurator", - "nameLocation": "18683:18:17", - "nodeType": "VariableDeclaration", - "scope": 4722, - "src": "18663:38:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - }, - "typeName": { - "id": 4665, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4664, - "name": "ICreditConfigurator", - "nameLocations": ["18663:19:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11424, - "src": "18663:19:17" - }, - "referencedDeclaration": 11424, - "src": "18663:19:17", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditConfigurator_$11424", - "typeString": "contract ICreditConfigurator" - } - }, - "visibility": "internal" - } - ], - "src": "18458:253:17" - }, - "scope": 4723, - "src": "18304:919:17", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 4724, - "src": "1496:17729:17", - "usedErrors": [12367, 12370, 12534] - } - ], - "src": "128:19098:17" - }, - "id": 17 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol", - "exportedSymbols": { - "Claimable": [4791], - "Ownable": [16661] - }, - "id": 4792, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4725, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:18" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "id": 4727, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4792, - "sourceUnit": 16662, - "src": "154:109:18", - "symbolAliases": [ - { - "foreign": { - "id": 4726, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16661, - "src": "163:7:18", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 4729, - "name": "Ownable", - "nameLocations": ["386:7:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16661, - "src": "386:7:18" - }, - "id": 4730, - "nodeType": "InheritanceSpecifier", - "src": "386:7:18" - } - ], - "canonicalName": "Claimable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4728, - "nodeType": "StructuredDocumentation", - "src": "265:99:18", - "text": "@title Claimable\n @dev Implements logic for a two-step ownership transfer on top of Ownable" - }, - "fullyImplemented": true, - "id": 4791, - "linearizedBaseContracts": [4791, 16661, 18742], - "name": "Claimable", - "nameLocation": "373:9:18", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 4731, - "nodeType": "StructuredDocumentation", - "src": "400:57:18", - "text": "@dev The new owner that has not claimed ownership yet" - }, - "functionSelector": "e30c3978", - "id": 4733, - "mutability": "mutable", - "name": "pendingOwner", - "nameLocation": "477:12:18", - "nodeType": "VariableDeclaration", - "scope": 4791, - "src": "462:27:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4732, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "462:7:18", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 4747, - "nodeType": "Block", - "src": "602:132:18", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4736, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "616:3:18", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "620:6:18", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "616:10:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 4738, - "name": "pendingOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4733, - "src": "630:12:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "616:26:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4745, - "nodeType": "IfStatement", - "src": "612:105:18", - "trueBody": { - "id": 4744, - "nodeType": "Block", - "src": "644:73:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "436c61696d61626c653a2053656e646572206973206e6f742070656e64696e67206f776e6572", - "id": 4741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "665:40:18", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1", - "typeString": "literal_string \"Claimable: Sender is not pending owner\"" - }, - "value": "Claimable: Sender is not pending owner" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_1203010441229eccb075736268217e5772b0284c741808a7216526f7bf6700c1", - "typeString": "literal_string \"Claimable: Sender is not pending owner\"" - } - ], - "id": 4740, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967277, 4294967277 - ], - "referencedDeclaration": 4294967277, - "src": "658:6:18", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 4742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "658:48:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4743, - "nodeType": "ExpressionStatement", - "src": "658:48:18" - } - ] - } - }, - { - "id": 4746, - "nodeType": "PlaceholderStatement", - "src": "726:1:18" - } - ] - }, - "documentation": { - "id": 4734, - "nodeType": "StructuredDocumentation", - "src": "496:73:18", - "text": "@dev A modifier that restricts the function to the pending owner only" - }, - "id": 4748, - "name": "onlyPendingOwner", - "nameLocation": "583:16:18", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4735, - "nodeType": "ParameterList", - "parameters": [], - "src": "599:2:18" - }, - "src": "574:160:18", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [16640], - "body": { - "id": 4771, - "nodeType": "Block", - "src": "968:159:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4758, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4751, - "src": "999:8:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4761, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1019:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4760, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1011:7:18", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1011:7:18", - "typeDescriptions": {} - } - }, - "id": 4762, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1011:10:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "999:22:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "436c61696d61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373", - "id": 4764, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1035:42:18", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed", - "typeString": "literal_string \"Claimable: new owner is the zero address\"" - }, - "value": "Claimable: new owner is the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_0c59503ac8d2cc6ddc7430286917bb57ee0b9b26a3dc72c2ea44c6bc261512ed", - "typeString": "literal_string \"Claimable: new owner is the zero address\"" - } - ], - "id": 4757, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "978:7:18", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 4765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "978:109:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4766, - "nodeType": "ExpressionStatement", - "src": "978:109:18" - }, - { - "expression": { - "id": 4769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4767, - "name": "pendingOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4733, - "src": "1097:12:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4768, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4751, - "src": "1112:8:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1097:23:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4770, - "nodeType": "ExpressionStatement", - "src": "1097:23:18" - } - ] - }, - "documentation": { - "id": 4749, - "nodeType": "StructuredDocumentation", - "src": "740:152:18", - "text": "@dev Sets pending owner to the new owner, but does not\n transfer ownership yet\n @param newOwner The address to become the future owner" - }, - "functionSelector": "f2fde38b", - "id": 4772, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4755, - "kind": "modifierInvocation", - "modifierName": { - "id": 4754, - "name": "onlyOwner", - "nameLocations": ["958:9:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "958:9:18" - }, - "nodeType": "ModifierInvocation", - "src": "958:9:18" - } - ], - "name": "transferOwnership", - "nameLocation": "906:17:18", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4753, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "949:8:18" - }, - "parameters": { - "id": 4752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4751, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "932:8:18", - "nodeType": "VariableDeclaration", - "scope": 4772, - "src": "924:16:18", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4750, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "924:7:18", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "923:18:18" - }, - "returnParameters": { - "id": 4756, - "nodeType": "ParameterList", - "parameters": [], - "src": "968:0:18" - }, - "scope": 4791, - "src": "897:230:18", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 4789, - "nodeType": "Block", - "src": "1267:84:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4779, - "name": "pendingOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4733, - "src": "1296:12:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4778, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16660, - "src": "1277:18:18", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 4780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1277:32:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4781, - "nodeType": "ExpressionStatement", - "src": "1277:32:18" - }, - { - "expression": { - "id": 4787, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4782, - "name": "pendingOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4733, - "src": "1319:12:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 4785, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1342:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4784, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1334:7:18", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1334:7:18", - "typeDescriptions": {} - } - }, - "id": 4786, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1334:10:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1319:25:18", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4788, - "nodeType": "ExpressionStatement", - "src": "1319:25:18" - } - ] - }, - "documentation": { - "id": 4773, - "nodeType": "StructuredDocumentation", - "src": "1133:77:18", - "text": "@dev Used by the pending owner to claim ownership after transferOwnership" - }, - "functionSelector": "4e71e0c8", - "id": 4790, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4776, - "kind": "modifierInvocation", - "modifierName": { - "id": 4775, - "name": "onlyPendingOwner", - "nameLocations": ["1250:16:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4748, - "src": "1250:16:18" - }, - "nodeType": "ModifierInvocation", - "src": "1250:16:18" - } - ], - "name": "claimOwnership", - "nameLocation": "1224:14:18", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4774, - "nodeType": "ParameterList", - "parameters": [], - "src": "1238:2:18" - }, - "returnParameters": { - "id": 4777, - "nodeType": "ParameterList", - "parameters": [], - "src": "1267:0:18" - }, - "scope": 4791, - "src": "1215:136:18", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4792, - "src": "364:989:18", - "usedErrors": [] - } - ], - "src": "128:1226:18" - }, - "id": 18 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol", - "exportedSymbols": { - "Address": [18720], - "CreditAccount": [4990], - "ICreditAccount": [11064], - "IERC20": [17905], - "Initializable": [17078], - "SafeERC20": [18247] - }, - "id": 4991, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4793, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:19" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol", - "id": 4795, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4991, - "sourceUnit": 17079, - "src": "154:126:19", - "symbolAliases": [ - { - "foreign": { - "id": 4794, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17078, - "src": "163:13:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 4797, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4991, - "sourceUnit": 18721, - "src": "282:108:19", - "symbolAliases": [ - { - "foreign": { - "id": 4796, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "291:7:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 4799, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4991, - "sourceUnit": 17906, - "src": "392:112:19", - "symbolAliases": [ - { - "foreign": { - "id": 4798, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "401:6:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "id": 4801, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4991, - "sourceUnit": 18248, - "src": "505:124:19", - "symbolAliases": [ - { - "foreign": { - "id": 4800, - "name": "SafeERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18247, - "src": "514:9:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol", - "file": "../interfaces/ICreditAccount.sol", - "id": 4803, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4991, - "sourceUnit": 11065, - "src": "630:66:19", - "symbolAliases": [ - { - "foreign": { - "id": 4802, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "639:14:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 4805, - "name": "ICreditAccount", - "nameLocations": ["1121:14:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11064, - "src": "1121:14:19" - }, - "id": 4806, - "nodeType": "InheritanceSpecifier", - "src": "1121:14:19" - }, - { - "baseName": { - "id": 4807, - "name": "Initializable", - "nameLocations": ["1137:13:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17078, - "src": "1137:13:19" - }, - "id": 4808, - "nodeType": "InheritanceSpecifier", - "src": "1137:13:19" - } - ], - "canonicalName": "CreditAccount", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4804, - "nodeType": "StructuredDocumentation", - "src": "698:397:19", - "text": "@title Credit Account\n @notice Implements generic credit account logic:\n - Holds collateral assets\n - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized\n - Transfers assets\n - Executes financial orders by calling connected protocols on its behalf\n More: https://dev.gearbox.fi/developers/credit/credit_account" - }, - "fullyImplemented": true, - "id": 4990, - "linearizedBaseContracts": [4990, 17078, 11064, 12963, 10979], - "name": "CreditAccount", - "nameLocation": "1104:13:19", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 4812, - "libraryName": { - "id": 4809, - "name": "SafeERC20", - "nameLocations": ["1163:9:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18247, - "src": "1163:9:19" - }, - "nodeType": "UsingForDirective", - "src": "1157:27:19", - "typeName": { - "id": 4811, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4810, - "name": "IERC20", - "nameLocations": ["1177:6:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "1177:6:19" - }, - "referencedDeclaration": 17905, - "src": "1177:6:19", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - } - }, - { - "global": false, - "id": 4815, - "libraryName": { - "id": 4813, - "name": "Address", - "nameLocations": ["1195:7:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "1195:7:19" - }, - "nodeType": "UsingForDirective", - "src": "1189:26:19", - "typeName": { - "id": 4814, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1207:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "baseFunctions": [11053], - "constant": false, - "documentation": { - "id": 4816, - "nodeType": "StructuredDocumentation", - "src": "1221:46:19", - "text": "@dev Address of the Credit Account factory" - }, - "functionSelector": "c45a0155", - "id": 4819, - "mutability": "mutable", - "name": "factory", - "nameLocation": "1296:7:19", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 4818, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1287:8:19" - }, - "scope": 4990, - "src": "1272:31:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1272:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11047], - "constant": false, - "documentation": { - "id": 4820, - "nodeType": "StructuredDocumentation", - "src": "1310:58:19", - "text": "@dev Address of the currently connected Credit Manager" - }, - "functionSelector": "c12c21c0", - "id": 4823, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1397:13:19", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 4822, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1388:8:19" - }, - "scope": 4990, - "src": "1373:37:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4821, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1373:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11029], - "constant": false, - "documentation": { - "id": 4824, - "nodeType": "StructuredDocumentation", - "src": "1417:52:19", - "text": "@dev The principal amount borrowed from the pool" - }, - "functionSelector": "1afbb7a4", - "id": 4827, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "1498:14:19", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 4826, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1489:8:19" - }, - "scope": 4990, - "src": "1474:38:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4825, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1474:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11035], - "constant": false, - "documentation": { - "id": 4828, - "nodeType": "StructuredDocumentation", - "src": "1519:78:19", - "text": "@dev Cumulative interest index since the last Credit Account's debt update" - }, - "functionSelector": "17d11a15", - "id": 4831, - "mutability": "mutable", - "name": "cumulativeIndexAtOpen", - "nameLocation": "1626:21:19", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 4830, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1617:8:19" - }, - "scope": 4990, - "src": "1602:45:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4829, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1602:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11041], - "constant": false, - "documentation": { - "id": 4832, - "nodeType": "StructuredDocumentation", - "src": "1654:68:19", - "text": "@dev Block at which the contract was last taken from the factory" - }, - "functionSelector": "3dc54b40", - "id": 4835, - "mutability": "mutable", - "name": "since", - "nameLocation": "1751:5:19", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 4834, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1742:8:19" - }, - "scope": 4990, - "src": "1727:29:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4833, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1727:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12962], - "constant": true, - "functionSelector": "54fd4d50", - "id": 4838, - "mutability": "constant", - "name": "version", - "nameLocation": "1811:7:19", - "nodeType": "VariableDeclaration", - "scope": 4990, - "src": "1787:35:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4836, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1787:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 4837, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1821:1:19", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "public" - }, - { - "body": { - "id": 4850, - "nodeType": "Block", - "src": "1929:113:19", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4841, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1943:3:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1947:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1943:10:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 4843, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4823, - "src": "1957:13:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1943:27:19", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4848, - "nodeType": "IfStatement", - "src": "1939:85:19", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4845, - "name": "CallerNotCreditManagerException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10975, - "src": "1991:31:19", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 4846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1991:33:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4847, - "nodeType": "RevertStatement", - "src": "1984:40:19" - } - }, - { - "id": 4849, - "nodeType": "PlaceholderStatement", - "src": "2034:1:19" - } - ] - }, - "documentation": { - "id": 4839, - "nodeType": "StructuredDocumentation", - "src": "1829:66:19", - "text": "@dev Restricts operations to the connected Credit Manager only" - }, - "id": 4851, - "name": "creditManagerOnly", - "nameLocation": "1909:17:19", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4840, - "nodeType": "ParameterList", - "parameters": [], - "src": "1926:2:19" - }, - "src": "1900:142:19", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4863, - "nodeType": "Block", - "src": "2134:89:19", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4857, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 4854, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2148:3:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2152:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2148:10:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 4856, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4819, - "src": "2162:7:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2148:21:19", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4861, - "nodeType": "IfStatement", - "src": "2144:61:19", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4858, - "name": "CallerNotFactoryException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10978, - "src": "2178:25:19", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 4859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2178:27:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4860, - "nodeType": "RevertStatement", - "src": "2171:34:19" - } - }, - { - "id": 4862, - "nodeType": "PlaceholderStatement", - "src": "2215:1:19" - } - ] - }, - "documentation": { - "id": 4852, - "nodeType": "StructuredDocumentation", - "src": "2048:58:19", - "text": "@dev Restricts operation to the Credit Account factory" - }, - "id": 4864, - "name": "factoryOnly", - "nameLocation": "2120:11:19", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 4853, - "nodeType": "ParameterList", - "parameters": [], - "src": "2131:2:19" - }, - "src": "2111:112:19", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [10987], - "body": { - "id": 4876, - "nodeType": "Block", - "src": "2422:37:19", - "statements": [ - { - "expression": { - "id": 4874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4871, - "name": "factory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4819, - "src": "2432:7:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 4872, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2442:3:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 4873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2446:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2442:10:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2432:20:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4875, - "nodeType": "ExpressionStatement", - "src": "2432:20:19" - } - ] - }, - "documentation": { - "id": 4865, - "nodeType": "StructuredDocumentation", - "src": "2229:136:19", - "text": "@dev Called on new Credit Account creation.\n @notice Initialize is used instead of constructor, since the contract is cloned." - }, - "functionSelector": "8129fc1c", - "id": 4877, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4869, - "kind": "modifierInvocation", - "modifierName": { - "id": 4868, - "name": "initializer", - "nameLocations": ["2410:11:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16980, - "src": "2410:11:19" - }, - "nodeType": "ModifierInvocation", - "src": "2410:11:19" - } - ], - "name": "initialize", - "nameLocation": "2379:10:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4867, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2401:8:19" - }, - "parameters": { - "id": 4866, - "nodeType": "ParameterList", - "parameters": [], - "src": "2389:2:19" - }, - "returnParameters": { - "id": 4870, - "nodeType": "ParameterList", - "parameters": [], - "src": "2422:0:19" - }, - "scope": 4990, - "src": "2370:89:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [10997], - "body": { - "id": 4907, - "nodeType": "Block", - "src": "2949:228:19", - "statements": [ - { - "expression": { - "id": 4892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4890, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4823, - "src": "2959:13:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4891, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4880, - "src": "2975:14:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2959:30:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4893, - "nodeType": "ExpressionStatement", - "src": "2959:30:19" - }, - { - "expression": { - "id": 4896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4894, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4827, - "src": "3011:14:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4895, - "name": "_borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4882, - "src": "3028:15:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3011:32:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4897, - "nodeType": "ExpressionStatement", - "src": "3011:32:19" - }, - { - "expression": { - "id": 4900, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4898, - "name": "cumulativeIndexAtOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4831, - "src": "3067:21:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4899, - "name": "_cumulativeIndexAtOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4884, - "src": "3091:22:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3067:46:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4901, - "nodeType": "ExpressionStatement", - "src": "3067:46:19" - }, - { - "expression": { - "id": 4905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4902, - "name": "since", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4835, - "src": "3138:5:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 4903, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "3146:5:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 4904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3152:6:19", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "3146:12:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3138:20:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4906, - "nodeType": "ExpressionStatement", - "src": "3138:20:19" - } - ] - }, - "documentation": { - "id": 4878, - "nodeType": "StructuredDocumentation", - "src": "2465:319:19", - "text": "@dev Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.\n @param _creditManager Credit manager address\n @param _borrowedAmount The amount borrowed at Credit Account opening\n @param _cumulativeIndexAtOpen The interest index at Credit Account opening" - }, - "functionSelector": "c75b5a71", - "id": 4908, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4888, - "kind": "modifierInvocation", - "modifierName": { - "id": 4887, - "name": "factoryOnly", - "nameLocations": ["2937:11:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4864, - "src": "2937:11:19" - }, - "nodeType": "ModifierInvocation", - "src": "2937:11:19" - } - ], - "name": "connectTo", - "nameLocation": "2798:9:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4886, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2928:8:19" - }, - "parameters": { - "id": 4885, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4880, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "2825:14:19", - "nodeType": "VariableDeclaration", - "scope": 4908, - "src": "2817:22:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4879, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2817:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4882, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "2857:15:19", - "nodeType": "VariableDeclaration", - "scope": 4908, - "src": "2849:23:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4881, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2849:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4884, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "2890:22:19", - "nodeType": "VariableDeclaration", - "scope": 4908, - "src": "2882:30:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4883, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2882:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2807:111:19" - }, - "returnParameters": { - "id": 4889, - "nodeType": "ParameterList", - "parameters": [], - "src": "2949:0:19" - }, - "scope": 4990, - "src": "2789:388:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11005], - "body": { - "id": 4927, - "nodeType": "Block", - "src": "3642:117:19", - "statements": [ - { - "expression": { - "id": 4921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4919, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4827, - "src": "3652:14:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4920, - "name": "_borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4911, - "src": "3669:15:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3652:32:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4922, - "nodeType": "ExpressionStatement", - "src": "3652:32:19" - }, - { - "expression": { - "id": 4925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4923, - "name": "cumulativeIndexAtOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4831, - "src": "3706:21:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4924, - "name": "_cumulativeIndexAtOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4913, - "src": "3730:22:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3706:46:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4926, - "nodeType": "ExpressionStatement", - "src": "3706:46:19" - } - ] - }, - "documentation": { - "id": 4909, - "nodeType": "StructuredDocumentation", - "src": "3183:273:19", - "text": "@dev Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.\n @param _borrowedAmount The amount currently lent to the Credit Account\n @param _cumulativeIndexAtOpen New cumulative index to calculate interest from" - }, - "functionSelector": "16128211", - "id": 4928, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4917, - "kind": "modifierInvocation", - "modifierName": { - "id": 4916, - "name": "creditManagerOnly", - "nameLocations": ["3608:17:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4851, - "src": "3608:17:19" - }, - "nodeType": "ModifierInvocation", - "src": "3608:17:19" - } - ], - "name": "updateParameters", - "nameLocation": "3470:16:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4915, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3591:8:19" - }, - "parameters": { - "id": 4914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4911, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "3504:15:19", - "nodeType": "VariableDeclaration", - "scope": 4928, - "src": "3496:23:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4910, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3496:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4913, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "3537:22:19", - "nodeType": "VariableDeclaration", - "scope": 4928, - "src": "3529:30:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4912, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3529:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3486:79:19" - }, - "returnParameters": { - "id": 4918, - "nodeType": "ParameterList", - "parameters": [], - "src": "3642:0:19" - }, - "scope": 4990, - "src": "3461:298:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11013], - "body": { - "id": 4947, - "nodeType": "Block", - "src": "4111:61:19", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4943, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4933, - "src": "4147:14:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 4944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4163:1:19", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "arguments": [ - { - "id": 4940, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4931, - "src": "4128:5:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4939, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "4121:6:19", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 4941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4121:13:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 4942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4135:11:19", - "memberName": "safeApprove", - "nodeType": "MemberAccess", - "referencedDeclaration": 18068, - "src": "4121:25:19", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17905_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 4945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4121:44:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4946, - "nodeType": "ExpressionStatement", - "src": "4121:44:19" - } - ] - }, - "documentation": { - "id": 4929, - "nodeType": "StructuredDocumentation", - "src": "3765:219:19", - "text": "@dev Removes allowance for a token to a 3rd-party contract. Restricted to factory only.\n @param token ERC20 token to remove allowance for.\n @param targetContract Target contract to revoke allowance to." - }, - "functionSelector": "19a16039", - "id": 4948, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4937, - "kind": "modifierInvocation", - "modifierName": { - "id": 4936, - "name": "factoryOnly", - "nameLocations": ["4095:11:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4864, - "src": "4095:11:19" - }, - "nodeType": "ModifierInvocation", - "src": "4095:11:19" - } - ], - "name": "cancelAllowance", - "nameLocation": "3998:15:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4935, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4078:8:19" - }, - "parameters": { - "id": 4934, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4931, - "mutability": "mutable", - "name": "token", - "nameLocation": "4022:5:19", - "nodeType": "VariableDeclaration", - "scope": 4948, - "src": "4014:13:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4930, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4014:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4933, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "4037:14:19", - "nodeType": "VariableDeclaration", - "scope": 4948, - "src": "4029:22:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4029:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4013:39:19" - }, - "returnParameters": { - "id": 4938, - "nodeType": "ParameterList", - "parameters": [], - "src": "4111:0:19" - }, - "scope": 4990, - "src": "3989:183:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11023], - "body": { - "id": 4969, - "nodeType": "Block", - "src": "4635:67:19", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4965, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4953, - "src": "4672:2:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4966, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4955, - "src": "4676:6:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 4962, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4951, - "src": "4652:5:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4961, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "4645:6:19", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 4963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4645:13:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 4964, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4659:12:19", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 17998, - "src": "4645:26:19", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17905_$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 4967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4645:38:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4968, - "nodeType": "ExpressionStatement", - "src": "4645:38:19" - } - ] - }, - "documentation": { - "id": 4949, - "nodeType": "StructuredDocumentation", - "src": "4178:281:19", - "text": "@dev Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\n @param token Token to be transferred from the Credit Account.\n @param to Address of the recipient.\n @param amount Amount to be transferred." - }, - "functionSelector": "d1660f99", - "id": 4970, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4959, - "kind": "modifierInvocation", - "modifierName": { - "id": 4958, - "name": "creditManagerOnly", - "nameLocations": ["4601:17:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4851, - "src": "4601:17:19" - }, - "nodeType": "ModifierInvocation", - "src": "4601:17:19" - } - ], - "name": "safeTransfer", - "nameLocation": "4473:12:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4957, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4584:8:19" - }, - "parameters": { - "id": 4956, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4951, - "mutability": "mutable", - "name": "token", - "nameLocation": "4503:5:19", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "4495:13:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4950, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4495:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4953, - "mutability": "mutable", - "name": "to", - "nameLocation": "4526:2:19", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "4518:10:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4952, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4518:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4955, - "mutability": "mutable", - "name": "amount", - "nameLocation": "4546:6:19", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "4538:14:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4954, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4538:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4485:73:19" - }, - "returnParameters": { - "id": 4960, - "nodeType": "ParameterList", - "parameters": [], - "src": "4635:0:19" - }, - "scope": 4990, - "src": "4464:238:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11063], - "body": { - "id": 4988, - "nodeType": "Block", - "src": "5090:68:19", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4985, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4975, - "src": "5132:4:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 4983, - "name": "destination", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4973, - "src": "5107:11:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 4984, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5119:12:19", - "memberName": "functionCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 18460, - "src": "5107:24:19", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$", - "typeString": "function (address,bytes memory) returns (bytes memory)" - } - }, - "id": 4986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5107:30:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 4982, - "id": 4987, - "nodeType": "Return", - "src": "5100:37:19" - } - ] - }, - "documentation": { - "id": 4971, - "nodeType": "StructuredDocumentation", - "src": "4708:225:19", - "text": "@dev Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\n @param destination Contract address to be called.\n @param data Data to call the contract with." - }, - "functionSelector": "1cff79cd", - "id": 4989, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 4979, - "kind": "modifierInvocation", - "modifierName": { - "id": 4978, - "name": "creditManagerOnly", - "nameLocations": ["5037:17:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4851, - "src": "5037:17:19" - }, - "nodeType": "ModifierInvocation", - "src": "5037:17:19" - } - ], - "name": "execute", - "nameLocation": "4947:7:19", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 4977, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5020:8:19" - }, - "parameters": { - "id": 4976, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4973, - "mutability": "mutable", - "name": "destination", - "nameLocation": "4963:11:19", - "nodeType": "VariableDeclaration", - "scope": 4989, - "src": "4955:19:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4972, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4955:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4975, - "mutability": "mutable", - "name": "data", - "nameLocation": "4989:4:19", - "nodeType": "VariableDeclaration", - "scope": 4989, - "src": "4976:17:19", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4974, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4976:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4954:40:19" - }, - "returnParameters": { - "id": 4982, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4981, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4989, - "src": "5072:12:19", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4980, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5072:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5071:14:19" - }, - "scope": 4990, - "src": "4938:220:19", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4991, - "src": "1095:4065:19", - "usedErrors": [10975, 10978] - } - ], - "src": "128:5033:19" - }, - "id": 19 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol", - "exportedSymbols": { - "Address": [18720], - "Balance": [13609], - "ClosureAction": [11941], - "CreditFacade": [7747], - "CumulativeLossParams": [5055], - "EnumerableSet": [20908], - "IBlacklistHelper": [10889], - "ICreditFacade": [11919], - "ICreditFacadeExtended": [11478], - "ICreditManagerV2": [12355], - "IDegenNFT": [12529], - "IERC20": [17905], - "IPausable": [12566], - "IPriceOracleV2": [12942], - "IWETH": [13602], - "LEVERAGE_DECIMALS": [13918], - "Limits": [5048], - "MultiCall": [14040], - "PERCENTAGE_FACTOR": [14398], - "Params": [5041], - "ReentrancyGuard": [17240], - "SafeCast": [20295], - "TotalDebt": [5062], - "ZeroAddressException": [12534] - }, - "id": 7748, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4992, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:20" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 4994, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 17906, - "src": "154:112:20", - "symbolAliases": [ - { - "foreign": { - "id": 4993, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "163:6:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 4996, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 18721, - "src": "267:108:20", - "symbolAliases": [ - { - "foreign": { - "id": 4995, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "276:7:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "id": 4998, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 20909, - "src": "376:128:20", - "symbolAliases": [ - { - "foreign": { - "id": 4997, - "name": "EnumerableSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20908, - "src": "385:13:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "id": 5000, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 17241, - "src": "505:127:20", - "symbolAliases": [ - { - "foreign": { - "id": 4999, - "name": "ReentrancyGuard", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17240, - "src": "514:15:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "id": 5002, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 20296, - "src": "633:115:20", - "symbolAliases": [ - { - "foreign": { - "id": 5001, - "name": "SafeCast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20295, - "src": "642:8:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol", - "file": "../libraries/MultiCall.sol", - "id": 5004, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 14392, - "src": "759:55:20", - "symbolAliases": [ - { - "foreign": { - "id": 5003, - "name": "MultiCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14040, - "src": "768:9:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol", - "file": "../libraries/Balances.sol", - "id": 5006, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 13870, - "src": "815:52:20", - "symbolAliases": [ - { - "foreign": { - "id": 5005, - "name": "Balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13609, - "src": "824:7:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol", - "file": "../interfaces/ICreditFacade.sol", - "id": 5009, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 11931, - "src": "884:87:20", - "symbolAliases": [ - { - "foreign": { - "id": 5007, - "name": "ICreditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "893:13:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 5008, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "908:21:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol", - "file": "../interfaces/ICreditManagerV2.sol", - "id": 5012, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 12356, - "src": "972:85:20", - "symbolAliases": [ - { - "foreign": { - "id": 5010, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "981:16:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 5011, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "999:13:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "file": "../interfaces/IPriceOracle.sol", - "id": 5014, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 12954, - "src": "1058:64:20", - "symbolAliases": [ - { - "foreign": { - "id": 5013, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "1067:14:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol", - "file": "../interfaces/IDegenNFT.sol", - "id": 5016, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 12530, - "src": "1123:56:20", - "symbolAliases": [ - { - "foreign": { - "id": 5015, - "name": "IDegenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12529, - "src": "1132:9:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol", - "file": "../interfaces/external/IWETH.sol", - "id": 5018, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 13603, - "src": "1180:57:20", - "symbolAliases": [ - { - "foreign": { - "id": 5017, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "1189:5:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol", - "file": "../interfaces/IBlacklistHelper.sol", - "id": 5020, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 10890, - "src": "1238:70:20", - "symbolAliases": [ - { - "foreign": { - "id": 5019, - "name": "IBlacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10889, - "src": "1247:16:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol", - "file": "../interfaces/IPausable.sol", - "id": 5022, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 12567, - "src": "1309:56:20", - "symbolAliases": [ - { - "foreign": { - "id": 5021, - "name": "IPausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12566, - "src": "1318:9:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol", - "file": "../libraries/Constants.sol", - "id": 5024, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 13931, - "src": "1381:63:20", - "symbolAliases": [ - { - "foreign": { - "id": 5023, - "name": "LEVERAGE_DECIMALS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13918, - "src": "1390:17:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol", - "file": "../libraries/PercentageMath.sol", - "id": 5026, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 14471, - "src": "1445:68:20", - "symbolAliases": [ - { - "foreign": { - "id": 5025, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "1454:17:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol", - "file": "../interfaces/IErrors.sol", - "id": 5028, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 7748, - "sourceUnit": 12561, - "src": "1529:65:20", - "symbolAliases": [ - { - "foreign": { - "id": 5027, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "1538:20:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "Params", - "id": 5041, - "members": [ - { - "constant": false, - "id": 5031, - "mutability": "mutable", - "name": "maxBorrowedAmountPerBlock", - "nameLocation": "1692:25:20", - "nodeType": "VariableDeclaration", - "scope": 5041, - "src": "1684:33:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5030, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "1684:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5034, - "mutability": "mutable", - "name": "isIncreaseDebtForbidden", - "nameLocation": "1778:23:20", - "nodeType": "VariableDeclaration", - "scope": 5041, - "src": "1773:28:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5033, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1773:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5037, - "mutability": "mutable", - "name": "expirationDate", - "nameLocation": "1896:14:20", - "nodeType": "VariableDeclaration", - "scope": 5041, - "src": "1889:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 5036, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "1889:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5040, - "mutability": "mutable", - "name": "emergencyLiquidationDiscount", - "nameLocation": "2004:28:20", - "nodeType": "VariableDeclaration", - "scope": 5041, - "src": "1997:35:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 5039, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1997:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "name": "Params", - "nameLocation": "1603:6:20", - "nodeType": "StructDefinition", - "scope": 7748, - "src": "1596:439:20", - "visibility": "public" - }, - { - "canonicalName": "Limits", - "id": 5048, - "members": [ - { - "constant": false, - "id": 5044, - "mutability": "mutable", - "name": "minBorrowedAmount", - "nameLocation": "2121:17:20", - "nodeType": "VariableDeclaration", - "scope": 5048, - "src": "2113:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5043, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2113:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5047, - "mutability": "mutable", - "name": "maxBorrowedAmount", - "nameLocation": "2208:17:20", - "nodeType": "VariableDeclaration", - "scope": 5048, - "src": "2200:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5046, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2200:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "name": "Limits", - "nameLocation": "2044:6:20", - "nodeType": "StructDefinition", - "scope": 7748, - "src": "2037:191:20", - "visibility": "public" - }, - { - "canonicalName": "CumulativeLossParams", - "id": 5055, - "members": [ - { - "constant": false, - "id": 5051, - "mutability": "mutable", - "name": "currentCumulativeLoss", - "nameLocation": "2340:21:20", - "nodeType": "VariableDeclaration", - "scope": 5055, - "src": "2332:29:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5050, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2332:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5054, - "mutability": "mutable", - "name": "maxCumulativeLoss", - "nameLocation": "2444:17:20", - "nodeType": "VariableDeclaration", - "scope": 5055, - "src": "2436:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5053, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2436:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "name": "CumulativeLossParams", - "nameLocation": "2237:20:20", - "nodeType": "StructDefinition", - "scope": 7748, - "src": "2230:234:20", - "visibility": "public" - }, - { - "canonicalName": "TotalDebt", - "id": 5062, - "members": [ - { - "constant": false, - "id": 5058, - "mutability": "mutable", - "name": "currentTotalDebt", - "nameLocation": "2534:16:20", - "nodeType": "VariableDeclaration", - "scope": 5062, - "src": "2526:24:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5057, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2526:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5061, - "mutability": "mutable", - "name": "totalDebtLimit", - "nameLocation": "2599:14:20", - "nodeType": "VariableDeclaration", - "scope": 5062, - "src": "2591:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 5060, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "2591:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "name": "TotalDebt", - "nameLocation": "2473:9:20", - "nodeType": "StructDefinition", - "scope": 7748, - "src": "2466:150:20", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 5064, - "name": "ICreditFacade", - "nameLocations": ["3087:13:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11919, - "src": "3087:13:20" - }, - "id": 5065, - "nodeType": "InheritanceSpecifier", - "src": "3087:13:20" - }, - { - "baseName": { - "id": 5066, - "name": "ReentrancyGuard", - "nameLocations": ["3102:15:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17240, - "src": "3102:15:20" - }, - "id": 5067, - "nodeType": "InheritanceSpecifier", - "src": "3102:15:20" - } - ], - "canonicalName": "CreditFacade", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5063, - "nodeType": "StructuredDocumentation", - "src": "2618:444:20", - "text": "@title CreditFacade\n @notice User interface for interacting with Credit Manager\n @dev Direct interaction with the Credit Manager is forbidden, but Credit Facade provides all the needed\n account management functions: open / close / liquidate / addCollateral / manageDebt / multicall.\n The latter allows to perform multiple actions within a single transaction, followed by a single\n collateral check in the end." - }, - "fullyImplemented": true, - "id": 7747, - "linearizedBaseContracts": [ - 7747, 17240, 11919, 12963, 11659, 11994, 11597 - ], - "name": "CreditFacade", - "nameLocation": "3071:12:20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 5071, - "libraryName": { - "id": 5068, - "name": "EnumerableSet", - "nameLocations": ["3130:13:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20908, - "src": "3130:13:20" - }, - "nodeType": "UsingForDirective", - "src": "3124:49:20", - "typeName": { - "id": 5070, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5069, - "name": "EnumerableSet.AddressSet", - "nameLocations": ["3148:13:20", "3162:10:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "3148:24:20" - }, - "referencedDeclaration": 20621, - "src": "3148:24:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - } - }, - { - "global": false, - "id": 5074, - "libraryName": { - "id": 5072, - "name": "Address", - "nameLocations": ["3184:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "3184:7:20" - }, - "nodeType": "UsingForDirective", - "src": "3178:26:20", - "typeName": { - "id": 5073, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3196:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "global": false, - "id": 5077, - "libraryName": { - "id": 5075, - "name": "SafeCast", - "nameLocations": ["3215:8:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20295, - "src": "3215:8:20" - }, - "nodeType": "UsingForDirective", - "src": "3209:27:20", - "typeName": { - "id": 5076, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3228:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "baseFunctions": [11850], - "constant": false, - "documentation": { - "id": 5078, - "nodeType": "StructuredDocumentation", - "src": "3242:55:20", - "text": "@dev Credit Manager connected to this Credit Facade" - }, - "functionSelector": "c12c21c0", - "id": 5081, - "mutability": "immutable", - "name": "creditManager", - "nameLocation": "3336:13:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "3302:47:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 5080, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5079, - "name": "ICreditManagerV2", - "nameLocations": ["3302:16:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "3302:16:20" - }, - "referencedDeclaration": 12355, - "src": "3302:16:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 5082, - "nodeType": "StructuredDocumentation", - "src": "3356:47:20", - "text": "@dev Whether the whitelisted mode is active" - }, - "functionSelector": "3d9287fa", - "id": 5084, - "mutability": "immutable", - "name": "whitelisted", - "nameLocation": "3430:11:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "3408:33:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5083, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3408:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11918], - "constant": false, - "documentation": { - "id": 5085, - "nodeType": "StructuredDocumentation", - "src": "3448:65:20", - "text": "@dev Whether the Credit Manager's underlying has blacklisting" - }, - "functionSelector": "e1d49d7d", - "id": 5087, - "mutability": "immutable", - "name": "isBlacklistableUnderlying", - "nameLocation": "3540:25:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "3518:47:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5086, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3518:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 5088, - "nodeType": "StructuredDocumentation", - "src": "3572:61:20", - "text": "@dev Whether the Credit Facade implements expirable logic" - }, - "functionSelector": "b1836d32", - "id": 5090, - "mutability": "immutable", - "name": "expirable", - "nameLocation": "3660:9:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "3638:31:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5089, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3638:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11872], - "constant": false, - "documentation": { - "id": 5091, - "nodeType": "StructuredDocumentation", - "src": "3676:77:20", - "text": "@dev Keeps frequently accessed parameters for storage access optimization" - }, - "functionSelector": "cff0ab96", - "id": 5095, - "mutability": "mutable", - "name": "params", - "nameLocation": "3781:6:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5094, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3772:8:20" - }, - "scope": 7747, - "src": "3758:29:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params" - }, - "typeName": { - "id": 5093, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5092, - "name": "Params", - "nameLocations": ["3758:6:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5041, - "src": "3758:6:20" - }, - "referencedDeclaration": 5041, - "src": "3758:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage_ptr", - "typeString": "struct Params" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11880], - "constant": false, - "documentation": { - "id": 5096, - "nodeType": "StructuredDocumentation", - "src": "3794:72:20", - "text": "@dev Keeps borrowing limits together for storage access optimization" - }, - "functionSelector": "860aefcf", - "id": 5100, - "mutability": "mutable", - "name": "limits", - "nameLocation": "3894:6:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5099, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3885:8:20" - }, - "scope": 7747, - "src": "3871:29:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage", - "typeString": "struct Limits" - }, - "typeName": { - "id": 5098, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5097, - "name": "Limits", - "nameLocations": ["3871:6:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5048, - "src": "3871:6:20" - }, - "referencedDeclaration": 5048, - "src": "3871:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage_ptr", - "typeString": "struct Limits" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11887], - "constant": false, - "documentation": { - "id": 5101, - "nodeType": "StructuredDocumentation", - "src": "3907:103:20", - "text": "@dev Keeps parameters that are used to pause the system after too much bad debt over a short period" - }, - "functionSelector": "50393109", - "id": 5105, - "mutability": "mutable", - "name": "lossParams", - "nameLocation": "4052:10:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5104, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4043:8:20" - }, - "scope": 7747, - "src": "4015:47:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams" - }, - "typeName": { - "id": 5103, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5102, - "name": "CumulativeLossParams", - "nameLocations": ["4015:20:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5055, - "src": "4015:20:20" - }, - "referencedDeclaration": 5055, - "src": "4015:20:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage_ptr", - "typeString": "struct CumulativeLossParams" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11894], - "constant": false, - "functionSelector": "fc7b9c18", - "id": 5109, - "mutability": "mutable", - "name": "totalDebt", - "nameLocation": "4095:9:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5108, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4086:8:20" - }, - "scope": 7747, - "src": "4069:35:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt" - }, - "typeName": { - "id": 5107, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5106, - "name": "TotalDebt", - "nameLocations": ["4069:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5062, - "src": "4069:9:20" - }, - "referencedDeclaration": 5062, - "src": "4069:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage_ptr", - "typeString": "struct TotalDebt" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11906], - "constant": false, - "documentation": { - "id": 5110, - "nodeType": "StructuredDocumentation", - "src": "4111:40:20", - "text": "@dev Address of the underlying token" - }, - "functionSelector": "6f307dc3", - "id": 5112, - "mutability": "immutable", - "name": "underlying", - "nameLocation": "4181:10:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "4156:35:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5111, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4156:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11860], - "constant": false, - "documentation": { - "id": 5113, - "nodeType": "StructuredDocumentation", - "src": "4198:105:20", - "text": "@dev A map that stores whether a user allows a transfer of an account from another user to themselves" - }, - "functionSelector": "d9ccbec1", - "id": 5120, - "mutability": "mutable", - "name": "transfersAllowed", - "nameLocation": "4385:16:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5119, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4376:8:20" - }, - "scope": 7747, - "src": "4308:93:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(address => mapping(address => bool))" - }, - "typeName": { - "id": 5118, - "keyType": { - "id": 5114, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4316:7:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4308:44:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(address => mapping(address => bool))" - }, - "valueType": { - "id": 5117, - "keyType": { - "id": 5115, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4335:7:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "4327:24:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 5116, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4346:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 5121, - "nodeType": "StructuredDocumentation", - "src": "4408:24:20", - "text": "@dev Address of WETH" - }, - "functionSelector": "4f0e0ef3", - "id": 5123, - "mutability": "immutable", - "name": "wethAddress", - "nameLocation": "4462:11:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "4437:36:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5122, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4437:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11900], - "constant": false, - "documentation": { - "id": 5124, - "nodeType": "StructuredDocumentation", - "src": "4480:84:20", - "text": "@dev Address of the DegenNFT that gatekeeps account openings in whitelisted mode" - }, - "functionSelector": "9408b63f", - "id": 5127, - "mutability": "immutable", - "name": "degenNFT", - "nameLocation": "4603:8:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5126, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4594:8:20" - }, - "scope": 7747, - "src": "4569:42:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5125, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4569:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [11912], - "constant": false, - "documentation": { - "id": 5128, - "nodeType": "StructuredDocumentation", - "src": "4618:92:20", - "text": "@dev Address of the BlacklistHelper if underlying is blacklistable, otherwise address(0)" - }, - "functionSelector": "938294a9", - "id": 5131, - "mutability": "immutable", - "name": "blacklistHelper", - "nameLocation": "4749:15:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5130, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4740:8:20" - }, - "scope": 7747, - "src": "4715:49:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5129, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4715:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 5132, - "nodeType": "StructuredDocumentation", - "src": "4771:60:20", - "text": "@dev Address of the pool connected to the Credit Manager" - }, - "functionSelector": "16f0115b", - "id": 5134, - "mutability": "immutable", - "name": "pool", - "nameLocation": "4861:4:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "4836:29:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4836:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 5135, - "nodeType": "StructuredDocumentation", - "src": "4872:121:20", - "text": "@dev Stores in a compressed state the last block where borrowing happened and the total amount borrowed in that block" - }, - "id": 5137, - "mutability": "mutable", - "name": "totalBorrowedInBlock", - "nameLocation": "5015:20:20", - "nodeType": "VariableDeclaration", - "scope": 7747, - "src": "4998:37:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5136, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4998:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "baseFunctions": [12962], - "constant": true, - "documentation": { - "id": 5138, - "nodeType": "StructuredDocumentation", - "src": "5042:25:20", - "text": "@dev Contract version" - }, - "functionSelector": "54fd4d50", - "id": 5142, - "mutability": "constant", - "name": "version", - "nameLocation": "5105:7:20", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 5140, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5096:8:20" - }, - "scope": 7747, - "src": "5072:47:20", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5139, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5072:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "325f3130", - "id": 5141, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5115:4:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_210_by_1", - "typeString": "int_const 210" - }, - "value": "2_10" - }, - "visibility": "public" - }, - { - "body": { - "id": 5156, - "nodeType": "Block", - "src": "5234:135:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5145, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5248:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5252:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5248:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 5147, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "5262:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5276:18:20", - "memberName": "creditConfigurator", - "nodeType": "MemberAccess", - "referencedDeclaration": 12277, - "src": "5262:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 5149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5262:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5248:48:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5154, - "nodeType": "IfStatement", - "src": "5244:106:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5151, - "name": "CreditConfiguratorOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11963, - "src": "5317:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5317:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5153, - "nodeType": "RevertStatement", - "src": "5310:40:20" - } - }, - { - "id": 5155, - "nodeType": "PlaceholderStatement", - "src": "5361:1:20" - } - ] - }, - "documentation": { - "id": 5143, - "nodeType": "StructuredDocumentation", - "src": "5126:69:20", - "text": "@dev Restricts actions for users with opened credit accounts only" - }, - "id": 5157, - "name": "creditConfiguratorOnly", - "nameLocation": "5209:22:20", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 5144, - "nodeType": "ParameterList", - "parameters": [], - "src": "5231:2:20" - }, - "src": "5200:169:20", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5261, - "nodeType": "Block", - "src": "6029:866:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5169, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "6109:14:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5172, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6135:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5171, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6127:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6127:7:20", - "typeDescriptions": {} - } - }, - "id": 5173, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6127:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6109:28:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5178, - "nodeType": "IfStatement", - "src": "6105:63:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5175, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "6146:20:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5176, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6146:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5177, - "nodeType": "RevertStatement", - "src": "6139:29:20" - } - }, - { - "expression": { - "id": 5183, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5179, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "6191:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 5181, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "6224:14:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5180, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "6207:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 5182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6207:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "src": "6191:48:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5184, - "nodeType": "ExpressionStatement", - "src": "6191:48:20" - }, - { - "expression": { - "id": 5191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5185, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "6262:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 5187, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "6292:14:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5186, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "6275:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 5188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6275:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6308:10:20", - "memberName": "underlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 12251, - "src": "6275:43:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 5190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6275:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6262:58:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5192, - "nodeType": "ExpressionStatement", - "src": "6262:58:20" - }, - { - "expression": { - "id": 5199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5193, - "name": "wethAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5123, - "src": "6343:11:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 5195, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "6374:14:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5194, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "6357:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 5196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6357:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6390:11:20", - "memberName": "wethAddress", - "nodeType": "MemberAccess", - "referencedDeclaration": 12283, - "src": "6357:44:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 5198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6357:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6343:60:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5200, - "nodeType": "ExpressionStatement", - "src": "6343:60:20" - }, - { - "expression": { - "id": 5207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5201, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5134, - "src": "6426:4:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 5203, - "name": "_creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "6450:14:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5202, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "6433:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditManagerV2_$12355_$", - "typeString": "type(contract ICreditManagerV2)" - } - }, - "id": 5204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6433:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6466:4:20", - "memberName": "pool", - "nodeType": "MemberAccess", - "referencedDeclaration": 12257, - "src": "6433:37:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 5206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6433:39:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6426:46:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5208, - "nodeType": "ExpressionStatement", - "src": "6426:46:20" - }, - { - "expression": { - "id": 5211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5209, - "name": "degenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5127, - "src": "6483:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 5210, - "name": "_degenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5162, - "src": "6494:9:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6483:20:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5212, - "nodeType": "ExpressionStatement", - "src": "6483:20:20" - }, - { - "expression": { - "id": 5220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5213, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5084, - "src": "6526:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5214, - "name": "_degenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5162, - "src": "6540:9:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5217, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6561:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6553:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5215, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6553:7:20", - "typeDescriptions": {} - } - }, - "id": 5218, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6553:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6540:23:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6526:37:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5221, - "nodeType": "ExpressionStatement", - "src": "6526:37:20" - }, - { - "expression": { - "id": 5224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5222, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "6587:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 5223, - "name": "_blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5164, - "src": "6605:16:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6587:34:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5225, - "nodeType": "ExpressionStatement", - "src": "6587:34:20" - }, - { - "expression": { - "id": 5233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5226, - "name": "isBlacklistableUnderlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5087, - "src": "6631:25:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5227, - "name": "_blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5164, - "src": "6659:16:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6687:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5229, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6679:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5228, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6679:7:20", - "typeDescriptions": {} - } - }, - "id": 5231, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6679:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6659:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6631:58:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5234, - "nodeType": "ExpressionStatement", - "src": "6631:58:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5235, - "name": "_blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5164, - "src": "6703:16:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5238, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6731:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5237, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6723:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5236, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6723:7:20", - "typeDescriptions": {} - } - }, - "id": 5239, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6723:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6703:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5246, - "nodeType": "IfStatement", - "src": "6699:102:20", - "trueBody": { - "id": 5245, - "nodeType": "Block", - "src": "6735:66:20", - "statements": [ - { - "eventCall": { - "arguments": [ - { - "id": 5242, - "name": "_blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5164, - "src": "6773:16:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5241, - "name": "BlacklistHelperSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11483, - "src": "6754:18:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 5243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6754:36:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5244, - "nodeType": "EmitStatement", - "src": "6749:41:20" - } - ] - } - }, - { - "expression": { - "id": 5249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5247, - "name": "expirable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5090, - "src": "6811:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 5248, - "name": "_expirable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5166, - "src": "6823:10:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "6811:22:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5250, - "nodeType": "ExpressionStatement", - "src": "6811:22:20" - }, - { - "expression": { - "id": 5259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5251, - "name": "totalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5109, - "src": "6844:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "id": 5253, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "6854:14:20", - "memberName": "totalDebtLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 5061, - "src": "6844:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "arguments": [ - { - "id": 5256, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6876:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 5255, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "6876:7:20", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - } - ], - "id": 5254, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6871:4:20", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5257, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6871:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint128", - "typeString": "type(uint128)" - } - }, - "id": 5258, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6885:3:20", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6871:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "6844:44:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 5260, - "nodeType": "ExpressionStatement", - "src": "6844:44:20" - } - ] - }, - "documentation": { - "id": 5158, - "nodeType": "StructuredDocumentation", - "src": "5375:513:20", - "text": "@dev Initializes creditFacade and connects it with CreditManager\n @param _creditManager address of Credit Manager\n @param _degenNFT address of the DegenNFT or address(0) if whitelisted mode is not used\n @param _blacklistHelper address of the funds recovery contract for blacklistable underlyings.\n Must be address(0) is the underlying is not blacklistable\n @param _expirable Whether the CreditFacade can expire and implements expiration-related logic" - }, - "id": 5262, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5167, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5160, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "5922:14:20", - "nodeType": "VariableDeclaration", - "scope": 5262, - "src": "5914:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5914:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5162, - "mutability": "mutable", - "name": "_degenNFT", - "nameLocation": "5954:9:20", - "nodeType": "VariableDeclaration", - "scope": 5262, - "src": "5946:17:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5161, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5946:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5164, - "mutability": "mutable", - "name": "_blacklistHelper", - "nameLocation": "5981:16:20", - "nodeType": "VariableDeclaration", - "scope": 5262, - "src": "5973:24:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5973:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5166, - "mutability": "mutable", - "name": "_expirable", - "nameLocation": "6012:10:20", - "nodeType": "VariableDeclaration", - "scope": 5262, - "src": "6007:15:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5165, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6007:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5904:124:20" - }, - "returnParameters": { - "id": 5168, - "nodeType": "ParameterList", - "parameters": [], - "src": "6029:0:20" - }, - "scope": 7747, - "src": "5893:1002:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [11677], - "body": { - "id": 5349, - "nodeType": "Block", - "src": "8649:1968:20", - "statements": [ - { - "assignments": [5278], - "declarations": [ - { - "constant": false, - "id": 5278, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "8667:14:20", - "nodeType": "VariableDeclaration", - "scope": 5349, - "src": "8659:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5277, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8659:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5285, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5279, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5265, - "src": "8685:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 5280, - "name": "leverageFactor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5269, - "src": "8694:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "8685:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 5282, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "8684:25:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 5283, - "name": "LEVERAGE_DECIMALS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13918, - "src": "8712:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "8684:45:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8659:70:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5287, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "8869:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5286, - "name": "_checkAndUpdateBorrowedBlockLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7032, - "src": "8835:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 5288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8835:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5289, - "nodeType": "ExpressionStatement", - "src": "8835:49:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5291, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "9012:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5290, - "name": "_revertIfOutOfBorrowedLimits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7058, - "src": "8983:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$", - "typeString": "function (uint256) view" - } - }, - "id": 5292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8983:44:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5293, - "nodeType": "ExpressionStatement", - "src": "8983:44:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5295, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5267, - "src": "9162:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5294, - "name": "_revertIfOpenCreditAccountNotAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6951, - "src": "9125:36:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 5296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9125:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5297, - "nodeType": "ExpressionStatement", - "src": "9125:48:20" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5298, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "9258:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9258:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5300, - "nodeType": "ExpressionStatement", - "src": "9258:10:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5302, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "9402:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 5303, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9418:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5301, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "9377:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 5304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9377:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5305, - "nodeType": "ExpressionStatement", - "src": "9377:46:20" - }, - { - "assignments": [null, 5307], - "declarations": [ - null, - { - "constant": false, - "id": 5307, - "mutability": "mutable", - "name": "ltu", - "nameLocation": "9501:3:20", - "nodeType": "VariableDeclaration", - "scope": 5349, - "src": "9493:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5306, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9493:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5312, - "initialValue": { - "arguments": [ - { - "hexValue": "30", - "id": 5310, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9539:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "id": 5308, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "9508:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9522:16:20", - "memberName": "collateralTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 12199, - "src": "9508:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view external returns (address,uint16)" - } - }, - "id": 5311, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9508:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9490:51:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5313, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5265, - "src": "9815:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 5314, - "name": "ltu", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5307, - "src": "9824:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9815:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5316, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "9831:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5317, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "9849:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 5318, - "name": "ltu", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5307, - "src": "9869:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9849:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 5320, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9848:25:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9831:42:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9815:58:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5326, - "nodeType": "IfStatement", - "src": "9811:113:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5323, - "name": "NotEnoughCollateralException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11972, - "src": "9894:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9894:30:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5325, - "nodeType": "RevertStatement", - "src": "9887:37:20" - } - }, - { - "assignments": [5328], - "declarations": [ - { - "constant": false, - "id": 5328, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "10072:13:20", - "nodeType": "VariableDeclaration", - "scope": 5349, - "src": "10064:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5327, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10064:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 5334, - "initialValue": { - "arguments": [ - { - "id": 5331, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "10133:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5332, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5267, - "src": "10161:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5329, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "10088:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10102:17:20", - "memberName": "openCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12011, - "src": "10088:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_address_$", - "typeString": "function (uint256,address) external returns (address)" - } - }, - "id": 5333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10088:93:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10064:117:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 5336, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5267, - "src": "10342:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5337, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5328, - "src": "10366:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5338, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5278, - "src": "10393:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5339, - "name": "referralCode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5271, - "src": "10421:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - ], - "id": 5335, - "name": "OpenCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11494, - "src": "10311:17:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$", - "typeString": "function (address,address,uint256,uint16)" - } - }, - "id": 5340, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10311:132:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5341, - "nodeType": "EmitStatement", - "src": "10306:137:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5343, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5267, - "src": "10552:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5344, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5328, - "src": "10564:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5345, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "10579:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5346, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5265, - "src": "10591:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5342, - "name": "addCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6292, - "src": "10538:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 5347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10538:60:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5348, - "nodeType": "ExpressionStatement", - "src": "10538:60:20" - } - ] - }, - "documentation": { - "id": 5263, - "nodeType": "StructuredDocumentation", - "src": "7378:1082:20", - "text": "@dev Opens credit account, borrows funds from the pool and pulls collateral\n without any additional action.\n - Performs sanity checks to determine whether opening an account is allowed\n - Wraps ETH to WETH and sends it msg. sender is value > 0\n - Requests CreditManager to open a Credit Account with a specified borrowed amount\n - Transfers collateral in the underlying asset from the user\n - Emits OpenCreditAccount event\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account\n @param amount The amount of collateral provided by the borrower\n @param onBehalfOf The address to open an account for. Transfers to it have to be allowed if\n msg.sender != obBehalfOf\n @param leverageFactor Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount\n as the user's own collateral, equivalent to 2x leverage.\n @param referralCode Referral code that is used for potential rewards. 0 if no referral code provided." - }, - "functionSelector": "6c8f225d", - "id": 5350, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5275, - "kind": "modifierInvocation", - "modifierName": { - "id": 5274, - "name": "nonReentrant", - "nameLocations": ["8636:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "8636:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "8636:12:20" - } - ], - "name": "openCreditAccount", - "nameLocation": "8474:17:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5273, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "8627:8:20" - }, - "parameters": { - "id": 5272, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5265, - "mutability": "mutable", - "name": "amount", - "nameLocation": "8509:6:20", - "nodeType": "VariableDeclaration", - "scope": 5350, - "src": "8501:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5264, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8501:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5267, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "8533:10:20", - "nodeType": "VariableDeclaration", - "scope": 5350, - "src": "8525:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5266, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8525:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5269, - "mutability": "mutable", - "name": "leverageFactor", - "nameLocation": "8560:14:20", - "nodeType": "VariableDeclaration", - "scope": 5350, - "src": "8553:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 5268, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "8553:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5271, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "8591:12:20", - "nodeType": "VariableDeclaration", - "scope": 5350, - "src": "8584:19:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 5270, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "8584:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "8491:118:20" - }, - "returnParameters": { - "id": 5276, - "nodeType": "ParameterList", - "parameters": [], - "src": "8649:0:20" - }, - "scope": 7747, - "src": "8465:2152:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11691], - "body": { - "id": 5421, - "nodeType": "Block", - "src": "11615:1495:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5368, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "11742:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5367, - "name": "_checkAndUpdateBorrowedBlockLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7032, - "src": "11708:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 5369, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11708:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5370, - "nodeType": "ExpressionStatement", - "src": "11708:49:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5372, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5355, - "src": "11891:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5371, - "name": "_revertIfOpenCreditAccountNotAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6951, - "src": "11854:36:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 5373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11854:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5374, - "nodeType": "ExpressionStatement", - "src": "11854:48:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5376, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "12037:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5375, - "name": "_revertIfOutOfBorrowedLimits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7058, - "src": "12008:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$", - "typeString": "function (uint256) view" - } - }, - "id": 5377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12008:44:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5378, - "nodeType": "ExpressionStatement", - "src": "12008:44:20" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5379, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "12138:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12138:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5381, - "nodeType": "ExpressionStatement", - "src": "12138:10:20" - }, - { - "expression": { - "arguments": [ - { - "id": 5383, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "12282:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 5384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12298:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5382, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "12257:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 5385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12257:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5386, - "nodeType": "ExpressionStatement", - "src": "12257:46:20" - }, - { - "assignments": [5388], - "declarations": [ - { - "constant": false, - "id": 5388, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "12401:13:20", - "nodeType": "VariableDeclaration", - "scope": 5421, - "src": "12393:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5387, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12393:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 5394, - "initialValue": { - "arguments": [ - { - "id": 5391, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "12462:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5392, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5355, - "src": "12490:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5389, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "12417:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5390, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12431:17:20", - "memberName": "openCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12011, - "src": "12417:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_address_$", - "typeString": "function (uint256,address) external returns (address)" - } - }, - "id": 5393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12417:93:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12393:117:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 5396, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5355, - "src": "12598:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5397, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5388, - "src": "12622:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5398, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5353, - "src": "12649:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5399, - "name": "referralCode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5361, - "src": "12677:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - ], - "id": 5395, - "name": "OpenCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11494, - "src": "12567:17:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$", - "typeString": "function (address,address,uint256,uint16)" - } - }, - "id": 5400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12567:132:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5401, - "nodeType": "EmitStatement", - "src": "12562:137:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5402, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5359, - "src": "12843:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 5403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12849:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "12843:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5404, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12859:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12843:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5414, - "nodeType": "IfStatement", - "src": "12839:92:20", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 5407, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5359, - "src": "12885:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - { - "id": 5408, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5355, - "src": "12892:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5409, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5388, - "src": "12904:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "66616c7365", - "id": 5410, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12919:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "74727565", - "id": 5411, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12926:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5406, - "name": "_multicall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "12874:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (struct MultiCall calldata[] calldata,address,address,bool,bool)" - } - }, - "id": 5412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12874:57:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5413, - "nodeType": "ExpressionStatement", - "src": "12874:57:20" - } - }, - { - "expression": { - "arguments": [ - { - "id": 5418, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5388, - "src": "13074:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5415, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "13040:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13054:19:20", - "memberName": "fullCollateralCheck", - "nodeType": "MemberAccess", - "referencedDeclaration": 12116, - "src": "13040:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 5419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13040:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5420, - "nodeType": "ExpressionStatement", - "src": "13040:48:20" - } - ] - }, - "documentation": { - "id": 5351, - "nodeType": "StructuredDocumentation", - "src": "10623:781:20", - "text": "@dev Opens a Credit Account and runs a batch of operations in a multicall\n - Opens credit account with the desired borrowed amount\n - Executes all operations in a multicall\n - Checks that the new account has enough collateral\n - Emits OpenCreditAccount event\n @param borrowedAmount Debt size\n @param onBehalfOf The address to open an account for. Transfers to it have to be allowed if\n msg.sender != onBehalfOf\n @param calls The array of MultiCall structs encoding the required operations. Generally must have\n at least a call to addCollateral, as otherwise the health check at the end will fail.\n @param referralCode Referral code which is used for potential rewards. 0 if no referral code provided" - }, - "functionSelector": "7071b7c5", - "id": 5422, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5365, - "kind": "modifierInvocation", - "modifierName": { - "id": 5364, - "name": "nonReentrant", - "nameLocations": ["11602:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "11602:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "11602:12:20" - } - ], - "name": "openCreditAccountMulticall", - "nameLocation": "11418:26:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5363, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "11593:8:20" - }, - "parameters": { - "id": 5362, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5353, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "11462:14:20", - "nodeType": "VariableDeclaration", - "scope": 5422, - "src": "11454:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5352, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11454:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5355, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "11494:10:20", - "nodeType": "VariableDeclaration", - "scope": 5422, - "src": "11486:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11486:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5359, - "mutability": "mutable", - "name": "calls", - "nameLocation": "11535:5:20", - "nodeType": "VariableDeclaration", - "scope": 5422, - "src": "11514:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5357, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5356, - "name": "MultiCall", - "nameLocations": ["11514:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "11514:9:20" - }, - "referencedDeclaration": 14040, - "src": "11514:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5358, - "nodeType": "ArrayTypeName", - "src": "11514:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5361, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "11557:12:20", - "nodeType": "VariableDeclaration", - "scope": 5422, - "src": "11550:19:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 5360, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "11550:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "11444:131:20" - }, - "returnParameters": { - "id": 5366, - "nodeType": "ParameterList", - "parameters": [], - "src": "11615:0:20" - }, - "scope": 7747, - "src": "11409:1701:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11717], - "body": { - "id": 5445, - "nodeType": "Block", - "src": "13429:62:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5440, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5425, - "src": "13459:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5441, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5427, - "src": "13463:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5442, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5433, - "src": "13478:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5439, - "name": "_closeCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5561, - "src": "13439:19:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13439:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5444, - "nodeType": "ExpressionStatement", - "src": "13439:45:20" - } - ] - }, - "documentation": { - "id": 5423, - "nodeType": "StructuredDocumentation", - "src": "13116:134:20", - "text": "@dev A version of `closeCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "5f73fbec", - "id": 5446, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5437, - "kind": "modifierInvocation", - "modifierName": { - "id": 5436, - "name": "nonReentrant", - "nameLocations": ["13416:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "13416:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "13416:12:20" - } - ], - "name": "closeCreditAccount", - "nameLocation": "13264:18:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5435, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13407:8:20" - }, - "parameters": { - "id": 5434, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5425, - "mutability": "mutable", - "name": "to", - "nameLocation": "13300:2:20", - "nodeType": "VariableDeclaration", - "scope": 5446, - "src": "13292:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5424, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13292:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5427, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "13320:13:20", - "nodeType": "VariableDeclaration", - "scope": 5446, - "src": "13312:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5426, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13312:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5429, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5446, - "src": "13343:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5428, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "13343:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5433, - "mutability": "mutable", - "name": "calls", - "nameLocation": "13378:5:20", - "nodeType": "VariableDeclaration", - "scope": 5446, - "src": "13357:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5431, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5430, - "name": "MultiCall", - "nameLocations": ["13357:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "13357:9:20" - }, - "referencedDeclaration": 14040, - "src": "13357:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5432, - "nodeType": "ArrayTypeName", - "src": "13357:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "13282:107:20" - }, - "returnParameters": { - "id": 5438, - "nodeType": "ParameterList", - "parameters": [], - "src": "13429:0:20" - }, - "scope": 7747, - "src": "13255:236:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11703], - "body": { - "id": 5467, - "nodeType": "Block", - "src": "14708:62:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5462, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5449, - "src": "14738:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5463, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5451, - "src": "14742:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5464, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5455, - "src": "14757:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5461, - "name": "_closeCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5561, - "src": "14718:19:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5465, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14718:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5466, - "nodeType": "ExpressionStatement", - "src": "14718:45:20" - } - ] - }, - "documentation": { - "id": 5447, - "nodeType": "StructuredDocumentation", - "src": "13497:1046:20", - "text": "@dev Runs a batch of transactions within a multicall and closes the account\n - Wraps ETH to WETH and sends it msg.sender if value > 0\n - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying\n in order to pay the debt.\n - Closes credit account:\n + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying\n from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender.\n + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked\n to be skipped in skipTokenMask\n - Emits a CloseCreditAccount event\n @param to Address to send funds to during account closing\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before closing the account." - }, - "functionSelector": "12de90c9", - "id": 5468, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5459, - "kind": "modifierInvocation", - "modifierName": { - "id": 5458, - "name": "nonReentrant", - "nameLocations": ["14695:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "14695:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "14695:12:20" - } - ], - "name": "closeCreditAccount", - "nameLocation": "14557:18:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5457, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "14686:8:20" - }, - "parameters": { - "id": 5456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5449, - "mutability": "mutable", - "name": "to", - "nameLocation": "14593:2:20", - "nodeType": "VariableDeclaration", - "scope": 5468, - "src": "14585:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5448, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14585:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5451, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "14613:13:20", - "nodeType": "VariableDeclaration", - "scope": 5468, - "src": "14605:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5450, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14605:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5455, - "mutability": "mutable", - "name": "calls", - "nameLocation": "14657:5:20", - "nodeType": "VariableDeclaration", - "scope": 5468, - "src": "14636:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5453, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5452, - "name": "MultiCall", - "nameLocations": ["14636:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "14636:9:20" - }, - "referencedDeclaration": 14040, - "src": "14636:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5454, - "nodeType": "ArrayTypeName", - "src": "14636:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "14575:93:20" - }, - "returnParameters": { - "id": 5460, - "nodeType": "ParameterList", - "parameters": [], - "src": "14708:0:20" - }, - "scope": 7747, - "src": "14548:222:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 5560, - "nodeType": "Block", - "src": "14955:1439:20", - "statements": [ - { - "assignments": [5481], - "declarations": [ - { - "constant": false, - "id": 5481, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "15006:13:20", - "nodeType": "VariableDeclaration", - "scope": 5560, - "src": "14998:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14998:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 5487, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 5484, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "15074:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15078:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "15074:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5482, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "15022:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15036:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "15022:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 5486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15022:72:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "14998:96:20" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5488, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "15170:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15170:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5490, - "nodeType": "ExpressionStatement", - "src": "15170:10:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5491, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5477, - "src": "15279:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 5492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15285:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "15279:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15295:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "15279:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5504, - "nodeType": "IfStatement", - "src": "15275:92:20", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 5496, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5477, - "src": "15321:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - { - "expression": { - "id": 5497, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "15328:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15332:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "15328:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5499, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5481, - "src": "15340:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "74727565", - "id": 5500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15355:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "hexValue": "66616c7365", - "id": 5501, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15361:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5495, - "name": "_multicall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "15310:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (struct MultiCall calldata[] calldata,address,address,bool,bool)" - } - }, - "id": 5502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15310:57:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5503, - "nodeType": "ExpressionStatement", - "src": "15310:57:20" - } - }, - { - "assignments": [5506], - "declarations": [ - { - "constant": false, - "id": 5506, - "mutability": "mutable", - "name": "availableLiquidityBefore", - "nameLocation": "15406:24:20", - "nodeType": "VariableDeclaration", - "scope": 5560, - "src": "15398:32:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5505, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15398:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5509, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5507, - "name": "_getAvailableLiquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7605, - "src": "15433:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 5508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15433:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15398:59:20" - }, - { - "assignments": [5511, 5513, null], - "declarations": [ - { - "constant": false, - "id": 5511, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "15489:14:20", - "nodeType": "VariableDeclaration", - "scope": 5560, - "src": "15481:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5510, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15481:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5513, - "mutability": "mutable", - "name": "borrowAmountWithInterest", - "nameLocation": "15525:24:20", - "nodeType": "VariableDeclaration", - "scope": 5560, - "src": "15517:32:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5512, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15517:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - null - ], - "id": 5518, - "initialValue": { - "arguments": [ - { - "id": 5516, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5481, - "src": "15611:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5514, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "15564:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15578:32:20", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "15564:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 5517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15564:61:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15467:158:20" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 5522, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "15749:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5523, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15753:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "15749:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 5524, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "15773:13:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 5525, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "15787:13:20", - "memberName": "CLOSE_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11937, - "src": "15773:27:20", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - { - "hexValue": "30", - "id": 5526, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15814:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "expression": { - "id": 5527, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "15829:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15833:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "15829:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5529, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5471, - "src": "15853:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5530, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5473, - "src": "15869:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 5531, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15896:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 5519, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "15703:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15717:18:20", - "memberName": "closeCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12032, - "src": "15703:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_enum$_ClosureAction_$11941_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,enum ClosureAction,uint256,address,address,uint256,bool) external returns (uint256)" - } - }, - "id": 5532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15703:208:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5533, - "nodeType": "ExpressionStatement", - "src": "15703:208:20" - }, - { - "assignments": [5535], - "declarations": [ - { - "constant": false, - "id": 5535, - "mutability": "mutable", - "name": "availableLiquidityAfter", - "nameLocation": "15946:23:20", - "nodeType": "VariableDeclaration", - "scope": 5560, - "src": "15938:31:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5534, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15938:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5538, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5536, - "name": "_getAvailableLiquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7605, - "src": "15972:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 5537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15972:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15938:58:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5539, - "name": "availableLiquidityAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5535, - "src": "16024:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5540, - "name": "availableLiquidityBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5506, - "src": "16062:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 5541, - "name": "borrowAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5513, - "src": "16089:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16062:51:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16024:89:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5548, - "nodeType": "IfStatement", - "src": "16007:180:20", - "trueBody": { - "id": 5547, - "nodeType": "Block", - "src": "16124:63:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5544, - "name": "LiquiditySanityCheckException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11658, - "src": "16145:29:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16145:31:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5546, - "nodeType": "RevertStatement", - "src": "16138:38:20" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 5550, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5511, - "src": "16258:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 5551, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16274:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5549, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "16233:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 5552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16233:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5553, - "nodeType": "ExpressionStatement", - "src": "16233:47:20" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 5555, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "16359:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5556, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16363:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "16359:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5557, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5471, - "src": "16371:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5554, - "name": "CloseCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11501, - "src": "16340:18:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 5558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16340:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5559, - "nodeType": "EmitStatement", - "src": "16335:39:20" - } - ] - }, - "documentation": { - "id": 5469, - "nodeType": "StructuredDocumentation", - "src": "14776:43:20", - "text": "@dev IMPLEMENTATION: closeCreditAccount" - }, - "id": 5561, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_closeCreditAccount", - "nameLocation": "14833:19:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5478, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5471, - "mutability": "mutable", - "name": "to", - "nameLocation": "14870:2:20", - "nodeType": "VariableDeclaration", - "scope": 5561, - "src": "14862:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5470, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14862:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5473, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "14890:13:20", - "nodeType": "VariableDeclaration", - "scope": 5561, - "src": "14882:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5472, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14882:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5477, - "mutability": "mutable", - "name": "calls", - "nameLocation": "14934:5:20", - "nodeType": "VariableDeclaration", - "scope": 5561, - "src": "14913:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5475, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5474, - "name": "MultiCall", - "nameLocations": ["14913:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "14913:9:20" - }, - "referencedDeclaration": 14040, - "src": "14913:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5476, - "nodeType": "ArrayTypeName", - "src": "14913:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "14852:93:20" - }, - "returnParameters": { - "id": 5479, - "nodeType": "ParameterList", - "parameters": [], - "src": "14955:0:20" - }, - "scope": 7747, - "src": "14824:1570:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11731], - "body": { - "id": 5585, - "nodeType": "Block", - "src": "18693:76:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5579, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5564, - "src": "18727:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5580, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5566, - "src": "18737:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5581, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5568, - "src": "18741:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5582, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5572, - "src": "18756:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5578, - "name": "_liquidateCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5717, - "src": "18703:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18703:59:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5584, - "nodeType": "ExpressionStatement", - "src": "18703:59:20" - } - ] - }, - "documentation": { - "id": 5562, - "nodeType": "StructuredDocumentation", - "src": "16400:2098:20", - "text": "@dev Runs a batch of transactions within a multicall and liquidates the account\n - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1.\n Total value has to be computed before the multicall, otherwise the liquidator would be able\n to manipulate it.\n - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0\n - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying\n in order to pay the debt.\n - Liquidate credit account:\n + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees,\n only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take\n totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower\n as totalValue * liquidationDiscount - amountToPool.\n + If borrower happens to be blacklisted in the underlying asset, sends funds to the blacklist helper\n and marks them as claimable by the borrower.\n + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying\n from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator.\n + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked\n to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted\n during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying\n - Emits LiquidateCreditAccount event\n @param to Address to send funds to after liquidation\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before liquidating the account." - }, - "functionSelector": "5c1ca80f", - "id": 5586, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5576, - "kind": "modifierInvocation", - "modifierName": { - "id": 5575, - "name": "nonReentrant", - "nameLocations": ["18680:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "18680:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "18680:12:20" - } - ], - "name": "liquidateCreditAccount", - "nameLocation": "18512:22:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5574, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "18671:8:20" - }, - "parameters": { - "id": 5573, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5564, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "18552:8:20", - "nodeType": "VariableDeclaration", - "scope": 5586, - "src": "18544:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5563, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18544:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5566, - "mutability": "mutable", - "name": "to", - "nameLocation": "18578:2:20", - "nodeType": "VariableDeclaration", - "scope": 5586, - "src": "18570:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5565, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18570:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5568, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "18598:13:20", - "nodeType": "VariableDeclaration", - "scope": 5586, - "src": "18590:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5567, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18590:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5572, - "mutability": "mutable", - "name": "calls", - "nameLocation": "18642:5:20", - "nodeType": "VariableDeclaration", - "scope": 5586, - "src": "18621:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5570, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5569, - "name": "MultiCall", - "nameLocations": ["18621:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "18621:9:20" - }, - "referencedDeclaration": 14040, - "src": "18621:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5571, - "nodeType": "ArrayTypeName", - "src": "18621:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "18534:119:20" - }, - "returnParameters": { - "id": 5577, - "nodeType": "ParameterList", - "parameters": [], - "src": "18693:0:20" - }, - "scope": 7747, - "src": "18503:266:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11747], - "body": { - "id": 5612, - "nodeType": "Block", - "src": "19122:76:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5606, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5589, - "src": "19156:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5607, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5591, - "src": "19166:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5608, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5593, - "src": "19170:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5609, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5599, - "src": "19185:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5605, - "name": "_liquidateCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5717, - "src": "19132:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19132:59:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5611, - "nodeType": "ExpressionStatement", - "src": "19132:59:20" - } - ] - }, - "documentation": { - "id": 5587, - "nodeType": "StructuredDocumentation", - "src": "18775:138:20", - "text": "@dev A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "5d91a0e0", - "id": 5613, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5603, - "kind": "modifierInvocation", - "modifierName": { - "id": 5602, - "name": "nonReentrant", - "nameLocations": ["19109:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "19109:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "19109:12:20" - } - ], - "name": "liquidateCreditAccount", - "nameLocation": "18927:22:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5601, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "19100:8:20" - }, - "parameters": { - "id": 5600, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5589, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "18967:8:20", - "nodeType": "VariableDeclaration", - "scope": 5613, - "src": "18959:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5588, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18959:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5591, - "mutability": "mutable", - "name": "to", - "nameLocation": "18993:2:20", - "nodeType": "VariableDeclaration", - "scope": 5613, - "src": "18985:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5590, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18985:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5593, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "19013:13:20", - "nodeType": "VariableDeclaration", - "scope": 5613, - "src": "19005:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5592, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19005:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5595, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5613, - "src": "19036:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5594, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19036:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5599, - "mutability": "mutable", - "name": "calls", - "nameLocation": "19071:5:20", - "nodeType": "VariableDeclaration", - "scope": 5613, - "src": "19050:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5597, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5596, - "name": "MultiCall", - "nameLocations": ["19050:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "19050:9:20" - }, - "referencedDeclaration": 14040, - "src": "19050:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5598, - "nodeType": "ArrayTypeName", - "src": "19050:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "18949:133:20" - }, - "returnParameters": { - "id": 5604, - "nodeType": "ParameterList", - "parameters": [], - "src": "19122:0:20" - }, - "scope": 7747, - "src": "18918:280:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 5716, - "nodeType": "Block", - "src": "19417:1595:20", - "statements": [ - { - "assignments": [5628], - "declarations": [ - { - "constant": false, - "id": 5628, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "19523:13:20", - "nodeType": "VariableDeclaration", - "scope": 5716, - "src": "19515:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19515:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 5633, - "initialValue": { - "arguments": [ - { - "id": 5631, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5616, - "src": "19591:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5629, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "19539:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19553:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "19539:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 5632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19539:70:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19515:94:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5639, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5634, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5618, - "src": "19686:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5637, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19700:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "19692:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19692:7:20", - "typeDescriptions": {} - } - }, - "id": 5638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19692:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "19686:16:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5643, - "nodeType": "IfStatement", - "src": "19682:51:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5640, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "19711:20:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19711:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5642, - "nodeType": "RevertStatement", - "src": "19704:29:20" - } - }, - { - "assignments": [5645, 5647], - "declarations": [ - { - "constant": false, - "id": 5645, - "mutability": "mutable", - "name": "isLiquidatable", - "nameLocation": "19866:14:20", - "nodeType": "VariableDeclaration", - "scope": 5716, - "src": "19861:19:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5644, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19861:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5647, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "19890:10:20", - "nodeType": "VariableDeclaration", - "scope": 5716, - "src": "19882:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5646, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19882:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5651, - "initialValue": { - "arguments": [ - { - "id": 5649, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5628, - "src": "19940:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5648, - "name": "_isAccountLiquidatable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7572, - "src": "19904:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$_t_uint256_$", - "typeString": "function (address) view returns (bool,uint256)" - } - }, - "id": 5650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19904:59:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19860:103:20" - }, - { - "condition": { - "id": 5653, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "20044:15:20", - "subExpression": { - "id": 5652, - "name": "isLiquidatable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5645, - "src": "20045:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5657, - "nodeType": "IfStatement", - "src": "20040:84:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5654, - "name": "CantLiquidateWithSuchHealthFactorException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11611, - "src": "20080:42:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20080:44:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5656, - "nodeType": "RevertStatement", - "src": "20073:51:20" - } - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5658, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "20201:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20201:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5660, - "nodeType": "ExpressionStatement", - "src": "20201:10:20" - }, - { - "assignments": [5662], - "declarations": [ - { - "constant": false, - "id": 5662, - "mutability": "mutable", - "name": "emergencyLiquidation", - "nameLocation": "20314:20:20", - "nodeType": "VariableDeclaration", - "scope": 5716, - "src": "20309:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5661, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "20309:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 5666, - "initialValue": { - "arguments": [ - { - "hexValue": "74727565", - "id": 5664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20365:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5663, - "name": "_checkIfEmergencyLiquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "20337:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_bool_$", - "typeString": "function (bool) returns (bool)" - } - }, - "id": 5665, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20337:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20309:61:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5667, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5624, - "src": "20385:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 5668, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20391:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "20385:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5669, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20401:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "20385:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5679, - "nodeType": "IfStatement", - "src": "20381:90:20", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 5672, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5624, - "src": "20427:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - { - "id": 5673, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5616, - "src": "20434:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5674, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5628, - "src": "20444:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "74727565", - "id": 5675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20459:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "hexValue": "66616c7365", - "id": 5676, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20465:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5671, - "name": "_multicall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "20416:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (struct MultiCall calldata[] calldata,address,address,bool,bool)" - } - }, - "id": 5677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20416:55:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5678, - "nodeType": "ExpressionStatement", - "src": "20416:55:20" - } - }, - { - "condition": { - "id": 5680, - "name": "emergencyLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5662, - "src": "20499:20:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5696, - "nodeType": "IfStatement", - "src": "20495:214:20", - "trueBody": { - "id": 5695, - "nodeType": "Block", - "src": "20521:188:20", - "statements": [ - { - "expression": { - "id": 5689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5681, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5647, - "src": "20535:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5682, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5647, - "src": "20565:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 5683, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "20578:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 5684, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20585:28:20", - "memberName": "emergencyLiquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5040, - "src": "20578:35:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "20565:48:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 5686, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "20564:50:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 5687, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "20633:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "20564:86:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20535:115:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5690, - "nodeType": "ExpressionStatement", - "src": "20535:115:20" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "66616c7365", - "id": 5692, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20692:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5691, - "name": "_checkIfEmergencyLiquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "20664:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_bool_$", - "typeString": "function (bool) returns (bool)" - } - }, - "id": 5693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20664:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5694, - "nodeType": "ExpressionStatement", - "src": "20664:34:20" - } - ] - } - }, - { - "assignments": [5698], - "declarations": [ - { - "constant": false, - "id": 5698, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "20727:14:20", - "nodeType": "VariableDeclaration", - "scope": 5716, - "src": "20719:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5697, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20719:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5707, - "initialValue": { - "arguments": [ - { - "id": 5700, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5647, - "src": "20781:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5701, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5628, - "src": "20805:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5702, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5616, - "src": "20832:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5703, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5618, - "src": "20854:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5704, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5620, - "src": "20870:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 5705, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20897:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5699, - "name": "_closeLiquidatedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6020, - "src": "20744:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (uint256,address,address,address,uint256,bool) returns (uint256)" - } - }, - "id": 5706, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20744:168:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "20719:193:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 5709, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5616, - "src": "20951:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 5710, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "20961:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20965:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "20961:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5712, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5618, - "src": "20973:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5713, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5698, - "src": "20977:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5708, - "name": "LiquidateCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11512, - "src": "20928:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 5714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20928:64:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5715, - "nodeType": "EmitStatement", - "src": "20923:69:20" - } - ] - }, - "documentation": { - "id": 5614, - "nodeType": "StructuredDocumentation", - "src": "19204:47:20", - "text": "@dev IMPLEMENTATION: liquidateCreditAccount" - }, - "id": 5717, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_liquidateCreditAccount", - "nameLocation": "19265:23:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5625, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5616, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "19306:8:20", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "19298:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5615, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19298:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5618, - "mutability": "mutable", - "name": "to", - "nameLocation": "19332:2:20", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "19324:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5617, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19324:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5620, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "19352:13:20", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "19344:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5619, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19344:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5624, - "mutability": "mutable", - "name": "calls", - "nameLocation": "19396:5:20", - "nodeType": "VariableDeclaration", - "scope": 5717, - "src": "19375:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5622, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5621, - "name": "MultiCall", - "nameLocations": ["19375:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "19375:9:20" - }, - "referencedDeclaration": 14040, - "src": "19375:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5623, - "nodeType": "ArrayTypeName", - "src": "19375:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "19288:119:20" - }, - "returnParameters": { - "id": 5626, - "nodeType": "ParameterList", - "parameters": [], - "src": "19417:0:20" - }, - "scope": 7747, - "src": "19256:1756:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11761], - "body": { - "id": 5741, - "nodeType": "Block", - "src": "22283:83:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5735, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5720, - "src": "22324:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5736, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5722, - "src": "22334:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5737, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5724, - "src": "22338:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5738, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5728, - "src": "22353:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5734, - "name": "_liquidateExpiredCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5873, - "src": "22293:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22293:66:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5740, - "nodeType": "ExpressionStatement", - "src": "22293:66:20" - } - ] - }, - "documentation": { - "id": 5718, - "nodeType": "StructuredDocumentation", - "src": "21018:1063:20", - "text": "@dev Runs a batch of transactions within a multicall and liquidates the account when\n this Credit Facade is expired\n The general flow of liquidation is nearly the same as normal liquidations, with two main differences:\n - An account can be liquidated on an expired Credit Facade even with hf > 1. However,\n no accounts can be liquidated through this function if the Credit Facade is not expired.\n - Liquidation premiums and fees for liquidating expired accounts are reduced.\n It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade\n is expired.\n @param to Address to send funds to after liquidation\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before liquidating the account.\n @notice See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - }, - "functionSelector": "26aac859", - "id": 5742, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5732, - "kind": "modifierInvocation", - "modifierName": { - "id": 5731, - "name": "nonReentrant", - "nameLocations": ["22270:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "22270:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "22270:12:20" - } - ], - "name": "liquidateExpiredCreditAccount", - "nameLocation": "22095:29:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5730, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "22261:8:20" - }, - "parameters": { - "id": 5729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5720, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "22142:8:20", - "nodeType": "VariableDeclaration", - "scope": 5742, - "src": "22134:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5719, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22134:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5722, - "mutability": "mutable", - "name": "to", - "nameLocation": "22168:2:20", - "nodeType": "VariableDeclaration", - "scope": 5742, - "src": "22160:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5721, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22160:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5724, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "22188:13:20", - "nodeType": "VariableDeclaration", - "scope": 5742, - "src": "22180:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5723, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "22180:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5728, - "mutability": "mutable", - "name": "calls", - "nameLocation": "22232:5:20", - "nodeType": "VariableDeclaration", - "scope": 5742, - "src": "22211:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5726, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5725, - "name": "MultiCall", - "nameLocations": ["22211:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "22211:9:20" - }, - "referencedDeclaration": 14040, - "src": "22211:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5727, - "nodeType": "ArrayTypeName", - "src": "22211:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "22124:119:20" - }, - "returnParameters": { - "id": 5733, - "nodeType": "ParameterList", - "parameters": [], - "src": "22283:0:20" - }, - "scope": 7747, - "src": "22086:280:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [11777], - "body": { - "id": 5768, - "nodeType": "Block", - "src": "22733:83:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5762, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5745, - "src": "22774:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5763, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5747, - "src": "22784:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5764, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5749, - "src": "22788:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5765, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5755, - "src": "22803:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - ], - "id": 5761, - "name": "_liquidateExpiredCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5873, - "src": "22743:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$returns$__$", - "typeString": "function (address,address,uint256,struct MultiCall calldata[] calldata)" - } - }, - "id": 5766, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22743:66:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5767, - "nodeType": "ExpressionStatement", - "src": "22743:66:20" - } - ] - }, - "documentation": { - "id": 5743, - "nodeType": "StructuredDocumentation", - "src": "22372:145:20", - "text": "@dev A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "82871ace", - "id": 5769, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 5759, - "kind": "modifierInvocation", - "modifierName": { - "id": 5758, - "name": "nonReentrant", - "nameLocations": ["22720:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "22720:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "22720:12:20" - } - ], - "name": "liquidateExpiredCreditAccount", - "nameLocation": "22531:29:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 5757, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "22711:8:20" - }, - "parameters": { - "id": 5756, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5745, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "22578:8:20", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "22570:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5744, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22570:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5747, - "mutability": "mutable", - "name": "to", - "nameLocation": "22604:2:20", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "22596:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5746, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22596:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5749, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "22624:13:20", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "22616:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5748, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "22616:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5751, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "22647:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5750, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "22647:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5755, - "mutability": "mutable", - "name": "calls", - "nameLocation": "22682:5:20", - "nodeType": "VariableDeclaration", - "scope": 5769, - "src": "22661:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5753, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5752, - "name": "MultiCall", - "nameLocations": ["22661:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "22661:9:20" - }, - "referencedDeclaration": 14040, - "src": "22661:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5754, - "nodeType": "ArrayTypeName", - "src": "22661:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "22560:133:20" - }, - "returnParameters": { - "id": 5760, - "nodeType": "ParameterList", - "parameters": [], - "src": "22733:0:20" - }, - "scope": 7747, - "src": "22522:294:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 5872, - "nodeType": "Block", - "src": "23049:1562:20", - "statements": [ - { - "assignments": [5784], - "declarations": [ - { - "constant": false, - "id": 5784, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "23155:13:20", - "nodeType": "VariableDeclaration", - "scope": 5872, - "src": "23147:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23147:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 5789, - "initialValue": { - "arguments": [ - { - "id": 5787, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5772, - "src": "23223:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5785, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "23171:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5786, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23185:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "23171:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 5788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23171:70:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23147:94:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 5795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5790, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5774, - "src": "23306:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 5793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23320:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5792, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "23312:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5791, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "23312:7:20", - "typeDescriptions": {} - } - }, - "id": 5794, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23312:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "23306:16:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5799, - "nodeType": "IfStatement", - "src": "23302:51:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5796, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "23331:20:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23331:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5798, - "nodeType": "RevertStatement", - "src": "23324:29:20" - } - }, - { - "condition": { - "id": 5802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "23440:13:20", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5800, - "name": "_isExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7591, - "src": "23441:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 5801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23441:12:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5807, - "nodeType": "IfStatement", - "src": "23436:102:20", - "trueBody": { - "id": 5806, - "nodeType": "Block", - "src": "23455:83:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5803, - "name": "CantLiquidateNonExpiredException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11614, - "src": "23476:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23476:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5805, - "nodeType": "RevertStatement", - "src": "23469:41:20" - } - ] - } - }, - { - "assignments": [5809, null], - "declarations": [ - { - "constant": false, - "id": 5809, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "23609:10:20", - "nodeType": "VariableDeclaration", - "scope": 5872, - "src": "23601:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5808, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23601:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - null - ], - "id": 5813, - "initialValue": { - "arguments": [ - { - "id": 5811, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5784, - "src": "23640:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5810, - "name": "calcTotalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7345, - "src": "23625:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256)" - } - }, - "id": 5812, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23625:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23600:54:20" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5814, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "23726:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23726:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5816, - "nodeType": "ExpressionStatement", - "src": "23726:10:20" - }, - { - "assignments": [5818], - "declarations": [ - { - "constant": false, - "id": 5818, - "mutability": "mutable", - "name": "emergencyLiquidation", - "nameLocation": "23826:20:20", - "nodeType": "VariableDeclaration", - "scope": 5872, - "src": "23821:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5817, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "23821:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 5822, - "initialValue": { - "arguments": [ - { - "hexValue": "74727565", - "id": 5820, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23877:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5819, - "name": "_checkIfEmergencyLiquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "23849:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_bool_$", - "typeString": "function (bool) returns (bool)" - } - }, - "id": 5821, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23849:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "23821:61:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5823, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5780, - "src": "23897:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 5824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "23903:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "23897:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 5825, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23913:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "23897:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5835, - "nodeType": "IfStatement", - "src": "23893:90:20", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 5828, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5780, - "src": "23939:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - { - "id": 5829, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5772, - "src": "23946:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5830, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5784, - "src": "23956:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "74727565", - "id": 5831, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23971:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "hexValue": "66616c7365", - "id": 5832, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23977:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5827, - "name": "_multicall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "23928:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (struct MultiCall calldata[] calldata,address,address,bool,bool)" - } - }, - "id": 5833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23928:55:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5834, - "nodeType": "ExpressionStatement", - "src": "23928:55:20" - } - }, - { - "condition": { - "id": 5836, - "name": "emergencyLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5818, - "src": "24011:20:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5852, - "nodeType": "IfStatement", - "src": "24007:214:20", - "trueBody": { - "id": 5851, - "nodeType": "Block", - "src": "24033:188:20", - "statements": [ - { - "expression": { - "id": 5845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5837, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5809, - "src": "24047:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5844, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5838, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5809, - "src": "24077:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 5839, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "24090:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 5840, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24097:28:20", - "memberName": "emergencyLiquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5040, - "src": "24090:35:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "24077:48:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 5842, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "24076:50:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 5843, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "24145:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "24076:86:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24047:115:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5846, - "nodeType": "ExpressionStatement", - "src": "24047:115:20" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "66616c7365", - "id": 5848, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24204:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5847, - "name": "_checkIfEmergencyLiquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7073, - "src": "24176:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$_t_bool_$", - "typeString": "function (bool) returns (bool)" - } - }, - "id": 5849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24176:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5850, - "nodeType": "ExpressionStatement", - "src": "24176:34:20" - } - ] - } - }, - { - "assignments": [5854], - "declarations": [ - { - "constant": false, - "id": 5854, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "24239:14:20", - "nodeType": "VariableDeclaration", - "scope": 5872, - "src": "24231:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5853, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24231:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5863, - "initialValue": { - "arguments": [ - { - "id": 5856, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5809, - "src": "24293:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5857, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5784, - "src": "24317:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5858, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5772, - "src": "24344:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5859, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5774, - "src": "24366:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5860, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5776, - "src": "24382:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 5861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24409:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 5855, - "name": "_closeLiquidatedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6020, - "src": "24256:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (uint256,address,address,address,uint256,bool) returns (uint256)" - } - }, - "id": 5862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24256:167:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24231:192:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 5865, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5772, - "src": "24505:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 5866, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "24527:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5867, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "24531:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "24527:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5868, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5774, - "src": "24551:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5869, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5854, - "src": "24567:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5864, - "name": "LiquidateExpiredCreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11523, - "src": "24462:29:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 5870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24462:129:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5871, - "nodeType": "EmitStatement", - "src": "24457:134:20" - } - ] - }, - "documentation": { - "id": 5770, - "nodeType": "StructuredDocumentation", - "src": "22822:54:20", - "text": "@dev IMPLEMENTATION: liquidateExpiredCreditAccount" - }, - "id": 5873, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_liquidateExpiredCreditAccount", - "nameLocation": "22890:30:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5772, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "22938:8:20", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "22930:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5771, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22930:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5774, - "mutability": "mutable", - "name": "to", - "nameLocation": "22964:2:20", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "22956:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5773, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "22956:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5776, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "22984:13:20", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "22976:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5775, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "22976:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5780, - "mutability": "mutable", - "name": "calls", - "nameLocation": "23028:5:20", - "nodeType": "VariableDeclaration", - "scope": 5873, - "src": "23007:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 5778, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5777, - "name": "MultiCall", - "nameLocations": ["23007:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "23007:9:20" - }, - "referencedDeclaration": 14040, - "src": "23007:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 5779, - "nodeType": "ArrayTypeName", - "src": "23007:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "22920:119:20" - }, - "returnParameters": { - "id": 5782, - "nodeType": "ParameterList", - "parameters": [], - "src": "23049:0:20" - }, - "scope": 7747, - "src": "22881:1730:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6019, - "nodeType": "Block", - "src": "24922:2316:20", - "statements": [ - { - "assignments": [5892], - "declarations": [ - { - "constant": false, - "id": 5892, - "mutability": "mutable", - "name": "helperBalance", - "nameLocation": "24940:13:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "24932:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5891, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24932:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5896, - "initialValue": { - "arguments": [ - { - "id": 5894, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5880, - "src": "24971:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5893, - "name": "_isBlacklisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6052, - "src": "24956:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 5895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24956:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24932:48:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5897, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5892, - "src": "25293:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5898, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25309:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "25293:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5908, - "nodeType": "IfStatement", - "src": "25289:126:20", - "trueBody": { - "id": 5907, - "nodeType": "Block", - "src": "25312:103:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5903, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5880, - "src": "25365:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5904, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "25375:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5900, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "25326:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "25340:24:20", - "memberName": "transferAccountOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 12064, - "src": "25326:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 5905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25326:65:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5906, - "nodeType": "ExpressionStatement", - "src": "25326:65:20" - } - ] - } - }, - { - "assignments": [5910], - "declarations": [ - { - "constant": false, - "id": 5910, - "mutability": "mutable", - "name": "availableLiquidityBefore", - "nameLocation": "25433:24:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "25425:32:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5909, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "25425:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5913, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5911, - "name": "_getAvailableLiquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7605, - "src": "25460:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 5912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25460:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "25425:59:20" - }, - { - "assignments": [5915, 5917, null], - "declarations": [ - { - "constant": false, - "id": 5915, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "25517:14:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "25509:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5914, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "25509:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5917, - "mutability": "mutable", - "name": "borrowAmountWithInterest", - "nameLocation": "25553:24:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "25545:32:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5916, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "25545:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - null - ], - "id": 5922, - "initialValue": { - "arguments": [ - { - "id": 5920, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5878, - "src": "25639:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 5918, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "25592:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "25606:32:20", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "25592:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 5921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25592:61:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "25495:158:20" - }, - { - "expression": { - "id": 5945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 5923, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5889, - "src": "25759:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5928, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5926, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5892, - "src": "25822:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5927, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25838:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "25822:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 5930, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5880, - "src": "25860:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "25822:46:20", - "trueExpression": { - "id": 5929, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "25842:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "condition": { - "id": 5932, - "name": "expired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5886, - "src": "25882:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "expression": { - "id": 5935, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "25966:13:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 5936, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "25980:17:20", - "memberName": "LIQUIDATE_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11938, - "src": "25966:31:20", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "id": 5937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "25882:115:20", - "trueExpression": { - "expression": { - "id": 5933, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "25908:13:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 5934, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "25922:25:20", - "memberName": "LIQUIDATE_EXPIRED_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11939, - "src": "25908:39:20", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - { - "id": 5938, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5876, - "src": "26011:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 5939, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "26035:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "26039:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "26035:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5941, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5882, - "src": "26059:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5942, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5884, - "src": "26075:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 5943, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26102:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 5924, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "25776:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 5925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "25790:18:20", - "memberName": "closeCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12032, - "src": "25776:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_enum$_ClosureAction_$11941_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,enum ClosureAction,uint256,address,address,uint256,bool) external returns (uint256)" - } - }, - "id": 5944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25776:341:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25759:358:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5946, - "nodeType": "ExpressionStatement", - "src": "25759:358:20" - }, - { - "assignments": [5948], - "declarations": [ - { - "constant": false, - "id": 5948, - "mutability": "mutable", - "name": "availableLiquidityAfter", - "nameLocation": "26152:23:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "26144:31:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5947, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "26144:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5951, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5949, - "name": "_getAvailableLiquidity", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7605, - "src": "26178:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 5950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26178:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "26144:58:20" - }, - { - "assignments": [5953], - "declarations": [ - { - "constant": false, - "id": 5953, - "mutability": "mutable", - "name": "loss", - "nameLocation": "26221:4:20", - "nodeType": "VariableDeclaration", - "scope": 6019, - "src": "26213:12:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5952, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "26213:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5966, - "initialValue": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5954, - "name": "availableLiquidityAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5948, - "src": "26228:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5957, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5955, - "name": "availableLiquidityBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5910, - "src": "26266:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 5956, - "name": "borrowAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5917, - "src": "26293:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "26266:51:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "26228:89:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 5964, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26456:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 5965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "26228:229:20", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5961, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5959, - "name": "availableLiquidityBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5910, - "src": "26332:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 5960, - "name": "borrowAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5917, - "src": "26375:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "26332:67:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 5962, - "name": "availableLiquidityAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5948, - "src": "26418:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "26332:109:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "26213:244:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5967, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5953, - "src": "26472:4:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5968, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26479:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "26472:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5999, - "nodeType": "IfStatement", - "src": "26468:386:20", - "trueBody": { - "id": 5998, - "nodeType": "Block", - "src": "26482:372:20", - "statements": [ - { - "expression": { - "id": 5974, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5970, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "26496:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 5972, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "26503:23:20", - "memberName": "isIncreaseDebtForbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 5034, - "src": "26496:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 5973, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26529:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "26496:37:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5975, - "nodeType": "ExpressionStatement", - "src": "26496:37:20" - }, - { - "expression": { - "id": 5982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 5976, - "name": "lossParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5105, - "src": "26563:10:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams storage ref" - } - }, - "id": 5978, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "26574:21:20", - "memberName": "currentCumulativeLoss", - "nodeType": "MemberAccess", - "referencedDeclaration": 5051, - "src": "26563:32:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 5979, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5953, - "src": "26599:4:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 5980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "26604:9:20", - "memberName": "toUint128", - "nodeType": "MemberAccess", - "referencedDeclaration": 19157, - "src": "26599:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint128)" - } - }, - "id": 5981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26599:16:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "26563:52:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 5983, - "nodeType": "ExpressionStatement", - "src": "26563:52:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "id": 5988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5984, - "name": "lossParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5105, - "src": "26650:10:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams storage ref" - } - }, - "id": 5985, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "26661:21:20", - "memberName": "currentCumulativeLoss", - "nodeType": "MemberAccess", - "referencedDeclaration": 5051, - "src": "26650:32:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "expression": { - "id": 5986, - "name": "lossParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5105, - "src": "26685:10:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams storage ref" - } - }, - "id": 5987, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "26696:17:20", - "memberName": "maxCumulativeLoss", - "nodeType": "MemberAccess", - "referencedDeclaration": 5054, - "src": "26685:28:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "26650:63:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5993, - "nodeType": "IfStatement", - "src": "26629:168:20", - "trueBody": { - "id": 5992, - "nodeType": "Block", - "src": "26728:69:20", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 5989, - "name": "_pauseCreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7264, - "src": "26746:19:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 5990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26746:21:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5991, - "nodeType": "ExpressionStatement", - "src": "26746:21:20" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 5995, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5953, - "src": "26838:4:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5994, - "name": "IncurLossOnLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11596, - "src": "26815:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 5996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26815:28:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5997, - "nodeType": "EmitStatement", - "src": "26810:33:20" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 6001, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5915, - "src": "26925:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 6002, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26941:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 6000, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "26900:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 6003, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26900:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6004, - "nodeType": "ExpressionStatement", - "src": "26900:47:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6011, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6005, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5892, - "src": "27116:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 6006, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27132:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "27116:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6008, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5889, - "src": "27137:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 6009, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27154:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "27137:18:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "27116:39:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "documentation": "Credit Facade increases borrower's claimable balance in BlacklistHelper, so the\n borrower can recover funds to a different address", - "id": 6018, - "nodeType": "IfStatement", - "src": "27112:120:20", - "trueBody": { - "id": 6017, - "nodeType": "Block", - "src": "27157:75:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6013, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5880, - "src": "27197:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6014, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5892, - "src": "27207:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6012, - "name": "_increaseClaimableBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6101, - "src": "27171:25:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 6015, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27171:50:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6016, - "nodeType": "ExpressionStatement", - "src": "27171:50:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 5874, - "nodeType": "StructuredDocumentation", - "src": "24617:61:20", - "text": "@dev Closes a liquidated credit account, possibly expired" - }, - "id": 6020, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_closeLiquidatedAccount", - "nameLocation": "24692:23:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5887, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5876, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "24733:10:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24725:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5875, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24725:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5878, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "24761:13:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24753:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5877, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24753:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5880, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "24792:8:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24784:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5879, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24784:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5882, - "mutability": "mutable", - "name": "to", - "nameLocation": "24818:2:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24810:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5881, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "24810:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5884, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "24838:13:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24830:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5883, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24830:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5886, - "mutability": "mutable", - "name": "expired", - "nameLocation": "24866:7:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24861:12:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5885, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "24861:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "24715:164:20" - }, - "returnParameters": { - "id": 5890, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5889, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "24906:14:20", - "nodeType": "VariableDeclaration", - "scope": 6020, - "src": "24898:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5888, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24898:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "24897:24:20" - }, - "scope": 7747, - "src": "24683:2555:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6051, - "nodeType": "Block", - "src": "27615:429:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6028, - "name": "isBlacklistableUnderlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5087, - "src": "27642:25:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "arguments": [ - { - "id": 6033, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "27748:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6034, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6023, - "src": "27776:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 6030, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "27700:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6029, - "name": "IBlacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10889, - "src": "27683:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IBlacklistHelper_$10889_$", - "typeString": "type(contract IBlacklistHelper)" - } - }, - "id": 6031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27683:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IBlacklistHelper_$10889", - "typeString": "contract IBlacklistHelper" - } - }, - "id": 6032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27717:13:20", - "memberName": "isBlacklisted", - "nodeType": "MemberAccess", - "referencedDeclaration": 10860, - "src": "27683:47:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) view external returns (bool)" - } - }, - "id": 6035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27683:115:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "27642:156:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6050, - "nodeType": "IfStatement", - "src": "27625:413:20", - "trueBody": { - "id": 6049, - "nodeType": "Block", - "src": "27822:216:20", - "statements": [ - { - "id": 6048, - "nodeType": "UncheckedBlock", - "src": "27880:148:20", - "statements": [ - { - "expression": { - "id": 6046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6037, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6026, - "src": "27908:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6045, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6042, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "27973:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 6039, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "27951:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6038, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "27944:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 6040, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27944:18:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 6041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27963:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "27944:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 6043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27944:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 6044, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28012:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "27944:69:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "27908:105:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6047, - "nodeType": "ExpressionStatement", - "src": "27908:105:20" - } - ] - } - ] - } - } - ] - }, - "documentation": { - "id": 6021, - "nodeType": "StructuredDocumentation", - "src": "27244:169:20", - "text": "@dev Checks whether borrower is blacklisted in the underlying token and, if so,\n returns non-zero value equal to blacklist helper's balance of underlying" - }, - "id": 6052, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isBlacklisted", - "nameLocation": "27508:14:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6024, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6023, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "27531:8:20", - "nodeType": "VariableDeclaration", - "scope": 6052, - "src": "27523:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6022, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27523:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "27522:18:20" - }, - "returnParameters": { - "id": 6027, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6026, - "mutability": "mutable", - "name": "helperBalance", - "nameLocation": "27596:13:20", - "nodeType": "VariableDeclaration", - "scope": 6052, - "src": "27588:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6025, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "27588:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "27587:23:20" - }, - "scope": 7747, - "src": "27499:545:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6100, - "nodeType": "Block", - "src": "28420:525:20", - "statements": [ - { - "assignments": [6061], - "declarations": [ - { - "constant": false, - "id": 6061, - "mutability": "mutable", - "name": "helperBalance", - "nameLocation": "28438:13:20", - "nodeType": "VariableDeclaration", - "scope": 6100, - "src": "28430:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6060, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28430:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6068, - "initialValue": { - "arguments": [ - { - "id": 6066, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "28483:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 6063, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "28461:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6062, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "28454:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 6064, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28454:18:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 6065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28473:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "28454:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 6067, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28454:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "28430:69:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6069, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6061, - "src": "28513:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 6070, - "name": "helperBalanceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6057, - "src": "28529:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "28513:35:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6099, - "nodeType": "IfStatement", - "src": "28509:430:20", - "trueBody": { - "id": 6098, - "nodeType": "Block", - "src": "28550:389:20", - "statements": [ - { - "assignments": [6073], - "declarations": [ - { - "constant": false, - "id": 6073, - "mutability": "mutable", - "name": "amount", - "nameLocation": "28572:6:20", - "nodeType": "VariableDeclaration", - "scope": 6098, - "src": "28564:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6072, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28564:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6074, - "nodeType": "VariableDeclarationStatement", - "src": "28564:14:20" - }, - { - "id": 6083, - "nodeType": "UncheckedBlock", - "src": "28592:91:20", - "statements": [ - { - "expression": { - "id": 6081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6075, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6073, - "src": "28620:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6080, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6076, - "name": "helperBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6061, - "src": "28629:13:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 6077, - "name": "helperBalanceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6057, - "src": "28645:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "28629:35:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 6079, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28667:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "28629:39:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "28620:48:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6082, - "nodeType": "ExpressionStatement", - "src": "28620:48:20" - } - ] - }, - { - "expression": { - "arguments": [ - { - "id": 6088, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "28760:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6089, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6055, - "src": "28788:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6090, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6073, - "src": "28814:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 6085, - "name": "blacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5131, - "src": "28713:15:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6084, - "name": "IBlacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10889, - "src": "28696:16:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IBlacklistHelper_$10889_$", - "typeString": "type(contract IBlacklistHelper)" - } - }, - "id": 6086, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28696:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IBlacklistHelper_$10889", - "typeString": "contract IBlacklistHelper" - } - }, - "id": 6087, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "28730:12:20", - "memberName": "addClaimable", - "nodeType": "MemberAccess", - "referencedDeclaration": 10878, - "src": "28696:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 6091, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28696:138:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6092, - "nodeType": "ExpressionStatement", - "src": "28696:138:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6094, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6055, - "src": "28898:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6095, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6073, - "src": "28908:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6093, - "name": "UnderlyingSentToBlacklistHelper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11530, - "src": "28866:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 6096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28866:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6097, - "nodeType": "EmitStatement", - "src": "28861:54:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 6053, - "nodeType": "StructuredDocumentation", - "src": "28050:252:20", - "text": "@dev Checks if blacklist helper's balance of underlying increased after liquidation\n and, if so, increases the borrower's claimable balance by the difference\n Not relying on `remainingFunds` to support fee-on-transfer tokens" - }, - "id": 6101, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_increaseClaimableBalance", - "nameLocation": "28316:25:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6058, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6055, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "28359:8:20", - "nodeType": "VariableDeclaration", - "scope": 6101, - "src": "28351:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6054, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28351:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6057, - "mutability": "mutable", - "name": "helperBalanceBefore", - "nameLocation": "28385:19:20", - "nodeType": "VariableDeclaration", - "scope": 6101, - "src": "28377:27:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6056, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "28377:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "28341:69:20" - }, - "returnParameters": { - "id": 6059, - "nodeType": "ParameterList", - "parameters": [], - "src": "28420:0:20" - }, - "scope": 7747, - "src": "28307:638:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6149, - "nodeType": "Block", - "src": "29256:1163:20", - "statements": [ - { - "condition": { - "expression": { - "id": 6111, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "29355:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 6112, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29362:23:20", - "memberName": "isIncreaseDebtForbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 5034, - "src": "29355:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6117, - "nodeType": "IfStatement", - "src": "29351:100:20", - "trueBody": { - "id": 6116, - "nodeType": "Block", - "src": "29387:64:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6113, - "name": "IncreaseDebtForbiddenException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11629, - "src": "29408:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29408:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6115, - "nodeType": "RevertStatement", - "src": "29401:39:20" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 6119, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6108, - "src": "29589:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6118, - "name": "_checkAndUpdateBorrowedBlockLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7032, - "src": "29555:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 6120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29555:41:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6121, - "nodeType": "ExpressionStatement", - "src": "29555:41:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6123, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6106, - "src": "29784:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6122, - "name": "_checkForbiddenTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6180, - "src": "29762:21:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$", - "typeString": "function (address) view" - } - }, - "id": 6124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29762:36:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6125, - "nodeType": "ExpressionStatement", - "src": "29762:36:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6127, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6108, - "src": "29919:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 6128, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29927:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 6126, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "29894:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 6129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29894:38:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6130, - "nodeType": "ExpressionStatement", - "src": "29894:38:20" - }, - { - "assignments": [6132], - "declarations": [ - { - "constant": false, - "id": 6132, - "mutability": "mutable", - "name": "newBorrowedAmount", - "nameLocation": "30046:17:20", - "nodeType": "VariableDeclaration", - "scope": 6149, - "src": "30038:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6131, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "30038:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6139, - "initialValue": { - "arguments": [ - { - "id": 6135, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6106, - "src": "30104:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6136, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6108, - "src": "30131:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 6137, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "30151:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 6133, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "30066:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6134, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "30080:10:20", - "memberName": "manageDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 12044, - "src": "30066:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,uint256,bool) external returns (uint256)" - } - }, - "id": 6138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30066:99:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "30038:127:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6141, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6132, - "src": "30288:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6140, - "name": "_revertIfOutOfBorrowedLimits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7058, - "src": "30259:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$", - "typeString": "function (uint256) view" - } - }, - "id": 6142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30259:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6143, - "nodeType": "ExpressionStatement", - "src": "30259:47:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6145, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6104, - "src": "30382:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6146, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6108, - "src": "30392:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6144, - "name": "IncreaseBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11537, - "src": "30359:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 6147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30359:40:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6148, - "nodeType": "EmitStatement", - "src": "30354:45:20" - } - ] - }, - "documentation": { - "id": 6102, - "nodeType": "StructuredDocumentation", - "src": "28951:181:20", - "text": "@dev Increases debt for a Credit Account\n @param borrower Owner of the account\n @param creditAccount CA to increase debt for\n @param amount Amount to borrow" - }, - "id": 6150, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_increaseDebt", - "nameLocation": "29146:13:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6109, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6104, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "29177:8:20", - "nodeType": "VariableDeclaration", - "scope": 6150, - "src": "29169:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6103, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29169:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6106, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "29203:13:20", - "nodeType": "VariableDeclaration", - "scope": 6150, - "src": "29195:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6105, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29195:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6108, - "mutability": "mutable", - "name": "amount", - "nameLocation": "29234:6:20", - "nodeType": "VariableDeclaration", - "scope": 6150, - "src": "29226:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6107, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29226:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "29159:87:20" - }, - "returnParameters": { - "id": 6110, - "nodeType": "ParameterList", - "parameters": [], - "src": "29256:0:20" - }, - "scope": 7747, - "src": "29137:1282:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6179, - "nodeType": "Block", - "src": "31591:319:20", - "statements": [ - { - "assignments": [6157], - "declarations": [ - { - "constant": false, - "id": 6157, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "31609:16:20", - "nodeType": "VariableDeclaration", - "scope": 6179, - "src": "31601:24:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6156, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "31601:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6162, - "initialValue": { - "arguments": [ - { - "id": 6160, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6153, - "src": "31672:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6158, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "31628:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "31642:16:20", - "memberName": "enabledTokensMap", - "nodeType": "MemberAccess", - "referencedDeclaration": 12181, - "src": "31628:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 6161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31628:67:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "31601:94:20" - }, - { - "assignments": [6164], - "declarations": [ - { - "constant": false, - "id": 6164, - "mutability": "mutable", - "name": "forbiddenTokenMask", - "nameLocation": "31713:18:20", - "nodeType": "VariableDeclaration", - "scope": 6179, - "src": "31705:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6163, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "31705:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6168, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 6165, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "31734:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "31748:18:20", - "memberName": "forbiddenTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 12229, - "src": "31734:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 6167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31734:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "31705:63:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6169, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6157, - "src": "31783:16:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 6170, - "name": "forbiddenTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6164, - "src": "31802:18:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "31783:37:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 6172, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "31823:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "31783:41:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6178, - "nodeType": "IfStatement", - "src": "31779:125:20", - "trueBody": { - "id": 6177, - "nodeType": "Block", - "src": "31826:78:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6174, - "name": "ActionProhibitedWithForbiddenTokensException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11652, - "src": "31847:44:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31847:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6176, - "nodeType": "RevertStatement", - "src": "31840:53:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 6151, - "nodeType": "StructuredDocumentation", - "src": "30425:1093:20", - "text": "@dev Checks that there are no intersections between the user's enabled tokens\n and the set of forbidden tokens\n @notice The main purpose of forbidding tokens is to prevent exposing\n pool funds to dangerous or exploited collateral, without immediately\n liquidating accounts that hold the forbidden token\n There are two ways pool funds can be exposed:\n - The CA owner tries to swap borrowed funds to the forbidden asset:\n this will be blocked by checkAndEnableToken, which is invoked for tokenOut\n after every operation;\n - The CA owner with an already enabled forbidden token transfers it\n to the account - they can't use addCollateral / enableToken due to checkAndEnableToken,\n but can transfer the token directly when it is enabled and it will be counted in the collateral -\n an borrows against it. This check is used to prevent this.\n If the owner has a forbidden token and want to take more debt, they must first\n dispose of the token and disable it." - }, - "id": 6180, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkForbiddenTokens", - "nameLocation": "31532:21:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6154, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6153, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "31562:13:20", - "nodeType": "VariableDeclaration", - "scope": 6180, - "src": "31554:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6152, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31554:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "31553:23:20" - }, - "returnParameters": { - "id": 6155, - "nodeType": "ParameterList", - "parameters": [], - "src": "31591:0:20" - }, - "scope": 7747, - "src": "31523:387:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6222, - "nodeType": "Block", - "src": "32225:887:20", - "statements": [ - { - "assignments": [6191, null, null], - "declarations": [ - { - "constant": false, - "id": 6191, - "mutability": "mutable", - "name": "borrowedAmountBefore", - "nameLocation": "32244:20:20", - "nodeType": "VariableDeclaration", - "scope": 6222, - "src": "32236:28:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "32236:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - null, - null - ], - "id": 6196, - "initialValue": { - "arguments": [ - { - "id": 6194, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6185, - "src": "32332:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6192, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "32272:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "32299:32:20", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "32272:59:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 6195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32272:74:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "32235:111:20" - }, - { - "assignments": [6198], - "declarations": [ - { - "constant": false, - "id": 6198, - "mutability": "mutable", - "name": "newBorrowedAmount", - "nameLocation": "32440:17:20", - "nodeType": "VariableDeclaration", - "scope": 6222, - "src": "32432:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6197, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "32432:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6205, - "initialValue": { - "arguments": [ - { - "id": 6201, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6185, - "src": "32498:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6202, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6187, - "src": "32525:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 6203, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32545:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 6199, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "32460:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "32474:10:20", - "memberName": "manageDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 12044, - "src": "32460:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (address,uint256,bool) external returns (uint256)" - } - }, - "id": 6204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32460:100:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "32432:128:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6207, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6198, - "src": "32677:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6206, - "name": "_revertIfOutOfBorrowedLimits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7058, - "src": "32648:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$__$", - "typeString": "function (uint256) view" - } - }, - "id": 6208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32648:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6209, - "nodeType": "ExpressionStatement", - "src": "32648:47:20" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6211, - "name": "borrowedAmountBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6191, - "src": "32941:20:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 6212, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6198, - "src": "32964:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "32941:40:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 6214, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32995:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 6210, - "name": "_checkAndUpdateTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7126, - "src": "32903:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (uint256,bool)" - } - }, - "id": 6215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32903:107:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6216, - "nodeType": "ExpressionStatement", - "src": "32903:107:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6218, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6183, - "src": "33075:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6219, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6187, - "src": "33085:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6217, - "name": "DecreaseBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11544, - "src": "33052:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 6220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33052:40:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6221, - "nodeType": "EmitStatement", - "src": "33047:45:20" - } - ] - }, - "documentation": { - "id": 6181, - "nodeType": "StructuredDocumentation", - "src": "31916:185:20", - "text": "@dev Decreases debt for a Credit Account\n @param borrower Owner of the account\n @param creditAccount Account to decrease debt for\n @param amount Amount to repay" - }, - "id": 6223, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_decreaseDebt", - "nameLocation": "32115:13:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6188, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6183, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "32146:8:20", - "nodeType": "VariableDeclaration", - "scope": 6223, - "src": "32138:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32138:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6185, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "32172:13:20", - "nodeType": "VariableDeclaration", - "scope": 6223, - "src": "32164:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6184, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32164:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6187, - "mutability": "mutable", - "name": "amount", - "nameLocation": "32203:6:20", - "nodeType": "VariableDeclaration", - "scope": 6223, - "src": "32195:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6186, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "32195:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "32128:87:20" - }, - "returnParameters": { - "id": 6189, - "nodeType": "ParameterList", - "parameters": [], - "src": "32225:0:20" - }, - "scope": 7747, - "src": "32106:1006:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11787], - "body": { - "id": 6259, - "nodeType": "Block", - "src": "33480:564:20", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6236, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "33543:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 6237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33543:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6238, - "nodeType": "ExpressionStatement", - "src": "33543:10:20" - }, - { - "assignments": [6240], - "declarations": [ - { - "constant": false, - "id": 6240, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "33634:13:20", - "nodeType": "VariableDeclaration", - "scope": 6259, - "src": "33626:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6239, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33626:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6245, - "initialValue": { - "arguments": [ - { - "id": 6243, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6226, - "src": "33702:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6241, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "33650:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "33664:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "33650:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 6244, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33650:72:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "33626:96:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6247, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6226, - "src": "33759:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6248, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6240, - "src": "33771:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6249, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6228, - "src": "33786:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6250, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6230, - "src": "33793:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6246, - "name": "addCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6292, - "src": "33745:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 6251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33745:55:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6252, - "nodeType": "ExpressionStatement", - "src": "33745:55:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6256, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6240, - "src": "34008:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6253, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "33964:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "33978:29:20", - "memberName": "checkAndOptimizeEnabledTokens", - "nodeType": "MemberAccess", - "referencedDeclaration": 12122, - "src": "33964:43:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 6257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33964:58:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6258, - "nodeType": "ExpressionStatement", - "src": "33964:58:20" - } - ] - }, - "documentation": { - "id": 6224, - "nodeType": "StructuredDocumentation", - "src": "33118:214:20", - "text": "@dev Adds collateral to borrower's credit account\n @param onBehalfOf Address of the borrower whose account is funded\n @param token Address of a collateral token\n @param amount Amount to add" - }, - "functionSelector": "59781034", - "id": 6260, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 6234, - "kind": "modifierInvocation", - "modifierName": { - "id": 6233, - "name": "nonReentrant", - "nameLocations": ["33467:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "33467:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "33467:12:20" - } - ], - "name": "addCollateral", - "nameLocation": "33346:13:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 6232, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "33458:8:20" - }, - "parameters": { - "id": 6231, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6226, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "33377:10:20", - "nodeType": "VariableDeclaration", - "scope": 6260, - "src": "33369:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6225, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33369:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6228, - "mutability": "mutable", - "name": "token", - "nameLocation": "33405:5:20", - "nodeType": "VariableDeclaration", - "scope": 6260, - "src": "33397:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6227, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "33397:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6230, - "mutability": "mutable", - "name": "amount", - "nameLocation": "33428:6:20", - "nodeType": "VariableDeclaration", - "scope": 6260, - "src": "33420:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6229, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "33420:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "33359:81:20" - }, - "returnParameters": { - "id": 6235, - "nodeType": "ParameterList", - "parameters": [], - "src": "33480:0:20" - }, - "scope": 7747, - "src": "33337:707:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 6291, - "nodeType": "Block", - "src": "34194:623:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6272, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6262, - "src": "34519:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6271, - "name": "_revertIfActionOnAccountNotAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6974, - "src": "34484:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$", - "typeString": "function (address) view" - } - }, - "id": 6273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34484:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6274, - "nodeType": "ExpressionStatement", - "src": "34484:46:20" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 6278, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "34664:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34668:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "34664:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6280, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6264, - "src": "34676:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6281, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6266, - "src": "34691:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6282, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6268, - "src": "34698:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 6275, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "34636:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34650:13:20", - "memberName": "addCollateral", - "nodeType": "MemberAccess", - "referencedDeclaration": 12056, - "src": "34636:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256) external" - } - }, - "id": 6283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34636:69:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6284, - "nodeType": "ExpressionStatement", - "src": "34636:69:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6286, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6262, - "src": "34771:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6287, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6266, - "src": "34783:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6288, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6268, - "src": "34790:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6285, - "name": "AddCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11553, - "src": "34757:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 6289, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34757:40:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6290, - "nodeType": "EmitStatement", - "src": "34752:45:20" - } - ] - }, - "id": 6292, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addCollateral", - "nameLocation": "34059:13:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6269, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6262, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "34090:10:20", - "nodeType": "VariableDeclaration", - "scope": 6292, - "src": "34082:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6261, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34082:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6264, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "34118:13:20", - "nodeType": "VariableDeclaration", - "scope": 6292, - "src": "34110:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6263, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34110:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6266, - "mutability": "mutable", - "name": "token", - "nameLocation": "34149:5:20", - "nodeType": "VariableDeclaration", - "scope": 6292, - "src": "34141:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6265, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34141:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6268, - "mutability": "mutable", - "name": "amount", - "nameLocation": "34172:6:20", - "nodeType": "VariableDeclaration", - "scope": 6292, - "src": "34164:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6267, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34164:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "34072:112:20" - }, - "returnParameters": { - "id": 6270, - "nodeType": "ParameterList", - "parameters": [], - "src": "34194:0:20" - }, - "scope": 7747, - "src": "34050:767:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11795], - "body": { - "id": 6335, - "nodeType": "Block", - "src": "35312:620:20", - "statements": [ - { - "assignments": [6304], - "declarations": [ - { - "constant": false, - "id": 6304, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "35379:13:20", - "nodeType": "VariableDeclaration", - "scope": 6335, - "src": "35371:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6303, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "35371:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6310, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 6307, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "35447:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6308, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "35451:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "35447:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6305, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "35395:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "35409:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "35395:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 6309, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35395:72:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "35371:96:20" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6311, - "name": "_wrapETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7512, - "src": "35531:8:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 6312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35531:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6313, - "nodeType": "ExpressionStatement", - "src": "35531:10:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6314, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6297, - "src": "35569:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 6315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "35575:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "35569:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 6316, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "35585:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "35569:17:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6334, - "nodeType": "IfStatement", - "src": "35565:361:20", - "trueBody": { - "id": 6333, - "nodeType": "Block", - "src": "35588:338:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6319, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6297, - "src": "35613:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - { - "expression": { - "id": 6320, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "35620:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "35624:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "35620:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6322, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6304, - "src": "35632:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "66616c7365", - "id": 6323, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "35647:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "hexValue": "66616c7365", - "id": 6324, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "35654:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 6318, - "name": "_multicall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6504, - "src": "35602:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_bool_$_t_bool_$returns$__$", - "typeString": "function (struct MultiCall calldata[] calldata,address,address,bool,bool)" - } - }, - "id": 6325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35602:58:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6326, - "nodeType": "ExpressionStatement", - "src": "35602:58:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6330, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6304, - "src": "35901:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6327, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "35867:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "35881:19:20", - "memberName": "fullCollateralCheck", - "nodeType": "MemberAccess", - "referencedDeclaration": 12116, - "src": "35867:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 6331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35867:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6332, - "nodeType": "ExpressionStatement", - "src": "35867:48:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 6293, - "nodeType": "StructuredDocumentation", - "src": "34823:362:20", - "text": "@dev Executes a batch of transactions within a Multicall, to manage an existing account\n - Wraps ETH and sends it back to msg.sender, if value > 0\n - Executes the Multicall\n - Performs a fullCollateralCheck to verify that hf > 1 after all actions\n @param calls The array of MultiCall structs encoding the operations to execute." - }, - "functionSelector": "caa5c23f", - "id": 6336, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 6301, - "kind": "modifierInvocation", - "modifierName": { - "id": 6300, - "name": "nonReentrant", - "nameLocations": ["35295:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "35295:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "35295:12:20" - } - ], - "name": "multicall", - "nameLocation": "35199:9:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 6299, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "35278:8:20" - }, - "parameters": { - "id": 6298, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6297, - "mutability": "mutable", - "name": "calls", - "nameLocation": "35230:5:20", - "nodeType": "VariableDeclaration", - "scope": 6336, - "src": "35209:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 6295, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6294, - "name": "MultiCall", - "nameLocations": ["35209:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "35209:9:20" - }, - "referencedDeclaration": 14040, - "src": "35209:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 6296, - "nodeType": "ArrayTypeName", - "src": "35209:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "35208:28:20" - }, - "returnParameters": { - "id": 6302, - "nodeType": "ParameterList", - "parameters": [], - "src": "35312:0:20" - }, - "scope": 7747, - "src": "35190:742:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 6503, - "nodeType": "Block", - "src": "37115:3235:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6355, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6343, - "src": "37213:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 6358, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "37231:4:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - ], - "id": 6357, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "37223:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37223:7:20", - "typeDescriptions": {} - } - }, - "id": 6359, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37223:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6352, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "37174:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37188:24:20", - "memberName": "transferAccountOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 12064, - "src": "37174:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 6360, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37174:63:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6361, - "nodeType": "ExpressionStatement", - "src": "37174:63:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6363, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6343, - "src": "37381:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6362, - "name": "MultiCallStarted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11558, - "src": "37364:16:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 6364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37364:26:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6365, - "nodeType": "EmitStatement", - "src": "37359:31:20" - }, - { - "assignments": [6370], - "declarations": [ - { - "constant": false, - "id": 6370, - "mutability": "mutable", - "name": "expectedBalances", - "nameLocation": "37524:16:20", - "nodeType": "VariableDeclaration", - "scope": 6503, - "src": "37507:33:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6368, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6367, - "name": "Balance", - "nameLocations": ["37507:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "37507:7:20" - }, - "referencedDeclaration": 13609, - "src": "37507:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6369, - "nodeType": "ArrayTypeName", - "src": "37507:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "id": 6371, - "nodeType": "VariableDeclarationStatement", - "src": "37507:33:20" - }, - { - "assignments": [6373], - "declarations": [ - { - "constant": false, - "id": 6373, - "mutability": "mutable", - "name": "len", - "nameLocation": "37559:3:20", - "nodeType": "VariableDeclaration", - "scope": 6503, - "src": "37551:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6372, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37551:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6376, - "initialValue": { - "expression": { - "id": 6374, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6341, - "src": "37565:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 6375, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37571:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "37565:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "37551:26:20" - }, - { - "body": { - "id": 6478, - "nodeType": "Block", - "src": "37631:2162:20", - "statements": [ - { - "assignments": [6386], - "declarations": [ - { - "constant": false, - "id": 6386, - "mutability": "mutable", - "name": "mcall", - "nameLocation": "37664:5:20", - "nodeType": "VariableDeclaration", - "scope": 6478, - "src": "37645:24:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall" - }, - "typeName": { - "id": 6385, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6384, - "name": "MultiCall", - "nameLocations": ["37645:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "37645:9:20" - }, - "referencedDeclaration": 14040, - "src": "37645:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "visibility": "internal" - } - ], - "id": 6390, - "initialValue": { - "baseExpression": { - "id": 6387, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6341, - "src": "37672:5:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall calldata[] calldata" - } - }, - "id": 6389, - "indexExpression": { - "id": 6388, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6378, - "src": "37678:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "37672:8:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "37645:35:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 6391, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "37769:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6392, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37775:8:20", - "memberName": "callData", - "nodeType": "MemberAccess", - "referencedDeclaration": 14039, - "src": "37769:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37784:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "37769:21:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "hexValue": "34", - "id": 6394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "37793:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "src": "37769:25:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6399, - "nodeType": "IfStatement", - "src": "37765:66:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6396, - "name": "IncorrectCallDataException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11617, - "src": "37803:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37803:28:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6398, - "nodeType": "RevertStatement", - "src": "37796:35:20" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6400, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "37863:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37869:6:20", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "37863:12:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "id": 6404, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "37887:4:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - ], - "id": 6403, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "37879:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37879:7:20", - "typeDescriptions": {} - } - }, - "id": 6405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37879:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "37863:29:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6472, - "nodeType": "Block", - "src": "38986:737:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "expression": { - "id": 6443, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "39420:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39426:6:20", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "39420:12:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6441, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "39388:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6442, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39402:17:20", - "memberName": "adapterToContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 12237, - "src": "39388:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 6445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39388:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 6448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39465:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 6447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "39457:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6446, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "39457:7:20", - "typeDescriptions": {} - } - }, - "id": 6449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39457:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "39388:79:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6451, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "39491:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39497:6:20", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "39491:12:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "id": 6455, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "39515:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - ], - "id": 6454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "39507:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6453, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "39507:7:20", - "typeDescriptions": {} - } - }, - "id": 6456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39507:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "39491:38:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "39388:141:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6462, - "nodeType": "IfStatement", - "src": "39363:227:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6459, - "name": "TargetContractNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11969, - "src": "39555:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39555:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6461, - "nodeType": "RevertStatement", - "src": "39548:42:20" - } - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 6468, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "39680:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6469, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39686:8:20", - "memberName": "callData", - "nodeType": "MemberAccess", - "referencedDeclaration": 14039, - "src": "39680:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "expression": { - "id": 6463, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "39654:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39660:6:20", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "39654:12:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6467, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39667:12:20", - "memberName": "functionCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 18460, - "src": "39654:25:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$", - "typeString": "function (address,bytes memory) returns (bytes memory)" - } - }, - "id": 6470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39654:41:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 6471, - "nodeType": "ExpressionStatement", - "src": "39654:41:20" - } - ] - }, - "id": 6473, - "nodeType": "IfStatement", - "src": "37859:1864:20", - "trueBody": { - "id": 6440, - "nodeType": "Block", - "src": "37894:1086:20", - "statements": [ - { - "condition": { - "id": 6407, - "name": "isClosure", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6347, - "src": "38016:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6426, - "nodeType": "IfStatement", - "src": "38012:310:20", - "trueBody": { - "id": 6425, - "nodeType": "Block", - "src": "38027:295:20", - "statements": [ - { - "assignments": [6409], - "declarations": [ - { - "constant": false, - "id": 6409, - "mutability": "mutable", - "name": "method", - "nameLocation": "38056:6:20", - "nodeType": "VariableDeclaration", - "scope": 6425, - "src": "38049:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 6408, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "38049:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - } - ], - "id": 6415, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 6412, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "38072:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "38078:8:20", - "memberName": "callData", - "nodeType": "MemberAccess", - "referencedDeclaration": 14039, - "src": "38072:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 6411, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "38065:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": { - "id": 6410, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "38065:6:20", - "typeDescriptions": {} - } - }, - "id": 6414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38065:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "38049:38:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6416, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6409, - "src": "38138:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "expression": { - "id": 6417, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "38172:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6418, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "38194:24:20", - "memberName": "revertIfReceivedLessThan", - "nodeType": "MemberAccess", - "referencedDeclaration": 11443, - "src": "38172:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$returns$__$", - "typeString": "function ICreditFacadeExtended.revertIfReceivedLessThan(struct Balance memory[] memory)" - } - }, - "id": 6419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "38219:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "38172:55:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "38138:89:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6424, - "nodeType": "IfStatement", - "src": "38109:181:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6421, - "name": "ForbiddenDuringClosureException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11620, - "src": "38257:31:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38257:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6423, - "nodeType": "RevertStatement", - "src": "38250:40:20" - } - } - ] - } - }, - { - "expression": { - "id": 6438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 6427, - "name": "increaseDebtWasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6349, - "src": "38656:21:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 6428, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6370, - "src": "38699:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - } - ], - "id": 6429, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "38634:99:20", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "tuple(bool,struct Balance memory[] memory)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 6431, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6343, - "src": "38787:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6432, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6345, - "src": "38817:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 6433, - "name": "mcall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6386, - "src": "38852:5:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_calldata_ptr", - "typeString": "struct MultiCall calldata" - } - }, - "id": 6434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "38858:8:20", - "memberName": "callData", - "nodeType": "MemberAccess", - "referencedDeclaration": 14039, - "src": "38852:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "id": 6435, - "name": "increaseDebtWasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6349, - "src": "38888:21:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 6436, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6370, - "src": "38931:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - ], - "id": 6430, - "name": "_processCreditFacadeMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6731, - "src": "38736:29:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_calldata_ptr_$_t_bool_$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$returns$_t_bool_$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (address,address,bytes calldata,bool,struct Balance memory[] memory) returns (bool,struct Balance memory[] memory)" - } - }, - "id": 6437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38736:229:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "tuple(bool,struct Balance memory[] memory)" - } - }, - "src": "38634:331:20", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6439, - "nodeType": "ExpressionStatement", - "src": "38634:331:20" - } - ] - } - }, - { - "id": 6477, - "nodeType": "UncheckedBlock", - "src": "39737:46:20", - "statements": [ - { - "expression": { - "id": 6475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "39765:3:20", - "subExpression": { - "id": 6474, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6378, - "src": "39767:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6476, - "nodeType": "ExpressionStatement", - "src": "39765:3:20" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6383, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6381, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6378, - "src": "37620:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 6382, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6373, - "src": "37624:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "37620:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6479, - "initializationExpression": { - "assignments": [6378], - "declarations": [ - { - "constant": false, - "id": 6378, - "mutability": "mutable", - "name": "i", - "nameLocation": "37613:1:20", - "nodeType": "VariableDeclaration", - "scope": 6479, - "src": "37605:9:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6377, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37605:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6380, - "initialValue": { - "hexValue": "30", - "id": 6379, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "37617:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "37605:13:20" - }, - "nodeType": "ForStatement", - "src": "37600:2193:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6483, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6480, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6370, - "src": "39959:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39976:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "39959:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 6482, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39986:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "39959:28:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6489, - "nodeType": "IfStatement", - "src": "39955:95:20", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 6485, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6370, - "src": "40018:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 6486, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6345, - "src": "40036:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6484, - "name": "_compareBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6832, - "src": "40001:16:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$__$", - "typeString": "function (struct Balance memory[] memory,address) view" - } - }, - "id": 6487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "40001:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6488, - "nodeType": "ExpressionStatement", - "src": "40001:49:20" - } - }, - { - "eventCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6490, - "name": "MultiCallFinished", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11561, - "src": "40162:17:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 6491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "40162:19:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6492, - "nodeType": "EmitStatement", - "src": "40157:24:20" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 6498, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "40308:4:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - ], - "id": 6497, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "40300:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6496, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40300:7:20", - "typeDescriptions": {} - } - }, - "id": 6499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "40300:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6500, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6343, - "src": "40315:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6493, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "40261:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "40275:24:20", - "memberName": "transferAccountOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 12064, - "src": "40261:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 6501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "40261:63:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6502, - "nodeType": "ExpressionStatement", - "src": "40261:63:20" - } - ] - }, - "documentation": { - "id": 6337, - "nodeType": "StructuredDocumentation", - "src": "35938:984:20", - "text": "@dev IMPLEMENTATION: multicall\n - Transfers ownership from borrower to this contract, as most adapter and Credit Manager functions retrieve\n the Credit Account by msg.sender\n - Executes the provided list of calls:\n + if targetContract == address(this), parses call data in the struct and calls the appropriate function (see _processCreditFacadeMulticall below)\n + if targetContract == adapter, calls the adapter with call data as provided.\n @param borrower Owner of the Credit Account\n @param creditAccount Credit Account address\n @param isClosure Whether the multicall is being invoked during a closure action. Calls to Credit Facade are forbidden inside\n multicalls on closure.\n @param increaseDebtWasCalled True if debt was increased before or during the multicall. Used to prevent free flashloans by\n increasing and decreasing debt within a single multicall." - }, - "id": 6504, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_multicall", - "nameLocation": "36936:10:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6350, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6341, - "mutability": "mutable", - "name": "calls", - "nameLocation": "36977:5:20", - "nodeType": "VariableDeclaration", - "scope": 6504, - "src": "36956:26:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 6339, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6338, - "name": "MultiCall", - "nameLocations": ["36956:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "36956:9:20" - }, - "referencedDeclaration": 14040, - "src": "36956:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 6340, - "nodeType": "ArrayTypeName", - "src": "36956:11:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6343, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "37000:8:20", - "nodeType": "VariableDeclaration", - "scope": 6504, - "src": "36992:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "36992:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6345, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "37026:13:20", - "nodeType": "VariableDeclaration", - "scope": 6504, - "src": "37018:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6344, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37018:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6347, - "mutability": "mutable", - "name": "isClosure", - "nameLocation": "37054:9:20", - "nodeType": "VariableDeclaration", - "scope": 6504, - "src": "37049:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6346, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "37049:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6349, - "mutability": "mutable", - "name": "increaseDebtWasCalled", - "nameLocation": "37078:21:20", - "nodeType": "VariableDeclaration", - "scope": 6504, - "src": "37073:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6348, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "37073:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "36946:159:20" - }, - "returnParameters": { - "id": 6351, - "nodeType": "ParameterList", - "parameters": [], - "src": "37115:0:20" - }, - "scope": 7747, - "src": "36927:3423:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6730, - "nodeType": "Block", - "src": "41139:4181:20", - "statements": [ - { - "expression": { - "id": 6528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6526, - "name": "increaseDebtWasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6520, - "src": "41149:21:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 6527, - "name": "increaseDebtWasCalledBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6513, - "src": "41173:27:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "41149:51:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6529, - "nodeType": "ExpressionStatement", - "src": "41149:51:20" - }, - { - "expression": { - "id": 6532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6530, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6524, - "src": "41210:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 6531, - "name": "expectedBalancesBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6517, - "src": "41229:22:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "src": "41210:41:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6533, - "nodeType": "ExpressionStatement", - "src": "41210:41:20" - }, - { - "assignments": [6535], - "declarations": [ - { - "constant": false, - "id": 6535, - "mutability": "mutable", - "name": "method", - "nameLocation": "41269:6:20", - "nodeType": "VariableDeclaration", - "scope": 6730, - "src": "41262:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 6534, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "41262:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - } - ], - "id": 6540, - "initialValue": { - "arguments": [ - { - "id": 6538, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "41285:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 6537, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "41278:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": { - "id": 6536, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "41278:6:20", - "typeDescriptions": {} - } - }, - "id": 6539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "41278:16:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "41262:32:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6541, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "41614:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6542, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "41624:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6543, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "41646:24:20", - "memberName": "revertIfReceivedLessThan", - "nodeType": "MemberAccess", - "referencedDeclaration": 11443, - "src": "41624:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$returns$__$", - "typeString": "function ICreditFacadeExtended.revertIfReceivedLessThan(struct Balance memory[] memory)" - } - }, - "id": 6544, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "41671:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "41624:55:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "41614:65:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6574, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "42488:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6575, - "name": "ICreditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11919, - "src": "42498:13:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacade_$11919_$", - "typeString": "type(contract ICreditFacade)" - } - }, - "id": 6576, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "42512:13:20", - "memberName": "addCollateral", - "nodeType": "MemberAccess", - "referencedDeclaration": 11787, - "src": "42498:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_payable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function ICreditFacade.addCollateral(address,address,uint256) payable" - } - }, - "id": 6577, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "42526:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "42498:36:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "42488:46:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6615, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "43258:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6616, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "43268:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6617, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "43290:12:20", - "memberName": "increaseDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11471, - "src": "43268:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_uint256_$returns$__$", - "typeString": "function ICreditFacadeExtended.increaseDebt(uint256)" - } - }, - "id": 6618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "43303:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "43268:43:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "43258:53:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6643, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "43786:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6644, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "43796:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6645, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "43818:12:20", - "memberName": "decreaseDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 11477, - "src": "43796:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_uint256_$returns$__$", - "typeString": "function ICreditFacadeExtended.decreaseDebt(uint256)" - } - }, - "id": 6646, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "43831:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "43796:43:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "43786:53:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6672, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "44335:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6673, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "44345:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6674, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44367:11:20", - "memberName": "enableToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11449, - "src": "44345:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$returns$__$", - "typeString": "function ICreditFacadeExtended.enableToken(address)" - } - }, - "id": 6675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44379:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "44345:42:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "44335:52:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "id": 6700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6696, - "name": "method", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6535, - "src": "44875:6:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "expression": { - "id": 6697, - "name": "ICreditFacadeExtended", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11478, - "src": "44885:21:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditFacadeExtended_$11478_$", - "typeString": "type(contract ICreditFacadeExtended)" - } - }, - "id": 6698, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44907:12:20", - "memberName": "disableToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 11455, - "src": "44885:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$returns$__$", - "typeString": "function ICreditFacadeExtended.disableToken(address)" - } - }, - "id": 6699, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44920:8:20", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "44885:43:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "src": "44875:53:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 6723, - "nodeType": "Block", - "src": "45183:131:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6720, - "name": "UnknownMethodException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11626, - "src": "45266:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6721, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "45266:24:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6722, - "nodeType": "RevertStatement", - "src": "45259:31:20" - } - ] - }, - "id": 6724, - "nodeType": "IfStatement", - "src": "44871:443:20", - "trueBody": { - "id": 6719, - "nodeType": "Block", - "src": "44930:247:20", - "statements": [ - { - "assignments": [6702], - "declarations": [ - { - "constant": false, - "id": 6702, - "mutability": "mutable", - "name": "token", - "nameLocation": "44980:5:20", - "nodeType": "VariableDeclaration", - "scope": 6719, - "src": "44972:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6701, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "44972:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6712, - "initialValue": { - "arguments": [ - { - "baseExpression": { - "id": 6705, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "44999:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "44999:12:20", - "startExpression": { - "hexValue": "34", - "id": 6706, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "45008:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "id": 6709, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "45014:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6708, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "45014:7:20", - "typeDescriptions": {} - } - } - ], - "id": 6710, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "45013:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - ], - "expression": { - "id": 6703, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "44988:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6704, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44992:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "44988:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "44988:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "44972:51:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6714, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6507, - "src": "45121:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6715, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "45131:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6716, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6702, - "src": "45146:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6713, - "name": "_disableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7250, - "src": "45107:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address)" - } - }, - "id": 6717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "45107:45:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6718, - "nodeType": "ExpressionStatement", - "src": "45107:45:20" - } - ] - } - }, - "id": 6725, - "nodeType": "IfStatement", - "src": "44331:983:20", - "trueBody": { - "id": 6695, - "nodeType": "Block", - "src": "44389:245:20", - "statements": [ - { - "assignments": [6678], - "declarations": [ - { - "constant": false, - "id": 6678, - "mutability": "mutable", - "name": "token", - "nameLocation": "44439:5:20", - "nodeType": "VariableDeclaration", - "scope": 6695, - "src": "44431:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6677, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "44431:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6688, - "initialValue": { - "arguments": [ - { - "baseExpression": { - "id": 6681, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "44458:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "44458:12:20", - "startExpression": { - "hexValue": "34", - "id": 6682, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "44467:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "id": 6685, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "44473:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6684, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "44473:7:20", - "typeDescriptions": {} - } - } - ], - "id": 6686, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "44472:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - } - ], - "expression": { - "id": 6679, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "44447:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6680, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44451:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "44447:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "44447:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "44431:51:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6690, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6507, - "src": "44578:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6691, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "44588:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6692, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6678, - "src": "44603:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6689, - "name": "_enableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7227, - "src": "44565:12:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address)" - } - }, - "id": 6693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "44565:44:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6694, - "nodeType": "ExpressionStatement", - "src": "44565:44:20" - } - ] - } - }, - "id": 6726, - "nodeType": "IfStatement", - "src": "43782:1532:20", - "trueBody": { - "id": 6671, - "nodeType": "Block", - "src": "43841:430:20", - "statements": [ - { - "condition": { - "id": 6648, - "name": "increaseDebtWasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6520, - "src": "43952:21:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6652, - "nodeType": "IfStatement", - "src": "43948:98:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6649, - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11623, - "src": "43998:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43998:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6651, - "nodeType": "RevertStatement", - "src": "43991:55:20" - } - }, - { - "assignments": [6654], - "declarations": [ - { - "constant": false, - "id": 6654, - "mutability": "mutable", - "name": "amount", - "nameLocation": "44129:6:20", - "nodeType": "VariableDeclaration", - "scope": 6671, - "src": "44121:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6653, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "44121:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6664, - "initialValue": { - "arguments": [ - { - "baseExpression": { - "id": 6657, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "44149:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "44149:12:20", - "startExpression": { - "hexValue": "34", - "id": 6658, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "44158:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "id": 6661, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "44164:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6660, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "44164:7:20", - "typeDescriptions": {} - } - } - ], - "id": 6662, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "44163:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "expression": { - "id": 6655, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "44138:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6656, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "44142:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "44138:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6663, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "44138:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "44121:52:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6666, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6507, - "src": "44215:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6667, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "44225:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6668, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6654, - "src": "44240:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6665, - "name": "_decreaseDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6223, - "src": "44201:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 6669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "44201:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6670, - "nodeType": "ExpressionStatement", - "src": "44201:46:20" - } - ] - } - }, - "id": 6727, - "nodeType": "IfStatement", - "src": "43254:2060:20", - "trueBody": { - "id": 6642, - "nodeType": "Block", - "src": "43313:408:20", - "statements": [ - { - "expression": { - "id": 6622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6620, - "name": "increaseDebtWasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6520, - "src": "43469:21:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 6621, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "43493:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "43469:28:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6623, - "nodeType": "ExpressionStatement", - "src": "43469:28:20" - }, - { - "assignments": [6625], - "declarations": [ - { - "constant": false, - "id": 6625, - "mutability": "mutable", - "name": "amount", - "nameLocation": "43580:6:20", - "nodeType": "VariableDeclaration", - "scope": 6642, - "src": "43572:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6624, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "43572:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6635, - "initialValue": { - "arguments": [ - { - "baseExpression": { - "id": 6628, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "43600:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "43600:12:20", - "startExpression": { - "hexValue": "34", - "id": 6629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "43609:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "id": 6632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "43615:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6631, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "43615:7:20", - "typeDescriptions": {} - } - } - ], - "id": 6633, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "43614:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "expression": { - "id": 6626, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "43589:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6627, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "43593:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "43589:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43589:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "43572:52:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6637, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6507, - "src": "43665:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6638, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "43675:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6639, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6625, - "src": "43690:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6636, - "name": "_increaseDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6150, - "src": "43651:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 6640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43651:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6641, - "nodeType": "ExpressionStatement", - "src": "43651:46:20" - } - ] - } - }, - "id": 6728, - "nodeType": "IfStatement", - "src": "42484:2830:20", - "trueBody": { - "id": 6614, - "nodeType": "Block", - "src": "42536:657:20", - "statements": [ - { - "assignments": [6580, 6582, 6584], - "declarations": [ - { - "constant": false, - "id": 6580, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "42606:10:20", - "nodeType": "VariableDeclaration", - "scope": 6614, - "src": "42598:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6579, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "42598:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6582, - "mutability": "mutable", - "name": "token", - "nameLocation": "42626:5:20", - "nodeType": "VariableDeclaration", - "scope": 6614, - "src": "42618:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "42618:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6584, - "mutability": "mutable", - "name": "amount", - "nameLocation": "42641:6:20", - "nodeType": "VariableDeclaration", - "scope": 6614, - "src": "42633:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6583, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "42633:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6598, - "initialValue": { - "arguments": [ - { - "baseExpression": { - "id": 6587, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "42679:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "42679:12:20", - "startExpression": { - "hexValue": "34", - "id": 6588, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "42688:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "id": 6591, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "42710:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6590, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "42710:7:20", - "typeDescriptions": {} - } - }, - { - "id": 6593, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "42719:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6592, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "42719:7:20", - "typeDescriptions": {} - } - }, - { - "id": 6595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "42728:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 6594, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "42728:7:20", - "typeDescriptions": {} - } - } - ], - "id": 6596, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "42709:27:20", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$", - "typeString": "tuple(type(address),type(address),type(uint256))" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$", - "typeString": "tuple(type(address),type(address),type(uint256))" - } - ], - "expression": { - "id": 6585, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "42651:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "42655:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "42651:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42651:99:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$", - "typeString": "tuple(address payable,address payable,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "42597:153:20" - }, - { - "expression": { - "arguments": [ - { - "id": 6600, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6580, - "src": "42945:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6601, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6580, - "src": "42973:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 6602, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6507, - "src": "42987:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "42973:22:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "id": 6607, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6580, - "src": "43093:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6605, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "43054:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "43068:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "43054:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 6608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43054:50:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "42973:131:20", - "trueExpression": { - "id": 6604, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "43018:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6610, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6582, - "src": "43122:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6611, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6584, - "src": "43145:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 6599, - "name": "addCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6292, - "src": "42914:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,address,uint256)" - } - }, - "id": 6612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42914:251:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6613, - "nodeType": "ExpressionStatement", - "src": "42914:251:20" - } - ] - } - }, - "id": 6729, - "nodeType": "IfStatement", - "src": "41610:3704:20", - "trueBody": { - "id": 6573, - "nodeType": "Block", - "src": "41681:741:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6549, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6546, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6524, - "src": "42009:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6547, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "42026:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "42009:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 6548, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "42036:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "42009:28:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6553, - "nodeType": "IfStatement", - "src": "42005:94:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6550, - "name": "ExpectedBalancesAlreadySetException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11649, - "src": "42062:35:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42062:37:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6552, - "nodeType": "RevertStatement", - "src": "42055:44:20" - } - }, - { - "expression": { - "id": 6564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6554, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6524, - "src": "42184:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 6557, - "name": "callData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6511, - "src": "42214:8:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 6559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "42214:12:20", - "startExpression": { - "hexValue": "34", - "id": 6558, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "42223:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_4_by_1", - "typeString": "int_const 4" - }, - "value": "4" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - { - "components": [ - { - "baseExpression": { - "id": 6560, - "name": "Balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13609, - "src": "42229:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Balance_$13609_storage_ptr_$", - "typeString": "type(struct Balance storage pointer)" - } - }, - "id": 6561, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "42229:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "type(struct Balance memory[] memory)" - } - } - ], - "id": 6562, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "42228:11:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "type(struct Balance memory[] memory)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - }, - { - "typeIdentifier": "t_type$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "type(struct Balance memory[] memory)" - } - ], - "expression": { - "id": 6555, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "42203:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "42207:6:20", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "42203:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42203:37:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "src": "42184:56:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6565, - "nodeType": "ExpressionStatement", - "src": "42184:56:20" - }, - { - "expression": { - "id": 6571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 6566, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6524, - "src": "42332:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 6568, - "name": "expectedBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6524, - "src": "42366:16:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 6569, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6509, - "src": "42384:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6567, - "name": "_storeBalances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6781, - "src": "42351:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct Balance memory[] memory,address) view returns (struct Balance memory[] memory)" - } - }, - "id": 6570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42351:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "src": "42332:66:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6572, - "nodeType": "ExpressionStatement", - "src": "42332:66:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 6505, - "nodeType": "StructuredDocumentation", - "src": "40356:451:20", - "text": "@dev Internal function for processing calls to Credit Facade within the multicall\n @param borrower Original owner of the Credit Account\n @param creditAccount Credit Account address\n @param callData Call data of the currently processed call\n @param increaseDebtWasCalledBefore Whether debt was increased before entering the function\n @param expectedBalances Array of expected balances before entering the function" - }, - "id": 6731, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_processCreditFacadeMulticall", - "nameLocation": "40821:29:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6507, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "40868:8:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "40860:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6506, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40860:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6509, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "40894:13:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "40886:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6508, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "40886:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6511, - "mutability": "mutable", - "name": "callData", - "nameLocation": "40932:8:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "40917:23:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6510, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "40917:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6513, - "mutability": "mutable", - "name": "increaseDebtWasCalledBefore", - "nameLocation": "40955:27:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "40950:32:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6512, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "40950:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6517, - "mutability": "mutable", - "name": "expectedBalancesBefore", - "nameLocation": "41009:22:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "40992:39:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6515, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6514, - "name": "Balance", - "nameLocations": ["40992:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "40992:7:20" - }, - "referencedDeclaration": 13609, - "src": "40992:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6516, - "nodeType": "ArrayTypeName", - "src": "40992:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "40850:187:20" - }, - "returnParameters": { - "id": 6525, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6520, - "mutability": "mutable", - "name": "increaseDebtWasCalled", - "nameLocation": "41077:21:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "41072:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6519, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "41072:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6524, - "mutability": "mutable", - "name": "expectedBalances", - "nameLocation": "41117:16:20", - "nodeType": "VariableDeclaration", - "scope": 6731, - "src": "41100:33:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6522, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6521, - "name": "Balance", - "nameLocations": ["41100:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "41100:7:20" - }, - "referencedDeclaration": 13609, - "src": "41100:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6523, - "nodeType": "ArrayTypeName", - "src": "41100:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "41071:63:20" - }, - "scope": 7747, - "src": "40812:4508:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6780, - "nodeType": "Block", - "src": "45696:338:20", - "statements": [ - { - "assignments": [6746], - "declarations": [ - { - "constant": false, - "id": 6746, - "mutability": "mutable", - "name": "len", - "nameLocation": "45714:3:20", - "nodeType": "VariableDeclaration", - "scope": 6780, - "src": "45706:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6745, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45706:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6749, - "initialValue": { - "expression": { - "id": 6747, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6736, - "src": "45720:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6748, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "45729:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "45720:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "45706:29:20" - }, - { - "body": { - "id": 6776, - "nodeType": "Block", - "src": "45789:200:20", - "statements": [ - { - "expression": { - "id": 6770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 6757, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6736, - "src": "45803:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6759, - "indexExpression": { - "id": 6758, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6751, - "src": "45812:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "45803:11:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 6760, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "45815:7:20", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "45803:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "arguments": [ - { - "id": 6768, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6738, - "src": "45879:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 6762, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6736, - "src": "45833:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6764, - "indexExpression": { - "id": 6763, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6751, - "src": "45842:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "45833:11:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 6765, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "45845:5:20", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 13606, - "src": "45833:17:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6761, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "45826:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 6766, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "45826:25:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 6767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "45852:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "45826:35:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 6769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "45826:80:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "45803:103:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6771, - "nodeType": "ExpressionStatement", - "src": "45803:103:20" - }, - { - "id": 6775, - "nodeType": "UncheckedBlock", - "src": "45933:46:20", - "statements": [ - { - "expression": { - "id": 6773, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "45961:3:20", - "subExpression": { - "id": 6772, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6751, - "src": "45963:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6774, - "nodeType": "ExpressionStatement", - "src": "45961:3:20" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6756, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6754, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6751, - "src": "45778:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 6755, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6746, - "src": "45782:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "45778:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6777, - "initializationExpression": { - "assignments": [6751], - "declarations": [ - { - "constant": false, - "id": 6751, - "mutability": "mutable", - "name": "i", - "nameLocation": "45771:1:20", - "nodeType": "VariableDeclaration", - "scope": 6777, - "src": "45763:9:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45763:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6753, - "initialValue": { - "hexValue": "30", - "id": 6752, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "45775:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "45763:13:20" - }, - "nodeType": "ForStatement", - "src": "45758:231:20" - }, - { - "expression": { - "id": 6778, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6736, - "src": "46006:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "functionReturnParameters": 6744, - "id": 6779, - "nodeType": "Return", - "src": "45999:15:20" - } - ] - }, - "documentation": { - "id": 6732, - "nodeType": "StructuredDocumentation", - "src": "45326:222:20", - "text": "@dev Adds expected deltas to current balances on a Credit account and returns the result\n @param expected Expected changes to existing balances\n @param creditAccount Credit Account to compute balances for" - }, - "id": 6781, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_storeBalances", - "nameLocation": "45562:14:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6739, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6736, - "mutability": "mutable", - "name": "expected", - "nameLocation": "45594:8:20", - "nodeType": "VariableDeclaration", - "scope": 6781, - "src": "45577:25:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6734, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6733, - "name": "Balance", - "nameLocations": ["45577:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "45577:7:20" - }, - "referencedDeclaration": 13609, - "src": "45577:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6735, - "nodeType": "ArrayTypeName", - "src": "45577:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6738, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "45612:13:20", - "nodeType": "VariableDeclaration", - "scope": 6781, - "src": "45604:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6737, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "45604:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "45576:50:20" - }, - "returnParameters": { - "id": 6744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6743, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6781, - "src": "45674:16:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6741, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6740, - "name": "Balance", - "nameLocations": ["45674:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "45674:7:20" - }, - "referencedDeclaration": 13609, - "src": "45674:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6742, - "nodeType": "ArrayTypeName", - "src": "45674:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "45673:18:20" - }, - "scope": 7747, - "src": "45553:481:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6831, - "nodeType": "Block", - "src": "46407:384:20", - "statements": [ - { - "assignments": [6792], - "declarations": [ - { - "constant": false, - "id": 6792, - "mutability": "mutable", - "name": "len", - "nameLocation": "46425:3:20", - "nodeType": "VariableDeclaration", - "scope": 6831, - "src": "46417:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6791, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "46417:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6795, - "initialValue": { - "expression": { - "id": 6793, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6786, - "src": "46431:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6794, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46440:6:20", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "46431:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "46417:29:20" - }, - { - "body": { - "id": 6829, - "nodeType": "Block", - "src": "46500:285:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6810, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6788, - "src": "46571:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 6804, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6786, - "src": "46542:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6806, - "indexExpression": { - "id": 6805, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6797, - "src": "46551:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "46542:11:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 6807, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46554:5:20", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 13606, - "src": "46542:17:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6803, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "46535:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 6808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46535:25:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 6809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46561:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "46535:35:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 6811, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46535:50:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "baseExpression": { - "id": 6812, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6786, - "src": "46604:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6814, - "indexExpression": { - "id": 6813, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6797, - "src": "46613:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "46604:11:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 6815, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46616:7:20", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "46604:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46535:88:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6824, - "nodeType": "IfStatement", - "src": "46514:188:20", - "trueBody": { - "errorCall": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 6818, - "name": "expected", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6786, - "src": "46684:8:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 6820, - "indexExpression": { - "id": 6819, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6797, - "src": "46693:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "46684:11:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 6821, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46696:5:20", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 13606, - "src": "46684:17:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6817, - "name": "BalanceLessThanMinimumDesiredException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11643, - "src": "46645:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 6822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46645:57:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6823, - "nodeType": "RevertStatement", - "src": "46638:64:20" - } - }, - { - "id": 6828, - "nodeType": "UncheckedBlock", - "src": "46729:46:20", - "statements": [ - { - "expression": { - "id": 6826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "46757:3:20", - "subExpression": { - "id": 6825, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6797, - "src": "46759:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 6827, - "nodeType": "ExpressionStatement", - "src": "46757:3:20" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6800, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6797, - "src": "46489:1:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 6801, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6792, - "src": "46493:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46489:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6830, - "initializationExpression": { - "assignments": [6797], - "declarations": [ - { - "constant": false, - "id": 6797, - "mutability": "mutable", - "name": "i", - "nameLocation": "46482:1:20", - "nodeType": "VariableDeclaration", - "scope": 6830, - "src": "46474:9:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6796, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "46474:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6799, - "initialValue": { - "hexValue": "30", - "id": 6798, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "46486:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "46474:13:20" - }, - "nodeType": "ForStatement", - "src": "46469:316:20" - } - ] - }, - "documentation": { - "id": 6782, - "nodeType": "StructuredDocumentation", - "src": "46040:252:20", - "text": "@dev Compares current balances to previously saved expected balances.\n Reverts if at least one balance is lower than expected\n @param expected Expected balances after all operations\n @param creditAccount Credit Account to check" - }, - "id": 6832, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_compareBalances", - "nameLocation": "46306:16:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6789, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6786, - "mutability": "mutable", - "name": "expected", - "nameLocation": "46340:8:20", - "nodeType": "VariableDeclaration", - "scope": 6832, - "src": "46323:25:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 6784, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6783, - "name": "Balance", - "nameLocations": ["46323:7:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "46323:7:20" - }, - "referencedDeclaration": 13609, - "src": "46323:7:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 6785, - "nodeType": "ArrayTypeName", - "src": "46323:9:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6788, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "46358:13:20", - "nodeType": "VariableDeclaration", - "scope": 6832, - "src": "46350:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6787, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "46350:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "46322:50:20" - }, - "returnParameters": { - "id": 6790, - "nodeType": "ParameterList", - "parameters": [], - "src": "46407:0:20" - }, - "scope": 7747, - "src": "46297:494:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11817], - "body": { - "id": 6890, - "nodeType": "Block", - "src": "47262:1003:20", - "statements": [ - { - "condition": { - "id": 6841, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5084, - "src": "47394:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6845, - "nodeType": "IfStatement", - "src": "47390:53:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6842, - "name": "NotAllowedInWhitelistedMode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11605, - "src": "47414:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47414:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6844, - "nodeType": "RevertStatement", - "src": "47407:36:20" - } - }, - { - "assignments": [6847], - "declarations": [ - { - "constant": false, - "id": 6847, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "47475:13:20", - "nodeType": "VariableDeclaration", - "scope": 6890, - "src": "47467:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6846, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47467:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6853, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 6850, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "47543:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "47547:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "47543:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6848, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "47491:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "47505:24:20", - "memberName": "getCreditAccountOrRevert", - "nodeType": "MemberAccess", - "referencedDeclaration": 12140, - "src": "47491:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 6852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47491:72:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "47467:96:20" - }, - { - "condition": { - "id": 6860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "47633:33:20", - "subExpression": { - "baseExpression": { - "baseExpression": { - "id": 6854, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5120, - "src": "47634:16:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(address => mapping(address => bool))" - } - }, - "id": 6857, - "indexExpression": { - "expression": { - "id": 6855, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "47651:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "47655:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "47651:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "47634:28:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 6859, - "indexExpression": { - "id": 6858, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6835, - "src": "47663:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "47634:32:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6864, - "nodeType": "IfStatement", - "src": "47629:94:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6861, - "name": "AccountTransferNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11608, - "src": "47687:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47687:36:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6863, - "nodeType": "RevertStatement", - "src": "47680:43:20" - } - }, - { - "assignments": [6866, null], - "declarations": [ - { - "constant": false, - "id": 6866, - "mutability": "mutable", - "name": "isLiquidatable", - "nameLocation": "47871:14:20", - "nodeType": "VariableDeclaration", - "scope": 6890, - "src": "47866:19:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6865, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "47866:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - null - ], - "documentation": "Checks that the account hf > 1, as it is forbidden to transfer\n accounts that are liquidatable", - "id": 6870, - "initialValue": { - "arguments": [ - { - "id": 6868, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6847, - "src": "47914:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6867, - "name": "_isAccountLiquidatable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7572, - "src": "47891:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$_t_uint256_$", - "typeString": "function (address) view returns (bool,uint256)" - } - }, - "id": 6869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47891:37:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$", - "typeString": "tuple(bool,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "47865:63:20" - }, - { - "condition": { - "id": 6871, - "name": "isLiquidatable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6866, - "src": "47956:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6875, - "nodeType": "IfStatement", - "src": "47952:69:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6872, - "name": "CantTransferLiquidatableAccountException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11632, - "src": "47979:40:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47979:42:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6874, - "nodeType": "RevertStatement", - "src": "47972:49:20" - } - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 6879, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "48147:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "48151:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "48147:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6881, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6835, - "src": "48159:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6876, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "48108:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 6878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "48122:24:20", - "memberName": "transferAccountOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 12064, - "src": "48108:38:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 6882, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "48108:54:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6883, - "nodeType": "ExpressionStatement", - "src": "48108:54:20" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 6885, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "48230:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "48234:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "48230:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 6887, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6835, - "src": "48242:2:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6884, - "name": "TransferAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11568, - "src": "48214:15:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 6888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "48214:31:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6889, - "nodeType": "EmitStatement", - "src": "48209:36:20" - } - ] - }, - "documentation": { - "id": 6833, - "nodeType": "StructuredDocumentation", - "src": "46797:355:20", - "text": "@dev Transfers credit account to another user\n By default, this action is forbidden, and the user has to approve transfers from sender to itself\n by calling approveAccountTransfer.\n This is done to prevent malicious actors from transferring compromised accounts to other users.\n @param to Address to transfer the account to" - }, - "functionSelector": "5019e20a", - "id": 6891, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 6839, - "kind": "modifierInvocation", - "modifierName": { - "id": 6838, - "name": "nonReentrant", - "nameLocations": ["47245:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "47245:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "47245:12:20" - } - ], - "name": "transferAccountOwnership", - "nameLocation": "47166:24:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 6837, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "47228:8:20" - }, - "parameters": { - "id": 6836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6835, - "mutability": "mutable", - "name": "to", - "nameLocation": "47199:2:20", - "nodeType": "VariableDeclaration", - "scope": 6891, - "src": "47191:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6834, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47191:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "47190:12:20" - }, - "returnParameters": { - "id": 6840, - "nodeType": "ParameterList", - "parameters": [], - "src": "47262:0:20" - }, - "scope": 7747, - "src": "47157:1108:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 6950, - "nodeType": "Block", - "src": "48801:1144:20", - "statements": [ - { - "condition": { - "expression": { - "id": 6897, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "48898:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 6898, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "48905:23:20", - "memberName": "isIncreaseDebtForbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 5034, - "src": "48898:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6902, - "nodeType": "IfStatement", - "src": "48894:87:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6899, - "name": "IncreaseDebtForbiddenException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11629, - "src": "48949:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6900, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "48949:32:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6901, - "nodeType": "RevertStatement", - "src": "48942:39:20" - } - }, - { - "condition": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6903, - "name": "_isExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7591, - "src": "49064:10:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 6904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49064:12:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6909, - "nodeType": "IfStatement", - "src": "49060:111:20", - "trueBody": { - "id": 6908, - "nodeType": "Block", - "src": "49078:93:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6905, - "name": "OpenAccountNotAllowedAfterExpirationException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11646, - "src": "49099:45:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6906, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49099:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6907, - "nodeType": "RevertStatement", - "src": "49092:54:20" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 6911, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6894, - "src": "49291:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6910, - "name": "_isBlacklisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6052, - "src": "49276:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 6912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49276:26:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 6913, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "49306:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "49276:31:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6919, - "nodeType": "IfStatement", - "src": "49272:124:20", - "trueBody": { - "id": 6918, - "nodeType": "Block", - "src": "49309:87:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6915, - "name": "NotAllowedForBlacklistedAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11655, - "src": "49330:40:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49330:42:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6917, - "nodeType": "RevertStatement", - "src": "49323:49:20" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6920, - "name": "degenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5127, - "src": "49470:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 6923, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "49490:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 6922, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "49482:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6921, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "49482:7:20", - "typeDescriptions": {} - } - }, - "id": 6924, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49482:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "49470:22:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6945, - "nodeType": "IfStatement", - "src": "49466:416:20", - "trueBody": { - "id": 6944, - "nodeType": "Block", - "src": "49494:388:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6931, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6926, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5084, - "src": "49698:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6927, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "49713:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6928, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "49717:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "49713:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 6929, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6894, - "src": "49727:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "49713:24:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "49698:39:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6935, - "nodeType": "IfStatement", - "src": "49694:97:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6932, - "name": "NotAllowedInWhitelistedMode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11605, - "src": "49762:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49762:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6934, - "nodeType": "RevertStatement", - "src": "49755:36:20" - } - }, - { - "expression": { - "arguments": [ - { - "id": 6940, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6894, - "src": "49844:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "31", - "id": 6941, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "49856:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - } - ], - "expression": { - "arguments": [ - { - "id": 6937, - "name": "degenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5127, - "src": "49829:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6936, - "name": "IDegenNFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12529, - "src": "49819:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IDegenNFT_$12529_$", - "typeString": "type(contract IDegenNFT)" - } - }, - "id": 6938, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49819:19:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IDegenNFT_$12529", - "typeString": "contract IDegenNFT" - } - }, - "id": 6939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "49839:4:20", - "memberName": "burn", - "nodeType": "MemberAccess", - "referencedDeclaration": 12528, - "src": "49819:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256) external" - } - }, - "id": 6942, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49819:39:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6943, - "nodeType": "ExpressionStatement", - "src": "49819:39:20" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 6947, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6894, - "src": "49927:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6946, - "name": "_revertIfActionOnAccountNotAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6974, - "src": "49892:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$__$", - "typeString": "function (address) view" - } - }, - "id": 6948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49892:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6949, - "nodeType": "ExpressionStatement", - "src": "49892:46:20" - } - ] - }, - "documentation": { - "id": 6892, - "nodeType": "StructuredDocumentation", - "src": "48271:450:20", - "text": "@dev Verifies that the msg.sender can open an account for onBehalfOf\n - For expirable Credit Facade, expiration date must not be reached\n - For whitelisted mode, msg.sender must open the account for themselves\n and have at least one DegenNFT to burn\n - Otherwise, checks that account transfers from msg.sender to onBehalfOf\n are approved\n @param onBehalfOf Account which would own credit account" - }, - "id": 6951, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revertIfOpenCreditAccountNotAllowed", - "nameLocation": "48735:36:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6895, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6894, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "48780:10:20", - "nodeType": "VariableDeclaration", - "scope": 6951, - "src": "48772:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6893, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "48772:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "48771:20:20" - }, - "returnParameters": { - "id": 6896, - "nodeType": "ParameterList", - "parameters": [], - "src": "48801:0:20" - }, - "scope": 7747, - "src": "48726:1219:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 6973, - "nodeType": "Block", - "src": "50189:290:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 6968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6960, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 6957, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "50323:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "50327:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "50323:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 6959, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6954, - "src": "50337:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "50323:24:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "id": 6967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "50363:41:20", - "subExpression": { - "baseExpression": { - "baseExpression": { - "id": 6961, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5120, - "src": "50364:16:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(address => mapping(address => bool))" - } - }, - "id": 6964, - "indexExpression": { - "expression": { - "id": 6962, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "50381:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "50385:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "50381:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "50364:28:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 6966, - "indexExpression": { - "id": 6965, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6954, - "src": "50393:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "50364:40:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "50323:81:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6972, - "nodeType": "IfStatement", - "src": "50306:152:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6969, - "name": "AccountTransferNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11608, - "src": "50422:34:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "50422:36:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6971, - "nodeType": "RevertStatement", - "src": "50415:43:20" - } - } - ] - }, - "documentation": { - "id": 6952, - "nodeType": "StructuredDocumentation", - "src": "49951:135:20", - "text": "@dev Checks if the message sender is allowed to do an action on a CA\n @param onBehalfOf The account which owns the target CA" - }, - "id": 6974, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revertIfActionOnAccountNotAllowed", - "nameLocation": "50100:34:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6955, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6954, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "50143:10:20", - "nodeType": "VariableDeclaration", - "scope": 6974, - "src": "50135:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6953, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "50135:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "50134:20:20" - }, - "returnParameters": { - "id": 6956, - "nodeType": "ParameterList", - "parameters": [], - "src": "50189:0:20" - }, - "scope": 7747, - "src": "50091:388:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7031, - "nodeType": "Block", - "src": "50679:1033:20", - "statements": [ - { - "condition": { - "id": 6981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "50862:12:20", - "subExpression": { - "id": 6980, - "name": "whitelisted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5084, - "src": "50863:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7030, - "nodeType": "IfStatement", - "src": "50858:848:20", - "trueBody": { - "id": 7029, - "nodeType": "Block", - "src": "50876:830:20", - "statements": [ - { - "assignments": [6983], - "declarations": [ - { - "constant": false, - "id": 6983, - "mutability": "mutable", - "name": "_limitPerBlock", - "nameLocation": "50898:14:20", - "nodeType": "VariableDeclaration", - "scope": 7029, - "src": "50890:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6982, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "50890:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 6986, - "initialValue": { - "expression": { - "id": 6984, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "50915:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 6985, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "50922:25:20", - "memberName": "maxBorrowedAmountPerBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 5031, - "src": "50915:32:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "50890:57:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 6993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6987, - "name": "_limitPerBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6983, - "src": "51121:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 6990, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "51144:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 6989, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "51144:7:20", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - } - ], - "id": 6988, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "51139:4:20", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6991, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51139:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint128", - "typeString": "type(uint128)" - } - }, - "id": 6992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "51153:3:20", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "51139:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "51121:35:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7028, - "nodeType": "IfStatement", - "src": "51117:579:20", - "trueBody": { - "id": 7027, - "nodeType": "Block", - "src": "51158:538:20", - "statements": [ - { - "assignments": [6995, 6997], - "declarations": [ - { - "constant": false, - "id": 6995, - "mutability": "mutable", - "name": "lastBlock", - "nameLocation": "51205:9:20", - "nodeType": "VariableDeclaration", - "scope": 7027, - "src": "51198:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 6994, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "51198:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6997, - "mutability": "mutable", - "name": "lastLimit", - "nameLocation": "51244:9:20", - "nodeType": "VariableDeclaration", - "scope": 7027, - "src": "51236:17:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 6996, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "51236:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "id": 7000, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6998, - "name": "getTotalBorrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7157, - "src": "51274:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint64_$_t_uint128_$", - "typeString": "function () view returns (uint64,uint128)" - } - }, - "id": 6999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51274:25:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint128_$", - "typeString": "tuple(uint64,uint128)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "51176:123:20" - }, - { - "assignments": [7002], - "declarations": [ - { - "constant": false, - "id": 7002, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "51343:8:20", - "nodeType": "VariableDeclaration", - "scope": 7027, - "src": "51335:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7001, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "51335:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7013, - "initialValue": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7003, - "name": "lastBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6995, - "src": "51355:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 7004, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "51368:5:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 7005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "51374:6:20", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "51368:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "51355:25:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 7007, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "51354:27:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 7011, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6977, - "src": "51458:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "51354:110:20", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7008, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6977, - "src": "51404:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 7009, - "name": "lastLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6997, - "src": "51413:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "51404:18:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "51335:129:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7014, - "name": "newLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7002, - "src": "51504:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 7015, - "name": "_limitPerBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6983, - "src": "51515:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "51504:25:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7020, - "nodeType": "IfStatement", - "src": "51500:87:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7017, - "name": "BorrowedBlockLimitException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11635, - "src": "51558:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51558:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7019, - "nodeType": "RevertStatement", - "src": "51551:36:20" - } - }, - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7022, - "name": "newLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7002, - "src": "51647:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "51656:9:20", - "memberName": "toUint128", - "nodeType": "MemberAccess", - "referencedDeclaration": 19157, - "src": "51647:18:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint128)" - } - }, - "id": 7024, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51647:20:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 7021, - "name": "_updateTotalBorrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7176, - "src": "51619:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint128_$returns$__$", - "typeString": "function (uint128)" - } - }, - "id": 7025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51619:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7026, - "nodeType": "ExpressionStatement", - "src": "51619:49:20" - } - ] - } - } - ] - } - } - ] - }, - "documentation": { - "id": 6975, - "nodeType": "StructuredDocumentation", - "src": "50485:121:20", - "text": "@dev Checks that the per-block borrow limit was not violated and updates the\n amount borrowed in current block" - }, - "id": 7032, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAndUpdateBorrowedBlockLimit", - "nameLocation": "50620:33:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6978, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6977, - "mutability": "mutable", - "name": "amount", - "nameLocation": "50662:6:20", - "nodeType": "VariableDeclaration", - "scope": 7032, - "src": "50654:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 6976, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "50654:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "50653:16:20" - }, - "returnParameters": { - "id": 6979, - "nodeType": "ParameterList", - "parameters": [], - "src": "50679:0:20" - }, - "scope": 7747, - "src": "50611:1101:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7057, - "nodeType": "Block", - "src": "51961:251:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7052, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7038, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7035, - "src": "52031:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "arguments": [ - { - "expression": { - "id": 7041, - "name": "limits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5100, - "src": "52056:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage", - "typeString": "struct Limits storage ref" - } - }, - "id": 7042, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52063:17:20", - "memberName": "minBorrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5044, - "src": "52056:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 7040, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "52048:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 7039, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "52048:7:20", - "typeDescriptions": {} - } - }, - "id": 7043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52048:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "52031:50:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7051, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7045, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7035, - "src": "52097:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "arguments": [ - { - "expression": { - "id": 7048, - "name": "limits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5100, - "src": "52122:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage", - "typeString": "struct Limits storage ref" - } - }, - "id": 7049, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52129:17:20", - "memberName": "maxBorrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5047, - "src": "52122:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - ], - "id": 7047, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "52114:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 7046, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "52114:7:20", - "typeDescriptions": {} - } - }, - "id": 7050, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52114:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "52097:50:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "52031:116:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7056, - "nodeType": "IfStatement", - "src": "52014:185:20", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7053, - "name": "BorrowAmountOutOfLimitsException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11638, - "src": "52165:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52165:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7055, - "nodeType": "RevertStatement", - "src": "52158:41:20" - } - } - ] - }, - "documentation": { - "id": 7033, - "nodeType": "StructuredDocumentation", - "src": "51718:142:20", - "text": "@dev Checks that the borrowed principal is within borrowing limits\n @param borrowedAmount The current principal of a Credit Account" - }, - "id": 7058, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revertIfOutOfBorrowedLimits", - "nameLocation": "51874:28:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7036, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7035, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "51911:14:20", - "nodeType": "VariableDeclaration", - "scope": 7058, - "src": "51903:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7034, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "51903:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "51902:24:20" - }, - "returnParameters": { - "id": 7037, - "nodeType": "ParameterList", - "parameters": [], - "src": "51961:0:20" - }, - "scope": 7747, - "src": "51865:347:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7072, - "nodeType": "Block", - "src": "52291:79:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 7067, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "52345:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52349:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "52345:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7069, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7060, - "src": "52357:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "expression": { - "id": 7065, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "52308:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7066, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52322:22:20", - "memberName": "checkEmergencyPausable", - "nodeType": "MemberAccess", - "referencedDeclaration": 12354, - "src": "52308:36:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bool_$returns$_t_bool_$", - "typeString": "function (address,bool) external returns (bool)" - } - }, - "id": 7070, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52308:55:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 7064, - "id": 7071, - "nodeType": "Return", - "src": "52301:62:20" - } - ] - }, - "id": 7073, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkIfEmergencyLiquidator", - "nameLocation": "52227:27:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7061, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7060, - "mutability": "mutable", - "name": "state", - "nameLocation": "52260:5:20", - "nodeType": "VariableDeclaration", - "scope": 7073, - "src": "52255:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7059, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "52255:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "52254:12:20" - }, - "returnParameters": { - "id": 7064, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7063, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7073, - "src": "52285:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7062, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "52285:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "52284:6:20" - }, - "scope": 7747, - "src": "52218:152:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7125, - "nodeType": "Block", - "src": "52528:442:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7083, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7081, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7076, - "src": "52542:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7082, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "52550:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "52542:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7124, - "nodeType": "IfStatement", - "src": "52538:426:20", - "trueBody": { - "id": 7123, - "nodeType": "Block", - "src": "52553:411:20", - "statements": [ - { - "assignments": [7086], - "declarations": [ - { - "constant": false, - "id": 7086, - "mutability": "mutable", - "name": "td", - "nameLocation": "52584:2:20", - "nodeType": "VariableDeclaration", - "scope": 7123, - "src": "52567:19:20", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt" - }, - "typeName": { - "id": 7085, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7084, - "name": "TotalDebt", - "nameLocations": ["52567:9:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5062, - "src": "52567:9:20" - }, - "referencedDeclaration": 5062, - "src": "52567:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage_ptr", - "typeString": "struct TotalDebt" - } - }, - "visibility": "internal" - } - ], - "id": 7088, - "initialValue": { - "id": 7087, - "name": "totalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5109, - "src": "52589:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "52567:31:20" - }, - { - "condition": { - "id": 7089, - "name": "isIncrease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7078, - "src": "52617:10:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 7117, - "nodeType": "Block", - "src": "52852:73:20", - "statements": [ - { - "expression": { - "id": 7115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7109, - "name": "td", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7086, - "src": "52870:2:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt memory" - } - }, - "id": 7111, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "52873:16:20", - "memberName": "currentTotalDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 5058, - "src": "52870:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7112, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7076, - "src": "52893:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7113, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52899:9:20", - "memberName": "toUint128", - "nodeType": "MemberAccess", - "referencedDeclaration": 19157, - "src": "52893:15:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint128)" - } - }, - "id": 7114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52893:17:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "52870:40:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7116, - "nodeType": "ExpressionStatement", - "src": "52870:40:20" - } - ] - }, - "id": 7118, - "nodeType": "IfStatement", - "src": "52613:312:20", - "trueBody": { - "id": 7108, - "nodeType": "Block", - "src": "52629:217:20", - "statements": [ - { - "expression": { - "id": 7096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7090, - "name": "td", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7086, - "src": "52647:2:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt memory" - } - }, - "id": 7092, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "52650:16:20", - "memberName": "currentTotalDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 5058, - "src": "52647:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7093, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7076, - "src": "52670:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52676:9:20", - "memberName": "toUint128", - "nodeType": "MemberAccess", - "referencedDeclaration": 19157, - "src": "52670:15:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint128)" - } - }, - "id": 7095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52670:17:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "52647:40:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7097, - "nodeType": "ExpressionStatement", - "src": "52647:40:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "id": 7102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7098, - "name": "td", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7086, - "src": "52709:2:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt memory" - } - }, - "id": 7099, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52712:16:20", - "memberName": "currentTotalDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 5058, - "src": "52709:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "expression": { - "id": 7100, - "name": "td", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7086, - "src": "52731:2:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt memory" - } - }, - "id": 7101, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52734:14:20", - "memberName": "totalDebtLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 5061, - "src": "52731:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "52709:39:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7107, - "nodeType": "IfStatement", - "src": "52705:127:20", - "trueBody": { - "id": 7106, - "nodeType": "Block", - "src": "52750:82:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7103, - "name": "BorrowAmountOutOfLimitsException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11638, - "src": "52779:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52779:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7105, - "nodeType": "RevertStatement", - "src": "52772:41:20" - } - ] - } - } - ] - } - }, - { - "expression": { - "id": 7121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7119, - "name": "totalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5109, - "src": "52939:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7120, - "name": "td", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7086, - "src": "52951:2:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_memory_ptr", - "typeString": "struct TotalDebt memory" - } - }, - "src": "52939:14:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "id": 7122, - "nodeType": "ExpressionStatement", - "src": "52939:14:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 7074, - "nodeType": "StructuredDocumentation", - "src": "52376:72:20", - "text": "@dev Updates total debt and checks that it does not exceed the limit" - }, - "id": 7126, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAndUpdateTotalDebt", - "nameLocation": "52462:24:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7079, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7076, - "mutability": "mutable", - "name": "delta", - "nameLocation": "52495:5:20", - "nodeType": "VariableDeclaration", - "scope": 7126, - "src": "52487:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7075, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "52487:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7078, - "mutability": "mutable", - "name": "isIncrease", - "nameLocation": "52507:10:20", - "nodeType": "VariableDeclaration", - "scope": 7126, - "src": "52502:15:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7077, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "52502:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "52486:32:20" - }, - "returnParameters": { - "id": 7080, - "nodeType": "ParameterList", - "parameters": [], - "src": "52528:0:20" - }, - "scope": 7747, - "src": "52453:517:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7156, - "nodeType": "Block", - "src": "53224:173:20", - "statements": [ - { - "expression": { - "id": 7141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7134, - "name": "blockLastUpdate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7130, - "src": "53234:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7137, - "name": "totalBorrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5137, - "src": "53259:20:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "313238", - "id": 7138, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "53283:3:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "53259:27:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7136, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "53252:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 7135, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "53252:6:20", - "typeDescriptions": {} - } - }, - "id": 7140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "53252:35:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "53234:53:20", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "id": 7142, - "nodeType": "ExpressionStatement", - "src": "53234:53:20" - }, - { - "expression": { - "id": 7154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7143, - "name": "borrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7132, - "src": "53310:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7146, - "name": "totalBorrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5137, - "src": "53336:20:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 7149, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "53364:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 7148, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "53364:7:20", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - } - ], - "id": 7147, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "53359:4:20", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7150, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "53359:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint128", - "typeString": "type(uint128)" - } - }, - "id": 7151, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "53373:3:20", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "53359:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "53336:40:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7145, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "53328:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 7144, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "53328:7:20", - "typeDescriptions": {} - } - }, - "id": 7153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "53328:49:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "53310:67:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7155, - "nodeType": "ExpressionStatement", - "src": "53310:67:20" - } - ] - }, - "documentation": { - "id": 7127, - "nodeType": "StructuredDocumentation", - "src": "52976:110:20", - "text": "@dev Returns the last block where debt was taken,\n and the total amount borrowed in that block" - }, - "functionSelector": "9b67ab30", - "id": 7157, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getTotalBorrowedInBlock", - "nameLocation": "53100:23:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7128, - "nodeType": "ParameterList", - "parameters": [], - "src": "53123:2:20" - }, - "returnParameters": { - "id": 7133, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7130, - "mutability": "mutable", - "name": "blockLastUpdate", - "nameLocation": "53178:15:20", - "nodeType": "VariableDeclaration", - "scope": 7157, - "src": "53171:22:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 7129, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "53171:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7132, - "mutability": "mutable", - "name": "borrowedInBlock", - "nameLocation": "53203:15:20", - "nodeType": "VariableDeclaration", - "scope": 7157, - "src": "53195:23:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7131, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "53195:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "53170:49:20" - }, - "scope": 7747, - "src": "53091:306:20", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 7175, - "nodeType": "Block", - "src": "53619:99:20", - "statements": [ - { - "expression": { - "id": 7173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7163, - "name": "totalBorrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5137, - "src": "53629:20:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7166, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "53660:5:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 7167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "53666:6:20", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "53660:12:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "313238", - "id": 7168, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "53676:3:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_128_by_1", - "typeString": "int_const 128" - }, - "value": "128" - }, - "src": "53660:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 7165, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "53652:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 7164, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "53652:7:20", - "typeDescriptions": {} - } - }, - "id": 7170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "53652:28:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "|", - "rightExpression": { - "id": 7171, - "name": "borrowedInBlock", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7160, - "src": "53683:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "53652:46:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "53629:69:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7174, - "nodeType": "ExpressionStatement", - "src": "53629:69:20" - } - ] - }, - "documentation": { - "id": 7158, - "nodeType": "StructuredDocumentation", - "src": "53403:140:20", - "text": "@dev Saves the total amount borrowed in the current block for future checks\n @param borrowedInBlock Updated total borrowed amount" - }, - "id": 7176, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_updateTotalBorrowedInBlock", - "nameLocation": "53557:27:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7160, - "mutability": "mutable", - "name": "borrowedInBlock", - "nameLocation": "53593:15:20", - "nodeType": "VariableDeclaration", - "scope": 7176, - "src": "53585:23:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7159, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "53585:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "53584:25:20" - }, - "returnParameters": { - "id": 7162, - "nodeType": "ParameterList", - "parameters": [], - "src": "53619:0:20" - }, - "scope": 7747, - "src": "53548:170:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11811], - "body": { - "id": 7203, - "nodeType": "Block", - "src": "54059:171:20", - "statements": [ - { - "expression": { - "id": 7194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 7187, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5120, - "src": "54069:16:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$", - "typeString": "mapping(address => mapping(address => bool))" - } - }, - "id": 7191, - "indexExpression": { - "id": 7188, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7179, - "src": "54086:4:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "54069:22:20", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 7192, - "indexExpression": { - "expression": { - "id": 7189, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "54092:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "54096:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "54092:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "54069:34:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7193, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7181, - "src": "54106:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "54069:42:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7195, - "nodeType": "ExpressionStatement", - "src": "54069:42:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 7197, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7179, - "src": "54186:4:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 7198, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "54192:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "54196:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "54192:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7200, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7181, - "src": "54204:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 7196, - "name": "TransferAccountAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11577, - "src": "54163:22:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$", - "typeString": "function (address,address,bool)" - } - }, - "id": 7201, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "54163:47:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7202, - "nodeType": "EmitStatement", - "src": "54158:52:20" - } - ] - }, - "documentation": { - "id": 7177, - "nodeType": "StructuredDocumentation", - "src": "53724:213:20", - "text": "@dev Approves account transfer from another user to msg.sender\n @param from Address for which account transfers are allowed/forbidden\n @param state True is transfer is allowed, false if forbidden" - }, - "functionSelector": "00842b57", - "id": 7204, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7185, - "kind": "modifierInvocation", - "modifierName": { - "id": 7184, - "name": "nonReentrant", - "nameLocations": ["54042:12:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17216, - "src": "54042:12:20" - }, - "nodeType": "ModifierInvocation", - "src": "54042:12:20" - } - ], - "name": "approveAccountTransfer", - "nameLocation": "53951:22:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 7183, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "54025:8:20" - }, - "parameters": { - "id": 7182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7179, - "mutability": "mutable", - "name": "from", - "nameLocation": "53982:4:20", - "nodeType": "VariableDeclaration", - "scope": 7204, - "src": "53974:12:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7178, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "53974:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7181, - "mutability": "mutable", - "name": "state", - "nameLocation": "53993:5:20", - "nodeType": "VariableDeclaration", - "scope": 7204, - "src": "53988:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7180, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "53988:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "53973:26:20" - }, - "returnParameters": { - "id": 7186, - "nodeType": "ParameterList", - "parameters": [], - "src": "54059:0:20" - }, - "scope": 7747, - "src": "53942:288:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7226, - "nodeType": "Block", - "src": "54538:313:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 7217, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7209, - "src": "54742:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7218, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7211, - "src": "54757:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7214, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "54708:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "54722:19:20", - "memberName": "checkAndEnableToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12096, - "src": "54708:33:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 7219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "54708:55:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7220, - "nodeType": "ExpressionStatement", - "src": "54708:55:20" - }, - { - "eventCall": { - "arguments": [ - { - "id": 7222, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7207, - "src": "54828:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7223, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7211, - "src": "54838:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7221, - "name": "TokenEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11584, - "src": "54815:12:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 7224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "54815:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7225, - "nodeType": "EmitStatement", - "src": "54810:34:20" - } - ] - }, - "documentation": { - "id": 7205, - "nodeType": "StructuredDocumentation", - "src": "54236:180:20", - "text": "@dev Enables token in enabledTokenMask for a Credit Account\n @param creditAccount Account for which the token is enabled\n @param token Collateral token to enabled" - }, - "id": 7227, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_enableToken", - "nameLocation": "54430:12:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7212, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7207, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "54460:8:20", - "nodeType": "VariableDeclaration", - "scope": 7227, - "src": "54452:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7206, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "54452:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7209, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "54486:13:20", - "nodeType": "VariableDeclaration", - "scope": 7227, - "src": "54478:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7208, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "54478:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7211, - "mutability": "mutable", - "name": "token", - "nameLocation": "54517:5:20", - "nodeType": "VariableDeclaration", - "scope": 7227, - "src": "54509:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7210, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "54509:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "54442:86:20" - }, - "returnParameters": { - "id": 7213, - "nodeType": "ParameterList", - "parameters": [], - "src": "54538:0:20" - }, - "scope": 7747, - "src": "54421:430:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7249, - "nodeType": "Block", - "src": "55108:281:20", - "statements": [ - { - "condition": { - "arguments": [ - { - "id": 7239, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7232, - "src": "55259:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7240, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7234, - "src": "55274:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7237, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "55232:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "55246:12:20", - "memberName": "disableToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12132, - "src": "55232:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) external returns (bool)" - } - }, - "id": 7241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55232:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7248, - "nodeType": "IfStatement", - "src": "55228:141:20", - "trueBody": { - "id": 7247, - "nodeType": "Block", - "src": "55282:87:20", - "statements": [ - { - "eventCall": { - "arguments": [ - { - "id": 7243, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7230, - "src": "55342:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 7244, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7234, - "src": "55352:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7242, - "name": "TokenDisabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11591, - "src": "55328:13:20", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 7245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55328:30:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7246, - "nodeType": "EmitStatement", - "src": "55323:35:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 7228, - "nodeType": "StructuredDocumentation", - "src": "54857:128:20", - "text": "@dev Disable a token for a Credit Account\n @param borrower Owner of the account\n @param token Token to disable" - }, - "id": 7250, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_disableToken", - "nameLocation": "54999:13:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7235, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7230, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "55030:8:20", - "nodeType": "VariableDeclaration", - "scope": 7250, - "src": "55022:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7229, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55022:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7232, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "55056:13:20", - "nodeType": "VariableDeclaration", - "scope": 7250, - "src": "55048:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7231, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55048:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7234, - "mutability": "mutable", - "name": "token", - "nameLocation": "55087:5:20", - "nodeType": "VariableDeclaration", - "scope": 7250, - "src": "55079:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7233, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55079:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "55012:86:20" - }, - "returnParameters": { - "id": 7236, - "nodeType": "ParameterList", - "parameters": [], - "src": "55108:0:20" - }, - "scope": 7747, - "src": "54990:399:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7263, - "nodeType": "Block", - "src": "55474:58:20", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 7257, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "55502:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - ], - "id": 7256, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "55494:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 7255, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55494:7:20", - "typeDescriptions": {} - } - }, - "id": 7258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55494:22:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7254, - "name": "IPausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12566, - "src": "55484:9:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPausable_$12566_$", - "typeString": "type(contract IPausable)" - } - }, - "id": 7259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55484:33:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPausable_$12566", - "typeString": "contract IPausable" - } - }, - "id": 7260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "55518:5:20", - "memberName": "pause", - "nodeType": "MemberAccess", - "referencedDeclaration": 12565, - "src": "55484:39:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 7261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55484:41:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7262, - "nodeType": "ExpressionStatement", - "src": "55484:41:20" - } - ] - }, - "documentation": { - "id": 7251, - "nodeType": "StructuredDocumentation", - "src": "55395:34:20", - "text": "@dev Pauses the Credit Manager" - }, - "id": 7264, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_pauseCreditManager", - "nameLocation": "55443:19:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7252, - "nodeType": "ParameterList", - "parameters": [], - "src": "55462:2:20" - }, - "returnParameters": { - "id": 7253, - "nodeType": "ParameterList", - "parameters": [], - "src": "55474:0:20" - }, - "scope": 7747, - "src": "55434:98:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11843], - "body": { - "id": 7296, - "nodeType": "Block", - "src": "55834:214:20", - "statements": [ - { - "assignments": [7274], - "declarations": [ - { - "constant": false, - "id": 7274, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "55852:9:20", - "nodeType": "VariableDeclaration", - "scope": 7296, - "src": "55844:17:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7273, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "55844:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7279, - "initialValue": { - "arguments": [ - { - "id": 7277, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7267, - "src": "55892:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7275, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "55864:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "55878:13:20", - "memberName": "tokenMasksMap", - "nodeType": "MemberAccess", - "referencedDeclaration": 12223, - "src": "55864:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 7278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55864:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "55844:54:20" - }, - { - "expression": { - "id": 7294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7280, - "name": "allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7271, - "src": "55921:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7281, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7274, - "src": "55944:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 7282, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "55957:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "55944:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 7284, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "55943:16:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7289, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7285, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "55976:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "55990:18:20", - "memberName": "forbiddenTokenMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 12229, - "src": "55976:32:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 7287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "55976:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 7288, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7274, - "src": "56013:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "55976:46:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 7290, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "56026:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "55976:51:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 7292, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "55975:53:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "55943:85:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "55921:107:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7295, - "nodeType": "ExpressionStatement", - "src": "55921:107:20" - } - ] - }, - "documentation": { - "id": 7265, - "nodeType": "StructuredDocumentation", - "src": "55568:142:20", - "text": "@dev Returns true if token is a collateral token and is not forbidden,\n otherwise returns false\n @param token Token to check" - }, - "functionSelector": "f9eaee0d", - "id": 7297, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isTokenAllowed", - "nameLocation": "55724:14:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 7269, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "55790:8:20" - }, - "parameters": { - "id": 7268, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7267, - "mutability": "mutable", - "name": "token", - "nameLocation": "55747:5:20", - "nodeType": "VariableDeclaration", - "scope": 7297, - "src": "55739:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7266, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "55739:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "55738:15:20" - }, - "returnParameters": { - "id": 7272, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7271, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "55821:7:20", - "nodeType": "VariableDeclaration", - "scope": 7297, - "src": "55816:12:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7270, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "55816:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "55815:14:20" - }, - "scope": 7747, - "src": "55715:333:20", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [11827], - "body": { - "id": 7344, - "nodeType": "Block", - "src": "56553:450:20", - "statements": [ - { - "assignments": [7310], - "declarations": [ - { - "constant": false, - "id": 7310, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "56578:11:20", - "nodeType": "VariableDeclaration", - "scope": 7344, - "src": "56563:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 7309, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7308, - "name": "IPriceOracleV2", - "nameLocations": ["56563:14:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "56563:14:20" - }, - "referencedDeclaration": 12942, - "src": "56563:14:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - } - ], - "id": 7316, - "initialValue": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7312, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "56620:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7313, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56634:11:20", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 12332, - "src": "56620:25:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "function () view external returns (contract IPriceOracleV2)" - } - }, - "id": 7314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "56620:27:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - ], - "id": 7311, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "56592:14:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "type(contract IPriceOracleV2)" - } - }, - "id": 7315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "56592:65:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "56563:94:20" - }, - { - "assignments": [7318, 7320], - "declarations": [ - { - "constant": false, - "id": 7318, - "mutability": "mutable", - "name": "totalUSD", - "nameLocation": "56690:8:20", - "nodeType": "VariableDeclaration", - "scope": 7344, - "src": "56682:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7317, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "56682:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7320, - "mutability": "mutable", - "name": "twvUSD", - "nameLocation": "56708:6:20", - "nodeType": "VariableDeclaration", - "scope": 7344, - "src": "56700:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7319, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "56700:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7325, - "initialValue": { - "arguments": [ - { - "id": 7322, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7310, - "src": "56750:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - { - "id": 7323, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7300, - "src": "56775:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7321, - "name": "_calcTotalValueUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7430, - "src": "56718:18:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_contract$_IPriceOracleV2_$12942_$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (contract IPriceOracleV2,address) view returns (uint256,uint256)" - } - }, - "id": 7324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "56718:80:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "56681:117:20" - }, - { - "expression": { - "id": 7332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7326, - "name": "total", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7304, - "src": "56808:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 7329, - "name": "totalUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7318, - "src": "56843:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7330, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "56853:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7327, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7310, - "src": "56816:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 7328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56828:14:20", - "memberName": "convertFromUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12885, - "src": "56816:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 7331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "56816:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56808:56:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7333, - "nodeType": "ExpressionStatement", - "src": "56808:56:20" - }, - { - "expression": { - "id": 7342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7334, - "name": "twv", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7306, - "src": "56887:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7337, - "name": "twvUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7320, - "src": "56932:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7338, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "56940:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7335, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7310, - "src": "56905:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 7336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56917:14:20", - "memberName": "convertFromUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12885, - "src": "56905:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 7339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "56905:46:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7340, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "56966:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56905:78:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56887:96:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7343, - "nodeType": "ExpressionStatement", - "src": "56887:96:20" - } - ] - }, - "documentation": { - "id": 7298, - "nodeType": "StructuredDocumentation", - "src": "56054:353:20", - "text": "@dev Calculates total value for provided Credit Account in underlying\n More: https://dev.gearbox.fi/developers/credit/economy#totalUSD-value\n @param creditAccount Credit Account address\n @return total Total value in underlying\n @return twv Total weighted (discounted by liquidation thresholds) value in underlying" - }, - "functionSelector": "c7de38a6", - "id": 7345, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "calcTotalValue", - "nameLocation": "56421:14:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 7302, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "56495:8:20" - }, - "parameters": { - "id": 7301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7300, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "56444:13:20", - "nodeType": "VariableDeclaration", - "scope": 7345, - "src": "56436:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "56436:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "56435:23:20" - }, - "returnParameters": { - "id": 7307, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7304, - "mutability": "mutable", - "name": "total", - "nameLocation": "56529:5:20", - "nodeType": "VariableDeclaration", - "scope": 7345, - "src": "56521:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7303, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "56521:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7306, - "mutability": "mutable", - "name": "twv", - "nameLocation": "56544:3:20", - "nodeType": "VariableDeclaration", - "scope": 7345, - "src": "56536:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7305, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "56536:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "56520:28:20" - }, - "scope": 7747, - "src": "56412:591:20", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 7429, - "nodeType": "Block", - "src": "57510:900:20", - "statements": [ - { - "assignments": [7359], - "declarations": [ - { - "constant": false, - "id": 7359, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "57528:9:20", - "nodeType": "VariableDeclaration", - "scope": 7429, - "src": "57520:17:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7358, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "57520:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7361, - "initialValue": { - "hexValue": "31", - "id": 7360, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "57540:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "VariableDeclarationStatement", - "src": "57520:21:20" - }, - { - "assignments": [7363], - "declarations": [ - { - "constant": false, - "id": 7363, - "mutability": "mutable", - "name": "enabledTokensMask", - "nameLocation": "57559:17:20", - "nodeType": "VariableDeclaration", - "scope": 7429, - "src": "57551:25:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7362, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "57551:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7368, - "initialValue": { - "arguments": [ - { - "id": 7366, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7351, - "src": "57623:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7364, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "57579:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7365, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "57593:16:20", - "memberName": "enabledTokensMap", - "nodeType": "MemberAccess", - "referencedDeclaration": 12181, - "src": "57579:30:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 7367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "57579:67:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "57551:95:20" - }, - { - "body": { - "id": 7427, - "nodeType": "Block", - "src": "57709:695:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7376, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7372, - "name": "enabledTokensMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7363, - "src": "57727:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 7373, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "57747:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "57727:29:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 7375, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "57760:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "57727:34:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7420, - "nodeType": "IfStatement", - "src": "57723:604:20", - "trueBody": { - "id": 7419, - "nodeType": "Block", - "src": "57763:564:20", - "statements": [ - { - "assignments": [7378, 7380], - "declarations": [ - { - "constant": false, - "id": 7378, - "mutability": "mutable", - "name": "token", - "nameLocation": "57790:5:20", - "nodeType": "VariableDeclaration", - "scope": 7419, - "src": "57782:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7377, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "57782:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7380, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "57804:20:20", - "nodeType": "VariableDeclaration", - "scope": 7419, - "src": "57797:27:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7379, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "57797:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "id": 7385, - "initialValue": { - "arguments": [ - { - "id": 7383, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "57886:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 7381, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "57828:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7382, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "57863:22:20", - "memberName": "collateralTokensByMask", - "nodeType": "MemberAccess", - "referencedDeclaration": 12209, - "src": "57828:57:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view external returns (address,uint16)" - } - }, - "id": 7384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "57828:68:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "57781:115:20" - }, - { - "assignments": [7387], - "declarations": [ - { - "constant": false, - "id": 7387, - "mutability": "mutable", - "name": "balance", - "nameLocation": "57922:7:20", - "nodeType": "VariableDeclaration", - "scope": 7419, - "src": "57914:15:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "57914:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7394, - "initialValue": { - "arguments": [ - { - "id": 7392, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7351, - "src": "57956:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 7389, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7378, - "src": "57939:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7388, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "57932:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 7390, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "57932:13:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 7391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "57946:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "57932:23:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 7393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "57932:38:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "57914:56:20" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7395, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7387, - "src": "58006:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 7396, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "58016:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "58006:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7418, - "nodeType": "IfStatement", - "src": "58002:311:20", - "trueBody": { - "id": 7417, - "nodeType": "Block", - "src": "58019:294:20", - "statements": [ - { - "assignments": [7399], - "declarations": [ - { - "constant": false, - "id": 7399, - "mutability": "mutable", - "name": "value", - "nameLocation": "58049:5:20", - "nodeType": "VariableDeclaration", - "scope": 7417, - "src": "58041:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7398, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "58041:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7405, - "initialValue": { - "arguments": [ - { - "id": 7402, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7387, - "src": "58082:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7403, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7378, - "src": "58091:5:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7400, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7349, - "src": "58057:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 7401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "58069:12:20", - "memberName": "convertToUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12875, - "src": "58057:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 7404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "58057:40:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "58041:56:20" - }, - { - "id": 7410, - "nodeType": "UncheckedBlock", - "src": "58133:89:20", - "statements": [ - { - "expression": { - "id": 7408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7406, - "name": "totalUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7354, - "src": "58169:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 7407, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7399, - "src": "58181:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58169:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7409, - "nodeType": "ExpressionStatement", - "src": "58169:17:20" - } - ] - }, - { - "expression": { - "id": 7415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7411, - "name": "twvUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7356, - "src": "58243:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7412, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7399, - "src": "58253:5:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7413, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7380, - "src": "58261:20:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "58253:28:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58243:38:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7416, - "nodeType": "ExpressionStatement", - "src": "58243:38:20" - } - ] - } - } - ] - } - }, - { - "expression": { - "id": 7425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7421, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "58354:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7422, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "58366:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "31", - "id": 7423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "58379:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "58366:14:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58354:26:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7426, - "nodeType": "ExpressionStatement", - "src": "58354:26:20" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7371, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7369, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7359, - "src": "57677:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 7370, - "name": "enabledTokensMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7363, - "src": "57690:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "57677:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7428, - "nodeType": "WhileStatement", - "src": "57670:734:20" - } - ] - }, - "documentation": { - "id": 7346, - "nodeType": "StructuredDocumentation", - "src": "57009:338:20", - "text": "@dev Calculates total value for provided Credit Account in USD\n @param priceOracle Oracle used to convert assets to USD\n @param creditAccount Address of the Credit Account\n @return totalUSD Total value of the account in USD\n @return twvUSD Total weighted (discounted by liquidation thresholds) value in USD" - }, - "id": 7430, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_calcTotalValueUSD", - "nameLocation": "57361:18:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7352, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7349, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "57404:11:20", - "nodeType": "VariableDeclaration", - "scope": 7430, - "src": "57389:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 7348, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7347, - "name": "IPriceOracleV2", - "nameLocations": ["57389:14:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "57389:14:20" - }, - "referencedDeclaration": 12942, - "src": "57389:14:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7351, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "57433:13:20", - "nodeType": "VariableDeclaration", - "scope": 7430, - "src": "57425:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "57425:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "57379:73:20" - }, - "returnParameters": { - "id": 7357, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7354, - "mutability": "mutable", - "name": "totalUSD", - "nameLocation": "57484:8:20", - "nodeType": "VariableDeclaration", - "scope": 7430, - "src": "57476:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7353, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "57476:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7356, - "mutability": "mutable", - "name": "twvUSD", - "nameLocation": "57502:6:20", - "nodeType": "VariableDeclaration", - "scope": 7430, - "src": "57494:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7355, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "57494:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "57475:34:20" - }, - "scope": 7747, - "src": "57352:1058:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [11835], - "body": { - "id": 7461, - "nodeType": "Block", - "src": "59051:309:20", - "statements": [ - { - "assignments": [null, 7440], - "declarations": [ - null, - { - "constant": false, - "id": 7440, - "mutability": "mutable", - "name": "twv", - "nameLocation": "59072:3:20", - "nodeType": "VariableDeclaration", - "scope": 7461, - "src": "59064:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7439, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "59064:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7444, - "initialValue": { - "arguments": [ - { - "id": 7442, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7433, - "src": "59094:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7441, - "name": "calcTotalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7345, - "src": "59079:14:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256)" - } - }, - "id": 7443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59079:29:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "59061:47:20" - }, - { - "assignments": [null, null, 7446], - "declarations": [ - null, - null, - { - "constant": false, - "id": 7446, - "mutability": "mutable", - "name": "borrowAmountWithInterestAndFees", - "nameLocation": "59144:31:20", - "nodeType": "VariableDeclaration", - "scope": 7461, - "src": "59136:39:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7445, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "59136:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7451, - "initialValue": { - "arguments": [ - { - "id": 7449, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7433, - "src": "59239:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7447, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "59179:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59206:32:20", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "59179:59:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 7450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59179:74:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "59131:122:20" - }, - { - "expression": { - "id": 7459, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7452, - "name": "hf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7437, - "src": "59276:2:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7455, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7453, - "name": "twv", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7440, - "src": "59282:3:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7454, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "59288:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "59282:23:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 7456, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "59281:25:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 7457, - "name": "borrowAmountWithInterestAndFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7446, - "src": "59309:31:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "59281:59:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "59276:64:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7460, - "nodeType": "ExpressionStatement", - "src": "59276:64:20" - } - ] - }, - "documentation": { - "id": 7431, - "nodeType": "StructuredDocumentation", - "src": "58416:490:20", - "text": " @dev Calculates health factor for the credit account\n sum(asset[i] * liquidation threshold[i])\n Hf = --------------------------------------------\n borrowed amount + interest accrued + fees\n More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\n @param creditAccount Credit account address\n @return hf = Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)" - }, - "functionSelector": "dfd59465", - "id": 7462, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountHealthFactor", - "nameLocation": "58920:29:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 7435, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "59009:8:20" - }, - "parameters": { - "id": 7434, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7433, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "58958:13:20", - "nodeType": "VariableDeclaration", - "scope": 7462, - "src": "58950:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7432, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "58950:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "58949:23:20" - }, - "returnParameters": { - "id": 7438, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7437, - "mutability": "mutable", - "name": "hf", - "nameLocation": "59043:2:20", - "nodeType": "VariableDeclaration", - "scope": 7462, - "src": "59035:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7436, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "59035:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "59034:12:20" - }, - "scope": 7747, - "src": "58911:449:20", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [11803], - "body": { - "id": 7481, - "nodeType": "Block", - "src": "59598:89:20", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 7479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7473, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7465, - "src": "59644:8:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7471, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "59615:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59629:14:20", - "memberName": "creditAccounts", - "nodeType": "MemberAccess", - "referencedDeclaration": 12271, - "src": "59615:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view external returns (address)" - } - }, - "id": 7474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59615:38:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 7477, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "59665:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 7476, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "59657:7:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 7475, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "59657:7:20", - "typeDescriptions": {} - } - }, - "id": 7478, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59657:10:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "59615:52:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 7470, - "id": 7480, - "nodeType": "Return", - "src": "59608:59:20" - } - ] - }, - "documentation": { - "id": 7463, - "nodeType": "StructuredDocumentation", - "src": "59366:105:20", - "text": "@dev Returns true if the borrower has an open Credit Account\n @param borrower Borrower address" - }, - "functionSelector": "256ac915", - "id": 7482, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "hasOpenedCreditAccount", - "nameLocation": "59485:22:20", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 7467, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "59562:8:20" - }, - "parameters": { - "id": 7466, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7465, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "59516:8:20", - "nodeType": "VariableDeclaration", - "scope": 7482, - "src": "59508:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7464, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "59508:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "59507:18:20" - }, - "returnParameters": { - "id": 7470, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7469, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7482, - "src": "59588:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7468, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "59588:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "59587:6:20" - }, - "scope": 7747, - "src": "59476:211:20", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 7511, - "nodeType": "Block", - "src": "59787:196:20", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7486, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "59801:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7487, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59805:5:20", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "59801:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 7488, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "59813:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "59801:13:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7510, - "nodeType": "IfStatement", - "src": "59797:180:20", - "trueBody": { - "id": 7509, - "nodeType": "Block", - "src": "59816:161:20", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 7491, - "name": "wethAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5123, - "src": "59836:11:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7490, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "59830:5:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 7492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59830:18:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 7493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59849:7:20", - "memberName": "deposit", - "nodeType": "MemberAccess", - "referencedDeclaration": 13585, - "src": "59830:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$", - "typeString": "function () payable external" - } - }, - "id": 7496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "expression": { - "id": 7494, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "59865:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59869:5:20", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "59865:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "59830:46:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$__$returns$__$value", - "typeString": "function () payable external" - } - }, - "id": 7497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59830:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7498, - "nodeType": "ExpressionStatement", - "src": "59830:48:20" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 7503, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "59932:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59936:6:20", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "59932:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 7505, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "59944:3:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7506, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59948:5:20", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "59944:9:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 7500, - "name": "wethAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5123, - "src": "59910:11:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7499, - "name": "IWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13602, - "src": "59904:5:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETH_$13602_$", - "typeString": "type(contract IWETH)" - } - }, - "id": 7501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59904:18:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETH_$13602", - "typeString": "contract IWETH" - } - }, - "id": 7502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "59923:8:20", - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 13595, - "src": "59904:27:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 7507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59904:50:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7508, - "nodeType": "ExpressionStatement", - "src": "59904:50:20" - } - ] - } - } - ] - }, - "documentation": { - "id": 7483, - "nodeType": "StructuredDocumentation", - "src": "59693:60:20", - "text": "@dev Wraps ETH into WETH and sends it back to msg.sender" - }, - "id": 7512, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_wrapETH", - "nameLocation": "59767:8:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7484, - "nodeType": "ParameterList", - "parameters": [], - "src": "59775:2:20" - }, - "returnParameters": { - "id": 7485, - "nodeType": "ParameterList", - "parameters": [], - "src": "59787:0:20" - }, - "scope": 7747, - "src": "59758:225:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7571, - "nodeType": "Block", - "src": "60402:911:20", - "statements": [ - { - "assignments": [7524], - "declarations": [ - { - "constant": false, - "id": 7524, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "60427:11:20", - "nodeType": "VariableDeclaration", - "scope": 7571, - "src": "60412:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 7523, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7522, - "name": "IPriceOracleV2", - "nameLocations": ["60412:14:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "60412:14:20" - }, - "referencedDeclaration": 12942, - "src": "60412:14:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - } - ], - "id": 7530, - "initialValue": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 7526, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "60469:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "60483:11:20", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 12332, - "src": "60469:25:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "function () view external returns (contract IPriceOracleV2)" - } - }, - "id": 7528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60469:27:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - ], - "id": 7525, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "60441:14:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "type(contract IPriceOracleV2)" - } - }, - "id": 7529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60441:65:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "60412:94:20" - }, - { - "assignments": [7532, 7534], - "declarations": [ - { - "constant": false, - "id": 7532, - "mutability": "mutable", - "name": "totalUSD", - "nameLocation": "60539:8:20", - "nodeType": "VariableDeclaration", - "scope": 7571, - "src": "60531:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7531, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "60531:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7534, - "mutability": "mutable", - "name": "twvUSD", - "nameLocation": "60557:6:20", - "nodeType": "VariableDeclaration", - "scope": 7571, - "src": "60549:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7533, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "60549:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7539, - "initialValue": { - "arguments": [ - { - "id": 7536, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7524, - "src": "60599:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - { - "id": 7537, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7515, - "src": "60624:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7535, - "name": "_calcTotalValueUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7430, - "src": "60567:18:20", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_contract$_IPriceOracleV2_$12942_$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (contract IPriceOracleV2,address) view returns (uint256,uint256)" - } - }, - "id": 7538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60567:80:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "60530:117:20" - }, - { - "expression": { - "id": 7546, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7540, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7520, - "src": "60704:10:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 7543, - "name": "totalUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7532, - "src": "60744:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7544, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "60754:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7541, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7524, - "src": "60717:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 7542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "60729:14:20", - "memberName": "convertFromUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12885, - "src": "60717:26:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 7545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60717:48:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "60704:61:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 7547, - "nodeType": "ExpressionStatement", - "src": "60704:61:20" - }, - { - "assignments": [null, null, 7549], - "declarations": [ - null, - null, - { - "constant": false, - "id": 7549, - "mutability": "mutable", - "name": "borrowAmountWithInterestAndFees", - "nameLocation": "60802:31:20", - "nodeType": "VariableDeclaration", - "scope": 7571, - "src": "60794:39:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7548, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "60794:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7554, - "initialValue": { - "arguments": [ - { - "id": 7552, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7515, - "src": "60897:13:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7550, - "name": "creditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5081, - "src": "60837:13:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "id": 7551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "60864:32:20", - "memberName": "calcCreditAccountAccruedInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 12173, - "src": "60837:59:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view external returns (uint256,uint256,uint256)" - } - }, - "id": 7553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60837:74:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "60789:122:20" - }, - { - "assignments": [7556], - "declarations": [ - { - "constant": false, - "id": 7556, - "mutability": "mutable", - "name": "borrowAmountPlusInterestRateUSD", - "nameLocation": "61043:31:20", - "nodeType": "VariableDeclaration", - "scope": 7571, - "src": "61035:39:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7555, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "61035:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 7564, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 7559, - "name": "borrowAmountWithInterestAndFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7549, - "src": "61115:31:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 7560, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "61160:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 7557, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7524, - "src": "61077:11:20", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 7558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "61089:12:20", - "memberName": "convertToUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12875, - "src": "61077:24:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 7561, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "61077:103:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 7562, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "61183:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "61077:123:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "61035:165:20" - }, - { - "expression": { - "id": 7569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7565, - "name": "isLiquidatable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7518, - "src": "61249:14:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 7566, - "name": "twvUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7534, - "src": "61266:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 7567, - "name": "borrowAmountPlusInterestRateUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7556, - "src": "61275:31:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "61266:40:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "61249:57:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7570, - "nodeType": "ExpressionStatement", - "src": "61249:57:20" - } - ] - }, - "documentation": { - "id": 7513, - "nodeType": "StructuredDocumentation", - "src": "59989:261:20", - "text": "@dev Checks if account is liquidatable (i.e., hf < 1)\n @param creditAccount Address of credit account to check\n @return isLiquidatable True if account can be liquidated\n @return totalValue Total value of the Credit Account in underlying" - }, - "id": 7572, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isAccountLiquidatable", - "nameLocation": "60264:22:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7516, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7515, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "60295:13:20", - "nodeType": "VariableDeclaration", - "scope": 7572, - "src": "60287:21:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "60287:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "60286:23:20" - }, - "returnParameters": { - "id": 7521, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7518, - "mutability": "mutable", - "name": "isLiquidatable", - "nameLocation": "60362:14:20", - "nodeType": "VariableDeclaration", - "scope": 7572, - "src": "60357:19:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7517, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "60357:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7520, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "60386:10:20", - "nodeType": "VariableDeclaration", - "scope": 7572, - "src": "60378:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7519, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "60378:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "60356:41:20" - }, - "scope": 7747, - "src": "60255:1058:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7590, - "nodeType": "Block", - "src": "61438:106:20", - "statements": [ - { - "expression": { - "id": 7588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7578, - "name": "isExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7576, - "src": "61448:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7587, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "id": 7579, - "name": "expirable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5090, - "src": "61461:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 7580, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "61460:11:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 7585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7581, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "61476:5:20", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 7582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "61482:9:20", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "61476:15:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "expression": { - "id": 7583, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "61495:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 7584, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "61502:14:20", - "memberName": "expirationDate", - "nodeType": "MemberAccess", - "referencedDeclaration": 5037, - "src": "61495:21:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "src": "61476:40:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 7586, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "61475:42:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "61460:57:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "61448:69:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7589, - "nodeType": "ExpressionStatement", - "src": "61448:69:20" - } - ] - }, - "documentation": { - "id": 7573, - "nodeType": "StructuredDocumentation", - "src": "61319:53:20", - "text": "@dev Returns whether the Credit Facade is expired" - }, - "id": 7591, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isExpired", - "nameLocation": "61386:10:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7574, - "nodeType": "ParameterList", - "parameters": [], - "src": "61396:2:20" - }, - "returnParameters": { - "id": 7577, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7576, - "mutability": "mutable", - "name": "isExpired", - "nameLocation": "61427:9:20", - "nodeType": "VariableDeclaration", - "scope": 7591, - "src": "61422:14:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7575, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "61422:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "61421:16:20" - }, - "scope": 7747, - "src": "61377:167:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7604, - "nodeType": "Block", - "src": "61681:58:20", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 7601, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5134, - "src": "61727:4:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 7598, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5112, - "src": "61705:10:20", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 7597, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "61698:6:20", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 7599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "61698:18:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 7600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "61717:9:20", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "61698:28:20", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 7602, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "61698:34:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 7596, - "id": 7603, - "nodeType": "Return", - "src": "61691:41:20" - } - ] - }, - "documentation": { - "id": 7592, - "nodeType": "StructuredDocumentation", - "src": "61550:60:20", - "text": "@dev Returns the current available liquidity of the pool" - }, - "id": 7605, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getAvailableLiquidity", - "nameLocation": "61624:22:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7593, - "nodeType": "ParameterList", - "parameters": [], - "src": "61646:2:20" - }, - "returnParameters": { - "id": 7596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7595, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 7605, - "src": "61672:7:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7594, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "61672:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "61671:9:20" - }, - "scope": 7747, - "src": "61615:124:20", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7619, - "nodeType": "Block", - "src": "62292:55:20", - "statements": [ - { - "expression": { - "id": 7617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7613, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "62302:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 7615, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "62309:23:20", - "memberName": "isIncreaseDebtForbidden", - "nodeType": "MemberAccess", - "referencedDeclaration": 5034, - "src": "62302:30:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7616, - "name": "_mode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7608, - "src": "62335:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "62302:38:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7618, - "nodeType": "ExpressionStatement", - "src": "62302:38:20" - } - ] - }, - "documentation": { - "id": 7606, - "nodeType": "StructuredDocumentation", - "src": "61781:395:20", - "text": "@dev Sets the increaseDebtForbidden mode\n @notice increaseDebtForbidden can be used to secure pool funds\n without pausing the entire system. E.g., if a bug is reported\n that can potentially lead to loss of funds, but there is no\n immediate threat, new borrowing can be stopped, while other\n functionality (trading, closing/liquidating accounts) is retained" - }, - "functionSelector": "ffd9b907", - "id": 7620, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7611, - "kind": "modifierInvocation", - "modifierName": { - "id": 7610, - "name": "creditConfiguratorOnly", - "nameLocations": ["62252:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "62252:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "62252:22:20" - } - ], - "name": "setIncreaseDebtForbidden", - "nameLocation": "62190:24:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7609, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7608, - "mutability": "mutable", - "name": "_mode", - "nameLocation": "62220:5:20", - "nodeType": "VariableDeclaration", - "scope": 7620, - "src": "62215:10:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7607, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "62215:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "62214:12:20" - }, - "returnParameters": { - "id": 7612, - "nodeType": "ParameterList", - "parameters": [], - "src": "62292:0:20" - }, - "scope": 7747, - "src": "62181:166:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7634, - "nodeType": "Block", - "src": "62856:60:20", - "statements": [ - { - "expression": { - "id": 7632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7628, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "62866:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 7630, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "62873:25:20", - "memberName": "maxBorrowedAmountPerBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 5031, - "src": "62866:32:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7631, - "name": "newLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7623, - "src": "62901:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "62866:43:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7633, - "nodeType": "ExpressionStatement", - "src": "62866:43:20" - } - ] - }, - "documentation": { - "id": 7621, - "nodeType": "StructuredDocumentation", - "src": "62353:389:20", - "text": "@dev Sets borrowing limit per single block\n @notice Borrowing limit per block in conjunction with\n the monitoring system serves to minimize loss from hacks\n While an attacker would be able to steal, in worst case,\n up to (limitPerBlock * n blocks) of funds, the monitoring\n system would pause the contracts after detecting suspicious\n activity" - }, - "functionSelector": "9c55a054", - "id": 7635, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7626, - "kind": "modifierInvocation", - "modifierName": { - "id": 7625, - "name": "creditConfiguratorOnly", - "nameLocations": ["62816:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "62816:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "62816:22:20" - } - ], - "name": "setLimitPerBlock", - "nameLocation": "62756:16:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7624, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7623, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "62781:8:20", - "nodeType": "VariableDeclaration", - "scope": 7635, - "src": "62773:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7622, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "62773:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "62772:18:20" - }, - "returnParameters": { - "id": 7627, - "nodeType": "ParameterList", - "parameters": [], - "src": "62856:0:20" - }, - "scope": 7747, - "src": "62747:169:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7657, - "nodeType": "Block", - "src": "63156:110:20", - "statements": [ - { - "expression": { - "id": 7649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7645, - "name": "totalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5109, - "src": "63166:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "id": 7647, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "63176:16:20", - "memberName": "currentTotalDebt", - "nodeType": "MemberAccess", - "referencedDeclaration": 5058, - "src": "63166:26:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7648, - "name": "newCurrentTotalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7638, - "src": "63195:19:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "63166:48:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7650, - "nodeType": "ExpressionStatement", - "src": "63166:48:20" - }, - { - "expression": { - "id": 7655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7651, - "name": "totalDebt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5109, - "src": "63224:9:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TotalDebt_$5062_storage", - "typeString": "struct TotalDebt storage ref" - } - }, - "id": 7653, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "63234:14:20", - "memberName": "totalDebtLimit", - "nodeType": "MemberAccess", - "referencedDeclaration": 5061, - "src": "63224:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7654, - "name": "newLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7640, - "src": "63251:8:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "63224:35:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7656, - "nodeType": "ExpressionStatement", - "src": "63224:35:20" - } - ] - }, - "documentation": { - "id": 7636, - "nodeType": "StructuredDocumentation", - "src": "62922:102:20", - "text": "@dev Sets the total debt limit and the current total debt value (used for Credit Facade migration)" - }, - "functionSelector": "b2f4d328", - "id": 7658, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7643, - "kind": "modifierInvocation", - "modifierName": { - "id": 7642, - "name": "creditConfiguratorOnly", - "nameLocations": ["63129:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "63129:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "63129:22:20" - } - ], - "name": "setTotalDebtParams", - "nameLocation": "63038:18:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7641, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7638, - "mutability": "mutable", - "name": "newCurrentTotalDebt", - "nameLocation": "63065:19:20", - "nodeType": "VariableDeclaration", - "scope": 7658, - "src": "63057:27:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7637, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "63057:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7640, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "63094:8:20", - "nodeType": "VariableDeclaration", - "scope": 7658, - "src": "63086:16:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7639, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "63086:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "63056:47:20" - }, - "returnParameters": { - "id": 7644, - "nodeType": "ParameterList", - "parameters": [], - "src": "63156:0:20" - }, - "scope": 7747, - "src": "63029:237:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7679, - "nodeType": "Block", - "src": "63549:152:20", - "statements": [ - { - "condition": { - "id": 7667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "63563:10:20", - "subExpression": { - "id": 7666, - "name": "expirable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5090, - "src": "63564:9:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7672, - "nodeType": "IfStatement", - "src": "63559:85:20", - "trueBody": { - "id": 7671, - "nodeType": "Block", - "src": "63575:69:20", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7668, - "name": "NotAllowedWhenNotExpirableException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11602, - "src": "63596:35:20", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "63596:37:20", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7670, - "nodeType": "RevertStatement", - "src": "63589:44:20" - } - ] - } - }, - { - "expression": { - "id": 7677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7673, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "63653:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 7675, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "63660:14:20", - "memberName": "expirationDate", - "nodeType": "MemberAccess", - "referencedDeclaration": 5037, - "src": "63653:21:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7676, - "name": "newExpirationDate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7661, - "src": "63677:17:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "src": "63653:41:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "id": 7678, - "nodeType": "ExpressionStatement", - "src": "63653:41:20" - } - ] - }, - "documentation": { - "id": 7659, - "nodeType": "StructuredDocumentation", - "src": "63272:167:20", - "text": "@dev Sets Credit Facade expiration date\n @notice See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - }, - "functionSelector": "eb9606df", - "id": 7680, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7664, - "kind": "modifierInvocation", - "modifierName": { - "id": 7663, - "name": "creditConfiguratorOnly", - "nameLocations": ["63522:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "63522:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "63522:22:20" - } - ], - "name": "setExpirationDate", - "nameLocation": "63453:17:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7662, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7661, - "mutability": "mutable", - "name": "newExpirationDate", - "nameLocation": "63478:17:20", - "nodeType": "VariableDeclaration", - "scope": 7680, - "src": "63471:24:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 7660, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "63471:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - } - ], - "src": "63470:26:20" - }, - "returnParameters": { - "id": 7665, - "nodeType": "ParameterList", - "parameters": [], - "src": "63549:0:20" - }, - "scope": 7747, - "src": "63444:257:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7702, - "nodeType": "Block", - "src": "64310:129:20", - "statements": [ - { - "expression": { - "id": 7694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7690, - "name": "limits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5100, - "src": "64320:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage", - "typeString": "struct Limits storage ref" - } - }, - "id": 7692, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "64327:17:20", - "memberName": "minBorrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5044, - "src": "64320:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7693, - "name": "_minBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7683, - "src": "64347:18:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "64320:45:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7695, - "nodeType": "ExpressionStatement", - "src": "64320:45:20" - }, - { - "expression": { - "id": 7700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7696, - "name": "limits", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5100, - "src": "64381:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Limits_$5048_storage", - "typeString": "struct Limits storage ref" - } - }, - "id": 7698, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "64388:17:20", - "memberName": "maxBorrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5047, - "src": "64381:24:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7699, - "name": "_maxBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7685, - "src": "64408:18:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "64381:45:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7701, - "nodeType": "ExpressionStatement", - "src": "64381:45:20" - } - ] - }, - "documentation": { - "id": 7681, - "nodeType": "StructuredDocumentation", - "src": "63707:456:20", - "text": "@dev Sets borrowing limits per single Credit Account\n @param _minBorrowedAmount The minimal borrowed amount per Credit Account. Minimal amount can be relevant\n for liquidations, since very small amounts will make liquidations unprofitable for liquidators\n @param _maxBorrowedAmount The maximal borrowed amount per Credit Account. Used to limit exposure per a single\n credit account - especially relevant in whitelisted mode." - }, - "functionSelector": "601d66f6", - "id": 7703, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7688, - "kind": "modifierInvocation", - "modifierName": { - "id": 7687, - "name": "creditConfiguratorOnly", - "nameLocations": ["64287:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "64287:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "64287:22:20" - } - ], - "name": "setCreditAccountLimits", - "nameLocation": "64177:22:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7686, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7683, - "mutability": "mutable", - "name": "_minBorrowedAmount", - "nameLocation": "64217:18:20", - "nodeType": "VariableDeclaration", - "scope": 7703, - "src": "64209:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7682, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "64209:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7685, - "mutability": "mutable", - "name": "_maxBorrowedAmount", - "nameLocation": "64253:18:20", - "nodeType": "VariableDeclaration", - "scope": 7703, - "src": "64245:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7684, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "64245:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "64199:78:20" - }, - "returnParameters": { - "id": 7689, - "nodeType": "ParameterList", - "parameters": [], - "src": "64310:0:20" - }, - "scope": 7747, - "src": "64168:271:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7717, - "nodeType": "Block", - "src": "64651:66:20", - "statements": [ - { - "expression": { - "id": 7715, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7711, - "name": "lossParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5105, - "src": "64661:10:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams storage ref" - } - }, - "id": 7713, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "64672:17:20", - "memberName": "maxCumulativeLoss", - "nodeType": "MemberAccess", - "referencedDeclaration": 5054, - "src": "64661:28:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7714, - "name": "_maxCumulativeLoss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7706, - "src": "64692:18:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "64661:49:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7716, - "nodeType": "ExpressionStatement", - "src": "64661:49:20" - } - ] - }, - "documentation": { - "id": 7704, - "nodeType": "StructuredDocumentation", - "src": "64445:91:20", - "text": "@dev Sets the max cumulative loss that can be accrued before pausing the Credit Manager" - }, - "functionSelector": "08c25f8f", - "id": 7718, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7709, - "kind": "modifierInvocation", - "modifierName": { - "id": 7708, - "name": "creditConfiguratorOnly", - "nameLocations": ["64624:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "64624:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "64624:22:20" - } - ], - "name": "setMaxCumulativeLoss", - "nameLocation": "64550:20:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7707, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7706, - "mutability": "mutable", - "name": "_maxCumulativeLoss", - "nameLocation": "64579:18:20", - "nodeType": "VariableDeclaration", - "scope": 7718, - "src": "64571:26:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 7705, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "64571:7:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "64570:28:20" - }, - "returnParameters": { - "id": 7710, - "nodeType": "ParameterList", - "parameters": [], - "src": "64651:0:20" - }, - "scope": 7747, - "src": "64541:176:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7730, - "nodeType": "Block", - "src": "64840:53:20", - "statements": [ - { - "expression": { - "id": 7728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7724, - "name": "lossParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5105, - "src": "64850:10:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CumulativeLossParams_$5055_storage", - "typeString": "struct CumulativeLossParams storage ref" - } - }, - "id": 7726, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "64861:21:20", - "memberName": "currentCumulativeLoss", - "nodeType": "MemberAccess", - "referencedDeclaration": 5051, - "src": "64850:32:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "30", - "id": 7727, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "64885:1:20", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "64850:36:20", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "id": 7729, - "nodeType": "ExpressionStatement", - "src": "64850:36:20" - } - ] - }, - "documentation": { - "id": 7719, - "nodeType": "StructuredDocumentation", - "src": "64723:49:20", - "text": "@dev Resets the current cumulative loss value" - }, - "functionSelector": "a706efc4", - "id": 7731, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7722, - "kind": "modifierInvocation", - "modifierName": { - "id": 7721, - "name": "creditConfiguratorOnly", - "nameLocations": ["64817:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "64817:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "64817:22:20" - } - ], - "name": "resetCumulativeLoss", - "nameLocation": "64786:19:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7720, - "nodeType": "ParameterList", - "parameters": [], - "src": "64805:2:20" - }, - "returnParameters": { - "id": 7723, - "nodeType": "ParameterList", - "parameters": [], - "src": "64840:0:20" - }, - "scope": 7747, - "src": "64777:116:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 7745, - "nodeType": "Block", - "src": "65075:66:20", - "statements": [ - { - "expression": { - "id": 7743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 7739, - "name": "params", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5095, - "src": "65085:6:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Params_$5041_storage", - "typeString": "struct Params storage ref" - } - }, - "id": 7741, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "65092:28:20", - "memberName": "emergencyLiquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 5040, - "src": "65085:35:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 7742, - "name": "newDiscount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7734, - "src": "65123:11:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "65085:49:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 7744, - "nodeType": "ExpressionStatement", - "src": "65085:49:20" - } - ] - }, - "documentation": { - "id": 7732, - "nodeType": "StructuredDocumentation", - "src": "64899:58:20", - "text": "@dev Sets the new emergency liquidation discount value" - }, - "functionSelector": "4527d9ce", - "id": 7746, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 7737, - "kind": "modifierInvocation", - "modifierName": { - "id": 7736, - "name": "creditConfiguratorOnly", - "nameLocations": ["65048:22:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5157, - "src": "65048:22:20" - }, - "nodeType": "ModifierInvocation", - "src": "65048:22:20" - } - ], - "name": "setEmergencyLiquidationDiscount", - "nameLocation": "64971:31:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 7735, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 7734, - "mutability": "mutable", - "name": "newDiscount", - "nameLocation": "65010:11:20", - "nodeType": "VariableDeclaration", - "scope": 7746, - "src": "65003:18:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7733, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "65003:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "65002:20:20" - }, - "returnParameters": { - "id": 7738, - "nodeType": "ParameterList", - "parameters": [], - "src": "65075:0:20" - }, - "scope": 7747, - "src": "64962:179:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 7748, - "src": "3062:62081:20", - "usedErrors": [ - 11602, 11605, 11608, 11611, 11614, 11617, 11620, 11623, 11626, - 11629, 11632, 11635, 11638, 11643, 11646, 11649, 11652, 11655, - 11658, 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, - 11981, 11984, 11987, 11990, 11993, 12534 - ] - } - ], - "src": "128:65016:20" - }, - "id": 20 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol", - "exportedSymbols": { - "ACLTrait": [2057], - "ADDR_BIT_SIZE": [7788], - "ALLOWANCE_THRESHOLD": [13886], - "Address": [18720], - "ClosureAction": [11941], - "CreditManager": [10549], - "DEFAULT_FEE_INTEREST": [13889], - "DEFAULT_FEE_LIQUIDATION": [13892], - "DEFAULT_LIQUIDATION_PREMIUM": [13895], - "IAccountFactory": [10721], - "IAddressProvider": [10799], - "ICreditAccount": [11064], - "ICreditManagerV2": [12355], - "IERC20": [17905], - "INDEX_PRECISION": [7793], - "IPoolService": [12805], - "IPriceOracleV2": [12942], - "IWETHGateway": [12994], - "LEVERAGE_DECIMALS": [13918], - "PERCENTAGE_FACTOR": [14398], - "RAY": [13877], - "SafeCast": [20295], - "SafeERC20": [18247], - "Slot1": [7816], - "UNIVERSAL_CONTRACT": [13930] - }, - "id": 10550, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 7749, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:21" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 7751, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 18721, - "src": "167:108:21", - "symbolAliases": [ - { - "foreign": { - "id": 7750, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "176:7:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 7753, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 17906, - "src": "276:112:21", - "symbolAliases": [ - { - "foreign": { - "id": 7752, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "285:6:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "id": 7755, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 18248, - "src": "389:124:21", - "symbolAliases": [ - { - "foreign": { - "id": 7754, - "name": "SafeERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18247, - "src": "398:9:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "id": 7757, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 20296, - "src": "514:115:21", - "symbolAliases": [ - { - "foreign": { - "id": 7756, - "name": "SafeCast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20295, - "src": "523:8:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol", - "file": "../core/ACLTrait.sol", - "id": 7759, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 2058, - "src": "631:48:21", - "symbolAliases": [ - { - "foreign": { - "id": 7758, - "name": "ACLTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2057, - "src": "640:8:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol", - "file": "../interfaces/IAccountFactory.sol", - "id": 7761, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 10722, - "src": "695:68:21", - "symbolAliases": [ - { - "foreign": { - "id": 7760, - "name": "IAccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10721, - "src": "704:15:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol", - "file": "../interfaces/ICreditAccount.sol", - "id": 7763, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 11065, - "src": "764:66:21", - "symbolAliases": [ - { - "foreign": { - "id": 7762, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "773:14:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol", - "file": "../interfaces/IPoolService.sol", - "id": 7765, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 12806, - "src": "831:62:21", - "symbolAliases": [ - { - "foreign": { - "id": 7764, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "840:12:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol", - "file": "../interfaces/IWETHGateway.sol", - "id": 7767, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 12995, - "src": "894:62:21", - "symbolAliases": [ - { - "foreign": { - "id": 7766, - "name": "IWETHGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12994, - "src": "903:12:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol", - "file": "../interfaces/ICreditManagerV2.sol", - "id": 7770, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 12356, - "src": "957:85:21", - "symbolAliases": [ - { - "foreign": { - "id": 7768, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "966:16:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7769, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "984:13:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol", - "file": "../interfaces/IAddressProvider.sol", - "id": 7772, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 10800, - "src": "1043:70:21", - "symbolAliases": [ - { - "foreign": { - "id": 7771, - "name": "IAddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10799, - "src": "1052:16:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "file": "../interfaces/IPriceOracle.sol", - "id": 7774, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 12954, - "src": "1114:64:21", - "symbolAliases": [ - { - "foreign": { - "id": 7773, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "1123:14:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol", - "file": "../libraries/Constants.sol", - "id": 7776, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 13931, - "src": "1193:49:21", - "symbolAliases": [ - { - "foreign": { - "id": 7775, - "name": "RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13877, - "src": "1202:3:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol", - "file": "../libraries/PercentageMath.sol", - "id": 7778, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 14471, - "src": "1243:68:21", - "symbolAliases": [ - { - "foreign": { - "id": 7777, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "1252:17:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol", - "file": "../libraries/Constants.sol", - "id": 7785, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10550, - "sourceUnit": 13931, - "src": "1312:180:21", - "symbolAliases": [ - { - "foreign": { - "id": 7779, - "name": "DEFAULT_FEE_INTEREST", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13889, - "src": "1321:20:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7780, - "name": "DEFAULT_FEE_LIQUIDATION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13892, - "src": "1343:23:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7781, - "name": "DEFAULT_LIQUIDATION_PREMIUM", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13895, - "src": "1368:27:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7782, - "name": "LEVERAGE_DECIMALS", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13918, - "src": "1397:17:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7783, - "name": "ALLOWANCE_THRESHOLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13886, - "src": "1416:19:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 7784, - "name": "UNIVERSAL_CONTRACT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13930, - "src": "1437:18:21", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "constant": true, - "id": 7788, - "mutability": "constant", - "name": "ADDR_BIT_SIZE", - "nameLocation": "1511:13:21", - "nodeType": "VariableDeclaration", - "scope": 10550, - "src": "1494:36:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7786, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1494:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "313630", - "id": 7787, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1527:3:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_160_by_1", - "typeString": "int_const 160" - }, - "value": "160" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 7793, - "mutability": "constant", - "name": "INDEX_PRECISION", - "nameLocation": "1549:15:21", - "nodeType": "VariableDeclaration", - "scope": 10550, - "src": "1532:40:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7789, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1532:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_rational_1000000000_by_1", - "typeString": "int_const 1000000000" - }, - "id": 7792, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 7790, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1567:2:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "39", - "id": 7791, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1571:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_9_by_1", - "typeString": "int_const 9" - }, - "value": "9" - }, - "src": "1567:5:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000_by_1", - "typeString": "int_const 1000000000" - } - }, - "visibility": "internal" - }, - { - "canonicalName": "Slot1", - "id": 7816, - "members": [ - { - "constant": false, - "id": 7796, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "1689:11:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "1682:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7795, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1682:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7799, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "1801:14:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "1794:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7798, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1794:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7802, - "mutability": "mutable", - "name": "liquidationDiscount", - "nameLocation": "2116:19:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "2109:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7801, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2109:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7805, - "mutability": "mutable", - "name": "feeLiquidationExpired", - "nameLocation": "2268:21:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "2261:28:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7804, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2261:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7808, - "mutability": "mutable", - "name": "liquidationDiscountExpired", - "nameLocation": "2472:26:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "2465:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7807, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2465:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7812, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "2589:11:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "2574:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 7811, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7810, - "name": "IPriceOracleV2", - "nameLocations": ["2574:14:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "2574:14:21" - }, - "referencedDeclaration": 12942, - "src": "2574:14:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 7815, - "mutability": "mutable", - "name": "ltUnderlying", - "nameLocation": "2674:12:21", - "nodeType": "VariableDeclaration", - "scope": 7816, - "src": "2667:19:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 7814, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2667:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "name": "Slot1", - "nameLocation": "1582:5:21", - "nodeType": "StructDefinition", - "scope": 10550, - "src": "1575:1114:21", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 7818, - "name": "ICreditManagerV2", - "nameLocations": ["2891:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "2891:16:21" - }, - "id": 7819, - "nodeType": "InheritanceSpecifier", - "src": "2891:16:21" - }, - { - "baseName": { - "id": 7820, - "name": "ACLTrait", - "nameLocations": ["2909:8:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "2909:8:21" - }, - "id": 7821, - "nodeType": "InheritanceSpecifier", - "src": "2909:8:21" - } - ], - "canonicalName": "CreditManager", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 7817, - "nodeType": "StructuredDocumentation", - "src": "2691:174:21", - "text": "@title Credit Manager\n @notice Encapsulates the business logic for managing Credit Accounts\n More info: https://dev.gearbox.fi/developers/credit/credit_manager" - }, - "fullyImplemented": true, - "id": 10549, - "linearizedBaseContracts": [ - 10549, 2057, 17186, 18742, 12355, 12963, 11994, 11954 - ], - "name": "CreditManager", - "nameLocation": "2874:13:21", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 7825, - "libraryName": { - "id": 7822, - "name": "SafeERC20", - "nameLocations": ["2930:9:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18247, - "src": "2930:9:21" - }, - "nodeType": "UsingForDirective", - "src": "2924:27:21", - "typeName": { - "id": 7824, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7823, - "name": "IERC20", - "nameLocations": ["2944:6:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "2944:6:21" - }, - "referencedDeclaration": 17905, - "src": "2944:6:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - } - }, - { - "global": false, - "id": 7828, - "libraryName": { - "id": 7826, - "name": "Address", - "nameLocations": ["2962:7:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "2962:7:21" - }, - "nodeType": "UsingForDirective", - "src": "2956:34:21", - "typeName": { - "id": 7827, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2974:15:21", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - } - }, - { - "global": false, - "id": 7831, - "libraryName": { - "id": 7829, - "name": "SafeCast", - "nameLocations": ["3001:8:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20295, - "src": "3001:8:21" - }, - "nodeType": "UsingForDirective", - "src": "2995:27:21", - "typeName": { - "id": 7830, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3014:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - { - "constant": false, - "documentation": { - "id": 7832, - "nodeType": "StructuredDocumentation", - "src": "3028:137:21", - "text": "@dev used to protect against reentrancy. Bool is gas-optimal,\n since there are other non-zero values packed into the same slot" - }, - "id": 7834, - "mutability": "mutable", - "name": "entered", - "nameLocation": "3183:7:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "3170:20:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7833, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3170:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "private" - }, - { - "constant": false, - "functionSelector": "b3da9e6b", - "id": 7836, - "mutability": "mutable", - "name": "emergencyLiquidation", - "nameLocation": "3209:20:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "3197:32:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 7835, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3197:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12297], - "constant": false, - "documentation": { - "id": 7837, - "nodeType": "StructuredDocumentation", - "src": "3236:72:21", - "text": "@dev The maximal number of enabled tokens on a single Credit Account" - }, - "functionSelector": "8345f26e", - "id": 7841, - "mutability": "mutable", - "name": "maxAllowedEnabledTokenLength", - "nameLocation": "3335:28:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7839, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3326:8:21" - }, - "scope": 10549, - "src": "3313:55:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 7838, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3313:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3132", - "id": 7840, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3366:2:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_12_by_1", - "typeString": "int_const 12" - }, - "value": "12" - }, - "visibility": "public" - }, - { - "baseFunctions": [12325], - "constant": false, - "documentation": { - "id": 7842, - "nodeType": "StructuredDocumentation", - "src": "3375:47:21", - "text": "@dev Address of the connected Credit Facade" - }, - "functionSelector": "2f7a1881", - "id": 7845, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "3451:12:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7844, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3442:8:21" - }, - "scope": 10549, - "src": "3427:36:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7843, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3427:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 7846, - "nodeType": "StructuredDocumentation", - "src": "3470:72:21", - "text": "@dev Stores fees & parameters commonly used together for gas savings" - }, - "id": 7849, - "mutability": "mutable", - "name": "slot1", - "nameLocation": "3562:5:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "3547:20:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1" - }, - "typeName": { - "id": 7848, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7847, - "name": "Slot1", - "nameLocations": ["3547:5:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7816, - "src": "3547:5:21" - }, - "referencedDeclaration": 7816, - "src": "3547:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage_ptr", - "typeString": "struct Slot1" - } - }, - "visibility": "internal" - }, - { - "baseFunctions": [12271], - "constant": false, - "documentation": { - "id": 7850, - "nodeType": "StructuredDocumentation", - "src": "3574:66:21", - "text": "@dev A map from borrower addresses to Credit Account addresses" - }, - "functionSelector": "055ee9b5", - "id": 7855, - "mutability": "mutable", - "name": "creditAccounts", - "nameLocation": "3689:14:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7854, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3680:8:21" - }, - "scope": 10549, - "src": "3645:58:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 7853, - "keyType": { - "id": 7851, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3653:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3645:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 7852, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3664:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 7856, - "nodeType": "StructuredDocumentation", - "src": "3710:45:21", - "text": "@dev Factory contract for Credit Accounts" - }, - "functionSelector": "db7ceb80", - "id": 7859, - "mutability": "immutable", - "name": "_accountFactory", - "nameLocation": "3793:15:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "3760:48:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - }, - "typeName": { - "id": 7858, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 7857, - "name": "IAccountFactory", - "nameLocations": ["3760:15:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10721, - "src": "3760:15:21" - }, - "referencedDeclaration": 10721, - "src": "3760:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12251], - "constant": false, - "documentation": { - "id": 7860, - "nodeType": "StructuredDocumentation", - "src": "3815:40:21", - "text": "@dev Address of the underlying asset" - }, - "functionSelector": "6f307dc3", - "id": 7863, - "mutability": "immutable", - "name": "underlying", - "nameLocation": "3894:10:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7862, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3885:8:21" - }, - "scope": 10549, - "src": "3860:44:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7861, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3860:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12263], - "constant": false, - "documentation": { - "id": 7864, - "nodeType": "StructuredDocumentation", - "src": "3911:88:21", - "text": "@dev Address of the connected pool\n @notice [DEPRECATED]: use pool() instead." - }, - "functionSelector": "570a7af2", - "id": 7867, - "mutability": "immutable", - "name": "poolService", - "nameLocation": "4038:11:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7866, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4029:8:21" - }, - "scope": 10549, - "src": "4004:45:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7865, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4004:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12257], - "constant": false, - "documentation": { - "id": 7868, - "nodeType": "StructuredDocumentation", - "src": "4056:38:21", - "text": "@dev Address of the connected pool" - }, - "functionSelector": "16f0115b", - "id": 7871, - "mutability": "immutable", - "name": "pool", - "nameLocation": "4133:4:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7870, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4124:8:21" - }, - "scope": 10549, - "src": "4099:38:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7869, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4099:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12283], - "constant": false, - "documentation": { - "id": 7872, - "nodeType": "StructuredDocumentation", - "src": "4144:24:21", - "text": "@dev Address of WETH" - }, - "functionSelector": "4f0e0ef3", - "id": 7875, - "mutability": "immutable", - "name": "wethAddress", - "nameLocation": "4207:11:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7874, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4198:8:21" - }, - "scope": 10549, - "src": "4173:45:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7873, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4173:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 7876, - "nodeType": "StructuredDocumentation", - "src": "4225:32:21", - "text": "@dev Address of WETH Gateway" - }, - "functionSelector": "c5e10eef", - "id": 7878, - "mutability": "immutable", - "name": "wethGateway", - "nameLocation": "4287:11:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "4262:36:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7877, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4262:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12277], - "constant": false, - "documentation": { - "id": 7879, - "nodeType": "StructuredDocumentation", - "src": "4305:53:21", - "text": "@dev Address of the connected Credit Configurator" - }, - "functionSelector": "f9aa028a", - "id": 7881, - "mutability": "mutable", - "name": "creditConfigurator", - "nameLocation": "4378:18:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "4363:33:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7880, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4363:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 7882, - "nodeType": "StructuredDocumentation", - "src": "4403:163:21", - "text": "@dev Map of token's bit mask to its address and LT compressed into a single uint256\n @notice Use collateralTokens(uint256 i) to get uncompressed values." - }, - "id": 7886, - "mutability": "mutable", - "name": "collateralTokensCompressed", - "nameLocation": "4608:26:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "4571:63:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - }, - "typeName": { - "id": 7885, - "keyType": { - "id": 7883, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4579:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "4571:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - }, - "valueType": { - "id": 7884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4590:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "baseFunctions": [12215], - "constant": false, - "documentation": { - "id": 7887, - "nodeType": "StructuredDocumentation", - "src": "4641:49:21", - "text": "@dev Total number of known collateral tokens." - }, - "functionSelector": "458936f5", - "id": 7889, - "mutability": "mutable", - "name": "collateralTokensCount", - "nameLocation": "4710:21:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "4695:36:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7888, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4695:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 7890, - "nodeType": "StructuredDocumentation", - "src": "4738:371:21", - "text": "@dev Internal map of token addresses to their indidivual masks.\n @notice A mask is a uint256 that has only 1 non-zero bit in the position correspondingto\n the token's index (i.e., tokenMask = 2 ** index)\n Masks are used to efficiently check set inclusion, since it only involves\n a single AND and comparison to zero" - }, - "id": 7894, - "mutability": "mutable", - "name": "tokenMasksMapInternal", - "nameLocation": "5151:21:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "5114:58:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 7893, - "keyType": { - "id": 7891, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5122:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5114:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 7892, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5133:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "baseFunctions": [12229], - "constant": false, - "documentation": { - "id": 7895, - "nodeType": "StructuredDocumentation", - "src": "5179:52:21", - "text": "@dev Bit mask encoding a set of forbidden tokens" - }, - "functionSelector": "9fd12b77", - "id": 7898, - "mutability": "mutable", - "name": "forbiddenTokenMask", - "nameLocation": "5260:18:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7897, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5251:8:21" - }, - "scope": 10549, - "src": "5236:42:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7896, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5236:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12181], - "constant": false, - "documentation": { - "id": 7899, - "nodeType": "StructuredDocumentation", - "src": "5285:295:21", - "text": "@dev Maps Credit Accounts to bit masks encoding their enabled token sets\n Only enabled tokens are counted as collateral for the Credit Account\n @notice An enabled token mask encodes an enabled token by setting\n the bit at the position equal to token's index to 1" - }, - "functionSelector": "8991b2f1", - "id": 7904, - "mutability": "mutable", - "name": "enabledTokensMap", - "nameLocation": "5629:16:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7903, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5620:8:21" - }, - "scope": 10549, - "src": "5585:60:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 7902, - "keyType": { - "id": 7900, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5593:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5585:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 7901, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5604:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12189], - "constant": false, - "documentation": { - "id": 7905, - "nodeType": "StructuredDocumentation", - "src": "5652:141:21", - "text": "@dev Maps Credit Accounts to their current cumulative drops in value during fast checks\n See more details in fastCollateralCheck()" - }, - "functionSelector": "3e8297ca", - "id": 7909, - "mutability": "mutable", - "name": "cumulativeDropAtFastCheckRAY", - "nameLocation": "5833:28:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "5798:63:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 7908, - "keyType": { - "id": 7906, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5806:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5798:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 7907, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5817:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12237], - "constant": false, - "documentation": { - "id": 7910, - "nodeType": "StructuredDocumentation", - "src": "5868:68:21", - "text": "@dev Maps allowed adapters to their respective target contracts." - }, - "functionSelector": "ff687543", - "id": 7915, - "mutability": "mutable", - "name": "adapterToContract", - "nameLocation": "5985:17:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7914, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5976:8:21" - }, - "scope": 10549, - "src": "5941:61:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 7913, - "keyType": { - "id": 7911, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5949:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "5941:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 7912, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5960:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12245], - "constant": false, - "documentation": { - "id": 7916, - "nodeType": "StructuredDocumentation", - "src": "6009:62:21", - "text": "@dev Maps 3rd party contracts to their respective adapters" - }, - "functionSelector": "fdd57645", - "id": 7921, - "mutability": "mutable", - "name": "contractToAdapter", - "nameLocation": "6120:17:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7920, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6111:8:21" - }, - "scope": 10549, - "src": "6076:61:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 7919, - "keyType": { - "id": 7917, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6084:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "6076:27:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 7918, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6095:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12305], - "constant": false, - "documentation": { - "id": 7922, - "nodeType": "StructuredDocumentation", - "src": "6144:425:21", - "text": "@dev Maps addresses to their status as emergency liquidator.\n @notice Emergency liquidators are trusted addresses\n that are able to liquidate positions while the contracts are paused,\n e.g. when there is a risk of bad debt while an exploit is being patched.\n In the interest of fairness, emergency liquidators do not receive a premium\n And are compensated by the Gearbox DAO separately." - }, - "functionSelector": "38975bc4", - "id": 7927, - "mutability": "mutable", - "name": "canLiquidateWhilePaused", - "nameLocation": "6615:23:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7926, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6606:8:21" - }, - "scope": 10549, - "src": "6574:64:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "typeName": { - "id": 7925, - "keyType": { - "id": 7923, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6582:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "6574:24:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - }, - "valueType": { - "id": 7924, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6593:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12338], - "constant": false, - "documentation": { - "id": 7928, - "nodeType": "StructuredDocumentation", - "src": "6645:141:21", - "text": "@dev Stores address of the Universal adapter\n @notice See more at https://dev.gearbox.fi/docs/documentation/integrations/universal" - }, - "functionSelector": "fe47cde7", - "id": 7930, - "mutability": "mutable", - "name": "universalAdapter", - "nameLocation": "6806:16:21", - "nodeType": "VariableDeclaration", - "scope": 10549, - "src": "6791:31:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7929, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6791:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [12344], - "constant": true, - "documentation": { - "id": 7931, - "nodeType": "StructuredDocumentation", - "src": "6829:25:21", - "text": "@dev contract version" - }, - "functionSelector": "54fd4d50", - "id": 7935, - "mutability": "constant", - "name": "version", - "nameLocation": "6892:7:21", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 7933, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6883:8:21" - }, - "scope": 10549, - "src": "6859:47:21", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 7932, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6859:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "325f3130", - "id": 7934, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6902:4:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_210_by_1", - "typeString": "int_const 210" - }, - "value": "2_10" - }, - "visibility": "public" - }, - { - "body": { - "id": 7953, - "nodeType": "Block", - "src": "7100:147:21", - "statements": [ - { - "condition": { - "id": 7938, - "name": "entered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7834, - "src": "7114:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7943, - "nodeType": "IfStatement", - "src": "7110:70:21", - "trueBody": { - "id": 7942, - "nodeType": "Block", - "src": "7123:57:21", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7939, - "name": "ReentrancyLockException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11993, - "src": "7144:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7144:25:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7941, - "nodeType": "RevertStatement", - "src": "7137:32:21" - } - ] - } - }, - { - "expression": { - "id": 7946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7944, - "name": "entered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7834, - "src": "7190:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 7945, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7200:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "7190:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7947, - "nodeType": "ExpressionStatement", - "src": "7190:14:21" - }, - { - "id": 7948, - "nodeType": "PlaceholderStatement", - "src": "7214:1:21" - }, - { - "expression": { - "id": 7951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 7949, - "name": "entered", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7834, - "src": "7225:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 7950, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7235:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "7225:15:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7952, - "nodeType": "ExpressionStatement", - "src": "7225:15:21" - } - ] - }, - "documentation": { - "id": 7936, - "nodeType": "StructuredDocumentation", - "src": "6945:126:21", - "text": "@dev Protects against reentrancy.\n @notice Custom ReentrancyGuard implementation is used to optimize storage reads." - }, - "id": 7954, - "name": "nonReentrant", - "nameLocation": "7085:12:21", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 7937, - "nodeType": "ParameterList", - "parameters": [], - "src": "7097:2:21" - }, - "src": "7076:171:21", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7976, - "nodeType": "Block", - "src": "7357:188:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 7970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 7965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 7957, - "name": "adapterToContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7915, - "src": "7384:17:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 7960, - "indexExpression": { - "expression": { - "id": 7958, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "7402:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7406:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7402:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7384:29:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 7963, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7425:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 7962, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7417:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 7961, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7417:7:21", - "typeDescriptions": {} - } - }, - "id": 7964, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7417:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7384:43:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 7969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7966, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "7443:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7447:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7443:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 7968, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7845, - "src": "7457:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7443:26:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "7384:85:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7974, - "nodeType": "IfStatement", - "src": "7367:157:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7971, - "name": "AdaptersOrCreditFacadeOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11957, - "src": "7487:35:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7487:37:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7973, - "nodeType": "RevertStatement", - "src": "7480:44:21" - } - }, - { - "id": 7975, - "nodeType": "PlaceholderStatement", - "src": "7537:1:21" - } - ] - }, - "documentation": { - "id": 7955, - "nodeType": "StructuredDocumentation", - "src": "7253:61:21", - "text": "@dev Restricts calls to Credit Facade or allowed adapters" - }, - "id": 7977, - "name": "adaptersOrCreditFacadeOnly", - "nameLocation": "7328:26:21", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 7956, - "nodeType": "ParameterList", - "parameters": [], - "src": "7354:2:21" - }, - "src": "7319:226:21", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 7989, - "nodeType": "Block", - "src": "7630:94:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 7983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7980, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "7644:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7648:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7644:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 7982, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7845, - "src": "7658:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7644:26:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 7987, - "nodeType": "IfStatement", - "src": "7640:66:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7984, - "name": "CreditFacadeOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11960, - "src": "7679:25:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7679:27:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7986, - "nodeType": "RevertStatement", - "src": "7672:34:21" - } - }, - { - "id": 7988, - "nodeType": "PlaceholderStatement", - "src": "7716:1:21" - } - ] - }, - "documentation": { - "id": 7978, - "nodeType": "StructuredDocumentation", - "src": "7551:46:21", - "text": "@dev Restricts calls to Credit Facade only" - }, - "id": 7990, - "name": "creditFacadeOnly", - "nameLocation": "7611:16:21", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 7979, - "nodeType": "ParameterList", - "parameters": [], - "src": "7627:2:21" - }, - "src": "7602:122:21", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8002, - "nodeType": "Block", - "src": "7821:118:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 7996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 7993, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "7835:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 7994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7839:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "7835:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 7995, - "name": "creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7881, - "src": "7849:18:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7835:32:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8000, - "nodeType": "IfStatement", - "src": "7831:90:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 7997, - "name": "CreditConfiguratorOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11963, - "src": "7888:31:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 7998, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7888:33:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 7999, - "nodeType": "RevertStatement", - "src": "7881:40:21" - } - }, - { - "id": 8001, - "nodeType": "PlaceholderStatement", - "src": "7931:1:21" - } - ] - }, - "documentation": { - "id": 7991, - "nodeType": "StructuredDocumentation", - "src": "7730:52:21", - "text": "@dev Restricts calls to Credit Configurator only" - }, - "id": 8003, - "name": "creditConfiguratorOnly", - "nameLocation": "7796:22:21", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 7992, - "nodeType": "ParameterList", - "parameters": [], - "src": "7818:2:21" - }, - "src": "7787:152:21", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8015, - "nodeType": "Block", - "src": "7981:90:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8008, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7999:9:21", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8006, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17130, - "src": "8000:6:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 8007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8000:8:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "id": 8009, - "name": "emergencyLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7836, - "src": "8012:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "7999:33:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5061757361626c653a20706175736564", - "id": 8011, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8034:18:21", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - }, - "value": "Pausable: paused" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - } - ], - "id": 8005, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7991:7:21", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 8012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7991:62:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8013, - "nodeType": "ExpressionStatement", - "src": "7991:62:21" - }, - { - "id": 8014, - "nodeType": "PlaceholderStatement", - "src": "8063:1:21" - } - ] - }, - "id": 8016, - "name": "whenNotPausedOrEmergency", - "nameLocation": "7954:24:21", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 8004, - "nodeType": "ParameterList", - "parameters": [], - "src": "7978:2:21" - }, - "src": "7945:126:21", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 8100, - "nodeType": "Block", - "src": "8260:869:21", - "statements": [ - { - "assignments": [8034], - "declarations": [ - { - "constant": false, - "id": 8034, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "8287:15:21", - "nodeType": "VariableDeclaration", - "scope": 8100, - "src": "8270:32:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - }, - "typeName": { - "id": 8033, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8032, - "name": "IAddressProvider", - "nameLocations": ["8270:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10799, - "src": "8270:16:21" - }, - "referencedDeclaration": 10799, - "src": "8270:16:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "visibility": "internal" - } - ], - "id": 8040, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 8036, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8019, - "src": "8318:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8035, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "8305:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8305:19:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8038, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8338:15:21", - "memberName": "addressProvider", - "nodeType": "MemberAccess", - "referencedDeclaration": 12804, - "src": "8305:48:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_AddressProvider_$2931_$", - "typeString": "function () view external returns (contract AddressProvider)" - } - }, - "id": 8039, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8305:50:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8270:85:21" - }, - { - "expression": { - "id": 8043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8041, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "8366:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8042, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8019, - "src": "8373:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8366:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8044, - "nodeType": "ExpressionStatement", - "src": "8366:12:21" - }, - { - "expression": { - "id": 8047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8045, - "name": "poolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7867, - "src": "8400:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8046, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8019, - "src": "8414:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8400:19:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8048, - "nodeType": "ExpressionStatement", - "src": "8400:19:21" - }, - { - "assignments": [8050], - "declarations": [ - { - "constant": false, - "id": 8050, - "mutability": "mutable", - "name": "_underlying", - "nameLocation": "8450:11:21", - "nodeType": "VariableDeclaration", - "scope": 8100, - "src": "8442:19:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8049, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8442:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8056, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 8052, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "8477:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8051, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "8464:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8464:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8483:15:21", - "memberName": "underlyingToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 12735, - "src": "8464:34:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 8055, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8464:36:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8442:58:21" - }, - { - "expression": { - "id": 8059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8057, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "8522:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8058, - "name": "_underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8050, - "src": "8535:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8522:24:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8060, - "nodeType": "ExpressionStatement", - "src": "8522:24:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8062, - "name": "_underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8050, - "src": "8644:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8061, - "name": "_addToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10291, - "src": "8634:9:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 8063, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8634:22:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8064, - "nodeType": "ExpressionStatement", - "src": "8634:22:21" - }, - { - "expression": { - "id": 8069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8065, - "name": "wethAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7875, - "src": "8679:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 8066, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8034, - "src": "8693:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "id": 8067, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8709:12:21", - "memberName": "getWethToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 10774, - "src": "8693:28:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 8068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8693:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8679:44:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8070, - "nodeType": "ExpressionStatement", - "src": "8679:44:21" - }, - { - "expression": { - "id": 8075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8071, - "name": "wethGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7878, - "src": "8745:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 8072, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8034, - "src": "8759:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "id": 8073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8775:14:21", - "memberName": "getWETHGateway", - "nodeType": "MemberAccess", - "referencedDeclaration": 10780, - "src": "8759:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 8074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8759:32:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8745:46:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8076, - "nodeType": "ExpressionStatement", - "src": "8745:46:21" - }, - { - "expression": { - "id": 8085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 8077, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "8897:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 8079, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "8903:11:21", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 7812, - "src": "8897:17:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 8081, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8034, - "src": "8932:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "id": 8082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8948:14:21", - "memberName": "getPriceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 10786, - "src": "8932:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 8083, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8932:32:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8080, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "8917:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "type(contract IPriceOracleV2)" - } - }, - "id": 8084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8917:48:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "src": "8897:68:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 8086, - "nodeType": "ExpressionStatement", - "src": "8897:68:21" - }, - { - "expression": { - "id": 8093, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8087, - "name": "_accountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7859, - "src": "8987:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 8089, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8034, - "src": "9021:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "id": 8090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9037:17:21", - "memberName": "getAccountFactory", - "nodeType": "MemberAccess", - "referencedDeclaration": 10756, - "src": "9021:33:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 8091, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9021:35:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8088, - "name": "IAccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10721, - "src": "9005:15:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IAccountFactory_$10721_$", - "typeString": "type(contract IAccountFactory)" - } - }, - "id": 8092, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9005:52:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "src": "8987:70:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "id": 8094, - "nodeType": "ExpressionStatement", - "src": "8987:70:21" - }, - { - "expression": { - "id": 8098, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8095, - "name": "creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7881, - "src": "9079:18:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 8096, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "9100:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9104:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "9100:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9079:31:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 8099, - "nodeType": "ExpressionStatement", - "src": "9079:31:21" - } - ] - }, - "documentation": { - "id": 8017, - "nodeType": "StructuredDocumentation", - "src": "8077:82:21", - "text": "@dev Constructor\n @param _pool Address of the pool to borrow funds from" - }, - "id": 8101, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 8025, - "name": "_pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8019, - "src": "8229:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8024, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "8216:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8216:19:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8236:15:21", - "memberName": "addressProvider", - "nodeType": "MemberAccess", - "referencedDeclaration": 12804, - "src": "8216:35:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_AddressProvider_$2931_$", - "typeString": "function () view external returns (contract AddressProvider)" - } - }, - "id": 8028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8216:37:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 8023, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8208:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8022, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8208:7:21", - "typeDescriptions": {} - } - }, - "id": 8029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8208:46:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 8030, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 8021, - "name": "ACLTrait", - "nameLocations": ["8199:8:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "8199:8:21" - }, - "nodeType": "ModifierInvocation", - "src": "8199:56:21" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8020, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8019, - "mutability": "mutable", - "name": "_pool", - "nameLocation": "8184:5:21", - "nodeType": "VariableDeclaration", - "scope": 8101, - "src": "8176:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8018, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8176:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8175:15:21" - }, - "returnParameters": { - "id": 8031, - "nodeType": "ParameterList", - "parameters": [], - "src": "8260:0:21" - }, - "scope": 10549, - "src": "8164:965:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12011], - "body": { - "id": 8151, - "nodeType": "Block", - "src": "9749:935:21", - "statements": [ - { - "assignments": [8119], - "declarations": [ - { - "constant": false, - "id": 8119, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "9931:13:21", - "nodeType": "VariableDeclaration", - "scope": 8151, - "src": "9923:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9923:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8129, - "initialValue": { - "arguments": [ - { - "id": 8122, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8104, - "src": "9994:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 8124, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "10035:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8123, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "10022:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10022:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10041:24:21", - "memberName": "calcLinearCumulative_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12711, - "src": "10022:43:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 8127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10022:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 8120, - "name": "_accountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7859, - "src": "9947:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "id": 8121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9963:17:21", - "memberName": "takeCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 10714, - "src": "9947:33:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$_t_address_$", - "typeString": "function (uint256,uint256) external returns (address)" - } - }, - "id": 8128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9947:130:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9923:154:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8134, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8104, - "src": "10204:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8135, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8119, - "src": "10220:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 8131, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "10180:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8130, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "10167:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10167:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10186:17:21", - "memberName": "lendCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12677, - "src": "10167:36:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (uint256,address) external" - } - }, - "id": 8136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10167:67:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8137, - "nodeType": "ExpressionStatement", - "src": "10167:67:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8139, - "name": "onBehalfOf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8106, - "src": "10375:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8140, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8119, - "src": "10387:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8138, - "name": "_safeCreditAccountSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9693, - "src": "10353:21:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10353:48:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8142, - "nodeType": "ExpressionStatement", - "src": "10353:48:21" - }, - { - "expression": { - "id": 8147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 8143, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "10527:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 8145, - "indexExpression": { - "id": 8144, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8119, - "src": "10544:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10527:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "31", - "id": 8146, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10561:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "10527:35:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8148, - "nodeType": "ExpressionStatement", - "src": "10527:35:21" - }, - { - "expression": { - "id": 8149, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8119, - "src": "10652:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 8117, - "id": 8150, - "nodeType": "Return", - "src": "10645:20:21" - } - ] - }, - "documentation": { - "id": 8102, - "nodeType": "StructuredDocumentation", - "src": "9183:334:21", - "text": "@dev Opens credit account and borrows funds from the pool.\n - Takes Credit Account from the factory;\n - Requests the pool to lend underlying to the Credit Account\n @param borrowedAmount Amount to be borrowed by the Credit Account\n @param onBehalfOf The owner of the newly opened Credit Account" - }, - "functionSelector": "8fe3f93f", - "id": 8152, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8110, - "kind": "modifierInvocation", - "modifierName": { - "id": 8109, - "name": "whenNotPaused", - "nameLocations": ["9635:13:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17113, - "src": "9635:13:21" - }, - "nodeType": "ModifierInvocation", - "src": "9635:13:21" - }, - { - "id": 8112, - "kind": "modifierInvocation", - "modifierName": { - "id": 8111, - "name": "nonReentrant", - "nameLocations": ["9669:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "9669:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "9669:12:21" - }, - { - "id": 8114, - "kind": "modifierInvocation", - "modifierName": { - "id": 8113, - "name": "creditFacadeOnly", - "nameLocations": ["9690:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "9690:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "9690:16:21" - } - ], - "name": "openCreditAccount", - "nameLocation": "9531:17:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8108, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "9618:8:21" - }, - "parameters": { - "id": 8107, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8104, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "9557:14:21", - "nodeType": "VariableDeclaration", - "scope": 8152, - "src": "9549:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8103, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9549:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8106, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "9581:10:21", - "nodeType": "VariableDeclaration", - "scope": 8152, - "src": "9573:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8105, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9573:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9548:44:21" - }, - "returnParameters": { - "id": 8117, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8116, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8152, - "src": "9736:7:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8115, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9736:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9735:9:21" - }, - "scope": 10549, - "src": "9522:1162:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12032], - "body": { - "id": 8357, - "nodeType": "Block", - "src": "13112:4349:21", - "statements": [ - { - "condition": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8178, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17130, - "src": "13358:6:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 8179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13358:8:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8206, - "nodeType": "IfStatement", - "src": "13354:428:21", - "trueBody": { - "id": 8205, - "nodeType": "Block", - "src": "13368:414:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 8180, - "name": "canLiquidateWhilePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7927, - "src": "13403:23:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 8182, - "indexExpression": { - "id": 8181, - "name": "payer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8162, - "src": "13427:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13403:30:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 8186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8183, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8158, - "src": "13454:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 8184, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "13475:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 8185, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13489:17:21", - "memberName": "LIQUIDATE_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11938, - "src": "13475:31:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "13454:52:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 8190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8187, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8158, - "src": "13530:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 8188, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "13571:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 8189, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13585:25:21", - "memberName": "LIQUIDATE_EXPIRED_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11939, - "src": "13571:39:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "13530:80:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "13454:156:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 8192, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "13453:158:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "13403:208:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "expression": { - "arguments": [ - { - "hexValue": "5061757361626c653a20706175736564", - "id": 8201, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13740:18:21", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - }, - "value": "Pausable: paused" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - } - ], - "id": 8200, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967277, 4294967277 - ], - "referencedDeclaration": 4294967277, - "src": "13733:6:21", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 8202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13733:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8203, - "nodeType": "ExpressionStatement", - "src": "13733:26:21" - }, - "id": 8204, - "nodeType": "IfStatement", - "src": "13382:377:21", - "trueBody": { - "id": 8199, - "nodeType": "Block", - "src": "13626:101:21", - "statements": [ - { - "expression": { - "id": 8197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8194, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8158, - "src": "13644:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 8195, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "13664:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 8196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13678:16:21", - "memberName": "LIQUIDATE_PAUSED", - "nodeType": "MemberAccess", - "referencedDeclaration": 11940, - "src": "13664:30:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "13644:50:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "id": 8198, - "nodeType": "ExpressionStatement", - "src": "13644:50:21" - } - ] - } - } - ] - } - }, - { - "assignments": [8208], - "declarations": [ - { - "constant": false, - "id": 8208, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "13866:13:21", - "nodeType": "VariableDeclaration", - "scope": 8357, - "src": "13858:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8207, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13858:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8212, - "initialValue": { - "arguments": [ - { - "id": 8210, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8155, - "src": "13907:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8209, - "name": "getCreditAccountOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9957, - "src": "13882:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view returns (address)" - } - }, - "id": 8211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13882:34:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13858:58:21" - }, - { - "expression": { - "id": 8216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "14384:31:21", - "subExpression": { - "baseExpression": { - "id": 8213, - "name": "creditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7855, - "src": "14391:14:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 8215, - "indexExpression": { - "id": 8214, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8155, - "src": "14406:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "14391:24:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8217, - "nodeType": "ExpressionStatement", - "src": "14384:31:21" - }, - { - "assignments": [8219], - "declarations": [ - { - "constant": false, - "id": 8219, - "mutability": "mutable", - "name": "amountToPool", - "nameLocation": "14511:12:21", - "nodeType": "VariableDeclaration", - "scope": 8357, - "src": "14503:20:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8218, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14503:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8220, - "nodeType": "VariableDeclarationStatement", - "src": "14503:20:21" - }, - { - "assignments": [8222], - "declarations": [ - { - "constant": false, - "id": 8222, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "14541:14:21", - "nodeType": "VariableDeclaration", - "scope": 8357, - "src": "14533:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8221, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14533:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8223, - "nodeType": "VariableDeclarationStatement", - "src": "14533:22:21" - }, - { - "id": 8321, - "nodeType": "Block", - "src": "14566:2160:21", - "statements": [ - { - "assignments": [8225], - "declarations": [ - { - "constant": false, - "id": 8225, - "mutability": "mutable", - "name": "profit", - "nameLocation": "14588:6:21", - "nodeType": "VariableDeclaration", - "scope": 8321, - "src": "14580:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8224, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14580:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8226, - "nodeType": "VariableDeclarationStatement", - "src": "14580:14:21" - }, - { - "assignments": [8228], - "declarations": [ - { - "constant": false, - "id": 8228, - "mutability": "mutable", - "name": "loss", - "nameLocation": "14616:4:21", - "nodeType": "VariableDeclaration", - "scope": 8321, - "src": "14608:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8227, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14608:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8229, - "nodeType": "VariableDeclarationStatement", - "src": "14608:12:21" - }, - { - "assignments": [8231], - "declarations": [ - { - "constant": false, - "id": 8231, - "mutability": "mutable", - "name": "borrowedAmountWithInterest", - "nameLocation": "14642:26:21", - "nodeType": "VariableDeclaration", - "scope": 8321, - "src": "14634:34:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8230, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14634:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8232, - "nodeType": "VariableDeclarationStatement", - "src": "14634:34:21" - }, - { - "expression": { - "id": 8239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 8233, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8222, - "src": "14700:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8234, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8231, - "src": "14732:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - null - ], - "id": 8235, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "14682:92:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$__$", - "typeString": "tuple(uint256,uint256,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 8237, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "14810:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8236, - "name": "calcCreditAccountAccruedInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10010, - "src": "14777:32:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256,uint256)" - } - }, - "id": 8238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14777:47:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "src": "14682:142:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8240, - "nodeType": "ExpressionStatement", - "src": "14682:142:21" - }, - { - "expression": { - "id": 8252, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 8241, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8219, - "src": "14846:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8242, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "14860:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8243, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8225, - "src": "14876:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8244, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8228, - "src": "14884:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8245, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "14845:44:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 8247, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8160, - "src": "14927:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8248, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8158, - "src": "14955:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - { - "id": 8249, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8222, - "src": "14990:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8250, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8231, - "src": "15022:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8246, - "name": "calcClosePayments", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9862, - "src": "14892:17:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_enum$_ClosureAction_$11941_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (uint256,enum ClosureAction,uint256,uint256) view returns (uint256,uint256,uint256,uint256)" - } - }, - "id": 8251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14892:170:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256,uint256)" - } - }, - "src": "14845:217:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8253, - "nodeType": "ExpressionStatement", - "src": "14845:217:21" - }, - { - "assignments": [8255], - "declarations": [ - { - "constant": false, - "id": 8255, - "mutability": "mutable", - "name": "underlyingBalance", - "nameLocation": "15104:17:21", - "nodeType": "VariableDeclaration", - "scope": 8321, - "src": "15096:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8254, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15096:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8262, - "initialValue": { - "arguments": [ - { - "id": 8260, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "15170:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 8257, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "15131:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8256, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "15124:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15124:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 8259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15143:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "15124:28:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 8261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15124:73:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15096:101:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8263, - "name": "underlyingBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8255, - "src": "15299:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8268, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8264, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8219, - "src": "15319:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8265, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "15334:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15319:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 8267, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15351:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15319:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15299:53:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 8302, - "nodeType": "Block", - "src": "15816:305:21", - "statements": [ - { - "id": 8301, - "nodeType": "UncheckedBlock", - "src": "15834:273:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8290, - "name": "payer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8162, - "src": "15927:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8291, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "15958:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8298, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8296, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8292, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8219, - "src": "15997:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8293, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "16012:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15997:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8295, - "name": "underlyingBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8255, - "src": "16029:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15997:49:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 8297, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16049:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15997:53:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8287, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "15873:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8286, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "15866:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15866:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 8289, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15885:16:21", - "memberName": "safeTransferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 18024, - "src": "15866:35:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17905_$", - "typeString": "function (contract IERC20,address,address,uint256)" - } - }, - "id": 8299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15866:206:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8300, - "nodeType": "ExpressionStatement", - "src": "15866:206:21" - } - ] - } - ] - }, - "id": 8303, - "nodeType": "IfStatement", - "src": "15295:826:21", - "trueBody": { - "id": 8285, - "nodeType": "Block", - "src": "15354:456:21", - "statements": [ - { - "id": 8284, - "nodeType": "UncheckedBlock", - "src": "15372:329:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8271, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "15448:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8272, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "15487:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8273, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8164, - "src": "15523:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8274, - "name": "underlyingBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8255, - "src": "15551:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8275, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8219, - "src": "15571:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15551:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8277, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "15586:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "15551:49:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 8279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15603:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15551:53:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8281, - "name": "convertWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8168, - "src": "15630:11:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8270, - "name": "_safeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9659, - "src": "15404:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,address,uint256,bool)" - } - }, - "id": 8282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15404:259:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8283, - "nodeType": "ExpressionStatement", - "src": "15404:259:21" - } - ] - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 8305, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "16222:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8306, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "16253:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8307, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "16281:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8308, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8219, - "src": "16303:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 8309, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16333:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8304, - "name": "_safeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9659, - "src": "16186:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,address,uint256,bool)" - } - }, - "id": 8310, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16186:166:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8311, - "nodeType": "ExpressionStatement", - "src": "16186:166:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8316, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8222, - "src": "16664:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8317, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8225, - "src": "16680:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8318, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8228, - "src": "16688:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8313, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "16639:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8312, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "16626:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16626:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16645:18:21", - "memberName": "repayCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12687, - "src": "16626:37:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256,uint256) external" - } - }, - "id": 8319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16626:67:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8320, - "nodeType": "ExpressionStatement", - "src": "16626:67:21" - } - ] - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8322, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "16812:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 8323, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16829:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "16812:18:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8334, - "nodeType": "IfStatement", - "src": "16808:237:21", - "trueBody": { - "id": 8333, - "nodeType": "Block", - "src": "16832:213:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8326, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "16882:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8327, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "16913:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8328, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8155, - "src": "16941:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8329, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8176, - "src": "16967:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 8330, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16999:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8325, - "name": "_safeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9659, - "src": "16846:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,address,uint256,bool)" - } - }, - "id": 8331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16846:172:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8332, - "nodeType": "ExpressionStatement", - "src": "16846:172:21" - } - ] - } - }, - { - "assignments": [8336], - "declarations": [ - { - "constant": false, - "id": 8336, - "mutability": "mutable", - "name": "enabledTokensMask", - "nameLocation": "17142:17:21", - "nodeType": "VariableDeclaration", - "scope": 8357, - "src": "17134:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8335, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17134:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8343, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 8337, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "17162:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 8339, - "indexExpression": { - "id": 8338, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "17179:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "17162:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 8341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "~", - "prefix": true, - "src": "17208:14:21", - "subExpression": { - "id": 8340, - "name": "skipTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8166, - "src": "17209:13:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17162:60:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17134:88:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8345, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "17263:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8346, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8164, - "src": "17278:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8347, - "name": "convertWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8168, - "src": "17282:11:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 8348, - "name": "enabledTokensMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8336, - "src": "17295:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 8344, - "name": "_transferAssetsTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9610, - "src": "17245:17:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$_t_uint256_$returns$__$", - "typeString": "function (address,address,bool,uint256)" - } - }, - "id": 8349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17245:68:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8350, - "nodeType": "ExpressionStatement", - "src": "17245:68:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8354, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8208, - "src": "17428:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 8351, - "name": "_accountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7859, - "src": "17392:15:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAccountFactory_$10721", - "typeString": "contract IAccountFactory" - } - }, - "id": 8353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "17408:19:21", - "memberName": "returnCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 10720, - "src": "17392:35:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 8355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17392:50:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8356, - "nodeType": "ExpressionStatement", - "src": "17392:50:21" - } - ] - }, - "documentation": { - "id": 8153, - "nodeType": "StructuredDocumentation", - "src": "10690:2051:21", - "text": "@dev Closes a Credit Account - covers both normal closure and liquidation\n - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator.\n Only emergency liquidators are able to liquidate account while the CM is paused.\n Emergency liquidations do not pay a liquidator premium or liquidation fees.\n - Calculates payments to various recipients on closure:\n + Computes amountToPool, which is the amount to be sent back to the pool.\n This includes the principal, interest and fees, but can't be more than\n total position value\n + Computes remainingFunds during liquidations - these are leftover funds\n after paying the pool and the liquidator, and are sent to the borrower\n + Computes protocol profit, which includes interest and liquidation fees\n + Computes loss if the totalValue is less than borrow amount + interest\n - Checks the underlying token balance:\n + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account\n + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation\n - Send assets to the \"to\" address, as long as they are not included into skipTokenMask\n - If convertWETH is true, the function converts WETH into ETH before sending\n - Returns the Credit Account back to factory\n @param borrower Borrower address\n @param closureActionType Whether the account is closed, liquidated or liquidated due to expiry\n @param totalValue Portfolio value for liqution, 0 for ordinary closure\n @param payer Address which would be charged if credit account has not enough funds to cover amountToPool\n @param to Address to which the leftover funds will be sent\n @param skipTokenMask Tokenmask contains 1 for tokens which needed to be skipped for sending\n @param convertWETH If true converts WETH to ETH" - }, - "functionSelector": "2362a2d8", - "id": 8358, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8172, - "kind": "modifierInvocation", - "modifierName": { - "id": 8171, - "name": "nonReentrant", - "nameLocations": ["13017:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "13017:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "13017:12:21" - }, - { - "id": 8174, - "kind": "modifierInvocation", - "modifierName": { - "id": 8173, - "name": "creditFacadeOnly", - "nameLocations": ["13038:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "13038:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "13038:16:21" - } - ], - "name": "closeCreditAccount", - "nameLocation": "12755:18:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8170, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13000:8:21" - }, - "parameters": { - "id": 8169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8155, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "12791:8:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12783:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8154, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12783:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8158, - "mutability": "mutable", - "name": "closureActionType", - "nameLocation": "12823:17:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12809:31:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "typeName": { - "id": 8157, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 8156, - "name": "ClosureAction", - "nameLocations": ["12809:13:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11941, - "src": "12809:13:21" - }, - "referencedDeclaration": 11941, - "src": "12809:13:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8160, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "12858:10:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12850:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8159, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12850:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8162, - "mutability": "mutable", - "name": "payer", - "nameLocation": "12886:5:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12878:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8161, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12878:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8164, - "mutability": "mutable", - "name": "to", - "nameLocation": "12909:2:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12901:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12901:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8166, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "12929:13:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12921:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8165, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12921:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8168, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "12957:11:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "12952:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8167, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "12952:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "12773:201:21" - }, - "returnParameters": { - "id": 8177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8176, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "13092:14:21", - "nodeType": "VariableDeclaration", - "scope": 8358, - "src": "13084:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8175, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13084:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13083:24:21" - }, - "scope": 10549, - "src": "12746:4715:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12044], - "body": { - "id": 8545, - "nodeType": "Block", - "src": "18620:4355:21", - "statements": [ - { - "assignments": [8377, 8379, 8381], - "declarations": [ - { - "constant": false, - "id": 8377, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "18652:14:21", - "nodeType": "VariableDeclaration", - "scope": 8545, - "src": "18644:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8376, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18644:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8379, - "mutability": "mutable", - "name": "cumulativeIndexAtOpen_RAY", - "nameLocation": "18688:25:21", - "nodeType": "VariableDeclaration", - "scope": 8545, - "src": "18680:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8378, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18680:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8381, - "mutability": "mutable", - "name": "cumulativeIndexNow_RAY", - "nameLocation": "18735:22:21", - "nodeType": "VariableDeclaration", - "scope": 8545, - "src": "18727:30:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8380, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18727:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8385, - "initialValue": { - "arguments": [ - { - "id": 8383, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8361, - "src": "18798:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8382, - "name": "_getCreditAccountParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10047, - "src": "18770:27:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256,uint256)" - } - }, - "id": 8384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18770:42:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "18630:182:21" - }, - { - "assignments": [8387], - "declarations": [ - { - "constant": false, - "id": 8387, - "mutability": "mutable", - "name": "newCumulativeIndex", - "nameLocation": "18831:18:21", - "nodeType": "VariableDeclaration", - "scope": 8545, - "src": "18823:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18823:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8388, - "nodeType": "VariableDeclarationStatement", - "src": "18823:26:21" - }, - { - "condition": { - "id": 8389, - "name": "increase", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8365, - "src": "18863:8:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 8535, - "nodeType": "Block", - "src": "19469:3290:21", - "statements": [ - { - "assignments": [8416], - "declarations": [ - { - "constant": false, - "id": 8416, - "mutability": "mutable", - "name": "interestAccrued", - "nameLocation": "19545:15:21", - "nodeType": "VariableDeclaration", - "scope": 8535, - "src": "19537:23:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8415, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19537:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8425, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8417, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "19564:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8418, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8381, - "src": "19597:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19564:55:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8420, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19563:57:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 8421, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8379, - "src": "19639:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19563:101:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8423, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "19683:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19563:134:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19537:160:21" - }, - { - "assignments": [8427], - "declarations": [ - { - "constant": false, - "id": 8427, - "mutability": "mutable", - "name": "profit", - "nameLocation": "19808:6:21", - "nodeType": "VariableDeclaration", - "scope": 8535, - "src": "19800:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8426, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19800:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8435, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8428, - "name": "interestAccrued", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8416, - "src": "19818:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 8429, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "19836:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 8430, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19842:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "19836:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "19818:35:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8432, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "19817:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 8433, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "19873:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "19817:73:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "19800:90:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8436, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "19922:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8437, - "name": "interestAccrued", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8416, - "src": "19932:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8438, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8427, - "src": "19950:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19932:24:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19922:34:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 8533, - "nodeType": "Block", - "src": "21158:1591:21", - "statements": [ - { - "assignments": [8483], - "declarations": [ - { - "constant": false, - "id": 8483, - "mutability": "mutable", - "name": "amountToInterest", - "nameLocation": "21473:16:21", - "nodeType": "VariableDeclaration", - "scope": 8533, - "src": "21465:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8482, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "21465:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8494, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8493, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8484, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "21493:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8485, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "21502:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "21493:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8487, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "21492:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "id": 8491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8488, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "21544:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 8489, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "21564:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 8490, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21570:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "21564:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "21544:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "id": 8492, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "21543:39:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "21492:90:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21465:117:21" - }, - { - "assignments": [8496], - "declarations": [ - { - "constant": false, - "id": 8496, - "mutability": "mutable", - "name": "amountToFees", - "nameLocation": "21608:12:21", - "nodeType": "VariableDeclaration", - "scope": 8533, - "src": "21600:20:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8495, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "21600:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8500, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8497, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "21623:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8498, - "name": "amountToInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8483, - "src": "21632:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21623:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "21600:48:21" - }, - { - "expression": { - "id": 8503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8501, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8374, - "src": "21781:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 8502, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "21801:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21781:34:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8504, - "nodeType": "ExpressionStatement", - "src": "21781:34:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8509, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "21950:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8510, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "21982:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8511, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "22008:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8506, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8361, - "src": "21901:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8505, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "21886:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 8507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21886:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 8508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21916:12:21", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11023, - "src": "21886:42:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 8512, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21886:146:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8513, - "nodeType": "ExpressionStatement", - "src": "21886:146:21" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "30", - "id": 8518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22173:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 8519, - "name": "amountToFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8496, - "src": "22176:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 8520, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22190:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "arguments": [ - { - "id": 8515, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "22148:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8514, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "22135:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8516, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22135:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22154:18:21", - "memberName": "repayCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12687, - "src": "22135:37:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256,uint256) external" - } - }, - "id": 8521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22135:57:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8522, - "nodeType": "ExpressionStatement", - "src": "22135:57:21" - }, - { - "expression": { - "id": 8531, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8523, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "22480:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 8525, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "22546:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8526, - "name": "amountToInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8483, - "src": "22582:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8527, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8381, - "src": "22620:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8528, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8379, - "src": "22664:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 8529, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22711:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8524, - "name": "_calcNewCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8620, - "src": "22501:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256,uint256,uint256,bool) pure returns (uint256)" - } - }, - "id": 8530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22501:233:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "22480:254:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8532, - "nodeType": "ExpressionStatement", - "src": "22480:254:21" - } - ] - }, - "id": 8534, - "nodeType": "IfStatement", - "src": "19918:2831:21", - "trueBody": { - "id": 8481, - "nodeType": "Block", - "src": "19958:1194:21", - "statements": [ - { - "expression": { - "id": 8449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8441, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8374, - "src": "20133:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8446, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8442, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "20173:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8443, - "name": "interestAccrued", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8416, - "src": "20210:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20173:52:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8445, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8427, - "src": "20248:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20173:81:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8447, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "20277:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20173:110:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20133:150:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8450, - "nodeType": "ExpressionStatement", - "src": "20133:150:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8455, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "20418:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8456, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "20450:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8457, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "20476:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8452, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8361, - "src": "20369:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8451, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "20354:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 8453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20354:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 8454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20384:12:21", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11023, - "src": "20354:42:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 8458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20354:146:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8459, - "nodeType": "ExpressionStatement", - "src": "20354:146:21" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8464, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "20662:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8465, - "name": "interestAccrued", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8416, - "src": "20671:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20662:24:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 8467, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8427, - "src": "20689:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "20662:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8469, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8427, - "src": "20717:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 8470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20745:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "arguments": [ - { - "id": 8461, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "20616:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8460, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "20603:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20603:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "20622:18:21", - "memberName": "repayCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12687, - "src": "20603:37:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256,uint256) external" - } - }, - "id": 8471, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20603:161:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8472, - "nodeType": "ExpressionStatement", - "src": "20603:161:21" - }, - { - "expression": { - "id": 8479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8473, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "21037:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 8475, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "21071:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8474, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "21058:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21058:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "21098:24:21", - "memberName": "calcLinearCumulative_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12711, - "src": "21058:64:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 8478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21058:66:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "21037:87:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8480, - "nodeType": "ExpressionStatement", - "src": "21037:87:21" - } - ] - } - } - ] - }, - "id": 8536, - "nodeType": "IfStatement", - "src": "18859:3900:21", - "trueBody": { - "id": 8414, - "nodeType": "Block", - "src": "18873:590:21", - "statements": [ - { - "expression": { - "id": 8394, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8390, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8374, - "src": "18887:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8393, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8391, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "18907:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8392, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "18924:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18907:23:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18887:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8395, - "nodeType": "ExpressionStatement", - "src": "18887:43:21" - }, - { - "expression": { - "id": 8404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8396, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "19066:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 8398, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8377, - "src": "19128:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8399, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "19160:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8400, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8381, - "src": "19184:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8401, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8379, - "src": "19224:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 8402, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19267:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8397, - "name": "_calcNewCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8620, - "src": "19087:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_uint256_$", - "typeString": "function (uint256,uint256,uint256,uint256,bool) pure returns (uint256)" - } - }, - "id": 8403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19087:198:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "19066:219:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8405, - "nodeType": "ExpressionStatement", - "src": "19066:219:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8410, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8363, - "src": "19417:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8411, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8361, - "src": "19425:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 8407, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "19393:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8406, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "19380:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 8408, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19380:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 8409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "19399:17:21", - "memberName": "lendCreditAccount", - "nodeType": "MemberAccess", - "referencedDeclaration": 12677, - "src": "19380:36:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$", - "typeString": "function (uint256,address) external" - } - }, - "id": 8412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19380:59:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8413, - "nodeType": "ExpressionStatement", - "src": "19380:59:21" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 8541, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8374, - "src": "22892:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 8542, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8387, - "src": "22923:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8538, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8361, - "src": "22847:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8537, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "22832:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 8539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22832:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 8540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "22862:16:21", - "memberName": "updateParameters", - "nodeType": "MemberAccess", - "referencedDeclaration": 11005, - "src": "22832:46:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256) external" - } - }, - "id": 8543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22832:119:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8544, - "nodeType": "ExpressionStatement", - "src": "22832:119:21" - } - ] - }, - "documentation": { - "id": 8359, - "nodeType": "StructuredDocumentation", - "src": "17467:887:21", - "text": "@dev Manages debt size for borrower:\n - Increase debt:\n + Increases debt by transferring funds from the pool to the credit account\n + Updates the cumulative index to keep interest the same. Since interest\n is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1),\n cumulativeIndexOpen needs to be updated, as the borrow amount has changed\n - Decrease debt:\n + Repays debt partially + all interest and fees accrued thus far\n + Updates cunulativeIndex to cumulativeIndex now\n @param creditAccount Address of the Credit Account to change debt for\n @param amount Amount to increase / decrease the principal by\n @param increase True to increase principal, false to decrease\n @return newBorrowedAmount The new debt principal" - }, - "functionSelector": "94cf073a", - "id": 8546, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8368, - "kind": "modifierInvocation", - "modifierName": { - "id": 8367, - "name": "whenNotPaused", - "nameLocations": ["18488:13:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17113, - "src": "18488:13:21" - }, - "nodeType": "ModifierInvocation", - "src": "18488:13:21" - }, - { - "id": 8370, - "kind": "modifierInvocation", - "modifierName": { - "id": 8369, - "name": "nonReentrant", - "nameLocations": ["18522:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "18522:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "18522:12:21" - }, - { - "id": 8372, - "kind": "modifierInvocation", - "modifierName": { - "id": 8371, - "name": "creditFacadeOnly", - "nameLocations": ["18543:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "18543:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "18543:16:21" - } - ], - "name": "manageDebt", - "nameLocation": "18368:10:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8366, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8361, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "18396:13:21", - "nodeType": "VariableDeclaration", - "scope": 8546, - "src": "18388:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8360, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18388:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8363, - "mutability": "mutable", - "name": "amount", - "nameLocation": "18427:6:21", - "nodeType": "VariableDeclaration", - "scope": 8546, - "src": "18419:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8362, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18419:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8365, - "mutability": "mutable", - "name": "increase", - "nameLocation": "18448:8:21", - "nodeType": "VariableDeclaration", - "scope": 8546, - "src": "18443:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8364, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "18443:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "18378:84:21" - }, - "returnParameters": { - "id": 8375, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8374, - "mutability": "mutable", - "name": "newBorrowedAmount", - "nameLocation": "18597:17:21", - "nodeType": "VariableDeclaration", - "scope": 8546, - "src": "18589:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8373, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18589:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18588:27:21" - }, - "scope": 10549, - "src": "18359:4616:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 8619, - "nodeType": "Block", - "src": "24199:1443:21", - "statements": [ - { - "condition": { - "id": 8562, - "name": "isIncrease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8557, - "src": "24213:10:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 8617, - "nodeType": "Block", - "src": "24979:657:21", - "statements": [ - { - "expression": { - "id": 8615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8594, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8560, - "src": "25344:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8595, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "25382:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8596, - "name": "cumulativeIndexNow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8553, - "src": "25400:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25382:36:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8598, - "name": "cumulativeIndexOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8555, - "src": "25421:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25382:58:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8600, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "25381:60:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8601, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "25461:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8602, - "name": "cumulativeIndexNow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8553, - "src": "25499:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25461:56:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8608, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8604, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "25541:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8605, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8551, - "src": "25559:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25541:23:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8607, - "name": "cumulativeIndexOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8555, - "src": "25567:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25541:45:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8609, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "25540:47:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 8610, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8549, - "src": "25610:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25540:84:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25461:163:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8613, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "25460:165:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25381:244:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "25344:281:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8616, - "nodeType": "ExpressionStatement", - "src": "25344:281:21" - } - ] - }, - "id": 8618, - "nodeType": "IfStatement", - "src": "24209:1427:21", - "trueBody": { - "id": 8593, - "nodeType": "Block", - "src": "24225:748:21", - "statements": [ - { - "assignments": [8564], - "declarations": [ - { - "constant": false, - "id": 8564, - "mutability": "mutable", - "name": "newBorrowedAmount", - "nameLocation": "24608:17:21", - "nodeType": "VariableDeclaration", - "scope": 8593, - "src": "24600:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8563, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24600:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8568, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8567, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8565, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8549, - "src": "24628:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 8566, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8551, - "src": "24645:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24628:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "24600:50:21" - }, - { - "expression": { - "id": 8591, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 8569, - "name": "newCumulativeIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8560, - "src": "24665:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8570, - "name": "cumulativeIndexNow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8553, - "src": "24688:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8571, - "name": "newBorrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8564, - "src": "24725:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24688:54:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8573, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "24761:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24688:88:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8575, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "24687:90:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8587, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8576, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "24798:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8577, - "name": "cumulativeIndexNow", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8553, - "src": "24816:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24798:36:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8579, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8549, - "src": "24837:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24798:53:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8581, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "24797:55:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 8582, - "name": "cumulativeIndexOpen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8555, - "src": "24875:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24797:97:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8584, - "name": "INDEX_PRECISION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7793, - "src": "24917:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 8585, - "name": "delta", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8551, - "src": "24955:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24917:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24797:163:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8588, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "24796:165:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24687:274:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 8590, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "24686:276:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "24665:297:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8592, - "nodeType": "ExpressionStatement", - "src": "24665:297:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 8547, - "nodeType": "StructuredDocumentation", - "src": "22981:970:21", - "text": "@dev Calculates the new cumulative index when debt is updated\n @param borrowedAmount Current debt principal\n @param delta Absolute value of total debt amount change\n @param cumulativeIndexNow Current cumulative index of the pool\n @param cumulativeIndexOpen Last updated cumulative index recorded for the corresponding debt position\n @param isIncrease Whether the debt is increased or decreased\n @notice Handles two potential cases:\n * Debt principal is increased by delta - in this case, the principal is changed\n but the interest / fees have to stay the same\n * Interest is decreased by delta - in this case, the principal stays the same,\n but the interest changes. The delta is assumed to have fee repayment excluded.\n The debt decrease case where delta > interest + fees is trivial and should be handled outside\n this function." - }, - "id": 8620, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_calcNewCumulativeIndex", - "nameLocation": "23965:23:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8558, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8549, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "24006:14:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "23998:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8548, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "23998:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8551, - "mutability": "mutable", - "name": "delta", - "nameLocation": "24038:5:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "24030:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8550, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24030:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8553, - "mutability": "mutable", - "name": "cumulativeIndexNow", - "nameLocation": "24061:18:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "24053:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8552, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24053:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8555, - "mutability": "mutable", - "name": "cumulativeIndexOpen", - "nameLocation": "24097:19:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "24089:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8554, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24089:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8557, - "mutability": "mutable", - "name": "isIncrease", - "nameLocation": "24131:10:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "24126:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8556, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "24126:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "23988:159:21" - }, - "returnParameters": { - "id": 8561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8560, - "mutability": "mutable", - "name": "newCumulativeIndex", - "nameLocation": "24179:18:21", - "nodeType": "VariableDeclaration", - "scope": 8620, - "src": "24171:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8559, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "24171:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "24170:28:21" - }, - "scope": 10549, - "src": "23956:1686:21", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12056], - "body": { - "id": 8652, - "nodeType": "Block", - "src": "26188:268:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8639, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8625, - "src": "26331:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8640, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8627, - "src": "26346:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8638, - "name": "_checkAndEnableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8959, - "src": "26310:20:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26310:42:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8642, - "nodeType": "ExpressionStatement", - "src": "26310:42:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8647, - "name": "payer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8623, - "src": "26407:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8648, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8625, - "src": "26414:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8649, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8629, - "src": "26429:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 8644, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8627, - "src": "26383:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8643, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "26376:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26376:13:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 8646, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "26390:16:21", - "memberName": "safeTransferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 18024, - "src": "26376:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$17905_$", - "typeString": "function (contract IERC20,address,address,uint256)" - } - }, - "id": 8650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26376:60:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8651, - "nodeType": "ExpressionStatement", - "src": "26376:60:21" - } - ] - }, - "documentation": { - "id": 8621, - "nodeType": "StructuredDocumentation", - "src": "25648:292:21", - "text": "@dev Adds collateral to borrower's credit account\n @param payer Address of the account which will be charged to provide additional collateral\n @param creditAccount Address of the Credit Account\n @param token Collateral token to add\n @param amount Amount to add" - }, - "functionSelector": "830aa745", - "id": 8653, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8632, - "kind": "modifierInvocation", - "modifierName": { - "id": 8631, - "name": "whenNotPaused", - "nameLocations": ["26100:13:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17113, - "src": "26100:13:21" - }, - "nodeType": "ModifierInvocation", - "src": "26100:13:21" - }, - { - "id": 8634, - "kind": "modifierInvocation", - "modifierName": { - "id": 8633, - "name": "nonReentrant", - "nameLocations": ["26134:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "26134:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "26134:12:21" - }, - { - "id": 8636, - "kind": "modifierInvocation", - "modifierName": { - "id": 8635, - "name": "creditFacadeOnly", - "nameLocations": ["26155:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "26155:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "26155:16:21" - } - ], - "name": "addCollateral", - "nameLocation": "25954:13:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8630, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8623, - "mutability": "mutable", - "name": "payer", - "nameLocation": "25985:5:21", - "nodeType": "VariableDeclaration", - "scope": 8653, - "src": "25977:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8622, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "25977:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8625, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "26008:13:21", - "nodeType": "VariableDeclaration", - "scope": 8653, - "src": "26000:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8624, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26000:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8627, - "mutability": "mutable", - "name": "token", - "nameLocation": "26039:5:21", - "nodeType": "VariableDeclaration", - "scope": 8653, - "src": "26031:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8626, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26031:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8629, - "mutability": "mutable", - "name": "amount", - "nameLocation": "26062:6:21", - "nodeType": "VariableDeclaration", - "scope": 8653, - "src": "26054:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8628, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "26054:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "25967:107:21" - }, - "returnParameters": { - "id": 8637, - "nodeType": "ParameterList", - "parameters": [], - "src": "26188:0:21" - }, - "scope": 10549, - "src": "25945:511:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12064], - "body": { - "id": 8684, - "nodeType": "Block", - "src": "26815:201:21", - "statements": [ - { - "assignments": [8669], - "declarations": [ - { - "constant": false, - "id": 8669, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "26833:13:21", - "nodeType": "VariableDeclaration", - "scope": 8684, - "src": "26825:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8668, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26825:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8673, - "initialValue": { - "arguments": [ - { - "id": 8671, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8656, - "src": "26874:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8670, - "name": "getCreditAccountOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9957, - "src": "26849:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view returns (address)" - } - }, - "id": 8672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26849:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "26825:54:21" - }, - { - "expression": { - "id": 8677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "26901:27:21", - "subExpression": { - "baseExpression": { - "id": 8674, - "name": "creditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7855, - "src": "26908:14:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 8676, - "indexExpression": { - "id": 8675, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8656, - "src": "26923:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "26908:20:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8678, - "nodeType": "ExpressionStatement", - "src": "26901:27:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8680, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8658, - "src": "26974:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8681, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8669, - "src": "26978:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8679, - "name": "_safeCreditAccountSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9693, - "src": "26952:21:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8682, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26952:40:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8683, - "nodeType": "ExpressionStatement", - "src": "26952:40:21" - } - ] - }, - "documentation": { - "id": 8654, - "nodeType": "StructuredDocumentation", - "src": "26462:147:21", - "text": "@dev Transfers Credit Account ownership to another address\n @param from Address of previous owner\n @param to Address of new owner" - }, - "functionSelector": "e1998cf9", - "id": 8685, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8662, - "kind": "modifierInvocation", - "modifierName": { - "id": 8661, - "name": "whenNotPausedOrEmergency", - "nameLocations": ["26716:24:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8016, - "src": "26716:24:21" - }, - "nodeType": "ModifierInvocation", - "src": "26716:24:21" - }, - { - "id": 8664, - "kind": "modifierInvocation", - "modifierName": { - "id": 8663, - "name": "nonReentrant", - "nameLocations": ["26761:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "26761:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "26761:12:21" - }, - { - "id": 8666, - "kind": "modifierInvocation", - "modifierName": { - "id": 8665, - "name": "creditFacadeOnly", - "nameLocations": ["26782:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "26782:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "26782:16:21" - } - ], - "name": "transferAccountOwnership", - "nameLocation": "26623:24:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8660, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "26699:8:21" - }, - "parameters": { - "id": 8659, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8656, - "mutability": "mutable", - "name": "from", - "nameLocation": "26656:4:21", - "nodeType": "VariableDeclaration", - "scope": 8685, - "src": "26648:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8655, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26648:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8658, - "mutability": "mutable", - "name": "to", - "nameLocation": "26670:2:21", - "nodeType": "VariableDeclaration", - "scope": 8685, - "src": "26662:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8657, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "26662:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "26647:26:21" - }, - "returnParameters": { - "id": 8667, - "nodeType": "ParameterList", - "parameters": [], - "src": "26815:0:21" - }, - "scope": 10549, - "src": "26614:402:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12076], - "body": { - "id": 8772, - "nodeType": "Block", - "src": "27556:1171:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8725, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8717, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 8702, - "name": "adapterToContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7915, - "src": "27739:17:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 8705, - "indexExpression": { - "expression": { - "id": 8703, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "27757:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8704, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27761:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "27757:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "27739:29:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 8706, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8690, - "src": "27772:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "27739:47:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8708, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "27806:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27810:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "27806:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 8710, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7845, - "src": "27820:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "27806:26:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "27739:93:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8716, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8713, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "27852:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "27856:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "27852:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 8715, - "name": "universalAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7930, - "src": "27866:16:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "27852:30:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "27739:143:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 8718, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "27738:145:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8719, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8690, - "src": "27887:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 8722, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27913:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 8721, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "27905:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27905:7:21", - "typeDescriptions": {} - } - }, - "id": 8723, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27905:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "27887:28:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "27738:177:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8730, - "nodeType": "IfStatement", - "src": "27721:289:21", - "trueBody": { - "id": 8729, - "nodeType": "Block", - "src": "27926:84:21", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8726, - "name": "AdaptersOrCreditFacadeOnlyException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11957, - "src": "27947:35:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27947:37:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8728, - "nodeType": "RevertStatement", - "src": "27940:44:21" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8735, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 8732, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8692, - "src": "28188:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8731, - "name": "tokenMasksMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10106, - "src": "28174:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 8733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28174:20:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 8734, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28198:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "28174:25:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8739, - "nodeType": "IfStatement", - "src": "28170:64:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8736, - "name": "TokenNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11975, - "src": "28208:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28208:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8738, - "nodeType": "RevertStatement", - "src": "28201:33:21" - } - }, - { - "assignments": [8741], - "declarations": [ - { - "constant": false, - "id": 8741, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "28259:13:21", - "nodeType": "VariableDeclaration", - "scope": 8772, - "src": "28251:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8740, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28251:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8745, - "initialValue": { - "arguments": [ - { - "id": 8743, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8688, - "src": "28300:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8742, - "name": "getCreditAccountOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9957, - "src": "28275:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view returns (address)" - } - }, - "id": 8744, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28275:34:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "28251:58:21" - }, - { - "condition": { - "id": 8753, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "28497:62:21", - "subExpression": { - "arguments": [ - { - "id": 8747, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8692, - "src": "28507:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8748, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8690, - "src": "28514:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8749, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8741, - "src": "28530:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8750, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8694, - "src": "28545:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 8751, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28553:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8746, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8836, - "src": "28498:8:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", - "typeString": "function (address,address,address,uint256,bool) returns (bool)" - } - }, - "id": 8752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28498:61:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8771, - "nodeType": "IfStatement", - "src": "28493:228:21", - "trueBody": { - "id": 8770, - "nodeType": "Block", - "src": "28561:160:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8755, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8692, - "src": "28584:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8756, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8690, - "src": "28591:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8757, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8741, - "src": "28607:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 8758, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28622:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "hexValue": "74727565", - "id": 8759, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28625:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8754, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8836, - "src": "28575:8:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", - "typeString": "function (address,address,address,uint256,bool) returns (bool)" - } - }, - "id": 8760, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28575:55:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8761, - "nodeType": "ExpressionStatement", - "src": "28575:55:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8763, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8692, - "src": "28659:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8764, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8690, - "src": "28666:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8765, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8741, - "src": "28682:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8766, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8694, - "src": "28697:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 8767, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28705:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 8762, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8836, - "src": "28650:8:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_bool_$", - "typeString": "function (address,address,address,uint256,bool) returns (bool)" - } - }, - "id": 8768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28650:60:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8769, - "nodeType": "ExpressionStatement", - "src": "28650:60:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 8686, - "nodeType": "StructuredDocumentation", - "src": "27022:284:21", - "text": "@dev Requests the Credit Account to approve a collateral token to another contract.\n @param borrower Borrower's address\n @param targetContract Spender to change allowance for\n @param token Collateral token to approve\n @param amount New allowance amount" - }, - "functionSelector": "46fb371d", - "id": 8773, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8698, - "kind": "modifierInvocation", - "modifierName": { - "id": 8697, - "name": "whenNotPausedOrEmergency", - "nameLocations": ["27494:24:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8016, - "src": "27494:24:21" - }, - "nodeType": "ModifierInvocation", - "src": "27494:24:21" - }, - { - "id": 8700, - "kind": "modifierInvocation", - "modifierName": { - "id": 8699, - "name": "nonReentrant", - "nameLocations": ["27539:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "27539:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "27539:12:21" - } - ], - "name": "approveCreditAccount", - "nameLocation": "27320:20:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8696, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "27477:8:21" - }, - "parameters": { - "id": 8695, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8688, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "27358:8:21", - "nodeType": "VariableDeclaration", - "scope": 8773, - "src": "27350:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8687, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27350:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8690, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "27384:14:21", - "nodeType": "VariableDeclaration", - "scope": 8773, - "src": "27376:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8689, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27376:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8692, - "mutability": "mutable", - "name": "token", - "nameLocation": "27416:5:21", - "nodeType": "VariableDeclaration", - "scope": 8773, - "src": "27408:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8691, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "27408:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8694, - "mutability": "mutable", - "name": "amount", - "nameLocation": "27439:6:21", - "nodeType": "VariableDeclaration", - "scope": 8773, - "src": "27431:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8693, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "27431:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "27340:111:21" - }, - "returnParameters": { - "id": 8701, - "nodeType": "ParameterList", - "parameters": [], - "src": "27556:0:21" - }, - "scope": 10549, - "src": "27311:1416:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 8835, - "nodeType": "Block", - "src": "29141:880:21", - "statements": [ - { - "clauses": [ - { - "block": { - "id": 8823, - "nodeType": "Block", - "src": "29625:114:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8806, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8804, - "src": "29643:6:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 8807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29650:6:21", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "29643:13:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 8808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29660:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "29643:18:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 8812, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8804, - "src": "29676:6:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 8814, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "29685:4:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": { - "id": 8813, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "29685:4:21", - "typeDescriptions": {} - } - } - ], - "id": 8815, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "29684:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "id": 8810, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "29665:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 8811, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "29669:6:21", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "29665:10:21", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29665:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "74727565", - "id": 8817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29695:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "29665:34:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "29643:56:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8822, - "nodeType": "IfStatement", - "src": "29639:89:21", - "trueBody": { - "expression": { - "hexValue": "74727565", - "id": 8820, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29724:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 8788, - "id": 8821, - "nodeType": "Return", - "src": "29717:11:21" - } - } - ] - }, - "errorName": "", - "id": 8824, - "nodeType": "TryCatchClause", - "parameters": { - "id": 8805, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8804, - "mutability": "mutable", - "name": "result", - "nameLocation": "29617:6:21", - "nodeType": "VariableDeclaration", - "scope": 8824, - "src": "29604:19:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8803, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "29604:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "29603:21:21" - }, - "src": "29595:144:21" - }, - { - "block": { - "id": 8825, - "nodeType": "Block", - "src": "29746:2:21", - "statements": [] - }, - "errorName": "", - "id": 8826, - "nodeType": "TryCatchClause", - "src": "29740:8:21" - } - ], - "externalCall": { - "arguments": [ - { - "id": 8793, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8776, - "src": "29400:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 8796, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "29467:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8797, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "29474:7:21", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 17892, - "src": "29467:14:21", - "typeDescriptions": { - "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function IERC20.approve(address,uint256) returns (bool)" - } - }, - "id": 8798, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "29482:8:21", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "29467:23:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 8799, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8778, - "src": "29512:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8800, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8782, - "src": "29548:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 8794, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "29423:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 8795, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "29427:18:21", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "29423:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 8801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29423:149:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "arguments": [ - { - "id": 8790, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8780, - "src": "29360:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8789, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "29345:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 8791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29345:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 8792, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "29375:7:21", - "memberName": "execute", - "nodeType": "MemberAccess", - "referencedDeclaration": 11063, - "src": "29345:37:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory) external returns (bytes memory)" - } - }, - "id": 8802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29345:241:21", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 8827, - "nodeType": "TryStatement", - "src": "29329:419:21" - }, - { - "condition": { - "id": 8828, - "name": "revertIfFailed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8784, - "src": "29943:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8832, - "nodeType": "IfStatement", - "src": "29939:53:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8829, - "name": "AllowanceFailedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11978, - "src": "29966:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8830, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29966:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8831, - "nodeType": "RevertStatement", - "src": "29959:33:21" - } - }, - { - "expression": { - "hexValue": "66616c7365", - "id": 8833, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "30009:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 8788, - "id": 8834, - "nodeType": "Return", - "src": "30002:12:21" - } - ] - }, - "documentation": { - "id": 8774, - "nodeType": "StructuredDocumentation", - "src": "28733:216:21", - "text": "@dev Internal function used to approve token from a Credit Account\n Uses Credit Account's execute to properly handle both ERC20-compliant and\n non-compliant (no returned value from \"approve\") tokens" - }, - "id": 8836, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nameLocation": "28963:8:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8776, - "mutability": "mutable", - "name": "token", - "nameLocation": "28989:5:21", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "28981:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "28981:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8778, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "29012:14:21", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "29004:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29004:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8780, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "29044:13:21", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "29036:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8779, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "29036:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8782, - "mutability": "mutable", - "name": "amount", - "nameLocation": "29075:6:21", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "29067:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8781, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "29067:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8784, - "mutability": "mutable", - "name": "revertIfFailed", - "nameLocation": "29096:14:21", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "29091:19:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8783, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "29091:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "28971:145:21" - }, - "returnParameters": { - "id": 8788, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8787, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8836, - "src": "29135:4:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 8786, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "29135:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "29134:6:21" - }, - "scope": 10549, - "src": "28954:1067:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12088], - "body": { - "id": 8895, - "nodeType": "Block", - "src": "30594:892:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8858, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 8853, - "name": "adapterToContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7915, - "src": "30815:17:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 8856, - "indexExpression": { - "expression": { - "id": 8854, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "30833:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "30837:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "30833:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "30815:29:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 8857, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8841, - "src": "30848:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "30815:47:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8859, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8841, - "src": "30878:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 8862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "30904:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 8861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "30896:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 8860, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "30896:7:21", - "typeDescriptions": {} - } - }, - "id": 8863, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30896:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "30878:28:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "30815:91:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8875, - "nodeType": "IfStatement", - "src": "30798:251:21", - "trueBody": { - "id": 8874, - "nodeType": "Block", - "src": "30917:132:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 8869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 8866, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "30935:3:21", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 8867, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "30939:6:21", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "30935:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 8868, - "name": "universalAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7930, - "src": "30949:16:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "30935:30:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8873, - "nodeType": "IfStatement", - "src": "30931:94:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8870, - "name": "TargetContractNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11969, - "src": "30990:33:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8871, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30990:35:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8872, - "nodeType": "RevertStatement", - "src": "30983:42:21" - } - } - ] - } - }, - { - "assignments": [8877], - "declarations": [ - { - "constant": false, - "id": 8877, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "31067:13:21", - "nodeType": "VariableDeclaration", - "scope": 8895, - "src": "31059:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8876, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31059:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 8881, - "initialValue": { - "arguments": [ - { - "id": 8879, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8839, - "src": "31108:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8878, - "name": "getCreditAccountOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9957, - "src": "31083:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$", - "typeString": "function (address) view returns (address)" - } - }, - "id": 8880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31083:34:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "31059:58:21" - }, - { - "eventCall": { - "arguments": [ - { - "id": 8883, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8839, - "src": "31184:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8884, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8841, - "src": "31194:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8882, - "name": "ExecuteOrder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11948, - "src": "31171:12:21", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31171:38:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8886, - "nodeType": "EmitStatement", - "src": "31166:43:21" - }, - { - "expression": { - "arguments": [ - { - "id": 8891, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8841, - "src": "31445:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8892, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8843, - "src": "31461:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "arguments": [ - { - "id": 8888, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8877, - "src": "31422:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8887, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "31407:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 8889, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31407:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 8890, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "31437:7:21", - "memberName": "execute", - "nodeType": "MemberAccess", - "referencedDeclaration": 11063, - "src": "31407:37:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory) external returns (bytes memory)" - } - }, - "id": 8893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31407:59:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 8852, - "id": 8894, - "nodeType": "Return", - "src": "31400:66:21" - } - ] - }, - "documentation": { - "id": 8837, - "nodeType": "StructuredDocumentation", - "src": "30027:314:21", - "text": "@dev Requests a Credit Account to make a low-level call with provided data\n This is the intended pathway for state-changing interactions with 3rd-party protocols\n @param borrower Borrower's address\n @param targetContract Contract to be called\n @param data Data to pass with the call" - }, - "functionSelector": "6ce4074a", - "id": 8896, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8847, - "kind": "modifierInvocation", - "modifierName": { - "id": 8846, - "name": "whenNotPausedOrEmergency", - "nameLocations": ["30501:24:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8016, - "src": "30501:24:21" - }, - "nodeType": "ModifierInvocation", - "src": "30501:24:21" - }, - { - "id": 8849, - "kind": "modifierInvocation", - "modifierName": { - "id": 8848, - "name": "nonReentrant", - "nameLocations": ["30546:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "30546:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "30546:12:21" - } - ], - "name": "executeOrder", - "nameLocation": "30355:12:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8845, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "30484:8:21" - }, - "parameters": { - "id": 8844, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8839, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "30385:8:21", - "nodeType": "VariableDeclaration", - "scope": 8896, - "src": "30377:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8838, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "30377:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8841, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "30411:14:21", - "nodeType": "VariableDeclaration", - "scope": 8896, - "src": "30403:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8840, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "30403:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8843, - "mutability": "mutable", - "name": "data", - "nameLocation": "30448:4:21", - "nodeType": "VariableDeclaration", - "scope": 8896, - "src": "30435:17:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8842, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "30435:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "30367:91:21" - }, - "returnParameters": { - "id": 8852, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8851, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 8896, - "src": "30576:12:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 8850, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "30576:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "30575:14:21" - }, - "scope": 10549, - "src": "30346:1140:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12096], - "body": { - "id": 8916, - "nodeType": "Block", - "src": "32023:72:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8912, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8899, - "src": "32054:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8913, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8901, - "src": "32069:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8911, - "name": "_checkAndEnableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8959, - "src": "32033:20:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32033:42:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8915, - "nodeType": "ExpressionStatement", - "src": "32033:42:21" - } - ] - }, - "documentation": { - "id": 8897, - "nodeType": "StructuredDocumentation", - "src": "31560:252:21", - "text": "@dev Enables a token on a Credit Account, including it\n into account health and total value calculations\n @param creditAccount Address of a Credit Account to enable the token for\n @param token Address of the token to be enabled" - }, - "functionSelector": "51e3f160", - "id": 8917, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8905, - "kind": "modifierInvocation", - "modifierName": { - "id": 8904, - "name": "whenNotPausedOrEmergency", - "nameLocations": ["31926:24:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8016, - "src": "31926:24:21" - }, - "nodeType": "ModifierInvocation", - "src": "31926:24:21" - }, - { - "id": 8907, - "kind": "modifierInvocation", - "modifierName": { - "id": 8906, - "name": "adaptersOrCreditFacadeOnly", - "nameLocations": ["31959:26:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7977, - "src": "31959:26:21" - }, - "nodeType": "ModifierInvocation", - "src": "31959:26:21" - }, - { - "id": 8909, - "kind": "modifierInvocation", - "modifierName": { - "id": 8908, - "name": "nonReentrant", - "nameLocations": ["32006:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "32006:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "32006:12:21" - } - ], - "name": "checkAndEnableToken", - "nameLocation": "31826:19:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8903, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "31909:8:21" - }, - "parameters": { - "id": 8902, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8899, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "31854:13:21", - "nodeType": "VariableDeclaration", - "scope": 8917, - "src": "31846:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31846:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8901, - "mutability": "mutable", - "name": "token", - "nameLocation": "31877:5:21", - "nodeType": "VariableDeclaration", - "scope": 8917, - "src": "31869:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8900, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "31869:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "31845:38:21" - }, - "returnParameters": { - "id": 8910, - "nodeType": "ParameterList", - "parameters": [], - "src": "32023:0:21" - }, - "scope": 10549, - "src": "31817:278:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 8958, - "nodeType": "Block", - "src": "32376:564:21", - "statements": [ - { - "assignments": [8926], - "declarations": [ - { - "constant": false, - "id": 8926, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "32394:9:21", - "nodeType": "VariableDeclaration", - "scope": 8958, - "src": "32386:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8925, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "32386:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8930, - "initialValue": { - "arguments": [ - { - "id": 8928, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8922, - "src": "32420:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8927, - "name": "tokenMasksMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10106, - "src": "32406:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 8929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32406:20:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "32386:40:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 8939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8931, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8926, - "src": "32575:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 8932, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32588:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "32575:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8938, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 8934, - "name": "forbiddenTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7898, - "src": "32593:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 8935, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8926, - "src": "32614:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "32593:30:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 8937, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32627:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "32593:35:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "32575:53:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8943, - "nodeType": "IfStatement", - "src": "32571:104:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 8940, - "name": "TokenNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11975, - "src": "32649:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 8941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32649:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8942, - "nodeType": "RevertStatement", - "src": "32642:33:21" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 8948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 8944, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "32814:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 8946, - "indexExpression": { - "id": 8945, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "32831:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "32814:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 8947, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8926, - "src": "32848:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "32814:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 8949, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32861:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "32814:48:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 8957, - "nodeType": "IfStatement", - "src": "32810:110:21", - "trueBody": { - "expression": { - "id": 8955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 8951, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "32876:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 8953, - "indexExpression": { - "id": 8952, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8920, - "src": "32893:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "32876:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "|=", - "rightHandSide": { - "id": 8954, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8926, - "src": "32911:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "32876:44:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 8956, - "nodeType": "ExpressionStatement", - "src": "32876:44:21" - } - } - ] - }, - "documentation": { - "id": 8918, - "nodeType": "StructuredDocumentation", - "src": "32101:181:21", - "text": "@dev IMPLEMENTATION: checkAndEnableToken\n @param creditAccount Address of a Credit Account to enable the token for\n @param token Address of the token to be enabled" - }, - "id": 8959, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAndEnableToken", - "nameLocation": "32296:20:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 8923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8920, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "32325:13:21", - "nodeType": "VariableDeclaration", - "scope": 8959, - "src": "32317:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8919, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32317:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8922, - "mutability": "mutable", - "name": "token", - "nameLocation": "32348:5:21", - "nodeType": "VariableDeclaration", - "scope": 8959, - "src": "32340:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8921, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "32340:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "32316:38:21" - }, - "returnParameters": { - "id": 8924, - "nodeType": "ParameterList", - "parameters": [], - "src": "32376:0:21" - }, - "scope": 10549, - "src": "32287:653:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12110], - "body": { - "id": 9097, - "nodeType": "Block", - "src": "34353:2855:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 8979, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "34511:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 8980, - "name": "tokenOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8966, - "src": "34526:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8978, - "name": "_checkAndEnableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8959, - "src": "34490:20:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 8981, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34490:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 8982, - "nodeType": "ExpressionStatement", - "src": "34490:45:21" - }, - { - "assignments": [8984], - "declarations": [ - { - "constant": false, - "id": 8984, - "mutability": "mutable", - "name": "balanceInAfter", - "nameLocation": "34565:14:21", - "nodeType": "VariableDeclaration", - "scope": 9097, - "src": "34557:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8983, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34557:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 8991, - "initialValue": { - "arguments": [ - { - "id": 8989, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "34608:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 8986, - "name": "tokenIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8964, - "src": "34589:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8985, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "34582:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34582:15:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 8988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34598:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "34582:25:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 8990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34582:40:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "34557:65:21" - }, - { - "assignments": [8993], - "declarations": [ - { - "constant": false, - "id": 8993, - "mutability": "mutable", - "name": "balanceOutAfter", - "nameLocation": "34654:15:21", - "nodeType": "VariableDeclaration", - "scope": 9097, - "src": "34646:23:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8992, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34646:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9000, - "initialValue": { - "arguments": [ - { - "id": 8998, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "34699:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 8995, - "name": "tokenOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8966, - "src": "34679:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 8994, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "34672:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 8996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34672:16:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 8997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34689:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "34672:26:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 8999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34672:41:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "34646:67:21" - }, - { - "assignments": [9002, 9004], - "declarations": [ - { - "constant": false, - "id": 9002, - "mutability": "mutable", - "name": "amountInCollateral", - "nameLocation": "34747:18:21", - "nodeType": "VariableDeclaration", - "scope": 9097, - "src": "34739:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9001, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34739:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9004, - "mutability": "mutable", - "name": "amountOutCollateral", - "nameLocation": "34775:19:21", - "nodeType": "VariableDeclaration", - "scope": 9097, - "src": "34767:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9003, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34767:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9017, - "initialValue": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9008, - "name": "balanceInBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8968, - "src": "34869:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9009, - "name": "balanceInAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8984, - "src": "34887:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "34869:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9011, - "name": "tokenIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8964, - "src": "34919:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9014, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9012, - "name": "balanceOutAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8993, - "src": "34944:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9013, - "name": "balanceOutBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8970, - "src": "34962:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "34944:34:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9015, - "name": "tokenOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8966, - "src": "34996:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "expression": { - "id": 9005, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "34798:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9006, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34817:11:21", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 7812, - "src": "34798:30:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 9007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "34842:9:21", - "memberName": "fastCheck", - "nodeType": "MemberAccess", - "referencedDeclaration": 12913, - "src": "34798:53:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (uint256,address,uint256,address) view external returns (uint256,uint256)" - } - }, - "id": 9016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34798:220:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "34738:280:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9020, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9018, - "name": "balanceInAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8984, - "src": "35123:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "hexValue": "31", - "id": 9019, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "35141:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "35123:19:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9026, - "nodeType": "IfStatement", - "src": "35119:62:21", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 9022, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "35158:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9023, - "name": "tokenIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8964, - "src": "35173:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9021, - "name": "_disableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9513, - "src": "35144:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) returns (bool)" - } - }, - "id": 9024, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35144:37:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9025, - "nodeType": "ExpressionStatement", - "src": "35144:37:21" - } - }, - { - "expression": { - "id": 9031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9027, - "name": "amountOutCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9004, - "src": "35587:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "arguments": [ - { - "id": 9029, - "name": "tokenOut", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8966, - "src": "35632:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9028, - "name": "liquidationThresholds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10084, - "src": "35610:21:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint16_$", - "typeString": "function (address) view returns (uint16)" - } - }, - "id": 9030, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35610:31:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "35587:54:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9032, - "nodeType": "ExpressionStatement", - "src": "35587:54:21" - }, - { - "expression": { - "id": 9037, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9033, - "name": "amountInCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9002, - "src": "35664:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "*=", - "rightHandSide": { - "arguments": [ - { - "id": 9035, - "name": "tokenIn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8964, - "src": "35708:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9034, - "name": "liquidationThresholds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10084, - "src": "35686:21:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint16_$", - "typeString": "function (address) view returns (uint16)" - } - }, - "id": 9036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35686:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "35664:52:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9038, - "nodeType": "ExpressionStatement", - "src": "35664:52:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9039, - "name": "amountOutCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9004, - "src": "36030:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 9040, - "name": "amountInCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9002, - "src": "36053:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36030:41:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9048, - "nodeType": "IfStatement", - "src": "36026:163:21", - "trueBody": { - "id": 9047, - "nodeType": "Block", - "src": "36073:116:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9043, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "36118:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9042, - "name": "_checkAndOptimizeEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9343, - "src": "36087:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "36087:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9045, - "nodeType": "ExpressionStatement", - "src": "36087:45:21" - }, - { - "functionReturnParameters": 8977, - "id": 9046, - "nodeType": "Return", - "src": "36159:7:21" - } - ] - } - }, - { - "assignments": [9050], - "declarations": [ - { - "constant": false, - "id": 9050, - "mutability": "mutable", - "name": "cumulativeDropRAY", - "nameLocation": "36292:17:21", - "nodeType": "VariableDeclaration", - "scope": 9097, - "src": "36284:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9049, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "36284:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9064, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9063, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9051, - "name": "RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13877, - "src": "36312:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9057, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9052, - "name": "amountOutCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9004, - "src": "36332:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 9053, - "name": "RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13877, - "src": "36354:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36332:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9055, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "36331:27:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9056, - "name": "amountInCollateral", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9002, - "src": "36361:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36331:48:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9058, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "36330:50:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36312:68:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "baseExpression": { - "id": 9060, - "name": "cumulativeDropAtFastCheckRAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7909, - "src": "36395:28:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9062, - "indexExpression": { - "id": 9061, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "36424:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "36395:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36312:126:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "36284:154:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9065, - "name": "cumulativeDropRAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9050, - "src": "36630:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9072, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 9066, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "36664:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9067, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "36670:14:21", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 7799, - "src": "36664:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 9068, - "name": "RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13877, - "src": "36687:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36664:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9070, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "36663:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9071, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "36694:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "36663:48:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36630:81:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9086, - "nodeType": "IfStatement", - "src": "36613:302:21", - "trueBody": { - "id": 9085, - "nodeType": "Block", - "src": "36722:193:21", - "statements": [ - { - "expression": { - "id": 9078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9074, - "name": "cumulativeDropAtFastCheckRAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7909, - "src": "36736:28:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9076, - "indexExpression": { - "id": 9075, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "36765:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "36736:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9077, - "name": "cumulativeDropRAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9050, - "src": "36782:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "36736:63:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9079, - "nodeType": "ExpressionStatement", - "src": "36736:63:21" - }, - { - "expression": { - "arguments": [ - { - "id": 9081, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "36857:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9080, - "name": "_checkAndOptimizeEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9343, - "src": "36826:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9082, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "36826:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9083, - "nodeType": "ExpressionStatement", - "src": "36826:45:21" - }, - { - "functionReturnParameters": 8977, - "id": 9084, - "nodeType": "Return", - "src": "36898:7:21" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 9088, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "37101:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9087, - "name": "_fullCollateralCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9289, - "src": "37080:20:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37080:35:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9090, - "nodeType": "ExpressionStatement", - "src": "37080:35:21" - }, - { - "expression": { - "id": 9095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9091, - "name": "cumulativeDropAtFastCheckRAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7909, - "src": "37141:28:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9093, - "indexExpression": { - "id": 9092, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 8962, - "src": "37170:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "37141:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "31", - "id": 9094, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "37187:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "37141:47:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9096, - "nodeType": "ExpressionStatement", - "src": "37141:47:21" - } - ] - }, - "documentation": { - "id": 8960, - "nodeType": "StructuredDocumentation", - "src": "32946:1112:21", - "text": "@dev Optimized health check for individual swap-like operations.\n @notice Fast health check assumes that only two tokens (input and output)\n participate in the operation and computes a % change in weighted value between\n inbound and outbound collateral. The cumulative negative change across several\n swaps in sequence cannot be larger than feeLiquidation (a fee that the\n protocol is ready to waive if needed). Since this records a % change\n between just two tokens, the corresponding % change in TWV will always be smaller,\n which makes this check safe.\n More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection\n @param creditAccount Address of the Credit Account\n @param tokenIn Address of the token spent by the swap\n @param tokenOut Address of the token received from the swap\n @param balanceInBefore Balance of tokenIn before the operation\n @param balanceOutBefore Balance of tokenOut before the operation" - }, - "functionSelector": "654a9eda", - "id": 9098, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 8974, - "kind": "modifierInvocation", - "modifierName": { - "id": 8973, - "name": "adaptersOrCreditFacadeOnly", - "nameLocations": ["34289:26:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7977, - "src": "34289:26:21" - }, - "nodeType": "ModifierInvocation", - "src": "34289:26:21" - }, - { - "id": 8976, - "kind": "modifierInvocation", - "modifierName": { - "id": 8975, - "name": "nonReentrant", - "nameLocations": ["34336:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "34336:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "34336:12:21" - } - ], - "name": "fastCollateralCheck", - "nameLocation": "34072:19:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 8972, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "34272:8:21" - }, - "parameters": { - "id": 8971, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 8962, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "34109:13:21", - "nodeType": "VariableDeclaration", - "scope": 9098, - "src": "34101:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8961, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34101:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8964, - "mutability": "mutable", - "name": "tokenIn", - "nameLocation": "34140:7:21", - "nodeType": "VariableDeclaration", - "scope": 9098, - "src": "34132:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8963, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34132:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8966, - "mutability": "mutable", - "name": "tokenOut", - "nameLocation": "34165:8:21", - "nodeType": "VariableDeclaration", - "scope": 9098, - "src": "34157:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 8965, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "34157:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8968, - "mutability": "mutable", - "name": "balanceInBefore", - "nameLocation": "34191:15:21", - "nodeType": "VariableDeclaration", - "scope": 9098, - "src": "34183:23:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8967, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34183:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 8970, - "mutability": "mutable", - "name": "balanceOutBefore", - "nameLocation": "34224:16:21", - "nodeType": "VariableDeclaration", - "scope": 9098, - "src": "34216:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 8969, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34216:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "34091:155:21" - }, - "returnParameters": { - "id": 8977, - "nodeType": "ParameterList", - "parameters": [], - "src": "34353:0:21" - }, - "scope": 10549, - "src": "34063:3145:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12116], - "body": { - "id": 9113, - "nodeType": "Block", - "src": "37555:52:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9110, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9101, - "src": "37586:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9109, - "name": "_fullCollateralCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9289, - "src": "37565:20:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "37565:35:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9112, - "nodeType": "ExpressionStatement", - "src": "37565:35:21" - } - ] - }, - "documentation": { - "id": 9099, - "nodeType": "StructuredDocumentation", - "src": "37214:178:21", - "text": "@dev Performs a full health check on an account, summing up\n value of all enabled collateral tokens\n @param creditAccount Address of the Credit Account to check" - }, - "functionSelector": "95373018", - "id": 9114, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 9105, - "kind": "modifierInvocation", - "modifierName": { - "id": 9104, - "name": "adaptersOrCreditFacadeOnly", - "nameLocations": ["37491:26:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7977, - "src": "37491:26:21" - }, - "nodeType": "ModifierInvocation", - "src": "37491:26:21" - }, - { - "id": 9107, - "kind": "modifierInvocation", - "modifierName": { - "id": 9106, - "name": "nonReentrant", - "nameLocations": ["37538:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "37538:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "37538:12:21" - } - ], - "name": "fullCollateralCheck", - "nameLocation": "37406:19:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9103, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "37474:8:21" - }, - "parameters": { - "id": 9102, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9101, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "37434:13:21", - "nodeType": "VariableDeclaration", - "scope": 9114, - "src": "37426:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9100, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37426:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "37425:23:21" - }, - "returnParameters": { - "id": 9108, - "nodeType": "ParameterList", - "parameters": [], - "src": "37555:0:21" - }, - "scope": 10549, - "src": "37397:210:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 9288, - "nodeType": "Block", - "src": "37792:5039:21", - "statements": [ - { - "assignments": [9122], - "declarations": [ - { - "constant": false, - "id": 9122, - "mutability": "mutable", - "name": "_priceOracle", - "nameLocation": "37817:12:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "37802:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 9121, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9120, - "name": "IPriceOracleV2", - "nameLocations": ["37802:14:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "37802:14:21" - }, - "referencedDeclaration": 12942, - "src": "37802:14:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - } - ], - "id": 9125, - "initialValue": { - "expression": { - "id": 9123, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "37832:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9124, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "37838:11:21", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 7812, - "src": "37832:17:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "37802:47:21" - }, - { - "assignments": [9127], - "declarations": [ - { - "constant": false, - "id": 9127, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "37868:16:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "37860:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9126, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37860:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9131, - "initialValue": { - "baseExpression": { - "id": 9128, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "37887:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9130, - "indexExpression": { - "id": 9129, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9117, - "src": "37904:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "37887:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "37860:58:21" - }, - { - "assignments": [9133], - "declarations": [ - { - "constant": false, - "id": 9133, - "mutability": "mutable", - "name": "borrowAmountPlusInterestRateUSD", - "nameLocation": "37936:31:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "37928:39:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9132, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37928:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9134, - "nodeType": "VariableDeclarationStatement", - "src": "37928:39:21" - }, - { - "assignments": [9136], - "declarations": [ - { - "constant": false, - "id": 9136, - "mutability": "mutable", - "name": "len", - "nameLocation": "37985:3:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "37977:11:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9135, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "37977:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9137, - "nodeType": "VariableDeclarationStatement", - "src": "37977:11:21" - }, - { - "id": 9162, - "nodeType": "UncheckedBlock", - "src": "37998:584:21", - "statements": [ - { - "assignments": [null, null, 9139], - "declarations": [ - null, - null, - { - "constant": false, - "id": 9139, - "mutability": "mutable", - "name": "borrowedAmountWithInterestAndFees", - "nameLocation": "38232:33:21", - "nodeType": "VariableDeclaration", - "scope": 9162, - "src": "38224:41:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9138, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "38224:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9143, - "initialValue": { - "arguments": [ - { - "id": 9141, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9117, - "src": "38315:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9140, - "name": "calcCreditAccountAccruedInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10010, - "src": "38282:32:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256,uint256)" - } - }, - "id": 9142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38282:47:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "38170:159:21" - }, - { - "expression": { - "id": 9152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9144, - "name": "borrowAmountPlusInterestRateUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9133, - "src": "38344:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9147, - "name": "borrowedAmountWithInterestAndFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9139, - "src": "38421:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 9148, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "38457:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "38421:53:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9150, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "38492:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 9145, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9122, - "src": "38378:12:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 9146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "38391:12:21", - "memberName": "convertToUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12875, - "src": "38378:25:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 9151, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38378:138:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "38344:172:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9153, - "nodeType": "ExpressionStatement", - "src": "38344:172:21" - }, - { - "expression": { - "id": 9160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9154, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "38531:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 9156, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "38550:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9155, - "name": "_getMaxIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10175, - "src": "38537:12:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 9157, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "38537:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 9158, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "38570:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "38537:34:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "38531:40:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9161, - "nodeType": "ExpressionStatement", - "src": "38531:40:21" - } - ] - }, - { - "assignments": [9164], - "declarations": [ - { - "constant": false, - "id": 9164, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "38600:9:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "38592:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9163, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "38592:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9165, - "nodeType": "VariableDeclarationStatement", - "src": "38592:17:21" - }, - { - "assignments": [9167], - "declarations": [ - { - "constant": false, - "id": 9167, - "mutability": "mutable", - "name": "twvUSD", - "nameLocation": "38627:6:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "38619:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9166, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "38619:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9168, - "nodeType": "VariableDeclarationStatement", - "src": "38619:14:21" - }, - { - "assignments": [9170], - "declarations": [ - { - "constant": false, - "id": 9170, - "mutability": "mutable", - "name": "atLeastOneTokenWasDisabled", - "nameLocation": "38648:26:21", - "nodeType": "VariableDeclaration", - "scope": 9288, - "src": "38643:31:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9169, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "38643:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 9171, - "nodeType": "VariableDeclarationStatement", - "src": "38643:31:21" - }, - { - "body": { - "id": 9283, - "nodeType": "Block", - "src": "38712:4066:21", - "statements": [ - { - "id": 9192, - "nodeType": "UncheckedBlock", - "src": "39068:82:21", - "statements": [ - { - "expression": { - "id": 9190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9178, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9164, - "src": "39096:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9179, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9173, - "src": "39108:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 9180, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39113:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "39108:6:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 9183, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39121:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9184, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "39127:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9185, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9173, - "src": "39133:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "39127:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9187, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "39126:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "39121:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "39108:27:21", - "trueExpression": { - "hexValue": "31", - "id": 9182, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39117:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "39096:39:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9191, - "nodeType": "ExpressionStatement", - "src": "39096:39:21" - } - ] - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9195, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9193, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "39232:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 9194, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9164, - "src": "39251:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "39232:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39264:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "39232:33:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9278, - "nodeType": "IfStatement", - "src": "39228:3480:21", - "trueBody": { - "id": 9277, - "nodeType": "Block", - "src": "39267:3441:21", - "statements": [ - { - "assignments": [9199, 9201], - "declarations": [ - { - "constant": false, - "id": 9199, - "mutability": "mutable", - "name": "token", - "nameLocation": "39315:5:21", - "nodeType": "VariableDeclaration", - "scope": 9277, - "src": "39307:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9198, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "39307:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9201, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "39349:20:21", - "nodeType": "VariableDeclaration", - "scope": 9277, - "src": "39342:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 9200, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "39342:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "id": 9205, - "initialValue": { - "arguments": [ - { - "id": 9203, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9164, - "src": "39413:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9202, - "name": "collateralTokensByMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9931, - "src": "39390:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view returns (address,uint16)" - } - }, - "id": 9204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39390:33:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "39285:138:21" - }, - { - "assignments": [9207], - "declarations": [ - { - "constant": false, - "id": 9207, - "mutability": "mutable", - "name": "balance", - "nameLocation": "39449:7:21", - "nodeType": "VariableDeclaration", - "scope": 9277, - "src": "39441:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9206, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "39441:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9214, - "initialValue": { - "arguments": [ - { - "id": 9212, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9117, - "src": "39483:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 9209, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9199, - "src": "39466:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9208, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "39459:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 9210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39459:13:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 9211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39473:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "39459:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 9213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39459:38:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "39441:56:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9215, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9207, - "src": "39608:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 9216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "39618:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "39608:11:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9275, - "nodeType": "Block", - "src": "42543:151:21", - "statements": [ - { - "expression": { - "id": 9269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9267, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "42565:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "^=", - "rightHandSide": { - "id": 9268, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9164, - "src": "42585:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "42565:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9270, - "nodeType": "ExpressionStatement", - "src": "42565:29:21" - }, - { - "expression": { - "id": 9273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9271, - "name": "atLeastOneTokenWasDisabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9170, - "src": "42629:26:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 9272, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "42658:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "42629:33:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9274, - "nodeType": "ExpressionStatement", - "src": "42629:33:21" - } - ] - }, - "id": 9276, - "nodeType": "IfStatement", - "src": "39604:3090:21", - "trueBody": { - "id": 9266, - "nodeType": "Block", - "src": "39621:2916:21", - "statements": [ - { - "expression": { - "id": 9226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9218, - "name": "twvUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9167, - "src": "39643:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 9221, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9207, - "src": "39703:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9222, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9199, - "src": "39712:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 9219, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9122, - "src": "39677:12:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 9220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "39690:12:21", - "memberName": "convertToUSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 12875, - "src": "39677:25:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view external returns (uint256)" - } - }, - "id": 9223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "39677:41:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 9224, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9201, - "src": "39745:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "39677:88:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "39643:122:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9227, - "nodeType": "ExpressionStatement", - "src": "39643:122:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9228, - "name": "twvUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9167, - "src": "40086:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 9229, - "name": "borrowAmountPlusInterestRateUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9133, - "src": "40096:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "40086:41:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9265, - "nodeType": "IfStatement", - "src": "40082:2194:21", - "trueBody": { - "id": 9264, - "nodeType": "Block", - "src": "40129:2147:21", - "statements": [ - { - "assignments": [9232], - "declarations": [ - { - "constant": false, - "id": 9232, - "mutability": "mutable", - "name": "totalTokensEnabled", - "nameLocation": "40740:18:21", - "nodeType": "VariableDeclaration", - "scope": 9264, - "src": "40732:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9231, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "40732:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9236, - "initialValue": { - "arguments": [ - { - "id": 9234, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "40809:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9233, - "name": "_calcEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9370, - "src": "40761:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 9235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "40761:90:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "40732:119:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9237, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9232, - "src": "40881:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 9238, - "name": "maxAllowedEnabledTokenLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7841, - "src": "40902:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "40881:49:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9261, - "nodeType": "Block", - "src": "41832:376:21", - "statements": [ - { - "condition": { - "id": 9252, - "name": "atLeastOneTokenWasDisabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9170, - "src": "41956:26:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9260, - "nodeType": "IfStatement", - "src": "41952:230:21", - "trueBody": { - "id": 9259, - "nodeType": "Block", - "src": "41984:198:21", - "statements": [ - { - "expression": { - "id": 9257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9253, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "42018:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9255, - "indexExpression": { - "id": 9254, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9117, - "src": "42072:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "42018:101:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9256, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "42122:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "42018:120:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9258, - "nodeType": "ExpressionStatement", - "src": "42018:120:21" - } - ] - } - } - ] - }, - "id": 9262, - "nodeType": "IfStatement", - "src": "40877:1331:21", - "trueBody": { - "id": 9251, - "nodeType": "Block", - "src": "40932:894:21", - "statements": [ - { - "id": 9250, - "nodeType": "UncheckedBlock", - "src": "40962:838:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9241, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9117, - "src": "41066:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9242, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9127, - "src": "41117:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9243, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9232, - "src": "41171:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "31", - "id": 9244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "41403:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9245, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "41705:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9246, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9173, - "src": "41711:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "41705:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9240, - "name": "_optimizeEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9453, - "src": "41006:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256,uint256,uint256)" - } - }, - "id": 9248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "41006:740:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9249, - "nodeType": "ExpressionStatement", - "src": "41006:740:21" - } - ] - } - ] - } - }, - { - "functionReturnParameters": 9119, - "id": 9263, - "nodeType": "Return", - "src": "42234:7:21" - } - ] - } - } - ] - } - } - ] - } - }, - { - "id": 9282, - "nodeType": "UncheckedBlock", - "src": "42722:46:21", - "statements": [ - { - "expression": { - "id": 9280, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "42750:3:21", - "subExpression": { - "id": 9279, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9173, - "src": "42752:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9281, - "nodeType": "ExpressionStatement", - "src": "42750:3:21" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9175, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9173, - "src": "38701:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 9176, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9136, - "src": "38705:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "38701:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9284, - "initializationExpression": { - "assignments": [9173], - "declarations": [ - { - "constant": false, - "id": 9173, - "mutability": "mutable", - "name": "i", - "nameLocation": "38698:1:21", - "nodeType": "VariableDeclaration", - "scope": 9284, - "src": "38690:9:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9172, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "38690:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9174, - "nodeType": "VariableDeclarationStatement", - "src": "38690:9:21" - }, - "nodeType": "ForStatement", - "src": "38685:4093:21" - }, - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9285, - "name": "NotEnoughCollateralException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11972, - "src": "42794:28:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "42794:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9287, - "nodeType": "RevertStatement", - "src": "42787:37:21" - } - ] - }, - "documentation": { - "id": 9115, - "nodeType": "StructuredDocumentation", - "src": "37613:112:21", - "text": "@dev IMPLEMENTATION: fullCollateralCheck\n @param creditAccount Address of the Credit Account to check" - }, - "id": 9289, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_fullCollateralCheck", - "nameLocation": "37739:20:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9117, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "37768:13:21", - "nodeType": "VariableDeclaration", - "scope": 9289, - "src": "37760:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9116, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "37760:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "37759:23:21" - }, - "returnParameters": { - "id": 9119, - "nodeType": "ParameterList", - "parameters": [], - "src": "37792:0:21" - }, - "scope": 10549, - "src": "37730:5101:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12122], - "body": { - "id": 9302, - "nodeType": "Block", - "src": "43245:62:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9299, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9292, - "src": "43286:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9298, - "name": "_checkAndOptimizeEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9343, - "src": "43255:30:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 9300, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43255:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9301, - "nodeType": "ExpressionStatement", - "src": "43255:45:21" - } - ] - }, - "documentation": { - "id": 9290, - "nodeType": "StructuredDocumentation", - "src": "42837:255:21", - "text": "@dev Checks that the number of enabled tokens on a Credit Account\n does not violate the maximal enabled token limit and tries\n to disable unused tokens if it does\n @param creditAccount Account to check enabled tokens for" - }, - "functionSelector": "29df0b93", - "id": 9303, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 9296, - "kind": "modifierInvocation", - "modifierName": { - "id": 9295, - "name": "adaptersOrCreditFacadeOnly", - "nameLocations": ["43201:26:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7977, - "src": "43201:26:21" - }, - "nodeType": "ModifierInvocation", - "src": "43201:26:21" - } - ], - "name": "checkAndOptimizeEnabledTokens", - "nameLocation": "43106:29:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9294, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "43184:8:21" - }, - "parameters": { - "id": 9293, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9292, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "43144:13:21", - "nodeType": "VariableDeclaration", - "scope": 9303, - "src": "43136:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9291, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "43136:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "43135:23:21" - }, - "returnParameters": { - "id": 9297, - "nodeType": "ParameterList", - "parameters": [], - "src": "43245:0:21" - }, - "scope": 10549, - "src": "43097:210:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 9342, - "nodeType": "Block", - "src": "43444:490:21", - "statements": [ - { - "assignments": [9310], - "declarations": [ - { - "constant": false, - "id": 9310, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "43462:16:21", - "nodeType": "VariableDeclaration", - "scope": 9342, - "src": "43454:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9309, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "43454:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9314, - "initialValue": { - "baseExpression": { - "id": 9311, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "43481:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9313, - "indexExpression": { - "id": 9312, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9306, - "src": "43498:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "43481:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "43454:58:21" - }, - { - "assignments": [9316], - "declarations": [ - { - "constant": false, - "id": 9316, - "mutability": "mutable", - "name": "totalTokensEnabled", - "nameLocation": "43530:18:21", - "nodeType": "VariableDeclaration", - "scope": 9342, - "src": "43522:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9315, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "43522:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9320, - "initialValue": { - "arguments": [ - { - "id": 9318, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9310, - "src": "43570:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9317, - "name": "_calcEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9370, - "src": "43551:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 9319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43551:36:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "43522:65:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9321, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9316, - "src": "43602:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 9322, - "name": "maxAllowedEnabledTokenLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7841, - "src": "43623:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "43602:49:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9341, - "nodeType": "IfStatement", - "src": "43598:330:21", - "trueBody": { - "id": 9340, - "nodeType": "Block", - "src": "43653:275:21", - "statements": [ - { - "assignments": [9325], - "declarations": [ - { - "constant": false, - "id": 9325, - "mutability": "mutable", - "name": "maxIndex", - "nameLocation": "43675:8:21", - "nodeType": "VariableDeclaration", - "scope": 9340, - "src": "43667:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9324, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "43667:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9331, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 9327, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9310, - "src": "43699:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9326, - "name": "_getMaxIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10175, - "src": "43686:12:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint256)" - } - }, - "id": 9328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43686:30:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 9329, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "43719:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "43686:34:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "43667:53:21" - }, - { - "expression": { - "arguments": [ - { - "id": 9333, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9306, - "src": "43775:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9334, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9310, - "src": "43806:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9335, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9316, - "src": "43840:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "30", - "id": 9336, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "43876:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 9337, - "name": "maxIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9325, - "src": "43895:8:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9332, - "name": "_optimizeEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9453, - "src": "43735:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256,uint256,uint256)" - } - }, - "id": 9338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "43735:182:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9339, - "nodeType": "ExpressionStatement", - "src": "43735:182:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 9304, - "nodeType": "StructuredDocumentation", - "src": "43313:54:21", - "text": "@dev IMPLEMENTATION: checkAndOptimizeEnabledTokens" - }, - "id": 9343, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAndOptimizeEnabledTokens", - "nameLocation": "43381:30:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9307, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9306, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "43420:13:21", - "nodeType": "VariableDeclaration", - "scope": 9343, - "src": "43412:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9305, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "43412:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "43411:23:21" - }, - "returnParameters": { - "id": 9308, - "nodeType": "ParameterList", - "parameters": [], - "src": "43444:0:21" - }, - "scope": 10549, - "src": "43372:562:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 9369, - "nodeType": "Block", - "src": "44247:631:21", - "statements": [ - { - "id": 9368, - "nodeType": "UncheckedBlock", - "src": "44676:196:21", - "statements": [ - { - "body": { - "id": 9366, - "nodeType": "Block", - "src": "44729:133:21", - "statements": [ - { - "expression": { - "id": 9358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9354, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9349, - "src": "44747:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9355, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9346, - "src": "44769:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "hexValue": "31", - "id": 9356, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "44788:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "44769:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "44747:42:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9359, - "nodeType": "ExpressionStatement", - "src": "44747:42:21" - }, - { - "expression": { - "id": 9364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9360, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9346, - "src": "44807:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9363, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9361, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9346, - "src": "44826:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 9362, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "44846:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "44826:21:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "44807:40:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9365, - "nodeType": "ExpressionStatement", - "src": "44807:40:21" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9351, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9346, - "src": "44707:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 9352, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "44726:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "44707:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9367, - "nodeType": "WhileStatement", - "src": "44700:162:21" - } - ] - } - ] - }, - "documentation": { - "id": 9344, - "nodeType": "StructuredDocumentation", - "src": "43940:169:21", - "text": "@dev Calculates the number of enabled tokens, based on the\n provided token mask\n @param enabledTokenMask Bit mask encoding a set of enabled tokens" - }, - "id": 9370, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_calcEnabledTokens", - "nameLocation": "44123:18:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9346, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "44150:16:21", - "nodeType": "VariableDeclaration", - "scope": 9370, - "src": "44142:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "44142:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "44141:26:21" - }, - "returnParameters": { - "id": 9350, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9349, - "mutability": "mutable", - "name": "totalTokensEnabled", - "nameLocation": "44223:18:21", - "nodeType": "VariableDeclaration", - "scope": 9370, - "src": "44215:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9348, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "44215:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "44214:28:21" - }, - "scope": 10549, - "src": "44114:764:21", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 9452, - "nodeType": "Block", - "src": "45637:1156:21", - "statements": [ - { - "id": 9448, - "nodeType": "UncheckedBlock", - "src": "45911:828:21", - "statements": [ - { - "body": { - "id": 9446, - "nodeType": "Block", - "src": "45978:751:21", - "statements": [ - { - "assignments": [9392], - "declarations": [ - { - "constant": false, - "id": 9392, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "46004:9:21", - "nodeType": "VariableDeclaration", - "scope": 9446, - "src": "45996:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9391, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45996:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9396, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 9393, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "46016:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 9394, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9385, - "src": "46021:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46016:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "45996:26:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9397, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9375, - "src": "46044:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 9398, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9392, - "src": "46063:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46044:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "46076:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "46044:33:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9442, - "nodeType": "IfStatement", - "src": "46040:653:21", - "trueBody": { - "id": 9441, - "nodeType": "Block", - "src": "46079:614:21", - "statements": [ - { - "assignments": [9403, null], - "declarations": [ - { - "constant": false, - "id": 9403, - "mutability": "mutable", - "name": "token", - "nameLocation": "46110:5:21", - "nodeType": "VariableDeclaration", - "scope": 9441, - "src": "46102:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "46102:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - null - ], - "id": 9407, - "initialValue": { - "arguments": [ - { - "id": 9405, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9392, - "src": "46144:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9404, - "name": "collateralTokensByMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9931, - "src": "46121:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view returns (address,uint16)" - } - }, - "id": 9406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46121:33:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "46101:53:21" - }, - { - "assignments": [9409], - "declarations": [ - { - "constant": false, - "id": 9409, - "mutability": "mutable", - "name": "balance", - "nameLocation": "46184:7:21", - "nodeType": "VariableDeclaration", - "scope": 9441, - "src": "46176:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9408, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "46176:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9416, - "initialValue": { - "arguments": [ - { - "id": 9414, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9373, - "src": "46218:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 9411, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9403, - "src": "46201:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9410, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "46194:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 9412, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46194:13:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 9413, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "46208:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "46194:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 9415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46194:38:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "46176:56:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9417, - "name": "balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9409, - "src": "46259:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "hexValue": "31", - "id": 9418, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "46270:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "46259:12:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9440, - "nodeType": "IfStatement", - "src": "46255:420:21", - "trueBody": { - "id": 9439, - "nodeType": "Block", - "src": "46273:402:21", - "statements": [ - { - "expression": { - "id": 9422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9420, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9375, - "src": "46299:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "^=", - "rightHandSide": { - "id": 9421, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9392, - "src": "46319:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46299:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9423, - "nodeType": "ExpressionStatement", - "src": "46299:29:21" - }, - { - "expression": { - "id": 9425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "--", - "prefix": true, - "src": "46354:20:21", - "subExpression": { - "id": 9424, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9377, - "src": "46356:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9426, - "nodeType": "ExpressionStatement", - "src": "46354:20:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9427, - "name": "totalTokensEnabled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9377, - "src": "46433:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 9428, - "name": "maxAllowedEnabledTokenLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7841, - "src": "46455:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "46433:50:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9438, - "nodeType": "IfStatement", - "src": "46400:253:21", - "trueBody": { - "id": 9437, - "nodeType": "Block", - "src": "46510:143:21", - "statements": [ - { - "expression": { - "id": 9434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9430, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "46540:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9432, - "indexExpression": { - "id": 9431, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9373, - "src": "46557:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "46540:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9433, - "name": "enabledTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9375, - "src": "46574:16:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "46540:50:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9435, - "nodeType": "ExpressionStatement", - "src": "46540:50:21" - }, - { - "functionReturnParameters": 9383, - "id": 9436, - "nodeType": "Return", - "src": "46620:7:21" - } - ] - } - } - ] - } - } - ] - } - }, - { - "expression": { - "id": 9444, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "46711:3:21", - "subExpression": { - "id": 9443, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9385, - "src": "46713:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9445, - "nodeType": "ExpressionStatement", - "src": "46711:3:21" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9390, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9388, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9385, - "src": "45962:1:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 9389, - "name": "maxIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9381, - "src": "45966:8:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "45962:12:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9447, - "initializationExpression": { - "assignments": [9385], - "declarations": [ - { - "constant": false, - "id": 9385, - "mutability": "mutable", - "name": "i", - "nameLocation": "45948:1:21", - "nodeType": "VariableDeclaration", - "scope": 9447, - "src": "45940:9:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45940:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9387, - "initialValue": { - "id": 9386, - "name": "minIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9379, - "src": "45952:8:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "45940:20:21" - }, - "nodeType": "ForStatement", - "src": "45935:794:21" - } - ] - }, - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9449, - "name": "TooManyEnabledTokensException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11990, - "src": "46755:29:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9450, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "46755:31:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9451, - "nodeType": "RevertStatement", - "src": "46748:38:21" - } - ] - }, - "documentation": { - "id": 9371, - "nodeType": "StructuredDocumentation", - "src": "44884:548:21", - "text": "@dev Searches for tokens with zero balance among enabled tokens\n on a Credit Account and disables them, until the total number\n of enabled tokens is at maxAllowedEnabledTokenLength\n @param creditAccount The Credit Account to optimize\n @param enabledTokenMask Mask encoding the set of currentl enabled tokens\n @param totalTokensEnabled The current number of enabled tokens\n @param minIndex Inclusive lower bound of search range\n @param maxIndex Non-inclusive upper bound of search range" - }, - "id": 9453, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_optimizeEnabledTokens", - "nameLocation": "45446:22:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9382, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9373, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "45486:13:21", - "nodeType": "VariableDeclaration", - "scope": 9453, - "src": "45478:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9372, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "45478:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9375, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "45517:16:21", - "nodeType": "VariableDeclaration", - "scope": 9453, - "src": "45509:24:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9374, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45509:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9377, - "mutability": "mutable", - "name": "totalTokensEnabled", - "nameLocation": "45551:18:21", - "nodeType": "VariableDeclaration", - "scope": 9453, - "src": "45543:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9376, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45543:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9379, - "mutability": "mutable", - "name": "minIndex", - "nameLocation": "45587:8:21", - "nodeType": "VariableDeclaration", - "scope": 9453, - "src": "45579:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9378, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45579:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9381, - "mutability": "mutable", - "name": "maxIndex", - "nameLocation": "45613:8:21", - "nodeType": "VariableDeclaration", - "scope": 9453, - "src": "45605:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9380, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "45605:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "45468:159:21" - }, - "returnParameters": { - "id": 9383, - "nodeType": "ParameterList", - "parameters": [], - "src": "45637:0:21" - }, - "scope": 10549, - "src": "45437:1356:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12132], - "body": { - "id": 9475, - "nodeType": "Block", - "src": "47285:59:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9471, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9456, - "src": "47316:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9472, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9458, - "src": "47331:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9470, - "name": "_disableToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9513, - "src": "47302:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bool_$", - "typeString": "function (address,address) returns (bool)" - } - }, - "id": 9473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47302:35:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 9469, - "id": 9474, - "nodeType": "Return", - "src": "47295:42:21" - } - ] - }, - "documentation": { - "id": 9454, - "nodeType": "StructuredDocumentation", - "src": "46799:247:21", - "text": "@dev Disables a token on a credit account\n @notice Usually called by adapters to disable spent tokens during a multicall,\n but can also be called separately from the Credit Facade to remove\n unwanted tokens" - }, - "functionSelector": "0d8f9cee", - "id": 9476, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 9462, - "kind": "modifierInvocation", - "modifierName": { - "id": 9461, - "name": "whenNotPausedOrEmergency", - "nameLocations": ["47153:24:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8016, - "src": "47153:24:21" - }, - "nodeType": "ModifierInvocation", - "src": "47153:24:21" - }, - { - "id": 9464, - "kind": "modifierInvocation", - "modifierName": { - "id": 9463, - "name": "adaptersOrCreditFacadeOnly", - "nameLocations": ["47198:26:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7977, - "src": "47198:26:21" - }, - "nodeType": "ModifierInvocation", - "src": "47198:26:21" - }, - { - "id": 9466, - "kind": "modifierInvocation", - "modifierName": { - "id": 9465, - "name": "nonReentrant", - "nameLocations": ["47245:12:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7954, - "src": "47245:12:21" - }, - "nodeType": "ModifierInvocation", - "src": "47245:12:21" - } - ], - "name": "disableToken", - "nameLocation": "47060:12:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9460, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "47136:8:21" - }, - "parameters": { - "id": 9459, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9456, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "47081:13:21", - "nodeType": "VariableDeclaration", - "scope": 9476, - "src": "47073:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9455, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47073:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9458, - "mutability": "mutable", - "name": "token", - "nameLocation": "47104:5:21", - "nodeType": "VariableDeclaration", - "scope": 9476, - "src": "47096:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9457, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47096:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "47072:38:21" - }, - "returnParameters": { - "id": 9469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9468, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9476, - "src": "47275:4:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9467, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "47275:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "47274:6:21" - }, - "scope": 10549, - "src": "47051:293:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 9512, - "nodeType": "Block", - "src": "47508:370:21", - "statements": [ - { - "assignments": [9487], - "declarations": [ - { - "constant": false, - "id": 9487, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "47662:9:21", - "nodeType": "VariableDeclaration", - "scope": 9512, - "src": "47654:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9486, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "47654:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9491, - "initialValue": { - "arguments": [ - { - "id": 9489, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9481, - "src": "47688:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9488, - "name": "tokenMasksMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10106, - "src": "47674:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 9490, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "47674:20:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "47654:40:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 9492, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "47708:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9494, - "indexExpression": { - "id": 9493, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9479, - "src": "47725:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "47708:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 9495, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9487, - "src": "47742:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "47708:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9497, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "47755:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "47708:48:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9511, - "nodeType": "IfStatement", - "src": "47704:168:21", - "trueBody": { - "id": 9510, - "nodeType": "Block", - "src": "47758:114:21", - "statements": [ - { - "expression": { - "id": 9504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9499, - "name": "enabledTokensMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7904, - "src": "47772:16:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 9501, - "indexExpression": { - "id": 9500, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9479, - "src": "47789:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "47772:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "&=", - "rightHandSide": { - "id": 9503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "~", - "prefix": true, - "src": "47807:10:21", - "subExpression": { - "id": 9502, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9487, - "src": "47808:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "47772:45:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9505, - "nodeType": "ExpressionStatement", - "src": "47772:45:21" - }, - { - "expression": { - "id": 9508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9506, - "name": "wasChanged", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9484, - "src": "47844:10:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 9507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "47857:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "47844:17:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9509, - "nodeType": "ExpressionStatement", - "src": "47844:17:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 9477, - "nodeType": "StructuredDocumentation", - "src": "47350:37:21", - "text": "@dev IMPLEMENTATION: disableToken" - }, - "id": 9513, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_disableToken", - "nameLocation": "47401:13:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9479, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "47423:13:21", - "nodeType": "VariableDeclaration", - "scope": 9513, - "src": "47415:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9478, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47415:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9481, - "mutability": "mutable", - "name": "token", - "nameLocation": "47446:5:21", - "nodeType": "VariableDeclaration", - "scope": 9513, - "src": "47438:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "47438:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "47414:38:21" - }, - "returnParameters": { - "id": 9485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9484, - "mutability": "mutable", - "name": "wasChanged", - "nameLocation": "47492:10:21", - "nodeType": "VariableDeclaration", - "scope": 9513, - "src": "47487:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9483, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "47487:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "47486:17:21" - }, - "scope": 10549, - "src": "47392:486:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12354], - "body": { - "id": 9543, - "nodeType": "Block", - "src": "49045:219:21", - "statements": [ - { - "assignments": [9526], - "declarations": [ - { - "constant": false, - "id": 9526, - "mutability": "mutable", - "name": "pausable", - "nameLocation": "49060:8:21", - "nodeType": "VariableDeclaration", - "scope": 9543, - "src": "49055:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9525, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "49055:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 9529, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9527, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17130, - "src": "49071:6:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 9528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "49071:8:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "49055:24:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9530, - "name": "pausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9526, - "src": "49107:8:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "baseExpression": { - "id": 9531, - "name": "canLiquidateWhilePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7927, - "src": "49119:23:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 9533, - "indexExpression": { - "id": 9532, - "name": "caller", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9516, - "src": "49143:6:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "49119:31:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "49107:43:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9540, - "nodeType": "IfStatement", - "src": "49103:116:21", - "trueBody": { - "id": 9539, - "nodeType": "Block", - "src": "49152:67:21", - "statements": [ - { - "expression": { - "id": 9537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9535, - "name": "emergencyLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7836, - "src": "49166:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9536, - "name": "state", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9518, - "src": "49189:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "49166:28:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9538, - "nodeType": "ExpressionStatement", - "src": "49166:28:21" - } - ] - } - }, - { - "expression": { - "id": 9541, - "name": "pausable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9526, - "src": "49235:8:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 9524, - "id": 9542, - "nodeType": "Return", - "src": "49228:15:21" - } - ] - }, - "documentation": { - "id": 9514, - "nodeType": "StructuredDocumentation", - "src": "47884:1015:21", - "text": "@dev Checks if the contract is paused; if true, checks that the caller is emergency liquidator\n and temporarily enables a special emergencyLiquidator mode to allow liquidation.\n @notice Some whenNotPausedOrEmergency functions in CreditManager need to be executable to perform\n multicalls during liquidations. emergencyLiquidation mode is enabled temporarily\n (for the span of a single multicall) to override\n the paused state and allow a special privileged role to liquidate unhealthy positions, if the\n contracts are paused due to an emergency.\n @notice To save gas, emergency liquidation setting is skipped when the CM is not paused.\n @param caller Address of CreditFacade caller\n @param state True to enable and false to disable emergencyLiqudation mde\n @return True if contract paused otherwise false. If the contract is not paused, there is no need\n to call this function to disable the emergencyLiquidation mode." - }, - "functionSelector": "eb99c2bf", - "id": 9544, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 9521, - "kind": "modifierInvocation", - "modifierName": { - "id": 9520, - "name": "creditFacadeOnly", - "nameLocations": ["48989:16:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7990, - "src": "48989:16:21" - }, - "nodeType": "ModifierInvocation", - "src": "48989:16:21" - } - ], - "name": "checkEmergencyPausable", - "nameLocation": "48913:22:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9516, - "mutability": "mutable", - "name": "caller", - "nameLocation": "48944:6:21", - "nodeType": "VariableDeclaration", - "scope": 9544, - "src": "48936:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9515, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "48936:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9518, - "mutability": "mutable", - "name": "state", - "nameLocation": "48957:5:21", - "nodeType": "VariableDeclaration", - "scope": 9544, - "src": "48952:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9517, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "48952:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "48935:28:21" - }, - "returnParameters": { - "id": 9524, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9523, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 9544, - "src": "49035:4:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9522, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "49035:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "49034:6:21" - }, - "scope": 10549, - "src": "48904:360:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 9609, - "nodeType": "Block", - "src": "49972:1688:21", - "statements": [ - { - "assignments": [9557], - "declarations": [ - { - "constant": false, - "id": 9557, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "50152:9:21", - "nodeType": "VariableDeclaration", - "scope": 9609, - "src": "50144:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9556, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "50144:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9559, - "initialValue": { - "hexValue": "32", - "id": 9558, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "50164:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "VariableDeclarationStatement", - "src": "50144:21:21" - }, - { - "body": { - "id": 9607, - "nodeType": "Block", - "src": "50416:1238:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9567, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9563, - "name": "enabledTokensMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9553, - "src": "50550:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 9564, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9557, - "src": "50570:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "50550:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 9566, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "50583:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "50550:34:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9600, - "nodeType": "IfStatement", - "src": "50546:918:21", - "trueBody": { - "id": 9599, - "nodeType": "Block", - "src": "50586:878:21", - "statements": [ - { - "assignments": [9569, null], - "declarations": [ - { - "constant": false, - "id": 9569, - "mutability": "mutable", - "name": "token", - "nameLocation": "50613:5:21", - "nodeType": "VariableDeclaration", - "scope": 9599, - "src": "50605:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9568, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "50605:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - null - ], - "id": 9573, - "initialValue": { - "arguments": [ - { - "id": 9571, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9557, - "src": "50647:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9570, - "name": "collateralTokensByMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9931, - "src": "50624:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view returns (address,uint16)" - } - }, - "id": 9572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "50624:33:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "50604:53:21" - }, - { - "assignments": [9575], - "declarations": [ - { - "constant": false, - "id": 9575, - "mutability": "mutable", - "name": "amount", - "nameLocation": "50696:6:21", - "nodeType": "VariableDeclaration", - "scope": 9599, - "src": "50688:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9574, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "50688:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9582, - "initialValue": { - "arguments": [ - { - "id": 9580, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9547, - "src": "50729:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 9577, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9569, - "src": "50712:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9576, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17905, - "src": "50705:6:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$17905_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 9578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "50705:13:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 9579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "50719:9:21", - "memberName": "balanceOf", - "nodeType": "MemberAccess", - "referencedDeclaration": 17862, - "src": "50705:23:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 9581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "50705:38:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "50688:55:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9583, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9575, - "src": "50778:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "31", - "id": 9584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "50787:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "50778:10:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9598, - "nodeType": "IfStatement", - "src": "50774:676:21", - "trueBody": { - "id": 9597, - "nodeType": "Block", - "src": "50790:660:21", - "statements": [ - { - "id": 9596, - "nodeType": "UncheckedBlock", - "src": "51125:307:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9587, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9547, - "src": "51209:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9588, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9569, - "src": "51252:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9589, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9549, - "src": "51287:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9590, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9575, - "src": "51319:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 9591, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "51328:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "51319:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9593, - "name": "convertWETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9551, - "src": "51359:11:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 9586, - "name": "_safeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9659, - "src": "51161:18:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,address,uint256,bool)" - } - }, - "id": 9594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "51161:235:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9595, - "nodeType": "ExpressionStatement", - "src": "51161:235:21" - } - ] - } - ] - } - } - ] - } - }, - { - "expression": { - "id": 9605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9601, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9557, - "src": "51604:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9602, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9557, - "src": "51616:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "31", - "id": 9603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "51629:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "51616:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "51604:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9606, - "nodeType": "ExpressionStatement", - "src": "51604:26:21" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9562, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9560, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9557, - "src": "50384:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 9561, - "name": "enabledTokensMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9553, - "src": "50397:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "50384:30:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9608, - "nodeType": "WhileStatement", - "src": "50377:1277:21" - } - ] - }, - "documentation": { - "id": 9545, - "nodeType": "StructuredDocumentation", - "src": "49309:504:21", - "text": "@dev Transfers all enabled assets from a Credit Account to the \"to\" address\n @param creditAccount Credit Account to transfer assets from\n @param to Recipient address\n @param convertWETH Whether WETH must be converted to ETH before sending\n @param enabledTokensMask A bit mask encoding enabled tokens. All of the tokens included\n in the mask will be transferred. If any tokens need to be skipped, they must be\n excluded from the mask beforehand." - }, - "id": 9610, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferAssetsTo", - "nameLocation": "49827:17:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9554, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9547, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "49862:13:21", - "nodeType": "VariableDeclaration", - "scope": 9610, - "src": "49854:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9546, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "49854:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9549, - "mutability": "mutable", - "name": "to", - "nameLocation": "49893:2:21", - "nodeType": "VariableDeclaration", - "scope": 9610, - "src": "49885:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "49885:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9551, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "49910:11:21", - "nodeType": "VariableDeclaration", - "scope": 9610, - "src": "49905:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9550, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "49905:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9553, - "mutability": "mutable", - "name": "enabledTokensMask", - "nameLocation": "49939:17:21", - "nodeType": "VariableDeclaration", - "scope": 9610, - "src": "49931:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9552, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "49931:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "49844:118:21" - }, - "returnParameters": { - "id": 9555, - "nodeType": "ParameterList", - "parameters": [], - "src": "49972:0:21" - }, - "scope": 10549, - "src": "49818:1842:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 9658, - "nodeType": "Block", - "src": "52161:408:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9628, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9624, - "name": "convertToETH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9621, - "src": "52175:12:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9625, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9615, - "src": "52191:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 9626, - "name": "wethAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7875, - "src": "52200:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "52191:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "52175:36:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9656, - "nodeType": "Block", - "src": "52464:99:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9651, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9615, - "src": "52521:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9652, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9617, - "src": "52528:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9653, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9619, - "src": "52532:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 9648, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9613, - "src": "52493:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9647, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "52478:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 9649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52478:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 9650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52508:12:21", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11023, - "src": "52478:42:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 9654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52478:61:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9655, - "nodeType": "ExpressionStatement", - "src": "52478:61:21" - } - ] - }, - "id": 9657, - "nodeType": "IfStatement", - "src": "52171:392:21", - "trueBody": { - "id": 9646, - "nodeType": "Block", - "src": "52213:245:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 9633, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9615, - "src": "52287:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9634, - "name": "wethGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7878, - "src": "52310:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9635, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9619, - "src": "52339:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 9630, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9613, - "src": "52242:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9629, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "52227:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 9631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52227:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 9632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52257:12:21", - "memberName": "safeTransfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 11023, - "src": "52227:42:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256) external" - } - }, - "id": 9636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52227:132:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9637, - "nodeType": "ExpressionStatement", - "src": "52227:132:21" - }, - { - "expression": { - "arguments": [ - { - "id": 9642, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9617, - "src": "52423:2:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 9643, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9619, - "src": "52427:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 9639, - "name": "wethGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7878, - "src": "52399:11:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9638, - "name": "IWETHGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12994, - "src": "52386:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IWETHGateway_$12994_$", - "typeString": "type(contract IWETHGateway)" - } - }, - "id": 9640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52386:25:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IWETHGateway_$12994", - "typeString": "contract IWETHGateway" - } - }, - "id": 9641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "52412:10:21", - "memberName": "unwrapWETH", - "nodeType": "MemberAccess", - "referencedDeclaration": 12993, - "src": "52386:36:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256) external" - } - }, - "id": 9644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52386:48:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9645, - "nodeType": "ExpressionStatement", - "src": "52386:48:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 9611, - "nodeType": "StructuredDocumentation", - "src": "51666:322:21", - "text": "@dev Requests the Credit Account to transfer a token to another address\n Able to unwrap WETH before sending, if requested\n @param creditAccount Address of the sender Credit Account\n @param token Address of the token\n @param to Recipient address\n @param amount Amount to transfer" - }, - "id": 9659, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_safeTokenTransfer", - "nameLocation": "52002:18:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9622, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9613, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "52038:13:21", - "nodeType": "VariableDeclaration", - "scope": 9659, - "src": "52030:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9612, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52030:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9615, - "mutability": "mutable", - "name": "token", - "nameLocation": "52069:5:21", - "nodeType": "VariableDeclaration", - "scope": 9659, - "src": "52061:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9614, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52061:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9617, - "mutability": "mutable", - "name": "to", - "nameLocation": "52092:2:21", - "nodeType": "VariableDeclaration", - "scope": 9659, - "src": "52084:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9616, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52084:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9619, - "mutability": "mutable", - "name": "amount", - "nameLocation": "52112:6:21", - "nodeType": "VariableDeclaration", - "scope": 9659, - "src": "52104:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9618, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "52104:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9621, - "mutability": "mutable", - "name": "convertToETH", - "nameLocation": "52133:12:21", - "nodeType": "VariableDeclaration", - "scope": 9659, - "src": "52128:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 9620, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "52128:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "52020:131:21" - }, - "returnParameters": { - "id": 9623, - "nodeType": "ParameterList", - "parameters": [], - "src": "52161:0:21" - }, - "scope": 10549, - "src": "51993:576:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 9692, - "nodeType": "Block", - "src": "52896:225:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9667, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9662, - "src": "52910:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9670, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "52930:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 9669, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "52922:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9668, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52922:7:21", - "typeDescriptions": {} - } - }, - "id": 9671, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52922:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "52910:22:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 9673, - "name": "creditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7855, - "src": "52936:14:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 9675, - "indexExpression": { - "id": 9674, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9662, - "src": "52951:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "52936:24:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9678, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "52972:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 9677, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "52964:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9676, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52964:7:21", - "typeDescriptions": {} - } - }, - "id": 9679, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52964:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "52936:38:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "52910:64:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9685, - "nodeType": "IfStatement", - "src": "52906:134:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9682, - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11966, - "src": "52995:43:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "52995:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9684, - "nodeType": "RevertStatement", - "src": "52988:52:21" - } - }, - { - "expression": { - "id": 9690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 9686, - "name": "creditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7855, - "src": "53062:14:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 9688, - "indexExpression": { - "id": 9687, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9662, - "src": "53077:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "53062:24:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9689, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9664, - "src": "53089:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "53062:40:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 9691, - "nodeType": "ExpressionStatement", - "src": "53062:40:21" - } - ] - }, - "documentation": { - "id": 9660, - "nodeType": "StructuredDocumentation", - "src": "52575:223:21", - "text": "@dev Sets the Credit Account owner while checking that they do not\n have an account already\n @param borrower The new owner of the Credit Account\n @param creditAccount The Credit Account address" - }, - "id": 9693, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_safeCreditAccountSet", - "nameLocation": "52812:21:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9665, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9662, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "52842:8:21", - "nodeType": "VariableDeclaration", - "scope": 9693, - "src": "52834:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9661, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52834:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9664, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "52860:13:21", - "nodeType": "VariableDeclaration", - "scope": 9693, - "src": "52852:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9663, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "52852:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "52833:41:21" - }, - "returnParameters": { - "id": 9666, - "nodeType": "ParameterList", - "parameters": [], - "src": "52896:0:21" - }, - "scope": 10549, - "src": "52803:318:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12161], - "body": { - "id": 9861, - "nodeType": "Block", - "src": "54641:4571:21", - "statements": [ - { - "expression": { - "id": 9728, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9715, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "54823:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9716, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "54850:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9717, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "54893:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9718, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9701, - "src": "54922:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "54893:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9720, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "54892:45:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9721, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "54956:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9722, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "54962:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "54956:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "54892:81:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9724, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "54891:83:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9725, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "54989:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "54891:115:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "54850:156:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "54823:183:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9729, - "nodeType": "ExpressionStatement", - "src": "54823:183:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9743, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 9738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 9733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9730, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9699, - "src": "55047:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 9731, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "55068:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 9732, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "55082:17:21", - "memberName": "LIQUIDATE_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11938, - "src": "55068:31:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "55047:52:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 9737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9734, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9699, - "src": "55115:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 9735, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "55136:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 9736, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "55150:25:21", - "memberName": "LIQUIDATE_EXPIRED_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11939, - "src": "55136:39:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "55115:60:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "55047:128:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 9742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9739, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9699, - "src": "55191:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 9740, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "55212:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 9741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "55226:16:21", - "memberName": "LIQUIDATE_PAUSED", - "nodeType": "MemberAccess", - "referencedDeclaration": 11940, - "src": "55212:30:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "55191:51:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "55047:195:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9859, - "nodeType": "Block", - "src": "58694:512:21", - "statements": [ - { - "id": 9858, - "nodeType": "UncheckedBlock", - "src": "59090:106:21", - "statements": [ - { - "expression": { - "id": 9856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9852, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9711, - "src": "59118:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9853, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "59127:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9854, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "59142:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "59127:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "59118:50:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9857, - "nodeType": "ExpressionStatement", - "src": "59118:50:21" - } - ] - } - ] - }, - "id": 9860, - "nodeType": "IfStatement", - "src": "55030:4176:21", - "trueBody": { - "id": 9851, - "nodeType": "Block", - "src": "55253:3435:21", - "statements": [ - { - "assignments": [9745], - "declarations": [ - { - "constant": false, - "id": 9745, - "mutability": "mutable", - "name": "totalFunds", - "nameLocation": "55307:10:21", - "nodeType": "VariableDeclaration", - "scope": 9851, - "src": "55299:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9744, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "55299:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9746, - "nodeType": "VariableDeclarationStatement", - "src": "55299:18:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 9750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9747, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9699, - "src": "56263:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 9748, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "56284:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 9749, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "56298:17:21", - "memberName": "LIQUIDATE_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11938, - "src": "56284:31:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "56263:52:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "id": 9775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9772, - "name": "closureActionType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9699, - "src": "56688:17:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 9773, - "name": "ClosureAction", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11941, - "src": "56709:13:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_enum$_ClosureAction_$11941_$", - "typeString": "type(enum ClosureAction)" - } - }, - "id": 9774, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "56723:25:21", - "memberName": "LIQUIDATE_EXPIRED_ACCOUNT", - "nodeType": "MemberAccess", - "referencedDeclaration": 11939, - "src": "56709:39:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "src": "56688:60:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9811, - "nodeType": "Block", - "src": "57125:243:21", - "statements": [ - { - "expression": { - "id": 9799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9797, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "57174:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9798, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "57187:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "57174:23:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9800, - "nodeType": "ExpressionStatement", - "src": "57174:23:21" - }, - { - "expression": { - "id": 9809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9801, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "57229:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9802, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "57266:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9803, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "57279:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9804, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "57285:14:21", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 7799, - "src": "57279:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "57266:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9806, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "57265:35:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9807, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "57323:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "57265:75:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "57229:111:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9810, - "nodeType": "ExpressionStatement", - "src": "57229:111:21" - } - ] - }, - "id": 9812, - "nodeType": "IfStatement", - "src": "56667:701:21", - "trueBody": { - "id": 9796, - "nodeType": "Block", - "src": "56763:356:21", - "statements": [ - { - "expression": { - "id": 9784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9776, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "56821:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9783, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9777, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "56855:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9778, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "56868:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9779, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56874:26:21", - "memberName": "liquidationDiscountExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7808, - "src": "56868:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56855:45:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9781, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "56854:47:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9782, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "56924:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56854:87:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56821:120:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9785, - "nodeType": "ExpressionStatement", - "src": "56821:120:21" - }, - { - "expression": { - "id": 9794, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9786, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "56973:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9793, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9787, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "57010:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9788, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "57023:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9789, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "57029:21:21", - "memberName": "feeLiquidationExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7805, - "src": "57023:27:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "57010:40:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9791, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "57009:42:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9792, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "57074:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "57009:82:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56973:118:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9795, - "nodeType": "ExpressionStatement", - "src": "56973:118:21" - } - ] - } - }, - "id": 9813, - "nodeType": "IfStatement", - "src": "56259:1109:21", - "trueBody": { - "id": 9771, - "nodeType": "Block", - "src": "56317:344:21", - "statements": [ - { - "expression": { - "id": 9759, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9751, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "56377:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9758, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9752, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "56411:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9753, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "56424:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9754, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56430:19:21", - "memberName": "liquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 7802, - "src": "56424:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56411:38:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9756, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "56410:40:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9757, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "56473:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56410:80:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56377:113:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9760, - "nodeType": "ExpressionStatement", - "src": "56377:113:21" - }, - { - "expression": { - "id": 9769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9761, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "56522:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9768, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9762, - "name": "totalValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9696, - "src": "56559:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 9763, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "56572:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9764, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "56578:14:21", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 7799, - "src": "56572:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56559:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9766, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "56558:35:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9767, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "56616:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "56558:75:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "56522:111:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9770, - "nodeType": "ExpressionStatement", - "src": "56522:111:21" - } - ] - } - }, - { - "id": 9850, - "nodeType": "UncheckedBlock", - "src": "58144:534:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9814, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "58176:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 9815, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "58189:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58176:25:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9830, - "nodeType": "Block", - "src": "58309:79:21", - "statements": [ - { - "expression": { - "id": 9828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9826, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "58331:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9827, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "58346:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58331:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9829, - "nodeType": "ExpressionStatement", - "src": "58331:25:21" - } - ] - }, - "id": 9831, - "nodeType": "IfStatement", - "src": "58172:216:21", - "trueBody": { - "id": 9825, - "nodeType": "Block", - "src": "58203:100:21", - "statements": [ - { - "expression": { - "id": 9823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9817, - "name": "remainingFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9709, - "src": "58225:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9818, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "58242:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9819, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "58255:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58242:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 9821, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "58270:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "58242:29:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58225:46:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9824, - "nodeType": "ExpressionStatement", - "src": "58225:46:21" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9832, - "name": "totalFunds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9745, - "src": "58410:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 9833, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "58424:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58410:40:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9848, - "nodeType": "Block", - "src": "58562:102:21", - "statements": [ - { - "expression": { - "id": 9846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9842, - "name": "loss", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9713, - "src": "58584:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9845, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9843, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "58591:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9844, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "58620:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58591:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58584:48:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9847, - "nodeType": "ExpressionStatement", - "src": "58584:48:21" - } - ] - }, - "id": 9849, - "nodeType": "IfStatement", - "src": "58406:258:21", - "trueBody": { - "id": 9841, - "nodeType": "Block", - "src": "58452:104:21", - "statements": [ - { - "expression": { - "id": 9839, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9835, - "name": "profit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9711, - "src": "58474:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9836, - "name": "amountToPool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9707, - "src": "58483:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9837, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9703, - "src": "58498:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58483:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "58474:50:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9840, - "nodeType": "ExpressionStatement", - "src": "58474:50:21" - } - ] - } - } - ] - } - ] - } - } - ] - }, - "documentation": { - "id": 9694, - "nodeType": "StructuredDocumentation", - "src": "53157:1101:21", - "text": "@dev Computes amounts that must be sent to various addresses before closing an account\n @param totalValue Credit Accounts total value in underlying\n @param closureActionType Type of account closure\n * CLOSE_ACCOUNT: The account is healthy and is closed normally\n * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt\n * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium)\n * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)\n @param borrowedAmount Credit Account's debt principal\n @param borrowedAmountWithInterest Credit Account's debt principal + interest\n @return amountToPool Amount of underlying to be sent to the pool\n @return remainingFunds Amount of underlying to be sent to the borrower (only applicable to liquidations)\n @return profit Protocol's profit from fees (if any)\n @return loss Protocol's loss from bad debt (if any)" - }, - "functionSelector": "5063524a", - "id": 9862, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "calcClosePayments", - "nameLocation": "54272:17:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9705, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "54477:8:21" - }, - "parameters": { - "id": 9704, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9696, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "54307:10:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54299:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9695, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54299:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9699, - "mutability": "mutable", - "name": "closureActionType", - "nameLocation": "54341:17:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54327:31:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "typeName": { - "id": 9698, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 9697, - "name": "ClosureAction", - "nameLocations": ["54327:13:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11941, - "src": "54327:13:21" - }, - "referencedDeclaration": 11941, - "src": "54327:13:21", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9701, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "54376:14:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54368:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9700, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54368:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9703, - "mutability": "mutable", - "name": "borrowedAmountWithInterest", - "nameLocation": "54408:26:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54400:34:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9702, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54400:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "54289:151:21" - }, - "returnParameters": { - "id": 9714, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9707, - "mutability": "mutable", - "name": "amountToPool", - "nameLocation": "54524:12:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54516:20:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9706, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54516:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9709, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "54558:14:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54550:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54550:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9711, - "mutability": "mutable", - "name": "profit", - "nameLocation": "54594:6:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54586:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9710, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54586:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9713, - "mutability": "mutable", - "name": "loss", - "nameLocation": "54622:4:21", - "nodeType": "VariableDeclaration", - "scope": 9862, - "src": "54614:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9712, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "54614:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "54502:134:21" - }, - "scope": 10549, - "src": "54263:4949:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12199], - "body": { - "id": 9878, - "nodeType": "Block", - "src": "59487:228:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9875, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 9873, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "59700:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 9874, - "name": "id", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9865, - "src": "59705:2:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "59700:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9872, - "name": "collateralTokensByMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9931, - "src": "59677:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view returns (address,uint16)" - } - }, - "id": 9876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "59677:31:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "functionReturnParameters": 9871, - "id": 9877, - "nodeType": "Return", - "src": "59670:38:21" - } - ] - }, - "documentation": { - "id": 9863, - "nodeType": "StructuredDocumentation", - "src": "59218:133:21", - "text": "@dev Returns the collateral token at requested index and its liquidation threshold\n @param id The index of token to return" - }, - "functionSelector": "172c48c7", - "id": 9879, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "collateralTokens", - "nameLocation": "59365:16:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 9866, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9865, - "mutability": "mutable", - "name": "id", - "nameLocation": "59390:2:21", - "nodeType": "VariableDeclaration", - "scope": 9879, - "src": "59382:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9864, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "59382:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "59381:12:21" - }, - "returnParameters": { - "id": 9871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9868, - "mutability": "mutable", - "name": "token", - "nameLocation": "59447:5:21", - "nodeType": "VariableDeclaration", - "scope": 9879, - "src": "59439:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9867, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "59439:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9870, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "59461:20:21", - "nodeType": "VariableDeclaration", - "scope": 9879, - "src": "59454:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 9869, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "59454:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "59438:44:21" - }, - "scope": 10549, - "src": "59356:359:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12209], - "body": { - "id": 9930, - "nodeType": "Block", - "src": "60036:960:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9890, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9882, - "src": "60119:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 9891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "60132:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "60119:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 9928, - "nodeType": "Block", - "src": "60252:738:21", - "statements": [ - { - "assignments": [9904], - "declarations": [ - { - "constant": false, - "id": 9904, - "mutability": "mutable", - "name": "collateralTokenCompressed", - "nameLocation": "60477:25:21", - "nodeType": "VariableDeclaration", - "scope": 9928, - "src": "60469:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9903, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "60469:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9908, - "initialValue": { - "baseExpression": { - "id": 9905, - "name": "collateralTokensCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7886, - "src": "60505:26:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 9907, - "indexExpression": { - "id": 9906, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9882, - "src": "60549:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "60505:67:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "60469:103:21" - }, - { - "expression": { - "id": 9917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9909, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9886, - "src": "60793:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 9914, - "name": "collateralTokenCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9904, - "src": "60817:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 9913, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "60809:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 9912, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "60809:7:21", - "typeDescriptions": {} - } - }, - "id": 9915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60809:34:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 9911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "60801:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9910, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "60801:7:21", - "typeDescriptions": {} - } - }, - "id": 9916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60801:43:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "60793:51:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 9918, - "nodeType": "ExpressionStatement", - "src": "60793:51:21" - }, - { - "expression": { - "id": 9926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9919, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "60871:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9920, - "name": "collateralTokenCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9904, - "src": "60895:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "id": 9921, - "name": "ADDR_BIT_SIZE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7788, - "src": "60924:13:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "60895:42:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9923, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "60894:44:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "60956:8:21", - "memberName": "toUint16", - "nodeType": "MemberAccess", - "referencedDeclaration": 19507, - "src": "60894:70:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint16_$bound_to$_t_uint256_$", - "typeString": "function (uint256) pure returns (uint16)" - } - }, - "id": 9925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "60894:72:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "60871:95:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 9927, - "nodeType": "ExpressionStatement", - "src": "60871:95:21" - } - ] - }, - "id": 9929, - "nodeType": "IfStatement", - "src": "60115:875:21", - "trueBody": { - "id": 9902, - "nodeType": "Block", - "src": "60135:111:21", - "statements": [ - { - "expression": { - "id": 9895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9893, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9886, - "src": "60149:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 9894, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "60157:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "60149:18:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 9896, - "nodeType": "ExpressionStatement", - "src": "60149:18:21" - }, - { - "expression": { - "id": 9900, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9897, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9888, - "src": "60194:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 9898, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "60217:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 9899, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "60223:12:21", - "memberName": "ltUnderlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 7815, - "src": "60217:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "60194:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 9901, - "nodeType": "ExpressionStatement", - "src": "60194:41:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 9880, - "nodeType": "StructuredDocumentation", - "src": "59721:149:21", - "text": "@dev Returns the collateral token with requested mask and its liquidationThreshold\n @param tokenMask Token mask corresponding to the token" - }, - "functionSelector": "e75538c7", - "id": 9931, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "collateralTokensByMask", - "nameLocation": "59884:22:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9884, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "59962:8:21" - }, - "parameters": { - "id": 9883, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9882, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "59915:9:21", - "nodeType": "VariableDeclaration", - "scope": 9931, - "src": "59907:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9881, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "59907:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "59906:19:21" - }, - "returnParameters": { - "id": 9889, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9886, - "mutability": "mutable", - "name": "token", - "nameLocation": "59996:5:21", - "nodeType": "VariableDeclaration", - "scope": 9931, - "src": "59988:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9885, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "59988:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9888, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "60010:20:21", - "nodeType": "VariableDeclaration", - "scope": 9931, - "src": "60003:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 9887, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "60003:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "59987:44:21" - }, - "scope": 10549, - "src": "59875:1121:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12140], - "body": { - "id": 9956, - "nodeType": "Block", - "src": "61273:148:21", - "statements": [ - { - "expression": { - "id": 9944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9940, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9938, - "src": "61283:6:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 9941, - "name": "creditAccounts", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7855, - "src": "61292:14:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 9943, - "indexExpression": { - "id": 9942, - "name": "borrower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9934, - "src": "61307:8:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "61292:24:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "61283:33:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 9945, - "nodeType": "ExpressionStatement", - "src": "61283:33:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 9951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9946, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9938, - "src": "61343:6:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 9949, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "61361:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 9948, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "61353:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 9947, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "61353:7:21", - "typeDescriptions": {} - } - }, - "id": 9950, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "61353:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "61343:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 9955, - "nodeType": "IfStatement", - "src": "61339:62:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 9952, - "name": "HasNoOpenedAccountException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11981, - "src": "61372:27:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 9953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "61372:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9954, - "nodeType": "RevertStatement", - "src": "61365:36:21" - } - } - ] - }, - "documentation": { - "id": 9932, - "nodeType": "StructuredDocumentation", - "src": "61002:132:21", - "text": "@dev Returns the address of a borrower's Credit Account, or reverts if there is none.\n @param borrower Borrower's address" - }, - "functionSelector": "e958b704", - "id": 9957, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountOrRevert", - "nameLocation": "61148:24:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9936, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "61227:8:21" - }, - "parameters": { - "id": 9935, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9934, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "61181:8:21", - "nodeType": "VariableDeclaration", - "scope": 9957, - "src": "61173:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9933, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "61173:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "61172:18:21" - }, - "returnParameters": { - "id": 9939, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9938, - "mutability": "mutable", - "name": "result", - "nameLocation": "61261:6:21", - "nodeType": "VariableDeclaration", - "scope": 9957, - "src": "61253:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9937, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "61253:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "61252:16:21" - }, - "scope": 10549, - "src": "61139:282:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12173], - "body": { - "id": 10009, - "nodeType": "Block", - "src": "62064:919:21", - "statements": [ - { - "assignments": [9971], - "declarations": [ - { - "constant": false, - "id": 9971, - "mutability": "mutable", - "name": "cumulativeIndexAtOpen_RAY", - "nameLocation": "62082:25:21", - "nodeType": "VariableDeclaration", - "scope": 10009, - "src": "62074:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9970, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "62074:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9972, - "nodeType": "VariableDeclarationStatement", - "src": "62074:33:21" - }, - { - "assignments": [9974], - "declarations": [ - { - "constant": false, - "id": 9974, - "mutability": "mutable", - "name": "cumulativeIndexNow_RAY", - "nameLocation": "62125:22:21", - "nodeType": "VariableDeclaration", - "scope": 10009, - "src": "62117:30:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9973, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "62117:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 9975, - "nodeType": "VariableDeclarationStatement", - "src": "62117:30:21" - }, - { - "expression": { - "id": 9983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 9976, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9964, - "src": "62171:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9977, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9971, - "src": "62199:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 9978, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9974, - "src": "62238:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9979, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "62157:113:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 9981, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9960, - "src": "62301:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 9980, - "name": "_getCreditAccountParameters", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10047, - "src": "62273:27:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256,uint256)" - } - }, - "id": 9982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "62273:42:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256,uint256)" - } - }, - "src": "62157:158:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 9984, - "nodeType": "ExpressionStatement", - "src": "62157:158:21" - }, - { - "expression": { - "id": 9992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9985, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9966, - "src": "62555:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9988, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9986, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9964, - "src": "62597:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 9987, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9974, - "src": "62614:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62597:39:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9989, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "62596:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 9990, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9971, - "src": "62652:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62596:81:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62555:122:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 9993, - "nodeType": "ExpressionStatement", - "src": "62555:122:21" - }, - { - "expression": { - "id": 10007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 9994, - "name": "borrowedAmountWithInterestAndFees", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9968, - "src": "62758:33:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9995, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9966, - "src": "62806:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10005, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 9998, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 9996, - "name": "borrowedAmountWithInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9966, - "src": "62849:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 9997, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9964, - "src": "62878:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62849:43:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 9999, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "62848:45:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "expression": { - "id": 10000, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "62912:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10001, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "62918:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "62912:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "62848:81:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 10003, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "62847:83:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 10004, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "62945:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "62847:115:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62806:156:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "62758:204:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10008, - "nodeType": "ExpressionStatement", - "src": "62758:204:21" - } - ] - }, - "documentation": { - "id": 9958, - "nodeType": "StructuredDocumentation", - "src": "61427:352:21", - "text": "@dev Calculates the debt accrued by a Credit Account\n @param creditAccount Address of the Credit Account\n @return borrowedAmount The debt principal\n @return borrowedAmountWithInterest The debt principal + accrued interest\n @return borrowedAmountWithInterestAndFees The debt principal + accrued interest and protocol fees" - }, - "functionSelector": "3192195c", - "id": 10010, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountAccruedInterest", - "nameLocation": "61793:32:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 9962, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "61885:8:21" - }, - "parameters": { - "id": 9961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9960, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "61834:13:21", - "nodeType": "VariableDeclaration", - "scope": 10010, - "src": "61826:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 9959, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "61826:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "61825:23:21" - }, - "returnParameters": { - "id": 9969, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 9964, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "61932:14:21", - "nodeType": "VariableDeclaration", - "scope": 10010, - "src": "61924:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9963, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "61924:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9966, - "mutability": "mutable", - "name": "borrowedAmountWithInterest", - "nameLocation": "61968:26:21", - "nodeType": "VariableDeclaration", - "scope": 10010, - "src": "61960:34:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9965, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "61960:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 9968, - "mutability": "mutable", - "name": "borrowedAmountWithInterestAndFees", - "nameLocation": "62016:33:21", - "nodeType": "VariableDeclaration", - "scope": 10010, - "src": "62008:41:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 9967, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "62008:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "61910:149:21" - }, - "scope": 10549, - "src": "61784:1199:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 10046, - "nodeType": "Block", - "src": "63782:312:21", - "statements": [ - { - "expression": { - "id": 10028, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10022, - "name": "borrowedAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10016, - "src": "63792:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 10024, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10013, - "src": "63824:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10023, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "63809:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 10025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "63809:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 10026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "63839:14:21", - "memberName": "borrowedAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 11029, - "src": "63809:44:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 10027, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "63809:46:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "63792:63:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10029, - "nodeType": "ExpressionStatement", - "src": "63792:63:21" - }, - { - "expression": { - "id": 10036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10030, - "name": "cumulativeIndexAtOpen_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10018, - "src": "63881:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 10032, - "name": "creditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10013, - "src": "63924:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10031, - "name": "ICreditAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11064, - "src": "63909:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ICreditAccount_$11064_$", - "typeString": "type(contract ICreditAccount)" - } - }, - "id": 10033, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "63909:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditAccount_$11064", - "typeString": "contract ICreditAccount" - } - }, - "id": 10034, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "63952:21:21", - "memberName": "cumulativeIndexAtOpen", - "nodeType": "MemberAccess", - "referencedDeclaration": 11035, - "src": "63909:64:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 10035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "63909:66:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "63881:94:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10037, - "nodeType": "ExpressionStatement", - "src": "63881:94:21" - }, - { - "expression": { - "id": 10044, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10038, - "name": "cumulativeIndexNow_RAY", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10020, - "src": "64001:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 10040, - "name": "pool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7871, - "src": "64039:4:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10039, - "name": "IPoolService", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12805, - "src": "64026:12:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPoolService_$12805_$", - "typeString": "type(contract IPoolService)" - } - }, - "id": 10041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "64026:18:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPoolService_$12805", - "typeString": "contract IPoolService" - } - }, - "id": 10042, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "64045:24:21", - "memberName": "calcLinearCumulative_RAY", - "nodeType": "MemberAccess", - "referencedDeclaration": 12711, - "src": "64026:43:21", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", - "typeString": "function () view external returns (uint256)" - } - }, - "id": 10043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "64026:45:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "64001:70:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10045, - "nodeType": "ExpressionStatement", - "src": "64001:70:21" - } - ] - }, - "documentation": { - "id": 10011, - "nodeType": "StructuredDocumentation", - "src": "62989:540:21", - "text": "@dev Returns the parameters of the Credit Account required to calculate debt\n @param creditAccount Address of the Credit Account\n @return borrowedAmount Debt principal amount\n @return cumulativeIndexAtOpen_RAY The cumulative index value used to calculate\n interest in conjunction with current pool index. Not necessarily the index\n value at the time of account opening, since it can be updated by manageDebt.\n @return cumulativeIndexNow_RAY Current cumulative index of the pool" - }, - "id": 10047, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getCreditAccountParameters", - "nameLocation": "63543:27:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10013, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "63579:13:21", - "nodeType": "VariableDeclaration", - "scope": 10047, - "src": "63571:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10012, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "63571:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "63570:23:21" - }, - "returnParameters": { - "id": 10021, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10016, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "63662:14:21", - "nodeType": "VariableDeclaration", - "scope": 10047, - "src": "63654:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "63654:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10018, - "mutability": "mutable", - "name": "cumulativeIndexAtOpen_RAY", - "nameLocation": "63698:25:21", - "nodeType": "VariableDeclaration", - "scope": 10047, - "src": "63690:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10017, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "63690:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10020, - "mutability": "mutable", - "name": "cumulativeIndexNow_RAY", - "nameLocation": "63745:22:21", - "nodeType": "VariableDeclaration", - "scope": 10047, - "src": "63737:30:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10019, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "63737:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "63640:137:21" - }, - "scope": 10549, - "src": "63534:560:21", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12291], - "body": { - "id": 10083, - "nodeType": "Block", - "src": "64343:331:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10058, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10056, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10050, - "src": "64429:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10057, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "64438:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "64429:19:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10062, - "nodeType": "IfStatement", - "src": "64425:50:21", - "trueBody": { - "expression": { - "expression": { - "id": 10059, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "64457:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10060, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "64463:12:21", - "memberName": "ltUnderlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 7815, - "src": "64457:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "functionReturnParameters": 10055, - "id": 10061, - "nodeType": "Return", - "src": "64450:25:21" - } - }, - { - "assignments": [10064], - "declarations": [ - { - "constant": false, - "id": 10064, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "64507:9:21", - "nodeType": "VariableDeclaration", - "scope": 10083, - "src": "64499:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10063, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "64499:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10068, - "initialValue": { - "arguments": [ - { - "id": 10066, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10050, - "src": "64533:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10065, - "name": "tokenMasksMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10106, - "src": "64519:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 10067, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "64519:20:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "64499:40:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10069, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10064, - "src": "64553:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 10070, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "64566:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "64553:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10075, - "nodeType": "IfStatement", - "src": "64549:53:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10072, - "name": "TokenNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11975, - "src": "64576:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10073, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "64576:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10074, - "nodeType": "RevertStatement", - "src": "64569:33:21" - } - }, - { - "expression": { - "id": 10081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - null, - { - "id": 10076, - "name": "lt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10054, - "src": "64615:2:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "id": 10077, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "64612:6:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$_t_uint16_$", - "typeString": "tuple(,uint16)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 10079, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10064, - "src": "64644:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 10078, - "name": "collateralTokensByMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9931, - "src": "64621:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$_t_uint16_$", - "typeString": "function (uint256) view returns (address,uint16)" - } - }, - "id": 10080, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "64621:33:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint16_$", - "typeString": "tuple(address,uint16)" - } - }, - "src": "64612:42:21", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10082, - "nodeType": "ExpressionStatement", - "src": "64612:42:21" - } - ] - }, - "documentation": { - "id": 10048, - "nodeType": "StructuredDocumentation", - "src": "64100:115:21", - "text": "@dev Returns the liquidation threshold for the provided token\n @param token Token to retrieve the LT for" - }, - "functionSelector": "78327438", - "id": 10084, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "liquidationThresholds", - "nameLocation": "64229:21:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10052, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "64302:8:21" - }, - "parameters": { - "id": 10051, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10050, - "mutability": "mutable", - "name": "token", - "nameLocation": "64259:5:21", - "nodeType": "VariableDeclaration", - "scope": 10084, - "src": "64251:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10049, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "64251:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "64250:15:21" - }, - "returnParameters": { - "id": 10055, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10054, - "mutability": "mutable", - "name": "lt", - "nameLocation": "64335:2:21", - "nodeType": "VariableDeclaration", - "scope": 10084, - "src": "64328:9:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10053, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "64328:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "64327:11:21" - }, - "scope": 10549, - "src": "64220:454:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12223], - "body": { - "id": 10105, - "nodeType": "Block", - "src": "64902:80:21", - "statements": [ - { - "expression": { - "id": 10103, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10093, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10091, - "src": "64912:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10094, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10087, - "src": "64920:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10095, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "64929:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "64920:19:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 10097, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "64919:21:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "baseExpression": { - "id": 10099, - "name": "tokenMasksMapInternal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7894, - "src": "64947:21:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 10101, - "indexExpression": { - "id": 10100, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10087, - "src": "64969:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "64947:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "64919:56:21", - "trueExpression": { - "hexValue": "31", - "id": 10098, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "64943:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "64912:63:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10104, - "nodeType": "ExpressionStatement", - "src": "64912:63:21" - } - ] - }, - "documentation": { - "id": 10085, - "nodeType": "StructuredDocumentation", - "src": "64680:99:21", - "text": "@dev Returns the mask for the provided token\n @param token Token to returns the mask for" - }, - "functionSelector": "f67c5bd0", - "id": 10106, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "tokenMasksMap", - "nameLocation": "64793:13:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10089, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "64858:8:21" - }, - "parameters": { - "id": 10088, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10087, - "mutability": "mutable", - "name": "token", - "nameLocation": "64815:5:21", - "nodeType": "VariableDeclaration", - "scope": 10106, - "src": "64807:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10086, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "64807:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "64806:15:21" - }, - "returnParameters": { - "id": 10092, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10091, - "mutability": "mutable", - "name": "mask", - "nameLocation": "64892:4:21", - "nodeType": "VariableDeclaration", - "scope": 10106, - "src": "64884:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10090, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "64884:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "64883:14:21" - }, - "scope": 10549, - "src": "64784:198:21", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 10174, - "nodeType": "Block", - "src": "65268:572:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10116, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10114, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10109, - "src": "65282:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 10115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65290:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "65282:9:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10119, - "nodeType": "IfStatement", - "src": "65278:23:21", - "trueBody": { - "expression": { - "hexValue": "30", - "id": 10117, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65300:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 10113, - "id": 10118, - "nodeType": "Return", - "src": "65293:8:21" - } - }, - { - "assignments": [10121], - "declarations": [ - { - "constant": false, - "id": 10121, - "mutability": "mutable", - "name": "high", - "nameLocation": "65481:4:21", - "nodeType": "VariableDeclaration", - "scope": 10174, - "src": "65473:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10120, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "65473:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10123, - "initialValue": { - "hexValue": "323536", - "id": 10122, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65488:3:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "nodeType": "VariableDeclarationStatement", - "src": "65473:18:21" - }, - { - "assignments": [10125], - "declarations": [ - { - "constant": false, - "id": 10125, - "mutability": "mutable", - "name": "low", - "nameLocation": "65509:3:21", - "nodeType": "VariableDeclaration", - "scope": 10174, - "src": "65501:11:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10124, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "65501:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10127, - "initialValue": { - "hexValue": "31", - "id": 10126, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65515:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "VariableDeclarationStatement", - "src": "65501:15:21" - }, - { - "body": { - "id": 10172, - "nodeType": "Block", - "src": "65540:294:21", - "statements": [ - { - "expression": { - "id": 10136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10129, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10112, - "src": "65554:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10135, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10130, - "name": "high", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10121, - "src": "65563:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 10131, - "name": "low", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10125, - "src": "65570:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65563:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 10133, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "65562:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "31", - "id": 10134, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65578:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "65562:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65554:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10137, - "nodeType": "ExpressionStatement", - "src": "65554:25:21" - }, - { - "assignments": [10139], - "declarations": [ - { - "constant": false, - "id": 10139, - "mutability": "mutable", - "name": "testMask", - "nameLocation": "65601:8:21", - "nodeType": "VariableDeclaration", - "scope": 10172, - "src": "65593:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10138, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "65593:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10143, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 10140, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65612:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 10141, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10112, - "src": "65617:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65612:10:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "65593:29:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 10155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10144, - "name": "testMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10139, - "src": "65641:8:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 10145, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10109, - "src": "65652:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65641:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 10147, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65660:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "65641:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10153, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10151, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10149, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10109, - "src": "65666:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "id": 10150, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10112, - "src": "65674:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65666:13:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 10152, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65683:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "65666:18:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 10154, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "65665:20:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "65641:44:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10157, - "nodeType": "IfStatement", - "src": "65637:55:21", - "trueBody": { - "id": 10156, - "nodeType": "Break", - "src": "65687:5:21" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10158, - "name": "testMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10139, - "src": "65711:8:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 10159, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10109, - "src": "65723:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65711:16:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 10170, - "nodeType": "Block", - "src": "65780:44:21", - "statements": [ - { - "expression": { - "id": 10168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10166, - "name": "low", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10125, - "src": "65798:3:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10167, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10112, - "src": "65804:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65798:11:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10169, - "nodeType": "ExpressionStatement", - "src": "65798:11:21" - } - ] - }, - "id": 10171, - "nodeType": "IfStatement", - "src": "65707:117:21", - "trueBody": { - "id": 10165, - "nodeType": "Block", - "src": "65729:45:21", - "statements": [ - { - "expression": { - "id": 10163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10161, - "name": "high", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10121, - "src": "65747:4:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10162, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10112, - "src": "65754:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "65747:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10164, - "nodeType": "ExpressionStatement", - "src": "65747:12:21" - } - ] - } - } - ] - }, - "condition": { - "hexValue": "74727565", - "id": 10128, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "65534:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "id": 10173, - "nodeType": "WhileStatement", - "src": "65527:307:21" - } - ] - }, - "documentation": { - "id": 10107, - "nodeType": "StructuredDocumentation", - "src": "64988:201:21", - "text": "@dev Returns the largest token index out of enabled tokens, based on a mask\n @param mask Bit mask encoding enabled tokens\n @return index Largest index out of the set of enabled tokens" - }, - "id": 10175, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getMaxIndex", - "nameLocation": "65203:12:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10110, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10109, - "mutability": "mutable", - "name": "mask", - "nameLocation": "65224:4:21", - "nodeType": "VariableDeclaration", - "scope": 10175, - "src": "65216:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10108, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "65216:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "65215:14:21" - }, - "returnParameters": { - "id": 10113, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10112, - "mutability": "mutable", - "name": "index", - "nameLocation": "65261:5:21", - "nodeType": "VariableDeclaration", - "scope": 10175, - "src": "65253:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10111, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "65253:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "65252:15:21" - }, - "scope": 10549, - "src": "65194:646:21", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12319], - "body": { - "id": 10215, - "nodeType": "Block", - "src": "67084:349:21", - "statements": [ - { - "expression": { - "id": 10193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10190, - "name": "feeInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10180, - "src": "67094:11:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 10191, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67108:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10192, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67114:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "67108:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "67094:31:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10194, - "nodeType": "ExpressionStatement", - "src": "67094:31:21" - }, - { - "expression": { - "id": 10198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10195, - "name": "feeLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10182, - "src": "67148:14:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 10196, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67165:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10197, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67171:14:21", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 7799, - "src": "67165:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "67148:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10199, - "nodeType": "ExpressionStatement", - "src": "67148:37:21" - }, - { - "expression": { - "id": 10203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10200, - "name": "liquidationDiscount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10184, - "src": "67208:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 10201, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67230:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10202, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67236:19:21", - "memberName": "liquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 7802, - "src": "67230:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "67208:47:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10204, - "nodeType": "ExpressionStatement", - "src": "67208:47:21" - }, - { - "expression": { - "id": 10208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10205, - "name": "feeLiquidationExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10186, - "src": "67278:21:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 10206, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67302:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10207, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67308:21:21", - "memberName": "feeLiquidationExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7805, - "src": "67302:27:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "67278:51:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10209, - "nodeType": "ExpressionStatement", - "src": "67278:51:21" - }, - { - "expression": { - "id": 10213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10210, - "name": "liquidationDiscountExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10188, - "src": "67352:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 10211, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67381:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10212, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67387:26:21", - "memberName": "liquidationDiscountExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7808, - "src": "67381:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "67352:61:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10214, - "nodeType": "ExpressionStatement", - "src": "67352:61:21" - } - ] - }, - "documentation": { - "id": 10176, - "nodeType": "StructuredDocumentation", - "src": "65846:943:21", - "text": "@dev Returns the fee parameters of the Credit Manager\n @return feeInterest Percentage of interest taken by the protocol as profit\n @return feeLiquidation Percentage of account value taken by the protocol as profit\n during unhealthy account liquidations\n @return liquidationDiscount Multiplier that reduces the effective totalValue during unhealthy account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\n @return feeLiquidationExpired Percentage of account value taken by the protocol as profit\n during expired account liquidations\n @return liquidationDiscountExpired Multiplier that reduces the effective totalValue during expired account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - }, - "functionSelector": "9af1d35a", - "id": 10216, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "fees", - "nameLocation": "66803:4:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10178, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "66848:8:21" - }, - "parameters": { - "id": 10177, - "nodeType": "ParameterList", - "parameters": [], - "src": "66807:2:21" - }, - "returnParameters": { - "id": 10189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10180, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "66894:11:21", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "66887:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10179, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "66887:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10182, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "66926:14:21", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "66919:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10181, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "66919:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10184, - "mutability": "mutable", - "name": "liquidationDiscount", - "nameLocation": "66961:19:21", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "66954:26:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10183, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "66954:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10186, - "mutability": "mutable", - "name": "feeLiquidationExpired", - "nameLocation": "67001:21:21", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "66994:28:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10185, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "66994:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10188, - "mutability": "mutable", - "name": "liquidationDiscountExpired", - "nameLocation": "67043:26:21", - "nodeType": "VariableDeclaration", - "scope": 10216, - "src": "67036:33:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10187, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "67036:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "66873:206:21" - }, - "scope": 10549, - "src": "66794:639:21", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12332], - "body": { - "id": 10227, - "nodeType": "Block", - "src": "67583:41:21", - "statements": [ - { - "expression": { - "expression": { - "id": 10224, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "67600:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10225, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "67606:11:21", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 7812, - "src": "67600:17:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "functionReturnParameters": 10223, - "id": 10226, - "nodeType": "Return", - "src": "67593:24:21" - } - ] - }, - "documentation": { - "id": 10217, - "nodeType": "StructuredDocumentation", - "src": "67439:68:21", - "text": "@dev Returns the price oracle used to evaluate collateral tokens" - }, - "functionSelector": "2630c12f", - "id": 10228, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "priceOracle", - "nameLocation": "67521:11:21", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 10219, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "67549:8:21" - }, - "parameters": { - "id": 10218, - "nodeType": "ParameterList", - "parameters": [], - "src": "67532:2:21" - }, - "returnParameters": { - "id": 10223, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10222, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10228, - "src": "67567:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 10221, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 10220, - "name": "IPriceOracleV2", - "nameLocations": ["67567:14:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "67567:14:21" - }, - "referencedDeclaration": 12942, - "src": "67567:14:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - } - ], - "src": "67566:16:21" - }, - "scope": 10549, - "src": "67512:112:21", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10240, - "nodeType": "Block", - "src": "68004:46:21", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 10237, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10231, - "src": "68024:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10236, - "name": "_addToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10291, - "src": "68014:9:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 10238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "68014:16:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10239, - "nodeType": "ExpressionStatement", - "src": "68014:16:21" - } - ] - }, - "documentation": { - "id": 10229, - "nodeType": "StructuredDocumentation", - "src": "67799:103:21", - "text": "@dev Adds a token to the list of collateral tokens\n @param token Address of the token to add" - }, - "functionSelector": "d48bfca7", - "id": 10241, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10234, - "kind": "modifierInvocation", - "modifierName": { - "id": 10233, - "name": "creditConfiguratorOnly", - "nameLocations": ["67965:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "67965:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "67965:22:21" - } - ], - "name": "addToken", - "nameLocation": "67916:8:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10232, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10231, - "mutability": "mutable", - "name": "token", - "nameLocation": "67933:5:21", - "nodeType": "VariableDeclaration", - "scope": 10241, - "src": "67925:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10230, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "67925:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "67924:15:21" - }, - "returnParameters": { - "id": 10235, - "nodeType": "ParameterList", - "parameters": [], - "src": "68004:0:21" - }, - "scope": 10549, - "src": "67907:143:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10290, - "nodeType": "Block", - "src": "68186:863:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10251, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 10247, - "name": "tokenMasksMapInternal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7894, - "src": "68285:21:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 10249, - "indexExpression": { - "id": 10248, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10244, - "src": "68307:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "68285:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 10250, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "68316:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "68285:32:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10255, - "nodeType": "IfStatement", - "src": "68281:85:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10252, - "name": "TokenAlreadyAddedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11984, - "src": "68338:26:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10253, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "68338:28:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10254, - "nodeType": "RevertStatement", - "src": "68331:35:21" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10256, - "name": "collateralTokensCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7889, - "src": "68577:21:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "hexValue": "323536", - "id": 10257, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "68602:3:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "src": "68577:28:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10262, - "nodeType": "IfStatement", - "src": "68573:65:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10259, - "name": "TooManyTokensException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11987, - "src": "68614:22:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "68614:24:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10261, - "nodeType": "RevertStatement", - "src": "68607:31:21" - } - }, - { - "assignments": [10264], - "declarations": [ - { - "constant": false, - "id": 10264, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "68809:9:21", - "nodeType": "VariableDeclaration", - "scope": 10290, - "src": "68801:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10263, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "68801:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10268, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 10265, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "68821:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 10266, - "name": "collateralTokensCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7889, - "src": "68826:21:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "68821:26:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "68801:46:21" - }, - { - "expression": { - "id": 10273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10269, - "name": "tokenMasksMapInternal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7894, - "src": "68857:21:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 10271, - "indexExpression": { - "id": 10270, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10244, - "src": "68879:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "68857:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10272, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10264, - "src": "68888:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "68857:40:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10274, - "nodeType": "ExpressionStatement", - "src": "68857:40:21" - }, - { - "expression": { - "id": 10285, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10275, - "name": "collateralTokensCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7886, - "src": "68920:26:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 10277, - "indexExpression": { - "id": 10276, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10264, - "src": "68947:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "68920:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 10282, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10244, - "src": "68976:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "68968:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 10280, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "68968:7:21", - "typeDescriptions": {} - } - }, - "id": 10283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "68968:14:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 10279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "68960:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 10278, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "68960:7:21", - "typeDescriptions": {} - } - }, - "id": 10284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "68960:23:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "68920:63:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10286, - "nodeType": "ExpressionStatement", - "src": "68920:63:21" - }, - { - "expression": { - "id": 10288, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "69006:23:21", - "subExpression": { - "id": 10287, - "name": "collateralTokensCount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7889, - "src": "69006:21:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10289, - "nodeType": "ExpressionStatement", - "src": "69006:23:21" - } - ] - }, - "documentation": { - "id": 10242, - "nodeType": "StructuredDocumentation", - "src": "68056:82:21", - "text": "@dev IMPLEMENTATION: addToken\n @param token Address of the token to add" - }, - "id": 10291, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addToken", - "nameLocation": "68152:9:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10245, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10244, - "mutability": "mutable", - "name": "token", - "nameLocation": "68170:5:21", - "nodeType": "VariableDeclaration", - "scope": 10291, - "src": "68162:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10243, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "68162:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "68161:15:21" - }, - "returnParameters": { - "id": 10246, - "nodeType": "ParameterList", - "parameters": [], - "src": "68186:0:21" - }, - "scope": 10549, - "src": "68143:906:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 10337, - "nodeType": "Block", - "src": "70247:354:21", - "statements": [ - { - "expression": { - "id": 10311, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10307, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "70257:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10309, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "70263:11:21", - "memberName": "feeInterest", - "nodeType": "MemberAccess", - "referencedDeclaration": 7796, - "src": "70257:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10310, - "name": "_feeInterest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10294, - "src": "70277:12:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "70257:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10312, - "nodeType": "ExpressionStatement", - "src": "70257:32:21" - }, - { - "expression": { - "id": 10317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10313, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "70312:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10315, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "70318:14:21", - "memberName": "feeLiquidation", - "nodeType": "MemberAccess", - "referencedDeclaration": 7799, - "src": "70312:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10316, - "name": "_feeLiquidation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10296, - "src": "70335:15:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "70312:38:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10318, - "nodeType": "ExpressionStatement", - "src": "70312:38:21" - }, - { - "expression": { - "id": 10323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10319, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "70373:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10321, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "70379:19:21", - "memberName": "liquidationDiscount", - "nodeType": "MemberAccess", - "referencedDeclaration": 7802, - "src": "70373:25:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10322, - "name": "_liquidationDiscount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10298, - "src": "70401:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "70373:48:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10324, - "nodeType": "ExpressionStatement", - "src": "70373:48:21" - }, - { - "expression": { - "id": 10329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10325, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "70444:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10327, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "70450:21:21", - "memberName": "feeLiquidationExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7805, - "src": "70444:27:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10328, - "name": "_feeLiquidationExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10300, - "src": "70474:22:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "70444:52:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10330, - "nodeType": "ExpressionStatement", - "src": "70444:52:21" - }, - { - "expression": { - "id": 10335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10331, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "70519:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10333, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "70525:26:21", - "memberName": "liquidationDiscountExpired", - "nodeType": "MemberAccess", - "referencedDeclaration": 7808, - "src": "70519:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10334, - "name": "_liquidationDiscountExpired", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10302, - "src": "70554:27:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "70519:62:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10336, - "nodeType": "ExpressionStatement", - "src": "70519:62:21" - } - ] - }, - "documentation": { - "id": 10292, - "nodeType": "StructuredDocumentation", - "src": "69055:917:21", - "text": "@dev Sets fees and premiums\n @param _feeInterest Percentage of interest taken by the protocol as profit\n @param _feeLiquidation Percentage of account value taken by the protocol as profit\n during unhealthy account liquidations\n @param _liquidationDiscount Multiplier that reduces the effective totalValue during unhealthy account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\n @param _feeLiquidationExpired Percentage of account value taken by the protocol as profit\n during expired account liquidations\n @param _liquidationDiscountExpired Multiplier that reduces the effective totalValue during expired account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - }, - "functionSelector": "944ac59f", - "id": 10338, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10305, - "kind": "modifierInvocation", - "modifierName": { - "id": 10304, - "name": "creditConfiguratorOnly", - "nameLocations": ["70208:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "70208:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "70208:22:21" - } - ], - "name": "setParams", - "nameLocation": "69986:9:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10303, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10294, - "mutability": "mutable", - "name": "_feeInterest", - "nameLocation": "70012:12:21", - "nodeType": "VariableDeclaration", - "scope": 10338, - "src": "70005:19:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10293, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "70005:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10296, - "mutability": "mutable", - "name": "_feeLiquidation", - "nameLocation": "70041:15:21", - "nodeType": "VariableDeclaration", - "scope": 10338, - "src": "70034:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10295, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "70034:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10298, - "mutability": "mutable", - "name": "_liquidationDiscount", - "nameLocation": "70073:20:21", - "nodeType": "VariableDeclaration", - "scope": 10338, - "src": "70066:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10297, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "70066:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10300, - "mutability": "mutable", - "name": "_feeLiquidationExpired", - "nameLocation": "70110:22:21", - "nodeType": "VariableDeclaration", - "scope": 10338, - "src": "70103:29:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10299, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "70103:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10302, - "mutability": "mutable", - "name": "_liquidationDiscountExpired", - "nameLocation": "70149:27:21", - "nodeType": "VariableDeclaration", - "scope": 10338, - "src": "70142:34:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10301, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "70142:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "69995:187:21" - }, - "returnParameters": { - "id": 10306, - "nodeType": "ParameterList", - "parameters": [], - "src": "70247:0:21" - }, - "scope": 10549, - "src": "69977:624:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10396, - "nodeType": "Block", - "src": "71164:697:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10350, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10348, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10341, - "src": "71286:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10349, - "name": "underlying", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7863, - "src": "71295:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "71286:19:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 10394, - "nodeType": "Block", - "src": "71417:438:21", - "statements": [ - { - "assignments": [10359], - "declarations": [ - { - "constant": false, - "id": 10359, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "71439:9:21", - "nodeType": "VariableDeclaration", - "scope": 10394, - "src": "71431:17:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10358, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "71431:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 10363, - "initialValue": { - "arguments": [ - { - "id": 10361, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10341, - "src": "71465:5:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10360, - "name": "tokenMasksMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10106, - "src": "71451:13:21", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view returns (uint256)" - } - }, - "id": 10362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "71451:20:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "71431:40:21" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10364, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10359, - "src": "71506:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 10365, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "71519:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "71506:14:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10370, - "nodeType": "IfStatement", - "src": "71502:53:21", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 10367, - "name": "TokenNotAllowedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11975, - "src": "71529:24:21", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "71529:26:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10369, - "nodeType": "RevertStatement", - "src": "71522:33:21" - } - }, - { - "expression": { - "id": 10392, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10371, - "name": "collateralTokensCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7886, - "src": "71659:26:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 10373, - "indexExpression": { - "id": 10372, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10359, - "src": "71686:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "71659:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10382, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 10374, - "name": "collateralTokensCompressed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7886, - "src": "71716:26:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 10376, - "indexExpression": { - "id": 10375, - "name": "tokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10359, - "src": "71743:9:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "71716:37:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 10379, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "71761:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 10378, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "71761:7:21", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - } - ], - "id": 10377, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "71756:4:21", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 10380, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "71756:13:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint160", - "typeString": "type(uint160)" - } - }, - "id": 10381, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "71770:3:21", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "71756:17:21", - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - }, - "src": "71716:57:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 10383, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "71715:59:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "|", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 10389, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 10386, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10343, - "src": "71802:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - ], - "id": 10385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "71794:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 10384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "71794:7:21", - "typeDescriptions": {} - } - }, - "id": 10387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "71794:29:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "313630", - "id": 10388, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "71827:3:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_160_by_1", - "typeString": "int_const 160" - }, - "value": "160" - }, - "src": "71794:36:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 10390, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "71793:38:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "71715:116:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "71659:172:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10393, - "nodeType": "ExpressionStatement", - "src": "71659:172:21" - } - ] - }, - "id": 10395, - "nodeType": "IfStatement", - "src": "71282:573:21", - "trueBody": { - "id": 10357, - "nodeType": "Block", - "src": "71307:104:21", - "statements": [ - { - "expression": { - "id": 10355, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10351, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "71346:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10353, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "71352:12:21", - "memberName": "ltUnderlying", - "nodeType": "MemberAccess", - "referencedDeclaration": 7815, - "src": "71346:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10354, - "name": "liquidationThreshold", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10343, - "src": "71367:20:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "71346:41:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 10356, - "nodeType": "ExpressionStatement", - "src": "71346:41:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 10339, - "nodeType": "StructuredDocumentation", - "src": "70643:375:21", - "text": "@dev Sets the liquidation threshold for a collateral token\n @notice Liquidation thresholds are weights used to compute\n TWV with. They denote the risk of the token, with\n more volatile and unpredictable tokens having lower LTs.\n @param token The collateral token to set the LT for\n @param liquidationThreshold The new LT" - }, - "functionSelector": "a70bc542", - "id": 10397, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10346, - "kind": "modifierInvocation", - "modifierName": { - "id": 10345, - "name": "creditConfiguratorOnly", - "nameLocations": ["71125:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "71125:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "71125:22:21" - } - ], - "name": "setLiquidationThreshold", - "nameLocation": "71032:23:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10344, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10341, - "mutability": "mutable", - "name": "token", - "nameLocation": "71064:5:21", - "nodeType": "VariableDeclaration", - "scope": 10397, - "src": "71056:13:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10340, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "71056:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10343, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "71078:20:21", - "nodeType": "VariableDeclaration", - "scope": 10397, - "src": "71071:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 10342, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "71071:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "71055:44:21" - }, - "returnParameters": { - "id": 10347, - "nodeType": "ParameterList", - "parameters": [], - "src": "71164:0:21" - }, - "scope": 10549, - "src": "71023:838:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10409, - "nodeType": "Block", - "src": "72528:62:21", - "statements": [ - { - "expression": { - "id": 10407, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10405, - "name": "forbiddenTokenMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7898, - "src": "72538:18:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10406, - "name": "_forbidMask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10400, - "src": "72559:11:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "72538:32:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 10408, - "nodeType": "ExpressionStatement", - "src": "72538:32:21" - } - ] - }, - "documentation": { - "id": 10398, - "nodeType": "StructuredDocumentation", - "src": "71867:548:21", - "text": "@dev Sets the forbidden token mask\n @param _forbidMask The new bit mask encoding the tokens that are forbidden\n @notice Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled\n or received as a result of adapter operation anymore. This means that a token can never be\n acquired through adapter operations after being forbidden. Accounts that have enabled forbidden tokens\n also can't borrow any additional funds until they disable those tokens." - }, - "functionSelector": "a366f496", - "id": 10410, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10403, - "kind": "modifierInvocation", - "modifierName": { - "id": 10402, - "name": "creditConfiguratorOnly", - "nameLocations": ["72489:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "72489:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "72489:22:21" - } - ], - "name": "setForbidMask", - "nameLocation": "72429:13:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10401, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10400, - "mutability": "mutable", - "name": "_forbidMask", - "nameLocation": "72451:11:21", - "nodeType": "VariableDeclaration", - "scope": 10410, - "src": "72443:19:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10399, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "72443:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "72442:21:21" - }, - "returnParameters": { - "id": 10404, - "nodeType": "ParameterList", - "parameters": [], - "src": "72528:0:21" - }, - "scope": 10549, - "src": "72420:170:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10422, - "nodeType": "Block", - "src": "72864:81:21", - "statements": [ - { - "expression": { - "id": 10420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10418, - "name": "maxAllowedEnabledTokenLength", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7841, - "src": "72874:28:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10419, - "name": "newMaxEnabledTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10413, - "src": "72905:19:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "72874:50:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 10421, - "nodeType": "ExpressionStatement", - "src": "72874:50:21" - } - ] - }, - "documentation": { - "id": 10411, - "nodeType": "StructuredDocumentation", - "src": "72596:142:21", - "text": "@dev Sets the maximal number of enabled tokens on a single Credit Account.\n @param newMaxEnabledTokens The new enabled token limit." - }, - "functionSelector": "dc2b21c1", - "id": 10423, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10416, - "kind": "modifierInvocation", - "modifierName": { - "id": 10415, - "name": "creditConfiguratorOnly", - "nameLocations": ["72824:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "72824:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "72824:22:21" - } - ], - "name": "setMaxEnabledTokens", - "nameLocation": "72752:19:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10413, - "mutability": "mutable", - "name": "newMaxEnabledTokens", - "nameLocation": "72778:19:21", - "nodeType": "VariableDeclaration", - "scope": 10423, - "src": "72772:25:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 10412, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "72772:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "72771:27:21" - }, - "returnParameters": { - "id": 10417, - "nodeType": "ParameterList", - "parameters": [], - "src": "72864:0:21" - }, - "scope": 10549, - "src": "72743:202:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10470, - "nodeType": "Block", - "src": "73572:495:21", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10438, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10433, - "name": "adapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10426, - "src": "73586:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 10436, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "73605:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 10435, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "73597:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10434, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "73597:7:21", - "typeDescriptions": {} - } - }, - "id": 10437, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "73597:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "73586:21:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10446, - "nodeType": "IfStatement", - "src": "73582:108:21", - "trueBody": { - "id": 10445, - "nodeType": "Block", - "src": "73609:81:21", - "statements": [ - { - "expression": { - "id": 10443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10439, - "name": "adapterToContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7915, - "src": "73623:17:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 10441, - "indexExpression": { - "id": 10440, - "name": "adapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10426, - "src": "73641:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "73623:26:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10442, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10428, - "src": "73652:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "73623:43:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10444, - "nodeType": "ExpressionStatement", - "src": "73623:43:21" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10447, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10428, - "src": "73703:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 10450, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "73729:1:21", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 10449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "73721:7:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 10448, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "73721:7:21", - "typeDescriptions": {} - } - }, - "id": 10451, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "73721:10:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "73703:28:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10460, - "nodeType": "IfStatement", - "src": "73699:115:21", - "trueBody": { - "id": 10459, - "nodeType": "Block", - "src": "73733:81:21", - "statements": [ - { - "expression": { - "id": 10457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10453, - "name": "contractToAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7921, - "src": "73747:17:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 10455, - "indexExpression": { - "id": 10454, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10428, - "src": "73765:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "73747:33:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10456, - "name": "adapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10426, - "src": "73783:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "73747:43:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10458, - "nodeType": "ExpressionStatement", - "src": "73747:43:21" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 10463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 10461, - "name": "targetContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10428, - "src": "73959:14:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 10462, - "name": "UNIVERSAL_CONTRACT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13930, - "src": "73977:18:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "73959:36:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10469, - "nodeType": "IfStatement", - "src": "73955:106:21", - "trueBody": { - "id": 10468, - "nodeType": "Block", - "src": "73997:64:21", - "statements": [ - { - "expression": { - "id": 10466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10464, - "name": "universalAdapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7930, - "src": "74011:16:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10465, - "name": "adapter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10426, - "src": "74030:7:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "74011:26:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10467, - "nodeType": "ExpressionStatement", - "src": "74011:26:21" - } - ] - } - } - ] - }, - "documentation": { - "id": 10424, - "nodeType": "StructuredDocumentation", - "src": "72951:490:21", - "text": "@dev Sets the link between an adapter and its corresponding targetContract\n @param adapter Address of the adapter to be used to access the target contract\n @param targetContract A 3rd-party contract for which the adapter is set\n @notice The function can be called with (adapter, address(0)) and (address(0), targetContract)\n to disallow a particular target or adapter, since this would set values in respective\n mappings to address(0)." - }, - "functionSelector": "6e98e5e4", - "id": 10471, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10431, - "kind": "modifierInvocation", - "modifierName": { - "id": 10430, - "name": "creditConfiguratorOnly", - "nameLocations": ["73545:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "73545:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "73545:22:21" - } - ], - "name": "changeContractAllowance", - "nameLocation": "73455:23:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10426, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "73487:7:21", - "nodeType": "VariableDeclaration", - "scope": 10471, - "src": "73479:15:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10425, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "73479:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10428, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "73504:14:21", - "nodeType": "VariableDeclaration", - "scope": 10471, - "src": "73496:22:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10427, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "73496:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "73478:41:21" - }, - "returnParameters": { - "id": 10432, - "nodeType": "ParameterList", - "parameters": [], - "src": "73572:0:21" - }, - "scope": 10549, - "src": "73446:621:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10483, - "nodeType": "Block", - "src": "74287:45:21", - "statements": [ - { - "expression": { - "id": 10481, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10479, - "name": "creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7845, - "src": "74297:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10480, - "name": "_creditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10474, - "src": "74312:13:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "74297:28:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10482, - "nodeType": "ExpressionStatement", - "src": "74297:28:21" - } - ] - }, - "documentation": { - "id": 10472, - "nodeType": "StructuredDocumentation", - "src": "74073:93:21", - "text": "@dev Sets the Credit Facade\n @param _creditFacade Address of the new Credit Facade" - }, - "functionSelector": "693ce7f5", - "id": 10484, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10477, - "kind": "modifierInvocation", - "modifierName": { - "id": 10476, - "name": "creditConfiguratorOnly", - "nameLocations": ["74248:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "74248:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "74248:22:21" - } - ], - "name": "upgradeCreditFacade", - "nameLocation": "74180:19:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10474, - "mutability": "mutable", - "name": "_creditFacade", - "nameLocation": "74208:13:21", - "nodeType": "VariableDeclaration", - "scope": 10484, - "src": "74200:21:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10473, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "74200:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "74199:23:21" - }, - "returnParameters": { - "id": 10478, - "nodeType": "ParameterList", - "parameters": [], - "src": "74287:0:21" - }, - "scope": 10549, - "src": "74171:161:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10500, - "nodeType": "Block", - "src": "74547:65:21", - "statements": [ - { - "expression": { - "id": 10498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 10492, - "name": "slot1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7849, - "src": "74557:5:21", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Slot1_$7816_storage", - "typeString": "struct Slot1 storage ref" - } - }, - "id": 10494, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "74563:11:21", - "memberName": "priceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 7812, - "src": "74557:17:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 10496, - "name": "_priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10487, - "src": "74592:12:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10495, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "74577:14:21", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPriceOracleV2_$12942_$", - "typeString": "type(contract IPriceOracleV2)" - } - }, - "id": 10497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "74577:28:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "src": "74557:48:21", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "id": 10499, - "nodeType": "ExpressionStatement", - "src": "74557:48:21" - } - ] - }, - "documentation": { - "id": 10485, - "nodeType": "StructuredDocumentation", - "src": "74338:90:21", - "text": "@dev Sets the Price Oracle\n @param _priceOracle Address of the new Price Oracle" - }, - "functionSelector": "dc9e0faa", - "id": 10501, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10490, - "kind": "modifierInvocation", - "modifierName": { - "id": 10489, - "name": "creditConfiguratorOnly", - "nameLocations": ["74508:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "74508:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "74508:22:21" - } - ], - "name": "upgradePriceOracle", - "nameLocation": "74442:18:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10488, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10487, - "mutability": "mutable", - "name": "_priceOracle", - "nameLocation": "74469:12:21", - "nodeType": "VariableDeclaration", - "scope": 10501, - "src": "74461:20:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10486, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "74461:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "74460:22:21" - }, - "returnParameters": { - "id": 10491, - "nodeType": "ParameterList", - "parameters": [], - "src": "74547:0:21" - }, - "scope": 10549, - "src": "74433:179:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10515, - "nodeType": "Block", - "src": "74853:59:21", - "statements": [ - { - "expression": { - "id": 10513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10509, - "name": "canLiquidateWhilePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7927, - "src": "74863:23:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 10511, - "indexExpression": { - "id": 10510, - "name": "liquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10504, - "src": "74887:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "74863:35:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 10512, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "74901:4:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "74863:42:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10514, - "nodeType": "ExpressionStatement", - "src": "74863:42:21" - } - ] - }, - "documentation": { - "id": 10502, - "nodeType": "StructuredDocumentation", - "src": "74618:114:21", - "text": "@dev Adds an address to the list of emergency liquidators\n @param liquidator Address to add to the list" - }, - "functionSelector": "84edaa42", - "id": 10516, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10507, - "kind": "modifierInvocation", - "modifierName": { - "id": 10506, - "name": "creditConfiguratorOnly", - "nameLocations": ["74814:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "74814:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "74814:22:21" - } - ], - "name": "addEmergencyLiquidator", - "nameLocation": "74746:22:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10505, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10504, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "74777:10:21", - "nodeType": "VariableDeclaration", - "scope": 10516, - "src": "74769:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "74769:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "74768:20:21" - }, - "returnParameters": { - "id": 10508, - "nodeType": "ParameterList", - "parameters": [], - "src": "74853:0:21" - }, - "scope": 10549, - "src": "74737:175:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10530, - "nodeType": "Block", - "src": "75167:60:21", - "statements": [ - { - "expression": { - "id": 10528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 10524, - "name": "canLiquidateWhilePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7927, - "src": "75177:23:21", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", - "typeString": "mapping(address => bool)" - } - }, - "id": 10526, - "indexExpression": { - "id": 10525, - "name": "liquidator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10519, - "src": "75201:10:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "75177:35:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 10527, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "75215:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "75177:43:21", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 10529, - "nodeType": "ExpressionStatement", - "src": "75177:43:21" - } - ] - }, - "documentation": { - "id": 10517, - "nodeType": "StructuredDocumentation", - "src": "74918:124:21", - "text": "@dev Removes an address from the list of emergency liquidators\n @param liquidator Address to remove from the list" - }, - "functionSelector": "a460e104", - "id": 10531, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10522, - "kind": "modifierInvocation", - "modifierName": { - "id": 10521, - "name": "creditConfiguratorOnly", - "nameLocations": ["75127:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "75127:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "75127:22:21" - } - ], - "name": "removeEmergencyLiquidator", - "nameLocation": "75056:25:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10520, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10519, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "75090:10:21", - "nodeType": "VariableDeclaration", - "scope": 10531, - "src": "75082:18:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10518, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "75082:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "75081:20:21" - }, - "returnParameters": { - "id": 10523, - "nodeType": "ParameterList", - "parameters": [], - "src": "75167:0:21" - }, - "scope": 10549, - "src": "75047:180:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 10547, - "nodeType": "Block", - "src": "75469:134:21", - "statements": [ - { - "expression": { - "id": 10541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 10539, - "name": "creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7881, - "src": "75479:18:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 10540, - "name": "_creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10534, - "src": "75500:19:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "75479:40:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10542, - "nodeType": "ExpressionStatement", - "src": "75479:40:21" - }, - { - "eventCall": { - "arguments": [ - { - "id": 10544, - "name": "_creditConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10534, - "src": "75563:19:21", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 10543, - "name": "NewConfigurator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11953, - "src": "75547:15:21", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 10545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "75547:36:21", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 10546, - "nodeType": "EmitStatement", - "src": "75542:41:21" - } - ] - }, - "documentation": { - "id": 10532, - "nodeType": "StructuredDocumentation", - "src": "75233:113:21", - "text": "@dev Sets a new Credit Configurator\n @param _creditConfigurator Address of the new Credit Configurator" - }, - "functionSelector": "9f5f86ae", - "id": 10548, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 10537, - "kind": "modifierInvocation", - "modifierName": { - "id": 10536, - "name": "creditConfiguratorOnly", - "nameLocations": ["75430:22:21"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 8003, - "src": "75430:22:21" - }, - "nodeType": "ModifierInvocation", - "src": "75430:22:21" - } - ], - "name": "setConfigurator", - "nameLocation": "75360:15:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10535, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10534, - "mutability": "mutable", - "name": "_creditConfigurator", - "nameLocation": "75384:19:21", - "nodeType": "VariableDeclaration", - "scope": 10548, - "src": "75376:27:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10533, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "75376:7:21", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "75375:29:21" - }, - "returnParameters": { - "id": 10538, - "nodeType": "ParameterList", - "parameters": [], - "src": "75469:0:21" - }, - "scope": 10549, - "src": "75351:252:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10550, - "src": "2865:72740:21", - "usedErrors": [ - 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, 11981, - 11984, 11987, 11990, 11993, 12534, 12557, 12560 - ] - } - ], - "src": "128:75478:21" - }, - "id": 21 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol", - "exportedSymbols": { - "IACL": [10623], - "IACLEvents": [10585], - "IACLExceptions": [10564], - "IVersion": [12963] - }, - "id": 10624, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10551, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:22" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10553, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10624, - "sourceUnit": 12964, - "src": "148:42:22", - "symbolAliases": [ - { - "foreign": { - "id": 10552, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:22", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IACLExceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10564, - "linearizedBaseContracts": [10564], - "name": "IACLExceptions", - "nameLocation": "202:14:22", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10554, - "nodeType": "StructuredDocumentation", - "src": "223:92:22", - "text": "@dev Thrown when attempting to delete an address from a set that is not a pausable admin" - }, - "errorSelector": "e1163189", - "id": 10558, - "name": "AddressNotPausableAdminException", - "nameLocation": "326:32:22", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10557, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10556, - "mutability": "mutable", - "name": "addr", - "nameLocation": "367:4:22", - "nodeType": "VariableDeclaration", - "scope": 10558, - "src": "359:12:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "359:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "358:14:22" - }, - "src": "320:53:22" - }, - { - "documentation": { - "id": 10559, - "nodeType": "StructuredDocumentation", - "src": "379:94:22", - "text": "@dev Thrown when attempting to delete an address from a set that is not a unpausable admin" - }, - "errorSelector": "57f592b7", - "id": 10563, - "name": "AddressNotUnpausableAdminException", - "nameLocation": "484:34:22", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10562, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10561, - "mutability": "mutable", - "name": "addr", - "nameLocation": "527:4:22", - "nodeType": "VariableDeclaration", - "scope": 10563, - "src": "519:12:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10560, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "519:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "518:14:22" - }, - "src": "478:55:22" - } - ], - "scope": 10624, - "src": "192:343:22", - "usedErrors": [10558, 10563] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IACLEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10585, - "linearizedBaseContracts": [10585], - "name": "IACLEvents", - "nameLocation": "547:10:22", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 10565, - "nodeType": "StructuredDocumentation", - "src": "564:65:22", - "text": "@dev Emits when a new admin is added that can pause contracts" - }, - "eventSelector": "ae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c6", - "id": 10569, - "name": "PausableAdminAdded", - "nameLocation": "640:18:22", - "nodeType": "EventDefinition", - "parameters": { - "id": 10568, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10567, - "indexed": true, - "mutability": "mutable", - "name": "newAdmin", - "nameLocation": "675:8:22", - "nodeType": "VariableDeclaration", - "scope": 10569, - "src": "659:24:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10566, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "659:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "658:26:22" - }, - "src": "634:51:22" - }, - { - "anonymous": false, - "documentation": { - "id": 10570, - "nodeType": "StructuredDocumentation", - "src": "691:47:22", - "text": "@dev Emits when a Pausable admin is removed" - }, - "eventSelector": "28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d9", - "id": 10574, - "name": "PausableAdminRemoved", - "nameLocation": "749:20:22", - "nodeType": "EventDefinition", - "parameters": { - "id": 10573, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10572, - "indexed": true, - "mutability": "mutable", - "name": "admin", - "nameLocation": "786:5:22", - "nodeType": "VariableDeclaration", - "scope": 10574, - "src": "770:21:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10571, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "770:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "769:23:22" - }, - "src": "743:50:22" - }, - { - "anonymous": false, - "documentation": { - "id": 10575, - "nodeType": "StructuredDocumentation", - "src": "799:67:22", - "text": "@dev Emits when a new admin is added that can unpause contracts" - }, - "eventSelector": "d400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc4", - "id": 10579, - "name": "UnpausableAdminAdded", - "nameLocation": "877:20:22", - "nodeType": "EventDefinition", - "parameters": { - "id": 10578, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10577, - "indexed": true, - "mutability": "mutable", - "name": "newAdmin", - "nameLocation": "914:8:22", - "nodeType": "VariableDeclaration", - "scope": 10579, - "src": "898:24:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10576, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "898:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "897:26:22" - }, - "src": "871:53:22" - }, - { - "anonymous": false, - "documentation": { - "id": 10580, - "nodeType": "StructuredDocumentation", - "src": "930:50:22", - "text": "@dev Emits when an Unpausable admin is removed" - }, - "eventSelector": "1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d271545", - "id": 10584, - "name": "UnpausableAdminRemoved", - "nameLocation": "991:22:22", - "nodeType": "EventDefinition", - "parameters": { - "id": 10583, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10582, - "indexed": true, - "mutability": "mutable", - "name": "admin", - "nameLocation": "1030:5:22", - "nodeType": "VariableDeclaration", - "scope": 10584, - "src": "1014:21:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1014:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1013:23:22" - }, - "src": "985:52:22" - } - ], - "scope": 10624, - "src": "537:502:22", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10587, - "name": "IACLEvents", - "nameLocations": ["1084:10:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10585, - "src": "1084:10:22" - }, - "id": 10588, - "nodeType": "InheritanceSpecifier", - "src": "1084:10:22" - }, - { - "baseName": { - "id": 10589, - "name": "IACLExceptions", - "nameLocations": ["1096:14:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10564, - "src": "1096:14:22" - }, - "id": 10590, - "nodeType": "InheritanceSpecifier", - "src": "1096:14:22" - }, - { - "baseName": { - "id": 10591, - "name": "IVersion", - "nameLocations": ["1112:8:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "1112:8:22" - }, - "id": 10592, - "nodeType": "InheritanceSpecifier", - "src": "1112:8:22" - } - ], - "canonicalName": "IACL", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 10586, - "nodeType": "StructuredDocumentation", - "src": "1041:25:22", - "text": "@title ACL interface" - }, - "fullyImplemented": false, - "id": 10623, - "linearizedBaseContracts": [10623, 12963, 10564, 10585], - "name": "IACL", - "nameLocation": "1076:4:22", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10593, - "nodeType": "StructuredDocumentation", - "src": "1127:110:22", - "text": "@dev Returns true if the address is a pausable admin and false if not\n @param addr Address to check" - }, - "functionSelector": "3a41ec64", - "id": 10600, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isPausableAdmin", - "nameLocation": "1251:15:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10595, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1275:4:22", - "nodeType": "VariableDeclaration", - "scope": 10600, - "src": "1267:12:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10594, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1267:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1266:14:22" - }, - "returnParameters": { - "id": 10599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10598, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10600, - "src": "1304:4:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10597, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1304:4:22", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1303:6:22" - }, - "scope": 10623, - "src": "1242:68:22", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10601, - "nodeType": "StructuredDocumentation", - "src": "1316:110:22", - "text": "@dev Returns true if the address is unpausable admin and false if not\n @param addr Address to check" - }, - "functionSelector": "d4eb5db0", - "id": 10608, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isUnpausableAdmin", - "nameLocation": "1440:17:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10604, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10603, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1466:4:22", - "nodeType": "VariableDeclaration", - "scope": 10608, - "src": "1458:12:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10602, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1458:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1457:14:22" - }, - "returnParameters": { - "id": 10607, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10606, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10608, - "src": "1495:4:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10605, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1495:4:22", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1494:6:22" - }, - "scope": 10623, - "src": "1431:70:22", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10609, - "nodeType": "StructuredDocumentation", - "src": "1507:99:22", - "text": "@dev Returns true if an address has configurator rights\n @param account Address to check" - }, - "functionSelector": "5f259aba", - "id": 10616, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isConfigurator", - "nameLocation": "1620:14:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10612, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10611, - "mutability": "mutable", - "name": "account", - "nameLocation": "1643:7:22", - "nodeType": "VariableDeclaration", - "scope": 10616, - "src": "1635:15:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10610, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1635:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1634:17:22" - }, - "returnParameters": { - "id": 10615, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10614, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10616, - "src": "1675:4:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10613, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1675:4:22", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1674:6:22" - }, - "scope": 10623, - "src": "1611:70:22", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10617, - "nodeType": "StructuredDocumentation", - "src": "1687:40:22", - "text": "@dev Returns address of configurator" - }, - "functionSelector": "8da5cb5b", - "id": 10622, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "owner", - "nameLocation": "1741:5:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10618, - "nodeType": "ParameterList", - "parameters": [], - "src": "1746:2:22" - }, - "returnParameters": { - "id": 10621, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10620, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10622, - "src": "1772:7:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10619, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1772:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1771:9:22" - }, - "scope": 10623, - "src": "1732:49:22", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10624, - "src": "1066:717:22", - "usedErrors": [10558, 10563] - } - ], - "src": "123:1661:22" - }, - "id": 22 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol", - "exportedSymbols": { - "IAccountFactory": [10721], - "IAccountFactoryEvents": [10657], - "IAccountFactoryGetters": [10698], - "IVersion": [12963] - }, - "id": 10722, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10625, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:23" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10627, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10722, - "sourceUnit": 12964, - "src": "148:42:23", - "symbolAliases": [ - { - "foreign": { - "id": 10626, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:23", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IAccountFactoryEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10657, - "linearizedBaseContracts": [10657], - "name": "IAccountFactoryEvents", - "nameLocation": "202:21:23", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 10628, - "nodeType": "StructuredDocumentation", - "src": "230:120:23", - "text": "@dev Emits when the account mining contract is changed\n @notice Not applicable to factories deployed after V2" - }, - "eventSelector": "b5b22c95380a75185488532000fd4826f19e58c5eba212f266d9861a44b671fc", - "id": 10632, - "name": "AccountMinerChanged", - "nameLocation": "361:19:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 10631, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10630, - "indexed": true, - "mutability": "mutable", - "name": "miner", - "nameLocation": "397:5:23", - "nodeType": "VariableDeclaration", - "scope": 10632, - "src": "381:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10629, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "381:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "380:23:23" - }, - "src": "355:49:23" - }, - { - "anonymous": false, - "documentation": { - "id": 10633, - "nodeType": "StructuredDocumentation", - "src": "410:51:23", - "text": "@dev Emits when a new Credit Account is created" - }, - "eventSelector": "9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc3", - "id": 10637, - "name": "NewCreditAccount", - "nameLocation": "472:16:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 10636, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10635, - "indexed": true, - "mutability": "mutable", - "name": "account", - "nameLocation": "505:7:23", - "nodeType": "VariableDeclaration", - "scope": 10637, - "src": "489:23:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10634, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "489:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "488:25:23" - }, - "src": "466:48:23" - }, - { - "anonymous": false, - "documentation": { - "id": 10638, - "nodeType": "StructuredDocumentation", - "src": "520:70:23", - "text": "@dev Emits when a Credit Manager takes an account from the factory" - }, - "eventSelector": "f3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b103", - "id": 10644, - "name": "InitializeCreditAccount", - "nameLocation": "601:23:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 10643, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10640, - "indexed": true, - "mutability": "mutable", - "name": "account", - "nameLocation": "650:7:23", - "nodeType": "VariableDeclaration", - "scope": 10644, - "src": "634:23:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "634:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10642, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "683:13:23", - "nodeType": "VariableDeclaration", - "scope": 10644, - "src": "667:29:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10641, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "667:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "624:78:23" - }, - "src": "595:108:23" - }, - { - "anonymous": false, - "documentation": { - "id": 10645, - "nodeType": "StructuredDocumentation", - "src": "709:70:23", - "text": "@dev Emits when a Credit Manager returns an account to the factory" - }, - "eventSelector": "ced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d56", - "id": 10649, - "name": "ReturnCreditAccount", - "nameLocation": "790:19:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 10648, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10647, - "indexed": true, - "mutability": "mutable", - "name": "account", - "nameLocation": "826:7:23", - "nodeType": "VariableDeclaration", - "scope": 10649, - "src": "810:23:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "810:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "809:25:23" - }, - "src": "784:51:23" - }, - { - "anonymous": false, - "documentation": { - "id": 10650, - "nodeType": "StructuredDocumentation", - "src": "841:94:23", - "text": "@dev Emits when a Credit Account is taking out of the factory forever\n by root" - }, - "eventSelector": "25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce6", - "id": 10656, - "name": "TakeForever", - "nameLocation": "946:11:23", - "nodeType": "EventDefinition", - "parameters": { - "id": 10655, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10652, - "indexed": true, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "974:13:23", - "nodeType": "VariableDeclaration", - "scope": 10656, - "src": "958:29:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10651, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "958:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10654, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "1005:2:23", - "nodeType": "VariableDeclaration", - "scope": 10656, - "src": "989:18:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10653, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "989:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "957:51:23" - }, - "src": "940:69:23" - } - ], - "scope": 10722, - "src": "192:819:23", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IAccountFactoryGetters", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 10698, - "linearizedBaseContracts": [10698], - "name": "IAccountFactoryGetters", - "nameLocation": "1023:22:23", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10658, - "nodeType": "StructuredDocumentation", - "src": "1052:193:23", - "text": "@dev Gets the next available credit account after the passed one, or address(0) if the passed account is the tail\n @param creditAccount Credit Account previous to the one to retrieve" - }, - "functionSelector": "765e0159", - "id": 10665, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getNext", - "nameLocation": "1259:7:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10661, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10660, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "1275:13:23", - "nodeType": "VariableDeclaration", - "scope": 10665, - "src": "1267:21:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10659, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1267:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1266:23:23" - }, - "returnParameters": { - "id": 10664, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10663, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10665, - "src": "1313:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10662, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1313:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1312:9:23" - }, - "scope": 10698, - "src": "1250:72:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10666, - "nodeType": "StructuredDocumentation", - "src": "1328:31:23", - "text": "@dev Head of CA linked list" - }, - "functionSelector": "8f7dcfa3", - "id": 10671, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "head", - "nameLocation": "1373:4:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10667, - "nodeType": "ParameterList", - "parameters": [], - "src": "1377:2:23" - }, - "returnParameters": { - "id": 10670, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10669, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10671, - "src": "1403:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10668, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1403:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1402:9:23" - }, - "scope": 10698, - "src": "1364:48:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10672, - "nodeType": "StructuredDocumentation", - "src": "1418:31:23", - "text": "@dev Tail of CA linked list" - }, - "functionSelector": "13d8c840", - "id": 10677, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "tail", - "nameLocation": "1463:4:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10673, - "nodeType": "ParameterList", - "parameters": [], - "src": "1467:2:23" - }, - "returnParameters": { - "id": 10676, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10675, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10677, - "src": "1493:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1493:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1492:9:23" - }, - "scope": 10698, - "src": "1454:48:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10678, - "nodeType": "StructuredDocumentation", - "src": "1508:62:23", - "text": "@dev Returns the number of unused credit accounts in stock" - }, - "functionSelector": "b1939763", - "id": 10683, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "countCreditAccountsInStock", - "nameLocation": "1584:26:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10679, - "nodeType": "ParameterList", - "parameters": [], - "src": "1610:2:23" - }, - "returnParameters": { - "id": 10682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10681, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10683, - "src": "1636:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10680, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1636:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1635:9:23" - }, - "scope": 10698, - "src": "1575:70:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10684, - "nodeType": "StructuredDocumentation", - "src": "1651:111:23", - "text": "@dev Returns the credit account address under the passed id\n @param id The index of the requested CA" - }, - "functionSelector": "e3ba9ace", - "id": 10691, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditAccounts", - "nameLocation": "1776:14:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10686, - "mutability": "mutable", - "name": "id", - "nameLocation": "1799:2:23", - "nodeType": "VariableDeclaration", - "scope": 10691, - "src": "1791:10:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10685, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1791:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1790:12:23" - }, - "returnParameters": { - "id": 10690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10689, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10691, - "src": "1826:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10688, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1826:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1825:9:23" - }, - "scope": 10698, - "src": "1767:68:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10692, - "nodeType": "StructuredDocumentation", - "src": "1841:55:23", - "text": "@dev Returns the number of deployed credit accounts" - }, - "functionSelector": "b60e8518", - "id": 10697, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "countCreditAccounts", - "nameLocation": "1910:19:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10693, - "nodeType": "ParameterList", - "parameters": [], - "src": "1929:2:23" - }, - "returnParameters": { - "id": 10696, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10695, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10697, - "src": "1955:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10694, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1955:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1954:9:23" - }, - "scope": 10698, - "src": "1901:63:23", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10722, - "src": "1013:953:23", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10699, - "name": "IAccountFactoryGetters", - "nameLocations": ["2001:22:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10698, - "src": "2001:22:23" - }, - "id": 10700, - "nodeType": "InheritanceSpecifier", - "src": "2001:22:23" - }, - { - "baseName": { - "id": 10701, - "name": "IAccountFactoryEvents", - "nameLocations": ["2029:21:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10657, - "src": "2029:21:23" - }, - "id": 10702, - "nodeType": "InheritanceSpecifier", - "src": "2029:21:23" - }, - { - "baseName": { - "id": 10703, - "name": "IVersion", - "nameLocations": ["2056:8:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "2056:8:23" - }, - "id": 10704, - "nodeType": "InheritanceSpecifier", - "src": "2056:8:23" - } - ], - "canonicalName": "IAccountFactory", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 10721, - "linearizedBaseContracts": [10721, 12963, 10657, 10698], - "name": "IAccountFactory", - "nameLocation": "1978:15:23", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10705, - "nodeType": "StructuredDocumentation", - "src": "2071:58:23", - "text": "@dev Provides a new credit account to a Credit Manager" - }, - "functionSelector": "21d18456", - "id": 10714, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "takeCreditAccount", - "nameLocation": "2143:17:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10710, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10707, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "2178:15:23", - "nodeType": "VariableDeclaration", - "scope": 10714, - "src": "2170:23:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10706, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2170:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10709, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "2211:22:23", - "nodeType": "VariableDeclaration", - "scope": 10714, - "src": "2203:30:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2203:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2160:79:23" - }, - "returnParameters": { - "id": 10713, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10712, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10714, - "src": "2258:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10711, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2258:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2257:9:23" - }, - "scope": 10721, - "src": "2134:133:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10715, - "nodeType": "StructuredDocumentation", - "src": "2273:148:23", - "text": "@dev Retrieves the Credit Account from the Credit Manager and adds it to the stock\n @param usedAccount Address of returned credit account" - }, - "functionSelector": "89b77b3e", - "id": 10720, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "returnCreditAccount", - "nameLocation": "2435:19:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10718, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10717, - "mutability": "mutable", - "name": "usedAccount", - "nameLocation": "2463:11:23", - "nodeType": "VariableDeclaration", - "scope": 10720, - "src": "2455:19:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10716, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2455:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2454:21:23" - }, - "returnParameters": { - "id": 10719, - "nodeType": "ParameterList", - "parameters": [], - "src": "2484:0:23" - }, - "scope": 10721, - "src": "2426:59:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10722, - "src": "1968:519:23", - "usedErrors": [] - } - ], - "src": "123:2365:23" - }, - "id": 23 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol", - "exportedSymbols": { - "IAddressProvider": [10799], - "IAddressProviderEvents": [10733], - "IVersion": [12963] - }, - "id": 10800, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10723, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:24" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10725, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10800, - "sourceUnit": 12964, - "src": "148:42:24", - "symbolAliases": [ - { - "foreign": { - "id": 10724, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IAddressProviderEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10733, - "linearizedBaseContracts": [10733], - "name": "IAddressProviderEvents", - "nameLocation": "202:22:24", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 10726, - "nodeType": "StructuredDocumentation", - "src": "231:57:24", - "text": "@dev Emits when an address is set for a contract role" - }, - "eventSelector": "b37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c691", - "id": 10732, - "name": "AddressSet", - "nameLocation": "299:10:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 10731, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10728, - "indexed": true, - "mutability": "mutable", - "name": "service", - "nameLocation": "326:7:24", - "nodeType": "VariableDeclaration", - "scope": 10732, - "src": "310:23:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10727, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "310:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10730, - "indexed": true, - "mutability": "mutable", - "name": "newAddress", - "nameLocation": "351:10:24", - "nodeType": "VariableDeclaration", - "scope": 10732, - "src": "335:26:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10729, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "335:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "309:53:24" - }, - "src": "293:70:24" - } - ], - "scope": 10800, - "src": "192:173:24", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10735, - "name": "IAddressProviderEvents", - "nameLocations": ["459:22:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10733, - "src": "459:22:24" - }, - "id": 10736, - "nodeType": "InheritanceSpecifier", - "src": "459:22:24" - }, - { - "baseName": { - "id": 10737, - "name": "IVersion", - "nameLocations": ["483:8:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "483:8:24" - }, - "id": 10738, - "nodeType": "InheritanceSpecifier", - "src": "483:8:24" - } - ], - "canonicalName": "IAddressProvider", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 10734, - "nodeType": "StructuredDocumentation", - "src": "367:62:24", - "text": "@title Optimised for front-end Address Provider interface" - }, - "fullyImplemented": false, - "id": 10799, - "linearizedBaseContracts": [10799, 12963, 10733], - "name": "IAddressProvider", - "nameLocation": "439:16:24", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10739, - "nodeType": "StructuredDocumentation", - "src": "498:35:24", - "text": "@return Address of ACL contract" - }, - "functionSelector": "08737695", - "id": 10744, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getACL", - "nameLocation": "547:6:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10740, - "nodeType": "ParameterList", - "parameters": [], - "src": "553:2:24" - }, - "returnParameters": { - "id": 10743, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10742, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10744, - "src": "579:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10741, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "579:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "578:9:24" - }, - "scope": 10799, - "src": "538:50:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10745, - "nodeType": "StructuredDocumentation", - "src": "594:40:24", - "text": "@return Address of ContractsRegister" - }, - "functionSelector": "c513c9bb", - "id": 10750, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getContractsRegister", - "nameLocation": "648:20:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10746, - "nodeType": "ParameterList", - "parameters": [], - "src": "668:2:24" - }, - "returnParameters": { - "id": 10749, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10748, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10750, - "src": "694:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10747, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "694:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "693:9:24" - }, - "scope": 10799, - "src": "639:64:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10751, - "nodeType": "StructuredDocumentation", - "src": "709:37:24", - "text": "@return Address of AccountFactory" - }, - "functionSelector": "9068a868", - "id": 10756, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAccountFactory", - "nameLocation": "760:17:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10752, - "nodeType": "ParameterList", - "parameters": [], - "src": "777:2:24" - }, - "returnParameters": { - "id": 10755, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10754, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10756, - "src": "803:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10753, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "803:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "802:9:24" - }, - "scope": 10799, - "src": "751:61:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10757, - "nodeType": "StructuredDocumentation", - "src": "818:37:24", - "text": "@return Address of DataCompressor" - }, - "functionSelector": "060678c2", - "id": 10762, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDataCompressor", - "nameLocation": "869:17:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10758, - "nodeType": "ParameterList", - "parameters": [], - "src": "886:2:24" - }, - "returnParameters": { - "id": 10761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10760, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10762, - "src": "912:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10759, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "912:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "911:9:24" - }, - "scope": 10799, - "src": "860:61:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10763, - "nodeType": "StructuredDocumentation", - "src": "927:33:24", - "text": "@return Address of GEAR token" - }, - "functionSelector": "affd9243", - "id": 10768, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getGearToken", - "nameLocation": "974:12:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10764, - "nodeType": "ParameterList", - "parameters": [], - "src": "986:2:24" - }, - "returnParameters": { - "id": 10767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10766, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10768, - "src": "1012:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10765, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1012:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1011:9:24" - }, - "scope": 10799, - "src": "965:56:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10769, - "nodeType": "StructuredDocumentation", - "src": "1027:33:24", - "text": "@return Address of WETH token" - }, - "functionSelector": "4c252f91", - "id": 10774, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getWethToken", - "nameLocation": "1074:12:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10770, - "nodeType": "ParameterList", - "parameters": [], - "src": "1086:2:24" - }, - "returnParameters": { - "id": 10773, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10772, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10774, - "src": "1112:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10771, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1112:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1111:9:24" - }, - "scope": 10799, - "src": "1065:56:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10775, - "nodeType": "StructuredDocumentation", - "src": "1127:35:24", - "text": "@return Address of WETH Gateway" - }, - "functionSelector": "77532ed9", - "id": 10780, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getWETHGateway", - "nameLocation": "1176:14:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10776, - "nodeType": "ParameterList", - "parameters": [], - "src": "1190:2:24" - }, - "returnParameters": { - "id": 10779, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10778, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10780, - "src": "1216:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10777, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1216:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1215:9:24" - }, - "scope": 10799, - "src": "1167:58:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10781, - "nodeType": "StructuredDocumentation", - "src": "1231:34:24", - "text": "@return Address of PriceOracle" - }, - "functionSelector": "fca513a8", - "id": 10786, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPriceOracle", - "nameLocation": "1279:14:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10782, - "nodeType": "ParameterList", - "parameters": [], - "src": "1293:2:24" - }, - "returnParameters": { - "id": 10785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10784, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10786, - "src": "1319:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1319:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1318:9:24" - }, - "scope": 10799, - "src": "1270:58:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10787, - "nodeType": "StructuredDocumentation", - "src": "1334:44:24", - "text": "@return Address of DAO Treasury Multisig" - }, - "functionSelector": "26c74fc3", - "id": 10792, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getTreasuryContract", - "nameLocation": "1392:19:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10788, - "nodeType": "ParameterList", - "parameters": [], - "src": "1411:2:24" - }, - "returnParameters": { - "id": 10791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10790, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10792, - "src": "1437:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10789, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1437:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1436:9:24" - }, - "scope": 10799, - "src": "1383:63:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10793, - "nodeType": "StructuredDocumentation", - "src": "1452:33:24", - "text": "@return Address of PathFinder" - }, - "functionSelector": "44b88563", - "id": 10798, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getLeveragedActions", - "nameLocation": "1499:19:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10794, - "nodeType": "ParameterList", - "parameters": [], - "src": "1518:2:24" - }, - "returnParameters": { - "id": 10797, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10796, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10798, - "src": "1544:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10795, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1544:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1543:9:24" - }, - "scope": 10799, - "src": "1490:63:24", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10800, - "src": "429:1126:24", - "usedErrors": [] - } - ], - "src": "123:1433:24" - }, - "id": 24 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol", - "exportedSymbols": { - "IBlacklistHelper": [10889], - "IBlacklistHelperEvents": [10834], - "IBlacklistHelperExceptions": [10844], - "IVersion": [12963] - }, - "id": 10890, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10801, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:25" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10803, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10890, - "sourceUnit": 12964, - "src": "149:42:25", - "symbolAliases": [ - { - "foreign": { - "id": 10802, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "158:8:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IBlacklistHelperEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10834, - "linearizedBaseContracts": [10834], - "name": "IBlacklistHelperEvents", - "nameLocation": "203:22:25", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 10804, - "nodeType": "StructuredDocumentation", - "src": "232:65:25", - "text": "@dev Emitted when a borrower's claimable balance is increased" - }, - "eventSelector": "bc75c7cef9767751e0c642bcefb2d29f7cfd455959c2323505bc3d3c5b70fafd", - "id": 10812, - "name": "ClaimableAdded", - "nameLocation": "308:14:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 10811, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10806, - "indexed": true, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "348:10:25", - "nodeType": "VariableDeclaration", - "scope": 10812, - "src": "332:26:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10805, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "332:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10808, - "indexed": true, - "mutability": "mutable", - "name": "holder", - "nameLocation": "384:6:25", - "nodeType": "VariableDeclaration", - "scope": 10812, - "src": "368:22:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10807, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "368:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10810, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "408:6:25", - "nodeType": "VariableDeclaration", - "scope": 10812, - "src": "400:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10809, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "400:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "322:98:25" - }, - "src": "302:119:25" - }, - { - "anonymous": false, - "documentation": { - "id": 10813, - "nodeType": "StructuredDocumentation", - "src": "427:52:25", - "text": "@dev Emitted when a borrower claims their tokens" - }, - "eventSelector": "913c992353dc81b7a8ba31496c484e9b6306bd2f6c509a649a38fdf5e1c953b2", - "id": 10823, - "name": "Claimed", - "nameLocation": "490:7:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 10822, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10815, - "indexed": true, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "523:10:25", - "nodeType": "VariableDeclaration", - "scope": 10823, - "src": "507:26:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10814, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "507:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10817, - "indexed": true, - "mutability": "mutable", - "name": "holder", - "nameLocation": "559:6:25", - "nodeType": "VariableDeclaration", - "scope": 10823, - "src": "543:22:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10816, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "543:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10819, - "indexed": false, - "mutability": "mutable", - "name": "to", - "nameLocation": "583:2:25", - "nodeType": "VariableDeclaration", - "scope": 10823, - "src": "575:10:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10818, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "575:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10821, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "603:6:25", - "nodeType": "VariableDeclaration", - "scope": 10823, - "src": "595:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10820, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "595:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "497:118:25" - }, - "src": "484:132:25" - }, - { - "anonymous": false, - "documentation": { - "id": 10824, - "nodeType": "StructuredDocumentation", - "src": "622:65:25", - "text": "@dev Emitted when a Credit Facade is added to BlacklistHelper" - }, - "eventSelector": "bd5b26ef7954344752b759707e6bcd78451ef30ebacaf751abec2ede07b8e24f", - "id": 10828, - "name": "CreditFacadeAdded", - "nameLocation": "698:17:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 10827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10826, - "indexed": true, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "732:12:25", - "nodeType": "VariableDeclaration", - "scope": 10828, - "src": "716:28:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10825, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "716:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "715:30:25" - }, - "src": "692:54:25" - }, - { - "anonymous": false, - "documentation": { - "id": 10829, - "nodeType": "StructuredDocumentation", - "src": "752:69:25", - "text": "@dev Emitted when a Credit Facade is removed from BlacklistHelper" - }, - "eventSelector": "794e243b3141951917f506b06ff4d020392f585dc4a81a052fde47ff96d438de", - "id": 10833, - "name": "CreditFacadeRemoved", - "nameLocation": "832:19:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 10832, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10831, - "indexed": true, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "868:12:25", - "nodeType": "VariableDeclaration", - "scope": 10833, - "src": "852:28:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10830, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "852:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "851:30:25" - }, - "src": "826:56:25" - } - ], - "scope": 10890, - "src": "193:691:25", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IBlacklistHelperExceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10844, - "linearizedBaseContracts": [10844], - "name": "IBlacklistHelperExceptions", - "nameLocation": "896:26:25", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10835, - "nodeType": "StructuredDocumentation", - "src": "929:80:25", - "text": "@dev Thrown when an access-restricted function is called by non-CreditFacade" - }, - "errorSelector": "d8026b22", - "id": 10837, - "name": "CreditFacadeOnlyException", - "nameLocation": "1020:25:25", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10836, - "nodeType": "ParameterList", - "parameters": [], - "src": "1045:2:25" - }, - "src": "1014:34:25" - }, - { - "documentation": { - "id": 10838, - "nodeType": "StructuredDocumentation", - "src": "1054:92:25", - "text": "@dev Thrown when attempting to add a Credit Facade that has non-blacklistable underlying" - }, - "errorSelector": "28cfda1b", - "id": 10840, - "name": "CreditFacadeNonBlacklistable", - "nameLocation": "1157:28:25", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10839, - "nodeType": "ParameterList", - "parameters": [], - "src": "1185:2:25" - }, - "src": "1151:37:25" - }, - { - "documentation": { - "id": 10841, - "nodeType": "StructuredDocumentation", - "src": "1194:80:25", - "text": "@dev Thrown when attempting to claim funds without having anything claimable" - }, - "errorSelector": "45326b6d", - "id": 10843, - "name": "NothingToClaimException", - "nameLocation": "1285:23:25", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10842, - "nodeType": "ParameterList", - "parameters": [], - "src": "1308:2:25" - }, - "src": "1279:32:25" - } - ], - "scope": 10890, - "src": "886:427:25", - "usedErrors": [10837, 10840, 10843] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10845, - "name": "IBlacklistHelperEvents", - "nameLocations": ["1349:22:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10834, - "src": "1349:22:25" - }, - "id": 10846, - "nodeType": "InheritanceSpecifier", - "src": "1349:22:25" - }, - { - "baseName": { - "id": 10847, - "name": "IBlacklistHelperExceptions", - "nameLocations": ["1377:26:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10844, - "src": "1377:26:25" - }, - "id": 10848, - "nodeType": "InheritanceSpecifier", - "src": "1377:26:25" - }, - { - "baseName": { - "id": 10849, - "name": "IVersion", - "nameLocations": ["1409:8:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "1409:8:25" - }, - "id": 10850, - "nodeType": "InheritanceSpecifier", - "src": "1409:8:25" - } - ], - "canonicalName": "IBlacklistHelper", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 10889, - "linearizedBaseContracts": [10889, 12963, 10844, 10834], - "name": "IBlacklistHelper", - "nameLocation": "1325:16:25", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10851, - "nodeType": "StructuredDocumentation", - "src": "1424:171:25", - "text": "@dev Returns whether the account is blacklisted for a particular underlying\n @param underlying Underlying token to check\n @param account Account to check" - }, - "functionSelector": "4028eddc", - "id": 10860, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isBlacklisted", - "nameLocation": "1609:13:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10856, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10853, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "1631:10:25", - "nodeType": "VariableDeclaration", - "scope": 10860, - "src": "1623:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10852, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1623:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10855, - "mutability": "mutable", - "name": "account", - "nameLocation": "1651:7:25", - "nodeType": "VariableDeclaration", - "scope": 10860, - "src": "1643:15:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10854, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1643:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1622:37:25" - }, - "returnParameters": { - "id": 10859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10858, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10860, - "src": "1707:4:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10857, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1707:4:25", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1706:6:25" - }, - "scope": 10889, - "src": "1600:113:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10861, - "nodeType": "StructuredDocumentation", - "src": "1719:173:25", - "text": "@dev Transfers the sender's claimable balance of underlying to the specified address\n @param underlying Underlying to transfer\n @param to Recipient address" - }, - "functionSelector": "21c0b342", - "id": 10868, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "claim", - "nameLocation": "1906:5:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10866, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10863, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "1920:10:25", - "nodeType": "VariableDeclaration", - "scope": 10868, - "src": "1912:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10862, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1912:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10865, - "mutability": "mutable", - "name": "to", - "nameLocation": "1940:2:25", - "nodeType": "VariableDeclaration", - "scope": 10868, - "src": "1932:10:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10864, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1932:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1911:32:25" - }, - "returnParameters": { - "id": 10867, - "nodeType": "ParameterList", - "parameters": [], - "src": "1952:0:25" - }, - "scope": 10889, - "src": "1897:56:25", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10869, - "nodeType": "StructuredDocumentation", - "src": "1959:259:25", - "text": "@dev Increases the underlying balance available to claim by the account\n @param underlying Underlying to increase claimable for\n @param holder Account to increase claimable for\n @param amount Amount to increase claimable claimable for" - }, - "functionSelector": "9e389610", - "id": 10878, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addClaimable", - "nameLocation": "2232:12:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10876, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10871, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "2262:10:25", - "nodeType": "VariableDeclaration", - "scope": 10878, - "src": "2254:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10870, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2254:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10873, - "mutability": "mutable", - "name": "holder", - "nameLocation": "2290:6:25", - "nodeType": "VariableDeclaration", - "scope": 10878, - "src": "2282:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10872, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2282:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10875, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2314:6:25", - "nodeType": "VariableDeclaration", - "scope": 10878, - "src": "2306:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10874, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2306:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2244:82:25" - }, - "returnParameters": { - "id": 10877, - "nodeType": "ParameterList", - "parameters": [], - "src": "2335:0:25" - }, - "scope": 10889, - "src": "2223:113:25", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10879, - "nodeType": "StructuredDocumentation", - "src": "2342:163:25", - "text": "@dev Returns the amount claimable by an account\n @param underlying Underlying to get the amount for\n @param holder Acccount to get the amount for" - }, - "functionSelector": "d4570c1c", - "id": 10888, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "claimable", - "nameLocation": "2519:9:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10884, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10881, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "2537:10:25", - "nodeType": "VariableDeclaration", - "scope": 10888, - "src": "2529:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10880, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2529:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10883, - "mutability": "mutable", - "name": "holder", - "nameLocation": "2557:6:25", - "nodeType": "VariableDeclaration", - "scope": 10888, - "src": "2549:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10882, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2549:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2528:36:25" - }, - "returnParameters": { - "id": 10887, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10886, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10888, - "src": "2612:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10885, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2612:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2611:9:25" - }, - "scope": 10889, - "src": "2510:111:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10890, - "src": "1315:1308:25", - "usedErrors": [10837, 10840, 10843] - } - ], - "src": "123:2501:25" - }, - "id": 25 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol", - "exportedSymbols": { - "IContractsRegister": [10967], - "IContractsRegisterEvents": [10904], - "IVersion": [12963] - }, - "id": 10968, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10891, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:26" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10893, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 10968, - "sourceUnit": 12964, - "src": "148:42:26", - "symbolAliases": [ - { - "foreign": { - "id": 10892, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:26", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IContractsRegisterEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 10904, - "linearizedBaseContracts": [10904], - "name": "IContractsRegisterEvents", - "nameLocation": "202:24:26", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 10894, - "nodeType": "StructuredDocumentation", - "src": "233:58:26", - "text": "@dev Emits when a new pool is registered in the system" - }, - "eventSelector": "f816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e53", - "id": 10898, - "name": "NewPoolAdded", - "nameLocation": "302:12:26", - "nodeType": "EventDefinition", - "parameters": { - "id": 10897, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10896, - "indexed": true, - "mutability": "mutable", - "name": "pool", - "nameLocation": "331:4:26", - "nodeType": "VariableDeclaration", - "scope": 10898, - "src": "315:20:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10895, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "315:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "314:22:26" - }, - "src": "296:41:26" - }, - { - "anonymous": false, - "documentation": { - "id": 10899, - "nodeType": "StructuredDocumentation", - "src": "343:68:26", - "text": "@dev Emits when a new Credit Manager is registered in the system" - }, - "eventSelector": "58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f", - "id": 10903, - "name": "NewCreditManagerAdded", - "nameLocation": "422:21:26", - "nodeType": "EventDefinition", - "parameters": { - "id": 10902, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10901, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "460:13:26", - "nodeType": "VariableDeclaration", - "scope": 10903, - "src": "444:29:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10900, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "444:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "443:31:26" - }, - "src": "416:59:26" - } - ], - "scope": 10968, - "src": "192:285:26", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10905, - "name": "IContractsRegisterEvents", - "nameLocations": ["511:24:26"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10904, - "src": "511:24:26" - }, - "id": 10906, - "nodeType": "InheritanceSpecifier", - "src": "511:24:26" - }, - { - "baseName": { - "id": 10907, - "name": "IVersion", - "nameLocations": ["537:8:26"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "537:8:26" - }, - "id": 10908, - "nodeType": "InheritanceSpecifier", - "src": "537:8:26" - } - ], - "canonicalName": "IContractsRegister", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 10967, - "linearizedBaseContracts": [10967, 12963, 10904], - "name": "IContractsRegister", - "nameLocation": "489:18:26", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10909, - "nodeType": "StructuredDocumentation", - "src": "580:46:26", - "text": "@dev Returns the array of registered pools" - }, - "functionSelector": "673a2a1f", - "id": 10915, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPools", - "nameLocation": "640:8:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10910, - "nodeType": "ParameterList", - "parameters": [], - "src": "648:2:26" - }, - "returnParameters": { - "id": 10914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10913, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10915, - "src": "674:16:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 10911, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "674:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10912, - "nodeType": "ArrayTypeName", - "src": "674:9:26", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "673:18:26" - }, - "scope": 10967, - "src": "631:61:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10916, - "nodeType": "StructuredDocumentation", - "src": "698:115:26", - "text": "@dev Returns a pool address from the list under the passed index\n @param i Index of the pool to retrieve" - }, - "functionSelector": "ac4afa38", - "id": 10923, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "pools", - "nameLocation": "827:5:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10919, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10918, - "mutability": "mutable", - "name": "i", - "nameLocation": "841:1:26", - "nodeType": "VariableDeclaration", - "scope": 10923, - "src": "833:9:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10917, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "833:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "832:11:26" - }, - "returnParameters": { - "id": 10922, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10921, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10923, - "src": "862:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10920, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "862:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "861:9:26" - }, - "scope": 10967, - "src": "818:53:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10924, - "nodeType": "StructuredDocumentation", - "src": "877:50:26", - "text": "@return Returns the number of registered pools" - }, - "functionSelector": "b4ac6860", - "id": 10929, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPoolsCount", - "nameLocation": "941:13:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10925, - "nodeType": "ParameterList", - "parameters": [], - "src": "954:2:26" - }, - "returnParameters": { - "id": 10928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10927, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10929, - "src": "980:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10926, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "980:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "979:9:26" - }, - "scope": 10967, - "src": "932:57:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10930, - "nodeType": "StructuredDocumentation", - "src": "995:53:26", - "text": "@dev Returns true if the passed address is a pool" - }, - "functionSelector": "5b16ebb7", - "id": 10937, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isPool", - "nameLocation": "1062:6:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10933, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10932, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10937, - "src": "1069:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10931, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1069:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1068:9:26" - }, - "returnParameters": { - "id": 10936, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10935, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10937, - "src": "1101:4:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10934, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1101:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1100:6:26" - }, - "scope": 10967, - "src": "1053:54:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10938, - "nodeType": "StructuredDocumentation", - "src": "1151:56:26", - "text": "@dev Returns the array of registered Credit Managers" - }, - "functionSelector": "94144856", - "id": 10944, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditManagers", - "nameLocation": "1221:17:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10939, - "nodeType": "ParameterList", - "parameters": [], - "src": "1238:2:26" - }, - "returnParameters": { - "id": 10943, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10942, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10944, - "src": "1264:16:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 10940, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1264:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 10941, - "nodeType": "ArrayTypeName", - "src": "1264:9:26", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "1263:18:26" - }, - "scope": 10967, - "src": "1212:70:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10945, - "nodeType": "StructuredDocumentation", - "src": "1288:137:26", - "text": "@dev Returns a Credit Manager's address from the list under the passed index\n @param i Index of the Credit Manager to retrieve" - }, - "functionSelector": "1e16e4fc", - "id": 10952, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagers", - "nameLocation": "1439:14:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10948, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10947, - "mutability": "mutable", - "name": "i", - "nameLocation": "1462:1:26", - "nodeType": "VariableDeclaration", - "scope": 10952, - "src": "1454:9:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10946, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1454:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1453:11:26" - }, - "returnParameters": { - "id": 10951, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10950, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10952, - "src": "1483:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10949, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1483:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1482:9:26" - }, - "scope": 10967, - "src": "1430:62:26", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10953, - "nodeType": "StructuredDocumentation", - "src": "1498:60:26", - "text": "@return Returns the number of registered Credit Managers" - }, - "functionSelector": "c29277cd", - "id": 10958, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditManagersCount", - "nameLocation": "1572:22:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10954, - "nodeType": "ParameterList", - "parameters": [], - "src": "1594:2:26" - }, - "returnParameters": { - "id": 10957, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10956, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10958, - "src": "1620:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10955, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1620:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1619:9:26" - }, - "scope": 10967, - "src": "1563:66:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10959, - "nodeType": "StructuredDocumentation", - "src": "1635:63:26", - "text": "@dev Returns true if the passed address is a Credit Manager" - }, - "functionSelector": "6fbc6f6b", - "id": 10966, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isCreditManager", - "nameLocation": "1712:15:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10962, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10961, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10966, - "src": "1728:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10960, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1728:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1727:9:26" - }, - "returnParameters": { - "id": 10965, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10964, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 10966, - "src": "1760:4:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 10963, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1760:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1759:6:26" - }, - "scope": 10967, - "src": "1703:63:26", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 10968, - "src": "479:1289:26", - "usedErrors": [] - } - ], - "src": "123:1646:26" - }, - "id": 26 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol", - "exportedSymbols": { - "ICrediAccountExceptions": [10979], - "ICreditAccount": [11064], - "IVersion": [12963] - }, - "id": 11065, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 10969, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:27" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 10971, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11065, - "sourceUnit": 12964, - "src": "148:42:27", - "symbolAliases": [ - { - "foreign": { - "id": 10970, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:27", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICrediAccountExceptions", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 10972, - "nodeType": "StructuredDocumentation", - "src": "192:397:27", - "text": "@title Credit Account\n @notice Implements generic credit account logic:\n - Holds collateral assets\n - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized\n - Transfers assets\n - Executes financial orders by calling connected protocols on its behalf\n More: https://dev.gearbox.fi/developers/credit/credit_account" - }, - "fullyImplemented": true, - "id": 10979, - "linearizedBaseContracts": [10979], - "name": "ICrediAccountExceptions", - "nameLocation": "600:23:27", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10973, - "nodeType": "StructuredDocumentation", - "src": "630:65:27", - "text": "@dev throws if the caller is not the connected Credit Manager" - }, - "errorSelector": "1f511167", - "id": 10975, - "name": "CallerNotCreditManagerException", - "nameLocation": "706:31:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10974, - "nodeType": "ParameterList", - "parameters": [], - "src": "737:2:27" - }, - "src": "700:40:27" - }, - { - "documentation": { - "id": 10976, - "nodeType": "StructuredDocumentation", - "src": "746:48:27", - "text": "@dev throws if the caller is not the factory" - }, - "errorSelector": "b126b848", - "id": 10978, - "name": "CallerNotFactoryException", - "nameLocation": "805:25:27", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 10977, - "nodeType": "ParameterList", - "parameters": [], - "src": "830:2:27" - }, - "src": "799:34:27" - } - ], - "scope": 11065, - "src": "590:245:27", - "usedErrors": [10975, 10978] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 10980, - "name": "ICrediAccountExceptions", - "nameLocations": ["865:23:27"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10979, - "src": "865:23:27" - }, - "id": 10981, - "nodeType": "InheritanceSpecifier", - "src": "865:23:27" - }, - { - "baseName": { - "id": 10982, - "name": "IVersion", - "nameLocations": ["890:8:27"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "890:8:27" - }, - "id": 10983, - "nodeType": "InheritanceSpecifier", - "src": "890:8:27" - } - ], - "canonicalName": "ICreditAccount", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11064, - "linearizedBaseContracts": [11064, 12963, 10979], - "name": "ICreditAccount", - "nameLocation": "847:14:27", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 10984, - "nodeType": "StructuredDocumentation", - "src": "905:136:27", - "text": "@dev Called on new Credit Account creation.\n @notice Initialize is used instead of constructor, since the contract is cloned." - }, - "functionSelector": "8129fc1c", - "id": 10987, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "initialize", - "nameLocation": "1055:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10985, - "nodeType": "ParameterList", - "parameters": [], - "src": "1065:2:27" - }, - "returnParameters": { - "id": 10986, - "nodeType": "ParameterList", - "parameters": [], - "src": "1076:0:27" - }, - "scope": 11064, - "src": "1046:31:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10988, - "nodeType": "StructuredDocumentation", - "src": "1083:319:27", - "text": "@dev Connects this credit account to a Credit Manager. Restricted to the account factory (owner) only.\n @param _creditManager Credit manager address\n @param _borrowedAmount The amount borrowed at Credit Account opening\n @param _cumulativeIndexAtOpen The interest index at Credit Account opening" - }, - "functionSelector": "c75b5a71", - "id": 10997, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "connectTo", - "nameLocation": "1416:9:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 10995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 10990, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "1443:14:27", - "nodeType": "VariableDeclaration", - "scope": 10997, - "src": "1435:22:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 10989, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1435:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10992, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "1475:15:27", - "nodeType": "VariableDeclaration", - "scope": 10997, - "src": "1467:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10991, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1467:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 10994, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "1508:22:27", - "nodeType": "VariableDeclaration", - "scope": 10997, - "src": "1500:30:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10993, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1500:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1425:111:27" - }, - "returnParameters": { - "id": 10996, - "nodeType": "ParameterList", - "parameters": [], - "src": "1545:0:27" - }, - "scope": 11064, - "src": "1407:139:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 10998, - "nodeType": "StructuredDocumentation", - "src": "1552:273:27", - "text": "@dev Updates borrowed amount and cumulative index. Restricted to the currently connected Credit Manager.\n @param _borrowedAmount The amount currently lent to the Credit Account\n @param _cumulativeIndexAtOpen New cumulative index to calculate interest from" - }, - "functionSelector": "16128211", - "id": 11005, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "updateParameters", - "nameLocation": "1839:16:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11003, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11000, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "1873:15:27", - "nodeType": "VariableDeclaration", - "scope": 11005, - "src": "1865:23:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 10999, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1865:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11002, - "mutability": "mutable", - "name": "_cumulativeIndexAtOpen", - "nameLocation": "1906:22:27", - "nodeType": "VariableDeclaration", - "scope": 11005, - "src": "1898:30:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11001, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1898:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1855:79:27" - }, - "returnParameters": { - "id": 11004, - "nodeType": "ParameterList", - "parameters": [], - "src": "1943:0:27" - }, - "scope": 11064, - "src": "1830:114:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11006, - "nodeType": "StructuredDocumentation", - "src": "1950:219:27", - "text": "@dev Removes allowance for a token to a 3rd-party contract. Restricted to factory only.\n @param token ERC20 token to remove allowance for.\n @param targetContract Target contract to revoke allowance to." - }, - "functionSelector": "19a16039", - "id": 11013, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cancelAllowance", - "nameLocation": "2183:15:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11011, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11008, - "mutability": "mutable", - "name": "token", - "nameLocation": "2207:5:27", - "nodeType": "VariableDeclaration", - "scope": 11013, - "src": "2199:13:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11007, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2199:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11010, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "2222:14:27", - "nodeType": "VariableDeclaration", - "scope": 11013, - "src": "2214:22:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11009, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2214:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2198:39:27" - }, - "returnParameters": { - "id": 11012, - "nodeType": "ParameterList", - "parameters": [], - "src": "2246:0:27" - }, - "scope": 11064, - "src": "2174:73:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11014, - "nodeType": "StructuredDocumentation", - "src": "2253:281:27", - "text": "@dev Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only.\n @param token Token to be transferred from the Credit Account.\n @param to Address of the recipient.\n @param amount Amount to be transferred." - }, - "functionSelector": "d1660f99", - "id": 11023, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nameLocation": "2548:12:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11021, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11016, - "mutability": "mutable", - "name": "token", - "nameLocation": "2578:5:27", - "nodeType": "VariableDeclaration", - "scope": 11023, - "src": "2570:13:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11015, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2570:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11018, - "mutability": "mutable", - "name": "to", - "nameLocation": "2601:2:27", - "nodeType": "VariableDeclaration", - "scope": 11023, - "src": "2593:10:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11017, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2593:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11020, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2621:6:27", - "nodeType": "VariableDeclaration", - "scope": 11023, - "src": "2613:14:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11019, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2613:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2560:73:27" - }, - "returnParameters": { - "id": 11022, - "nodeType": "ParameterList", - "parameters": [], - "src": "2642:0:27" - }, - "scope": 11064, - "src": "2539:104:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11024, - "nodeType": "StructuredDocumentation", - "src": "2649:60:27", - "text": "@dev Returns the principal amount borrowed from the pool" - }, - "functionSelector": "1afbb7a4", - "id": 11029, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "borrowedAmount", - "nameLocation": "2723:14:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11025, - "nodeType": "ParameterList", - "parameters": [], - "src": "2737:2:27" - }, - "returnParameters": { - "id": 11028, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11027, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11029, - "src": "2763:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11026, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2763:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2762:9:27" - }, - "scope": 11064, - "src": "2714:58:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11030, - "nodeType": "StructuredDocumentation", - "src": "2778:90:27", - "text": "@dev Returns the cumulative interest index since the last Credit Account's debt update" - }, - "functionSelector": "17d11a15", - "id": 11035, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cumulativeIndexAtOpen", - "nameLocation": "2882:21:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11031, - "nodeType": "ParameterList", - "parameters": [], - "src": "2903:2:27" - }, - "returnParameters": { - "id": 11034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11033, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11035, - "src": "2929:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11032, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2929:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2928:9:27" - }, - "scope": 11064, - "src": "2873:65:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11036, - "nodeType": "StructuredDocumentation", - "src": "2944:80:27", - "text": "@dev Returns the block at which the contract was last taken from the factory" - }, - "functionSelector": "3dc54b40", - "id": 11041, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "since", - "nameLocation": "3038:5:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11037, - "nodeType": "ParameterList", - "parameters": [], - "src": "3043:2:27" - }, - "returnParameters": { - "id": 11040, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11039, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11041, - "src": "3069:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11038, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3069:7:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3068:9:27" - }, - "scope": 11064, - "src": "3029:49:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11042, - "nodeType": "StructuredDocumentation", - "src": "3084:70:27", - "text": "@dev Returns the address of the currently connected Credit Manager" - }, - "functionSelector": "c12c21c0", - "id": 11047, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManager", - "nameLocation": "3168:13:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11043, - "nodeType": "ParameterList", - "parameters": [], - "src": "3181:2:27" - }, - "returnParameters": { - "id": 11046, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11045, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11047, - "src": "3207:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11044, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3207:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3206:9:27" - }, - "scope": 11064, - "src": "3159:57:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11048, - "nodeType": "StructuredDocumentation", - "src": "3222:46:27", - "text": "@dev Address of the Credit Account factory" - }, - "functionSelector": "c45a0155", - "id": 11053, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "factory", - "nameLocation": "3282:7:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11049, - "nodeType": "ParameterList", - "parameters": [], - "src": "3289:2:27" - }, - "returnParameters": { - "id": 11052, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11051, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11053, - "src": "3315:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3315:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3314:9:27" - }, - "scope": 11064, - "src": "3273:51:27", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11054, - "nodeType": "StructuredDocumentation", - "src": "3330:225:27", - "text": "@dev Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only.\n @param destination Contract address to be called.\n @param data Data to call the contract with." - }, - "functionSelector": "1cff79cd", - "id": 11063, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "execute", - "nameLocation": "3569:7:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11059, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11056, - "mutability": "mutable", - "name": "destination", - "nameLocation": "3585:11:27", - "nodeType": "VariableDeclaration", - "scope": 11063, - "src": "3577:19:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11055, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3577:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11058, - "mutability": "mutable", - "name": "data", - "nameLocation": "3611:4:27", - "nodeType": "VariableDeclaration", - "scope": 11063, - "src": "3598:17:27", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 11057, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3598:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3576:40:27" - }, - "returnParameters": { - "id": 11062, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11061, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11063, - "src": "3651:12:27", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 11060, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3651:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3650:14:27" - }, - "scope": 11064, - "src": "3560:105:27", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11065, - "src": "837:2830:27", - "usedErrors": [10975, 10978] - } - ], - "src": "123:3545:27" - }, - "id": 27 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol", - "exportedSymbols": { - "CollateralToken": [11081], - "CreditFacade": [7747], - "CreditManager": [10549], - "CreditManagerOpts": [11102], - "IAddressProvider": [10799], - "ICreditConfigurator": [11424], - "ICreditConfiguratorEvents": [11230], - "ICreditConfiguratorExceptions": [11259], - "IVersion": [12963] - }, - "id": 11425, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11066, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:28" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol", - "file": "./IAddressProvider.sol", - "id": 11068, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11425, - "sourceUnit": 10800, - "src": "148:58:28", - "symbolAliases": [ - { - "foreign": { - "id": 11067, - "name": "IAddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10799, - "src": "157:16:28", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol", - "file": "../credit/CreditManager.sol", - "id": 11070, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11425, - "sourceUnit": 10550, - "src": "207:60:28", - "symbolAliases": [ - { - "foreign": { - "id": 11069, - "name": "CreditManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 10549, - "src": "216:13:28", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol", - "file": "../credit/CreditFacade.sol", - "id": 11072, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11425, - "sourceUnit": 7748, - "src": "268:58:28", - "symbolAliases": [ - { - "foreign": { - "id": 11071, - "name": "CreditFacade", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 7747, - "src": "277:12:28", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 11074, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11425, - "sourceUnit": 12964, - "src": "327:42:28", - "symbolAliases": [ - { - "foreign": { - "id": 11073, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "336:8:28", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "CollateralToken", - "id": 11081, - "members": [ - { - "constant": false, - "id": 11077, - "mutability": "mutable", - "name": "token", - "nameLocation": "541:5:28", - "nodeType": "VariableDeclaration", - "scope": 11081, - "src": "533:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11076, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "533:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11080, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "609:20:28", - "nodeType": "VariableDeclaration", - "scope": 11081, - "src": "602:27:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11079, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "602:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "name": "CollateralToken", - "nameLocation": "466:15:28", - "nodeType": "StructDefinition", - "scope": 11425, - "src": "459:173:28", - "visibility": "public" - }, - { - "canonicalName": "CreditManagerOpts", - "id": 11102, - "members": [ - { - "constant": false, - "id": 11084, - "mutability": "mutable", - "name": "minBorrowedAmount", - "nameLocation": "803:17:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "795:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11083, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "795:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11087, - "mutability": "mutable", - "name": "maxBorrowedAmount", - "nameLocation": "881:17:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "873:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11086, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "873:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11092, - "mutability": "mutable", - "name": "collateralTokens", - "nameLocation": "982:16:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "964:34:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CollateralToken_$11081_storage_$dyn_storage_ptr", - "typeString": "struct CollateralToken[]" - }, - "typeName": { - "baseType": { - "id": 11090, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11089, - "name": "CollateralToken", - "nameLocations": ["964:15:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11081, - "src": "964:15:28" - }, - "referencedDeclaration": 11081, - "src": "964:15:28", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CollateralToken_$11081_storage_ptr", - "typeString": "struct CollateralToken" - } - }, - "id": 11091, - "nodeType": "ArrayTypeName", - "src": "964:17:28", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CollateralToken_$11081_storage_$dyn_storage_ptr", - "typeString": "struct CollateralToken[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11095, - "mutability": "mutable", - "name": "degenNFT", - "nameLocation": "1089:8:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "1081:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11094, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1081:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11098, - "mutability": "mutable", - "name": "blacklistHelper", - "nameLocation": "1202:15:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "1194:23:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11097, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1194:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11101, - "mutability": "mutable", - "name": "expirable", - "nameLocation": "1338:9:28", - "nodeType": "VariableDeclaration", - "scope": 11102, - "src": "1333:14:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11100, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1333:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "CreditManagerOpts", - "nameLocation": "724:17:28", - "nodeType": "StructDefinition", - "scope": 11425, - "src": "717:633:28", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditConfiguratorEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 11230, - "linearizedBaseContracts": [11230], - "name": "ICreditConfiguratorEvents", - "nameLocation": "1362:25:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 11103, - "nodeType": "StructuredDocumentation", - "src": "1394:73:28", - "text": "@dev Emits when a collateral token's liquidation threshold is changed" - }, - "eventSelector": "94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650", - "id": 11109, - "name": "TokenLiquidationThresholdUpdated", - "nameLocation": "1478:32:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11108, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11105, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "1536:5:28", - "nodeType": "VariableDeclaration", - "scope": 11109, - "src": "1520:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11104, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1520:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11107, - "indexed": false, - "mutability": "mutable", - "name": "liquidityThreshold", - "nameLocation": "1558:18:28", - "nodeType": "VariableDeclaration", - "scope": 11109, - "src": "1551:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11106, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1551:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "1510:72:28" - }, - "src": "1472:111:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11110, - "nodeType": "StructuredDocumentation", - "src": "1589:68:28", - "text": "@dev Emits when a new or a previously forbidden token is allowed" - }, - "eventSelector": "beceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c4373809", - "id": 11114, - "name": "TokenAllowed", - "nameLocation": "1668:12:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11113, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11112, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "1697:5:28", - "nodeType": "VariableDeclaration", - "scope": 11114, - "src": "1681:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11111, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1681:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1680:23:28" - }, - "src": "1662:42:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11115, - "nodeType": "StructuredDocumentation", - "src": "1710:51:28", - "text": "@dev Emits when a collateral token is forbidden" - }, - "eventSelector": "f17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f05", - "id": 11119, - "name": "TokenForbidden", - "nameLocation": "1772:14:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11117, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "1803:5:28", - "nodeType": "VariableDeclaration", - "scope": 11119, - "src": "1787:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11116, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1787:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1786:23:28" - }, - "src": "1766:44:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11120, - "nodeType": "StructuredDocumentation", - "src": "1816:77:28", - "text": "@dev Emits when a contract <> adapter pair is linked for a Credit Manager" - }, - "eventSelector": "4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd1305", - "id": 11126, - "name": "ContractAllowed", - "nameLocation": "1904:15:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11125, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11122, - "indexed": true, - "mutability": "mutable", - "name": "protocol", - "nameLocation": "1936:8:28", - "nodeType": "VariableDeclaration", - "scope": 11126, - "src": "1920:24:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11121, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1920:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11124, - "indexed": true, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "1962:7:28", - "nodeType": "VariableDeclaration", - "scope": 11126, - "src": "1946:23:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11123, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1946:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1919:51:28" - }, - "src": "1898:73:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11127, - "nodeType": "StructuredDocumentation", - "src": "1977:53:28", - "text": "@dev Emits when a 3rd-party contract is forbidden" - }, - "eventSelector": "ab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f", - "id": 11131, - "name": "ContractForbidden", - "nameLocation": "2041:17:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11129, - "indexed": true, - "mutability": "mutable", - "name": "protocol", - "nameLocation": "2075:8:28", - "nodeType": "VariableDeclaration", - "scope": 11131, - "src": "2059:24:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11128, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2059:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2058:26:28" - }, - "src": "2035:50:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11132, - "nodeType": "StructuredDocumentation", - "src": "2091:75:28", - "text": "@dev Emits when a particular adapter for a target contract is forbidden" - }, - "eventSelector": "552a57f99ccc96237d3776052b6c7cee047700e953c6e21d3a12c023ccf91d02", - "id": 11136, - "name": "AdapterForbidden", - "nameLocation": "2177:16:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11135, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11134, - "indexed": true, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "2210:7:28", - "nodeType": "VariableDeclaration", - "scope": 11136, - "src": "2194:23:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2194:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2193:25:28" - }, - "src": "2171:48:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11137, - "nodeType": "StructuredDocumentation", - "src": "2225:53:28", - "text": "@dev Emits when debt principal limits are changed" - }, - "eventSelector": "4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb", - "id": 11143, - "name": "LimitsUpdated", - "nameLocation": "2289:13:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11142, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11139, - "indexed": false, - "mutability": "mutable", - "name": "minBorrowedAmount", - "nameLocation": "2311:17:28", - "nodeType": "VariableDeclaration", - "scope": 11143, - "src": "2303:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11138, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2303:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11141, - "indexed": false, - "mutability": "mutable", - "name": "maxBorrowedAmount", - "nameLocation": "2338:17:28", - "nodeType": "VariableDeclaration", - "scope": 11143, - "src": "2330:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11140, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2330:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2302:54:28" - }, - "src": "2283:74:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11144, - "nodeType": "StructuredDocumentation", - "src": "2363:63:28", - "text": "@dev Emits when Credit Manager's fee parameters are updated" - }, - "eventSelector": "2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f", - "id": 11156, - "name": "FeesUpdated", - "nameLocation": "2437:11:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11155, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11146, - "indexed": false, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "2465:11:28", - "nodeType": "VariableDeclaration", - "scope": 11156, - "src": "2458:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11145, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2458:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11148, - "indexed": false, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "2493:14:28", - "nodeType": "VariableDeclaration", - "scope": 11156, - "src": "2486:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11147, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2486:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11150, - "indexed": false, - "mutability": "mutable", - "name": "liquidationPremium", - "nameLocation": "2524:18:28", - "nodeType": "VariableDeclaration", - "scope": 11156, - "src": "2517:25:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11149, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2517:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11152, - "indexed": false, - "mutability": "mutable", - "name": "feeLiquidationExpired", - "nameLocation": "2559:21:28", - "nodeType": "VariableDeclaration", - "scope": 11156, - "src": "2552:28:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11151, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2552:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11154, - "indexed": false, - "mutability": "mutable", - "name": "liquidationPremiumExpired", - "nameLocation": "2597:25:28", - "nodeType": "VariableDeclaration", - "scope": 11156, - "src": "2590:32:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11153, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2590:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "2448:180:28" - }, - "src": "2431:198:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11157, - "nodeType": "StructuredDocumentation", - "src": "2635:73:28", - "text": "@dev Emits when a new Price Oracle is connected to the Credit Manager" - }, - "eventSelector": "3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d0961", - "id": 11161, - "name": "PriceOracleUpgraded", - "nameLocation": "2719:19:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11160, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11159, - "indexed": true, - "mutability": "mutable", - "name": "newPriceOracle", - "nameLocation": "2755:14:28", - "nodeType": "VariableDeclaration", - "scope": 11161, - "src": "2739:30:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11158, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2739:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2738:32:28" - }, - "src": "2713:58:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11162, - "nodeType": "StructuredDocumentation", - "src": "2777:74:28", - "text": "@dev Emits when a new Credit Facade is connected to the Credit Manager" - }, - "eventSelector": "a8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d", - "id": 11166, - "name": "CreditFacadeUpgraded", - "nameLocation": "2862:20:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11165, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11164, - "indexed": true, - "mutability": "mutable", - "name": "newCreditFacade", - "nameLocation": "2899:15:28", - "nodeType": "VariableDeclaration", - "scope": 11166, - "src": "2883:31:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2883:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2882:33:28" - }, - "src": "2856:60:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11167, - "nodeType": "StructuredDocumentation", - "src": "2922:80:28", - "text": "@dev Emits when a new Credit Configurator is connected to the Credit Manager" - }, - "eventSelector": "5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc886", - "id": 11171, - "name": "CreditConfiguratorUpgraded", - "nameLocation": "3013:26:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11170, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11169, - "indexed": true, - "mutability": "mutable", - "name": "newCreditConfigurator", - "nameLocation": "3056:21:28", - "nodeType": "VariableDeclaration", - "scope": 11171, - "src": "3040:37:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11168, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3040:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3039:39:28" - }, - "src": "3007:72:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11172, - "nodeType": "StructuredDocumentation", - "src": "3085:74:28", - "text": "@dev Emits when the status of the debt increase restriction is changed" - }, - "eventSelector": "2eec109225800da31a3ab4a2d9a7133cc60dd9f2ec1e96b545f5b3a3432abb46", - "id": 11176, - "name": "IncreaseDebtForbiddenModeChanged", - "nameLocation": "3170:32:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11175, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11174, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11176, - "src": "3203:4:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11173, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3203:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3202:6:28" - }, - "src": "3164:45:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11177, - "nodeType": "StructuredDocumentation", - "src": "3215:60:28", - "text": "@dev Emits when the borrowing limit per block is changed" - }, - "eventSelector": "a030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d", - "id": 11181, - "name": "LimitPerBlockUpdated", - "nameLocation": "3286:20:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11180, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11179, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11181, - "src": "3307:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11178, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "3307:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "3306:9:28" - }, - "src": "3280:36:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11182, - "nodeType": "StructuredDocumentation", - "src": "3322:72:28", - "text": "@dev Emits when an address is added to the upgradeable contract list" - }, - "eventSelector": "dac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c", - "id": 11186, - "name": "AddedToUpgradeable", - "nameLocation": "3405:18:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11184, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11186, - "src": "3424:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11183, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3424:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3423:9:28" - }, - "src": "3399:34:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11187, - "nodeType": "StructuredDocumentation", - "src": "3439:76:28", - "text": "@dev Emits when an address is removed from the upgradeable contract list" - }, - "eventSelector": "32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b", - "id": 11191, - "name": "RemovedFromUpgradeable", - "nameLocation": "3526:22:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11190, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11189, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11191, - "src": "3549:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11188, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3549:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3548:9:28" - }, - "src": "3520:38:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11192, - "nodeType": "StructuredDocumentation", - "src": "3564:80:28", - "text": "@dev Emits when the expiration date is updated in an expirable Credit Facade" - }, - "eventSelector": "0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac0", - "id": 11196, - "name": "ExpirationDateUpdated", - "nameLocation": "3655:21:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11195, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11194, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11196, - "src": "3677:6:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 11193, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "3677:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - } - ], - "src": "3676:8:28" - }, - "src": "3649:36:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11197, - "nodeType": "StructuredDocumentation", - "src": "3691:54:28", - "text": "@dev Emits when the enabled token limit is updated" - }, - "eventSelector": "73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950", - "id": 11201, - "name": "MaxEnabledTokensUpdated", - "nameLocation": "3756:23:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11200, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11199, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11201, - "src": "3780:5:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11198, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3780:5:28", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "3779:7:28" - }, - "src": "3750:37:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11202, - "nodeType": "StructuredDocumentation", - "src": "3793:76:28", - "text": "@dev Emits when an address is added to the list of emergency liquidators" - }, - "eventSelector": "3de547663b878d95431ab299ea53d5775b060dc12927ca53b25cb76d4529ae2e", - "id": 11206, - "name": "EmergencyLiquidatorAdded", - "nameLocation": "3880:24:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11205, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11204, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11206, - "src": "3905:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11203, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3905:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3904:9:28" - }, - "src": "3874:40:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11207, - "nodeType": "StructuredDocumentation", - "src": "3920:80:28", - "text": "@dev Emits when an address is removed from the list of emergency liquidators" - }, - "eventSelector": "bfd52fe4a723932429ed43c34045d687ba64e56d2c75f021648ec457e9da7650", - "id": 11211, - "name": "EmergencyLiquidatorRemoved", - "nameLocation": "4011:26:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11210, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11209, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11211, - "src": "4038:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11208, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4038:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4037:9:28" - }, - "src": "4005:42:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11212, - "nodeType": "StructuredDocumentation", - "src": "4053:50:28", - "text": "@dev Emits when new max cumulative loss is set" - }, - "eventSelector": "1cb1645cf44744a79c6a2c5b59b369aeb21904c0348c3b5952fd588fb861cc46", - "id": 11216, - "name": "NewMaxCumulativeLoss", - "nameLocation": "4114:20:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11215, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11214, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11216, - "src": "4135:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11213, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "4135:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "4134:9:28" - }, - "src": "4108:36:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11217, - "nodeType": "StructuredDocumentation", - "src": "4150:73:28", - "text": "@dev Emits when the current cumulative loss in Credit Facade is reset" - }, - "eventSelector": "76867738b1ea031dba288b212a346e09748d59c0dd4a24a79d73b2ff4825445c", - "id": 11219, - "name": "CumulativeLossReset", - "nameLocation": "4234:19:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11218, - "nodeType": "ParameterList", - "parameters": [], - "src": "4253:2:28" - }, - "src": "4228:28:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11220, - "nodeType": "StructuredDocumentation", - "src": "4262:60:28", - "text": "@dev Emits when the emergency liquidation premium is set" - }, - "eventSelector": "f6752a535d833e0a40003935cfd7e73e6865d523e7bbcf4e5526a2afc5e18e5c", - "id": 11224, - "name": "NewEmergencyLiquidationDiscount", - "nameLocation": "4333:31:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11223, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11222, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11224, - "src": "4365:6:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11221, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "4365:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "4364:8:28" - }, - "src": "4327:46:28" - }, - { - "anonymous": false, - "documentation": { - "id": 11225, - "nodeType": "StructuredDocumentation", - "src": "4379:49:28", - "text": "@dev Emits when a new total debt limit is set" - }, - "eventSelector": "a38676460d3a7ae7dabafec8ec493c078b50d27a16ef41d82d1a29027b61aeda", - "id": 11229, - "name": "NewTotalDebtLimit", - "nameLocation": "4439:17:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 11228, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11227, - "indexed": false, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11229, - "src": "4457:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11226, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "4457:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "4456:9:28" - }, - "src": "4433:33:28" - } - ], - "scope": 11425, - "src": "1352:3116:28", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditConfiguratorExceptions", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 11231, - "nodeType": "StructuredDocumentation", - "src": "4470:39:28", - "text": "@dev CreditConfigurator Exceptions" - }, - "fullyImplemented": true, - "id": 11259, - "linearizedBaseContracts": [11259], - "name": "ICreditConfiguratorExceptions", - "nameLocation": "4519:29:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11232, - "nodeType": "StructuredDocumentation", - "src": "4555:173:28", - "text": "@dev Thrown if the underlying's LT is set directly\n @notice Underlying LT is derived from fee parameters and is set automatically\n on updating fees" - }, - "errorSelector": "3b899cf9", - "id": 11234, - "name": "SetLTForUnderlyingException", - "nameLocation": "4739:27:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11233, - "nodeType": "ParameterList", - "parameters": [], - "src": "4766:2:28" - }, - "src": "4733:36:28" - }, - { - "documentation": { - "id": 11235, - "nodeType": "StructuredDocumentation", - "src": "4775:79:28", - "text": "@dev Thrown if the newly set LT if zero or greater than the underlying's LT" - }, - "errorSelector": "33c6608d", - "id": 11237, - "name": "IncorrectLiquidationThresholdException", - "nameLocation": "4865:38:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11236, - "nodeType": "ParameterList", - "parameters": [], - "src": "4903:2:28" - }, - "src": "4859:47:28" - }, - { - "documentation": { - "id": 11238, - "nodeType": "StructuredDocumentation", - "src": "4912:122:28", - "text": "@dev Thrown if feeInterest or (liquidationPremium + feeLiquidation) is out of [0%..100%] range (encoded as [0..10000])" - }, - "errorSelector": "0b361d69", - "id": 11240, - "name": "IncorrectFeesException", - "nameLocation": "5045:22:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11239, - "nodeType": "ParameterList", - "parameters": [], - "src": "5067:2:28" - }, - "src": "5039:31:28" - }, - { - "documentation": { - "id": 11241, - "nodeType": "StructuredDocumentation", - "src": "5076:95:28", - "text": "@dev Thrown if borrowing limits are incorrect: minLimit > maxLimit or maxLimit > blockLimit" - }, - "errorSelector": "9aadd6f0", - "id": 11243, - "name": "IncorrectLimitsException", - "nameLocation": "5182:24:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11242, - "nodeType": "ParameterList", - "parameters": [], - "src": "5206:2:28" - }, - "src": "5176:33:28" - }, - { - "documentation": { - "id": 11244, - "nodeType": "StructuredDocumentation", - "src": "5215:102:28", - "text": "@dev Thrown if the new expiration date is less than the current expiration date or block.timestamp" - }, - "errorSelector": "e4eaca7f", - "id": 11246, - "name": "IncorrectExpirationDateException", - "nameLocation": "5328:32:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11245, - "nodeType": "ParameterList", - "parameters": [], - "src": "5360:2:28" - }, - "src": "5322:41:28" - }, - { - "documentation": { - "id": 11247, - "nodeType": "StructuredDocumentation", - "src": "5369:100:28", - "text": "@dev Thrown if address of CreditManager or CreditFacade are being set as a target for an adapter" - }, - "errorSelector": "025cd697", - "id": 11249, - "name": "CreditManagerOrFacadeUsedAsTargetContractsException", - "nameLocation": "5480:51:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11248, - "nodeType": "ParameterList", - "parameters": [], - "src": "5531:2:28" - }, - "src": "5474:60:28" - }, - { - "documentation": { - "id": 11250, - "nodeType": "StructuredDocumentation", - "src": "5540:96:28", - "text": "@dev Thrown if an adapter that is already linked to a contract is being connected to another" - }, - "errorSelector": "21ff1e71", - "id": 11252, - "name": "AdapterUsedTwiceException", - "nameLocation": "5647:25:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11251, - "nodeType": "ParameterList", - "parameters": [], - "src": "5672:2:28" - }, - "src": "5641:34:28" - }, - { - "documentation": { - "id": 11253, - "nodeType": "StructuredDocumentation", - "src": "5681:176:28", - "text": "@dev Thrown if a contract (adapter or Credit Facade) set in a Credit Configurator returns a wrong Credit Manager\n or retrieving the Credit Manager from it fails" - }, - "errorSelector": "e9eddd17", - "id": 11255, - "name": "IncompatibleContractException", - "nameLocation": "5868:29:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11254, - "nodeType": "ParameterList", - "parameters": [], - "src": "5897:2:28" - }, - "src": "5862:38:28" - }, - { - "documentation": { - "id": 11256, - "nodeType": "StructuredDocumentation", - "src": "5906:93:28", - "text": "@dev Thrown if attempting to forbid an adapter that is not allowed for the Credit Manager" - }, - "errorSelector": "87d928a0", - "id": 11258, - "name": "ContractIsNotAnAllowedAdapterException", - "nameLocation": "6010:38:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11257, - "nodeType": "ParameterList", - "parameters": [], - "src": "6048:2:28" - }, - "src": "6004:47:28" - } - ], - "scope": 11425, - "src": "4509:1544:28", - "usedErrors": [ - 11234, 11237, 11240, 11243, 11246, 11249, 11252, 11255, 11258 - ] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 11260, - "name": "ICreditConfiguratorEvents", - "nameLocations": ["6092:25:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11230, - "src": "6092:25:28" - }, - "id": 11261, - "nodeType": "InheritanceSpecifier", - "src": "6092:25:28" - }, - { - "baseName": { - "id": 11262, - "name": "ICreditConfiguratorExceptions", - "nameLocations": ["6123:29:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11259, - "src": "6123:29:28" - }, - "id": 11263, - "nodeType": "InheritanceSpecifier", - "src": "6123:29:28" - }, - { - "baseName": { - "id": 11264, - "name": "IVersion", - "nameLocations": ["6158:8:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "6158:8:28" - }, - "id": 11265, - "nodeType": "InheritanceSpecifier", - "src": "6158:8:28" - } - ], - "canonicalName": "ICreditConfigurator", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11424, - "linearizedBaseContracts": [11424, 12963, 11259, 11230], - "name": "ICreditConfigurator", - "nameLocation": "6065:19:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11266, - "nodeType": "StructuredDocumentation", - "src": "6220:217:28", - "text": "@dev Adds token to the list of allowed collateral tokens, and sets the LT\n @param token Address of token to be added\n @param liquidationThreshold Liquidation threshold for account health calculations" - }, - "functionSelector": "3e7c88d6", - "id": 11273, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addCollateralToken", - "nameLocation": "6451:18:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11271, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11268, - "mutability": "mutable", - "name": "token", - "nameLocation": "6478:5:28", - "nodeType": "VariableDeclaration", - "scope": 11273, - "src": "6470:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11267, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6470:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11270, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "6492:20:28", - "nodeType": "VariableDeclaration", - "scope": 11273, - "src": "6485:27:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11269, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "6485:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "6469:44:28" - }, - "returnParameters": { - "id": 11272, - "nodeType": "ParameterList", - "parameters": [], - "src": "6530:0:28" - }, - "scope": 11424, - "src": "6442:89:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11274, - "nodeType": "StructuredDocumentation", - "src": "6537:180:28", - "text": "@dev Sets a liquidation threshold for any token except the underlying\n @param token Token address\n @param liquidationThreshold in PERCENTAGE_FORMAT (100% = 10000)" - }, - "functionSelector": "a70bc542", - "id": 11281, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setLiquidationThreshold", - "nameLocation": "6731:23:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11279, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11276, - "mutability": "mutable", - "name": "token", - "nameLocation": "6763:5:28", - "nodeType": "VariableDeclaration", - "scope": 11281, - "src": "6755:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11275, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6755:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11278, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "6777:20:28", - "nodeType": "VariableDeclaration", - "scope": 11281, - "src": "6770:27:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11277, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "6770:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "6754:44:28" - }, - "returnParameters": { - "id": 11280, - "nodeType": "ParameterList", - "parameters": [], - "src": "6815:0:28" - }, - "scope": 11424, - "src": "6722:94:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11282, - "nodeType": "StructuredDocumentation", - "src": "6822:116:28", - "text": "@dev Allow a known collateral token if it was forbidden before.\n @param token Address of collateral token" - }, - "functionSelector": "b53472ef", - "id": 11287, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowToken", - "nameLocation": "6952:10:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11284, - "mutability": "mutable", - "name": "token", - "nameLocation": "6971:5:28", - "nodeType": "VariableDeclaration", - "scope": 11287, - "src": "6963:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11283, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6963:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6962:15:28" - }, - "returnParameters": { - "id": 11286, - "nodeType": "ParameterList", - "parameters": [], - "src": "6986:0:28" - }, - "scope": 11424, - "src": "6943:44:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11288, - "nodeType": "StructuredDocumentation", - "src": "6993:366:28", - "text": "@dev Forbids a collateral token.\n Forbidden tokens are counted as collateral during health checks, however, they cannot be enabled\n or received as a result of adapter operation anymore. This means that a token can never be\n acquired through adapter operations after being forbidden.\n @param token Address of collateral token to forbid" - }, - "functionSelector": "24147708", - "id": 11293, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forbidToken", - "nameLocation": "7373:11:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11291, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11290, - "mutability": "mutable", - "name": "token", - "nameLocation": "7393:5:28", - "nodeType": "VariableDeclaration", - "scope": 11293, - "src": "7385:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11289, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7385:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7384:15:28" - }, - "returnParameters": { - "id": 11292, - "nodeType": "ParameterList", - "parameters": [], - "src": "7408:0:28" - }, - "scope": 11424, - "src": "7364:45:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11294, - "nodeType": "StructuredDocumentation", - "src": "7415:252:28", - "text": "@dev Adds pair [contract <-> adapter] to the list of allowed contracts\n or updates adapter address if a contract already has a connected adapter\n @param targetContract Address of allowed contract\n @param adapter Adapter address" - }, - "functionSelector": "7bccacee", - "id": 11301, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowContract", - "nameLocation": "7681:13:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11299, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11296, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "7703:14:28", - "nodeType": "VariableDeclaration", - "scope": 11301, - "src": "7695:22:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11295, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7695:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11298, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "7727:7:28", - "nodeType": "VariableDeclaration", - "scope": 11301, - "src": "7719:15:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11297, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7719:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7694:41:28" - }, - "returnParameters": { - "id": 11300, - "nodeType": "ParameterList", - "parameters": [], - "src": "7744:0:28" - }, - "scope": 11424, - "src": "7672:73:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11302, - "nodeType": "StructuredDocumentation", - "src": "7751:136:28", - "text": "@dev Forbids contract as a target for calls from Credit Accounts\n @param targetContract Address of a contract to be forbidden" - }, - "functionSelector": "52438e54", - "id": 11307, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forbidContract", - "nameLocation": "7901:14:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11305, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11304, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "7924:14:28", - "nodeType": "VariableDeclaration", - "scope": 11307, - "src": "7916:22:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11303, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7916:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7915:24:28" - }, - "returnParameters": { - "id": 11306, - "nodeType": "ParameterList", - "parameters": [], - "src": "7948:0:28" - }, - "scope": 11424, - "src": "7892:57:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11308, - "nodeType": "StructuredDocumentation", - "src": "7955:189:28", - "text": "@dev Forbids adapter (and only the adapter - the target contract is not affected)\n @param adapter Address of adapter to disable\n @notice Used to clean up orphaned adapters" - }, - "functionSelector": "1495c7d2", - "id": 11313, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forbidAdapter", - "nameLocation": "8158:13:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11310, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "8180:7:28", - "nodeType": "VariableDeclaration", - "scope": 11313, - "src": "8172:15:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8172:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8171:17:28" - }, - "returnParameters": { - "id": 11312, - "nodeType": "ParameterList", - "parameters": [], - "src": "8197:0:28" - }, - "scope": 11424, - "src": "8149:49:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11314, - "nodeType": "StructuredDocumentation", - "src": "8204:169:28", - "text": "@dev Sets borrowed amount limits in Credit Facade\n @param _minBorrowedAmount Minimum borrowed amount\n @param _maxBorrowedAmount Maximum borrowed amount" - }, - "functionSelector": "9f1c5069", - "id": 11321, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setLimits", - "nameLocation": "8387:9:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11319, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11316, - "mutability": "mutable", - "name": "_minBorrowedAmount", - "nameLocation": "8405:18:28", - "nodeType": "VariableDeclaration", - "scope": 11321, - "src": "8397:26:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11315, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "8397:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11318, - "mutability": "mutable", - "name": "_maxBorrowedAmount", - "nameLocation": "8433:18:28", - "nodeType": "VariableDeclaration", - "scope": 11321, - "src": "8425:26:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11317, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "8425:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "8396:56:28" - }, - "returnParameters": { - "id": 11320, - "nodeType": "ParameterList", - "parameters": [], - "src": "8469:0:28" - }, - "scope": 11424, - "src": "8378:92:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11322, - "nodeType": "StructuredDocumentation", - "src": "8476:550:28", - "text": "@dev Sets fees for creditManager\n @param _feeInterest Percent which protocol charges additionally for interest rate\n @param _feeLiquidation The fee that is paid to the pool from liquidation\n @param _liquidationPremium Discount for totalValue which is given to liquidator\n @param _feeLiquidationExpired The fee that is paid to the pool from liquidation when liquidating an expired account\n @param _liquidationPremiumExpired Discount for totalValue which is given to liquidator when liquidating an expired account" - }, - "functionSelector": "f206d32a", - "id": 11335, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setFees", - "nameLocation": "9040:7:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11333, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11324, - "mutability": "mutable", - "name": "_feeInterest", - "nameLocation": "9064:12:28", - "nodeType": "VariableDeclaration", - "scope": 11335, - "src": "9057:19:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11323, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9057:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11326, - "mutability": "mutable", - "name": "_feeLiquidation", - "nameLocation": "9093:15:28", - "nodeType": "VariableDeclaration", - "scope": 11335, - "src": "9086:22:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11325, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9086:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11328, - "mutability": "mutable", - "name": "_liquidationPremium", - "nameLocation": "9125:19:28", - "nodeType": "VariableDeclaration", - "scope": 11335, - "src": "9118:26:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11327, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9118:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11330, - "mutability": "mutable", - "name": "_feeLiquidationExpired", - "nameLocation": "9161:22:28", - "nodeType": "VariableDeclaration", - "scope": 11335, - "src": "9154:29:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11329, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9154:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11332, - "mutability": "mutable", - "name": "_liquidationPremiumExpired", - "nameLocation": "9200:26:28", - "nodeType": "VariableDeclaration", - "scope": 11335, - "src": "9193:33:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11331, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9193:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "9047:185:28" - }, - "returnParameters": { - "id": 11334, - "nodeType": "ParameterList", - "parameters": [], - "src": "9241:0:28" - }, - "scope": 11424, - "src": "9031:211:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11336, - "nodeType": "StructuredDocumentation", - "src": "9248:110:28", - "text": "@dev Upgrades the price oracle in the Credit Manager, taking the address\n from the address provider" - }, - "functionSelector": "f0527ac6", - "id": 11339, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "upgradePriceOracle", - "nameLocation": "9372:18:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11337, - "nodeType": "ParameterList", - "parameters": [], - "src": "9390:2:28" - }, - "returnParameters": { - "id": 11338, - "nodeType": "ParameterList", - "parameters": [], - "src": "9401:0:28" - }, - "scope": 11424, - "src": "9363:39:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11340, - "nodeType": "StructuredDocumentation", - "src": "9408:225:28", - "text": "@dev Upgrades the Credit Facade corresponding to the Credit Manager\n @param _creditFacade address of the new CreditFacade\n @param migrateParams Whether the previous CreditFacade's parameter need to be copied" - }, - "functionSelector": "526a41e8", - "id": 11347, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "upgradeCreditFacade", - "nameLocation": "9647:19:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11345, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11342, - "mutability": "mutable", - "name": "_creditFacade", - "nameLocation": "9675:13:28", - "nodeType": "VariableDeclaration", - "scope": 11347, - "src": "9667:21:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11341, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9667:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11344, - "mutability": "mutable", - "name": "migrateParams", - "nameLocation": "9695:13:28", - "nodeType": "VariableDeclaration", - "scope": 11347, - "src": "9690:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11343, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9690:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9666:43:28" - }, - "returnParameters": { - "id": 11346, - "nodeType": "ParameterList", - "parameters": [], - "src": "9726:0:28" - }, - "scope": 11424, - "src": "9638:89:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11348, - "nodeType": "StructuredDocumentation", - "src": "9733:141:28", - "text": "@dev Upgrades the Credit Configurator for a connected Credit Manager\n @param _creditConfigurator New Credit Configurator's address" - }, - "functionSelector": "456e0742", - "id": 11353, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "upgradeCreditConfigurator", - "nameLocation": "9888:25:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11351, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11350, - "mutability": "mutable", - "name": "_creditConfigurator", - "nameLocation": "9922:19:28", - "nodeType": "VariableDeclaration", - "scope": 11353, - "src": "9914:27:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11349, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9914:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9913:29:28" - }, - "returnParameters": { - "id": 11352, - "nodeType": "ParameterList", - "parameters": [], - "src": "9951:0:28" - }, - "scope": 11424, - "src": "9879:73:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11354, - "nodeType": "StructuredDocumentation", - "src": "9958:184:28", - "text": "@dev Enables or disables borrowing\n In Credit Facade (and, consequently, the Credit Manager)\n @param _mode Prohibits borrowing if true, and allows borrowing otherwise" - }, - "functionSelector": "ffd9b907", - "id": 11359, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setIncreaseDebtForbidden", - "nameLocation": "10156:24:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11357, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11356, - "mutability": "mutable", - "name": "_mode", - "nameLocation": "10186:5:28", - "nodeType": "VariableDeclaration", - "scope": 11359, - "src": "10181:10:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11355, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "10181:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "10180:12:28" - }, - "returnParameters": { - "id": 11358, - "nodeType": "ParameterList", - "parameters": [], - "src": "10201:0:28" - }, - "scope": 11424, - "src": "10147:55:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11360, - "nodeType": "StructuredDocumentation", - "src": "10208:113:28", - "text": "@dev Sets the maximal borrowed amount per block\n @param newLimit The new max borrowed amount per block" - }, - "functionSelector": "9c55a054", - "id": 11365, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setLimitPerBlock", - "nameLocation": "10335:16:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11363, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11362, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "10360:8:28", - "nodeType": "VariableDeclaration", - "scope": 11365, - "src": "10352:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11361, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "10352:7:28", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "10351:18:28" - }, - "returnParameters": { - "id": 11364, - "nodeType": "ParameterList", - "parameters": [], - "src": "10378:0:28" - }, - "scope": 11424, - "src": "10326:53:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11366, - "nodeType": "StructuredDocumentation", - "src": "10385:177:28", - "text": "@dev Sets expiration date in a CreditFacade connected\n To a CreditManager with an expirable pool\n @param newExpirationDate The timestamp of the next expiration" - }, - "functionSelector": "eb9606df", - "id": 11371, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setExpirationDate", - "nameLocation": "10576:17:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11369, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11368, - "mutability": "mutable", - "name": "newExpirationDate", - "nameLocation": "10601:17:28", - "nodeType": "VariableDeclaration", - "scope": 11371, - "src": "10594:24:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 11367, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "10594:6:28", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - } - ], - "src": "10593:26:28" - }, - "returnParameters": { - "id": 11370, - "nodeType": "ParameterList", - "parameters": [], - "src": "10628:0:28" - }, - "scope": 11424, - "src": "10567:62:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11372, - "nodeType": "StructuredDocumentation", - "src": "10635:347:28", - "text": "@dev Sets the maximal amount of enabled tokens per Credit Account\n @param maxEnabledTokens The new maximal number of enabled tokens\n @notice A large number of enabled collateral tokens on a Credit Account\n can make liquidations and health checks prohibitively expensive in terms of gas,\n hence the number is limited" - }, - "functionSelector": "dc2b21c1", - "id": 11377, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setMaxEnabledTokens", - "nameLocation": "10996:19:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11375, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11374, - "mutability": "mutable", - "name": "maxEnabledTokens", - "nameLocation": "11022:16:28", - "nodeType": "VariableDeclaration", - "scope": 11377, - "src": "11016:22:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 11373, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "11016:5:28", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "11015:24:28" - }, - "returnParameters": { - "id": 11376, - "nodeType": "ParameterList", - "parameters": [], - "src": "11048:0:28" - }, - "scope": 11424, - "src": "10987:62:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11378, - "nodeType": "StructuredDocumentation", - "src": "11055:479:28", - "text": "@dev Adds an address to the list of emergency liquidators\n @param liquidator The address to add to the list\n @notice Emergency liquidators are trusted addresses\n that are able to liquidate positions while the contracts are paused,\n e.g. when there is a risk of bad debt while an exploit is being patched.\n In the interest of fairness, emergency liquidators do not receive a premium\n And are compensated by the Gearbox DAO separately." - }, - "functionSelector": "84edaa42", - "id": 11383, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addEmergencyLiquidator", - "nameLocation": "11548:22:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11381, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11380, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "11579:10:28", - "nodeType": "VariableDeclaration", - "scope": 11383, - "src": "11571:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11379, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11571:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11570:20:28" - }, - "returnParameters": { - "id": 11382, - "nodeType": "ParameterList", - "parameters": [], - "src": "11599:0:28" - }, - "scope": 11424, - "src": "11539:61:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11384, - "nodeType": "StructuredDocumentation", - "src": "11606:128:28", - "text": "@dev Removex an address frp, the list of emergency liquidators\n @param liquidator The address to remove from the list" - }, - "functionSelector": "a460e104", - "id": 11389, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "removeEmergencyLiquidator", - "nameLocation": "11748:25:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11387, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11386, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "11782:10:28", - "nodeType": "VariableDeclaration", - "scope": 11389, - "src": "11774:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11385, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11774:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11773:20:28" - }, - "returnParameters": { - "id": 11388, - "nodeType": "ParameterList", - "parameters": [], - "src": "11802:0:28" - }, - "scope": 11424, - "src": "11739:64:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11390, - "nodeType": "StructuredDocumentation", - "src": "11839:65:28", - "text": "@dev Address provider (needed for upgrading the Price Oracle)" - }, - "functionSelector": "2954018c", - "id": 11396, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addressProvider", - "nameLocation": "11918:15:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11391, - "nodeType": "ParameterList", - "parameters": [], - "src": "11933:2:28" - }, - "returnParameters": { - "id": 11395, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11394, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11396, - "src": "11959:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - }, - "typeName": { - "id": 11393, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11392, - "name": "IAddressProvider", - "nameLocations": ["11959:16:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10799, - "src": "11959:16:28" - }, - "referencedDeclaration": 10799, - "src": "11959:16:28", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IAddressProvider_$10799", - "typeString": "contract IAddressProvider" - } - }, - "visibility": "internal" - } - ], - "src": "11958:18:28" - }, - "scope": 11424, - "src": "11909:68:28", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11397, - "nodeType": "StructuredDocumentation", - "src": "11983:76:28", - "text": "@dev Returns the Credit Facade currently connected to the Credit Manager" - }, - "functionSelector": "2f7a1881", - "id": 11403, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditFacade", - "nameLocation": "12073:12:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11398, - "nodeType": "ParameterList", - "parameters": [], - "src": "12085:2:28" - }, - "returnParameters": { - "id": 11402, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11401, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11403, - "src": "12111:12:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - }, - "typeName": { - "id": 11400, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11399, - "name": "CreditFacade", - "nameLocations": ["12111:12:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 7747, - "src": "12111:12:28" - }, - "referencedDeclaration": 7747, - "src": "12111:12:28", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditFacade_$7747", - "typeString": "contract CreditFacade" - } - }, - "visibility": "internal" - } - ], - "src": "12110:14:28" - }, - "scope": 11424, - "src": "12064:61:28", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11404, - "nodeType": "StructuredDocumentation", - "src": "12131:38:28", - "text": "@dev Address of the Credit Manager" - }, - "functionSelector": "c12c21c0", - "id": 11410, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManager", - "nameLocation": "12183:13:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11405, - "nodeType": "ParameterList", - "parameters": [], - "src": "12196:2:28" - }, - "returnParameters": { - "id": 11409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11408, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11410, - "src": "12222:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditManager_$10549", - "typeString": "contract CreditManager" - }, - "typeName": { - "id": 11407, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11406, - "name": "CreditManager", - "nameLocations": ["12222:13:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 10549, - "src": "12222:13:28" - }, - "referencedDeclaration": 10549, - "src": "12222:13:28", - "typeDescriptions": { - "typeIdentifier": "t_contract$_CreditManager_$10549", - "typeString": "contract CreditManager" - } - }, - "visibility": "internal" - } - ], - "src": "12221:15:28" - }, - "scope": 11424, - "src": "12174:63:28", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11411, - "nodeType": "StructuredDocumentation", - "src": "12243:57:28", - "text": "@dev Address of the Credit Manager's underlying asset" - }, - "functionSelector": "6f307dc3", - "id": 11416, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlying", - "nameLocation": "12314:10:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11412, - "nodeType": "ParameterList", - "parameters": [], - "src": "12324:2:28" - }, - "returnParameters": { - "id": 11415, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11414, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11416, - "src": "12350:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11413, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12350:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12349:9:28" - }, - "scope": 11424, - "src": "12305:54:28", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11417, - "nodeType": "StructuredDocumentation", - "src": "12365:38:28", - "text": "@dev Returns all allowed contracts" - }, - "functionSelector": "373c8f62", - "id": 11423, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowedContracts", - "nameLocation": "12417:16:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11418, - "nodeType": "ParameterList", - "parameters": [], - "src": "12433:2:28" - }, - "returnParameters": { - "id": 11422, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11421, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11423, - "src": "12459:16:28", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 11419, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12459:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 11420, - "nodeType": "ArrayTypeName", - "src": "12459:9:28", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "12458:18:28" - }, - "scope": 11424, - "src": "12408:69:28", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11425, - "src": "6055:6424:28", - "usedErrors": [ - 11234, 11237, 11240, 11243, 11246, 11249, 11252, 11255, 11258 - ] - } - ], - "src": "123:12357:28" - }, - "id": 28 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol", - "exportedSymbols": { - "Balance": [13609], - "ICreditFacade": [11919], - "ICreditFacadeEvents": [11597], - "ICreditFacadeExceptions": [11659], - "ICreditFacadeExtended": [11478], - "ICreditFacadeV2": [11930], - "ICreditManagerV2": [12355], - "ICreditManagerV2Exceptions": [11994], - "IVersion": [12963], - "MultiCall": [14040] - }, - "id": 11931, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11426, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:29" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol", - "file": "../libraries/Balances.sol", - "id": 11428, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11931, - "sourceUnit": 13870, - "src": "149:52:29", - "symbolAliases": [ - { - "foreign": { - "id": 11427, - "name": "Balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13609, - "src": "158:7:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol", - "file": "../libraries/MultiCall.sol", - "id": 11430, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11931, - "sourceUnit": 14392, - "src": "202:55:29", - "symbolAliases": [ - { - "foreign": { - "id": 11429, - "name": "MultiCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14040, - "src": "211:9:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol", - "file": "./ICreditManagerV2.sol", - "id": 11433, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11931, - "sourceUnit": 12356, - "src": "258:86:29", - "symbolAliases": [ - { - "foreign": { - "id": 11431, - "name": "ICreditManagerV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12355, - "src": "267:16:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 11432, - "name": "ICreditManagerV2Exceptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 11994, - "src": "285:26:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 11435, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 11931, - "sourceUnit": 12964, - "src": "345:42:29", - "symbolAliases": [ - { - "foreign": { - "id": 11434, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "354:8:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditFacadeExtended", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11478, - "linearizedBaseContracts": [11478], - "name": "ICreditFacadeExtended", - "nameLocation": "399:21:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11436, - "nodeType": "StructuredDocumentation", - "src": "427:419:29", - "text": "@dev Stores expected balances (computed as current balance + passed delta)\n and compare with actual balances at the end of a multicall, reverts\n if at least one is less than expected\n @param expected Array of expected balance changes\n @notice This is an extenstion function that does not exist in the Credit Facade\n itself and can only be used within a multicall" - }, - "functionSelector": "81314b59", - "id": 11443, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revertIfReceivedLessThan", - "nameLocation": "860:24:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11441, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11440, - "mutability": "mutable", - "name": "expected", - "nameLocation": "902:8:29", - "nodeType": "VariableDeclaration", - "scope": 11443, - "src": "885:25:29", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 11438, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11437, - "name": "Balance", - "nameLocations": ["885:7:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "885:7:29" - }, - "referencedDeclaration": 13609, - "src": "885:7:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 11439, - "nodeType": "ArrayTypeName", - "src": "885:9:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "884:27:29" - }, - "returnParameters": { - "id": 11442, - "nodeType": "ParameterList", - "parameters": [], - "src": "920:0:29" - }, - "scope": 11478, - "src": "851:70:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11444, - "nodeType": "StructuredDocumentation", - "src": "927:127:29", - "text": "@dev Enables token in enabledTokenMask for the Credit Account of msg.sender\n @param token Address of token to enable" - }, - "functionSelector": "c690908a", - "id": 11449, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "enableToken", - "nameLocation": "1068:11:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11447, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11446, - "mutability": "mutable", - "name": "token", - "nameLocation": "1088:5:29", - "nodeType": "VariableDeclaration", - "scope": 11449, - "src": "1080:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11445, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1080:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1079:15:29" - }, - "returnParameters": { - "id": 11448, - "nodeType": "ParameterList", - "parameters": [], - "src": "1103:0:29" - }, - "scope": 11478, - "src": "1059:45:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11450, - "nodeType": "StructuredDocumentation", - "src": "1110:245:29", - "text": "@dev Disables a token on the caller's Credit Account\n @param token Token to disable\n @notice This is an extenstion function that does not exist in the Credit Facade\n itself and can only be used within a multicall" - }, - "functionSelector": "23e27a64", - "id": 11455, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "disableToken", - "nameLocation": "1369:12:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11453, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11452, - "mutability": "mutable", - "name": "token", - "nameLocation": "1390:5:29", - "nodeType": "VariableDeclaration", - "scope": 11455, - "src": "1382:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11451, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1382:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1381:15:29" - }, - "returnParameters": { - "id": 11454, - "nodeType": "ParameterList", - "parameters": [], - "src": "1405:0:29" - }, - "scope": 11478, - "src": "1360:46:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11456, - "nodeType": "StructuredDocumentation", - "src": "1412:214:29", - "text": "@dev Adds collateral to borrower's credit account\n @param onBehalfOf Address of the borrower whose account is funded\n @param token Address of a collateral token\n @param amount Amount to add" - }, - "functionSelector": "59781034", - "id": 11465, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addCollateral", - "nameLocation": "1640:13:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11463, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11458, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "1671:10:29", - "nodeType": "VariableDeclaration", - "scope": 11465, - "src": "1663:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11457, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1663:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11460, - "mutability": "mutable", - "name": "token", - "nameLocation": "1699:5:29", - "nodeType": "VariableDeclaration", - "scope": 11465, - "src": "1691:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11459, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1691:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11462, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1722:6:29", - "nodeType": "VariableDeclaration", - "scope": 11465, - "src": "1714:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11461, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1714:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1653:81:29" - }, - "returnParameters": { - "id": 11464, - "nodeType": "ParameterList", - "parameters": [], - "src": "1751:0:29" - }, - "scope": 11478, - "src": "1631:121:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11466, - "nodeType": "StructuredDocumentation", - "src": "1758:314:29", - "text": "@dev Increases debt for msg.sender's Credit Account\n - Borrows the requested amount from the pool\n - Updates the CA's borrowAmount / cumulativeIndexOpen\n to correctly compute interest going forward\n - Performs a full collateral check\n @param amount Amount to borrow" - }, - "functionSelector": "2b7c7b11", - "id": 11471, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "increaseDebt", - "nameLocation": "2086:12:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11468, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2107:6:29", - "nodeType": "VariableDeclaration", - "scope": 11471, - "src": "2099:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11467, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2099:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2098:16:29" - }, - "returnParameters": { - "id": 11470, - "nodeType": "ParameterList", - "parameters": [], - "src": "2123:0:29" - }, - "scope": 11478, - "src": "2077:47:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11472, - "nodeType": "StructuredDocumentation", - "src": "2130:331:29", - "text": "@dev Decrease debt\n - Decreases the debt by paying the requested amount + accrued interest + fees back to the pool\n - It's also include to this payment interest accrued at the moment and fees\n - Updates cunulativeIndex to cumulativeIndex now\n @param amount Amount to increase borrowed amount" - }, - "functionSelector": "2a7ba1f7", - "id": 11477, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decreaseDebt", - "nameLocation": "2475:12:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11474, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2496:6:29", - "nodeType": "VariableDeclaration", - "scope": 11477, - "src": "2488:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11473, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2488:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2487:16:29" - }, - "returnParameters": { - "id": 11476, - "nodeType": "ParameterList", - "parameters": [], - "src": "2512:0:29" - }, - "scope": 11478, - "src": "2466:47:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11931, - "src": "389:2126:29", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditFacadeEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 11597, - "linearizedBaseContracts": [11597], - "name": "ICreditFacadeEvents", - "nameLocation": "2527:19:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 11479, - "nodeType": "StructuredDocumentation", - "src": "2553:79:29", - "text": "@dev Emits when Blacklist Helper is set for the Credit Facade upon creation" - }, - "eventSelector": "cb3b4bdae9a9c5626b486904f099393ae5286a7f2b58380329f6d67a6ecdc9da", - "id": 11483, - "name": "BlacklistHelperSet", - "nameLocation": "2643:18:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11481, - "indexed": true, - "mutability": "mutable", - "name": "blacklistHelper", - "nameLocation": "2678:15:29", - "nodeType": "VariableDeclaration", - "scope": 11483, - "src": "2662:31:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2662:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2661:33:29" - }, - "src": "2637:58:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11484, - "nodeType": "StructuredDocumentation", - "src": "2701:89:29", - "text": "@dev Emits when a new Credit Account is opened through the\n Credit Facade" - }, - "eventSelector": "fa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a763", - "id": 11494, - "name": "OpenCreditAccount", - "nameLocation": "2801:17:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11493, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11486, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "2844:10:29", - "nodeType": "VariableDeclaration", - "scope": 11494, - "src": "2828:26:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11485, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2828:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11488, - "indexed": true, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "2880:13:29", - "nodeType": "VariableDeclaration", - "scope": 11494, - "src": "2864:29:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11487, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2864:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11490, - "indexed": false, - "mutability": "mutable", - "name": "borrowAmount", - "nameLocation": "2911:12:29", - "nodeType": "VariableDeclaration", - "scope": 11494, - "src": "2903:20:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11489, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2903:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11492, - "indexed": false, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "2940:12:29", - "nodeType": "VariableDeclaration", - "scope": 11494, - "src": "2933:19:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11491, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2933:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "2818:140:29" - }, - "src": "2795:164:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11495, - "nodeType": "StructuredDocumentation", - "src": "2965:62:29", - "text": "@dev Emits when the account owner closes their CA normally" - }, - "eventSelector": "460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b391981", - "id": 11501, - "name": "CloseCreditAccount", - "nameLocation": "3038:18:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11500, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11497, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "3073:8:29", - "nodeType": "VariableDeclaration", - "scope": 11501, - "src": "3057:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11496, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3057:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11499, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "3099:2:29", - "nodeType": "VariableDeclaration", - "scope": 11501, - "src": "3083:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11498, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3083:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3056:46:29" - }, - "src": "3032:71:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11502, - "nodeType": "StructuredDocumentation", - "src": "3109:75:29", - "text": "@dev Emits when a Credit Account is liquidated due to low health factor" - }, - "eventSelector": "7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae1439064", - "id": 11512, - "name": "LiquidateCreditAccount", - "nameLocation": "3195:22:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11511, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11504, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "3243:8:29", - "nodeType": "VariableDeclaration", - "scope": 11512, - "src": "3227:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3227:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11506, - "indexed": true, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "3277:10:29", - "nodeType": "VariableDeclaration", - "scope": 11512, - "src": "3261:26:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3261:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11508, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "3313:2:29", - "nodeType": "VariableDeclaration", - "scope": 11512, - "src": "3297:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11507, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3297:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11510, - "indexed": false, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "3333:14:29", - "nodeType": "VariableDeclaration", - "scope": 11512, - "src": "3325:22:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11509, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3325:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3217:136:29" - }, - "src": "3189:165:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11513, - "nodeType": "StructuredDocumentation", - "src": "3360:64:29", - "text": "@dev Emits when a Credit Account is liquidated due to expiry" - }, - "eventSelector": "fada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b86707", - "id": 11523, - "name": "LiquidateExpiredCreditAccount", - "nameLocation": "3435:29:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11522, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11515, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "3490:8:29", - "nodeType": "VariableDeclaration", - "scope": 11523, - "src": "3474:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3474:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11517, - "indexed": true, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "3524:10:29", - "nodeType": "VariableDeclaration", - "scope": 11523, - "src": "3508:26:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11516, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3508:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11519, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "3560:2:29", - "nodeType": "VariableDeclaration", - "scope": 11523, - "src": "3544:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11518, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3544:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11521, - "indexed": false, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "3580:14:29", - "nodeType": "VariableDeclaration", - "scope": 11523, - "src": "3572:22:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11520, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3572:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3464:136:29" - }, - "src": "3429:172:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11524, - "nodeType": "StructuredDocumentation", - "src": "3607:142:29", - "text": "@dev Emits when remaining funds in underlying currency are sent to\n the blacklist helper upon blacklisted borrower liquidation" - }, - "eventSelector": "e2655809b4fc2a2dffc14ecf5aad9dbf5a9703a5bb2b19ab7ae6afa29ef0c7c8", - "id": 11530, - "name": "UnderlyingSentToBlacklistHelper", - "nameLocation": "3760:31:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11529, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11526, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "3817:8:29", - "nodeType": "VariableDeclaration", - "scope": 11530, - "src": "3801:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11525, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3801:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11528, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3843:6:29", - "nodeType": "VariableDeclaration", - "scope": 11530, - "src": "3835:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11527, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3835:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3791:64:29" - }, - "src": "3754:102:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11531, - "nodeType": "StructuredDocumentation", - "src": "3862:57:29", - "text": "@dev Emits when the account owner increases CA's debt" - }, - "eventSelector": "9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c45", - "id": 11537, - "name": "IncreaseBorrowedAmount", - "nameLocation": "3930:22:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11536, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11533, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "3969:8:29", - "nodeType": "VariableDeclaration", - "scope": 11537, - "src": "3953:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11532, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3953:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11535, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3987:6:29", - "nodeType": "VariableDeclaration", - "scope": 11537, - "src": "3979:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11534, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3979:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3952:42:29" - }, - "src": "3924:71:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11538, - "nodeType": "StructuredDocumentation", - "src": "4001:55:29", - "text": "@dev Emits when the account owner reduces CA's debt" - }, - "eventSelector": "98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a", - "id": 11544, - "name": "DecreaseBorrowedAmount", - "nameLocation": "4067:22:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11543, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11540, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4106:8:29", - "nodeType": "VariableDeclaration", - "scope": 11544, - "src": "4090:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11539, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4090:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11542, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "4124:6:29", - "nodeType": "VariableDeclaration", - "scope": 11544, - "src": "4116:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11541, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4116:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4089:42:29" - }, - "src": "4061:71:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11545, - "nodeType": "StructuredDocumentation", - "src": "4138:64:29", - "text": "@dev Emits when the account owner add new collateral to a CA" - }, - "eventSelector": "a32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f", - "id": 11553, - "name": "AddCollateral", - "nameLocation": "4213:13:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11552, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11547, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "4252:10:29", - "nodeType": "VariableDeclaration", - "scope": 11553, - "src": "4236:26:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11546, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4236:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11549, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "4288:5:29", - "nodeType": "VariableDeclaration", - "scope": 11553, - "src": "4272:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4272:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11551, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "4311:5:29", - "nodeType": "VariableDeclaration", - "scope": 11553, - "src": "4303:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11550, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4303:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4226:96:29" - }, - "src": "4207:116:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11554, - "nodeType": "StructuredDocumentation", - "src": "4329:42:29", - "text": "@dev Emits when a multicall is started" - }, - "eventSelector": "4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a690811", - "id": 11558, - "name": "MultiCallStarted", - "nameLocation": "4382:16:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11557, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11556, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4415:8:29", - "nodeType": "VariableDeclaration", - "scope": 11558, - "src": "4399:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4399:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4398:26:29" - }, - "src": "4376:49:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11559, - "nodeType": "StructuredDocumentation", - "src": "4431:43:29", - "text": "@dev Emits when a multicall is finished" - }, - "eventSelector": "60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b4", - "id": 11561, - "name": "MultiCallFinished", - "nameLocation": "4485:17:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11560, - "nodeType": "ParameterList", - "parameters": [], - "src": "4502:2:29" - }, - "src": "4479:26:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11562, - "nodeType": "StructuredDocumentation", - "src": "4511:59:29", - "text": "@dev Emits when Credit Account ownership is transferred" - }, - "eventSelector": "93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d", - "id": 11568, - "name": "TransferAccount", - "nameLocation": "4581:15:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11567, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11564, - "indexed": true, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "4613:8:29", - "nodeType": "VariableDeclaration", - "scope": 11568, - "src": "4597:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11563, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4597:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11566, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "4639:8:29", - "nodeType": "VariableDeclaration", - "scope": 11568, - "src": "4623:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11565, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4623:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4596:52:29" - }, - "src": "4575:74:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11569, - "nodeType": "StructuredDocumentation", - "src": "4655:98:29", - "text": "@dev Emits when the user changes approval for account transfers to itself from another address" - }, - "eventSelector": "9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0", - "id": 11577, - "name": "TransferAccountAllowed", - "nameLocation": "4764:22:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11571, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "4812:4:29", - "nodeType": "VariableDeclaration", - "scope": 11577, - "src": "4796:20:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11570, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4796:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11573, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "4842:2:29", - "nodeType": "VariableDeclaration", - "scope": 11577, - "src": "4826:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4826:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11575, - "indexed": false, - "mutability": "mutable", - "name": "state", - "nameLocation": "4859:5:29", - "nodeType": "VariableDeclaration", - "scope": 11577, - "src": "4854:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11574, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4854:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4786:84:29" - }, - "src": "4758:113:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11578, - "nodeType": "StructuredDocumentation", - "src": "4877:65:29", - "text": "@dev Emits when the account owner enables a token on their CA" - }, - "eventSelector": "df498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac87", - "id": 11584, - "name": "TokenEnabled", - "nameLocation": "4953:12:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11583, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11580, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4982:8:29", - "nodeType": "VariableDeclaration", - "scope": 11584, - "src": "4966:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11579, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4966:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11582, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "5008:5:29", - "nodeType": "VariableDeclaration", - "scope": 11584, - "src": "4992:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11581, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4992:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4965:49:29" - }, - "src": "4947:68:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11585, - "nodeType": "StructuredDocumentation", - "src": "5021:66:29", - "text": "@dev Emits when the account owner disables a token on their CA" - }, - "eventSelector": "69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977", - "id": 11591, - "name": "TokenDisabled", - "nameLocation": "5098:13:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11590, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11587, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "5128:8:29", - "nodeType": "VariableDeclaration", - "scope": 11591, - "src": "5112:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11586, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5112:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11589, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "5154:5:29", - "nodeType": "VariableDeclaration", - "scope": 11591, - "src": "5138:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11588, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5138:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5111:49:29" - }, - "src": "5092:69:29" - }, - { - "anonymous": false, - "documentation": { - "id": 11592, - "nodeType": "StructuredDocumentation", - "src": "5167:88:29", - "text": "@dev Emits when pool incurs loss on account liquidation and facade forbids borrowing" - }, - "eventSelector": "039b20af1a8da82c3d37dd7b0fe81a987532ffca72fbd69951823f7c40511f2d", - "id": 11596, - "name": "IncurLossOnLiquidation", - "nameLocation": "5266:22:29", - "nodeType": "EventDefinition", - "parameters": { - "id": 11595, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11594, - "indexed": false, - "mutability": "mutable", - "name": "loss", - "nameLocation": "5297:4:29", - "nodeType": "VariableDeclaration", - "scope": 11596, - "src": "5289:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11593, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5289:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5288:14:29" - }, - "src": "5260:43:29" - } - ], - "scope": 11931, - "src": "2517:2788:29", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 11598, - "name": "ICreditManagerV2Exceptions", - "nameLocations": ["5344:26:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11994, - "src": "5344:26:29" - }, - "id": 11599, - "nodeType": "InheritanceSpecifier", - "src": "5344:26:29" - } - ], - "canonicalName": "ICreditFacadeExceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 11659, - "linearizedBaseContracts": [11659, 11994], - "name": "ICreditFacadeExceptions", - "nameLocation": "5317:23:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11600, - "nodeType": "StructuredDocumentation", - "src": "5377:120:29", - "text": "@dev Thrown if the CreditFacade is not expirable, and an aciton is attempted that\n requires expirability" - }, - "errorSelector": "50dd11fc", - "id": 11602, - "name": "NotAllowedWhenNotExpirableException", - "nameLocation": "5508:35:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11601, - "nodeType": "ParameterList", - "parameters": [], - "src": "5543:2:29" - }, - "src": "5502:44:29" - }, - { - "documentation": { - "id": 11603, - "nodeType": "StructuredDocumentation", - "src": "5552:127:29", - "text": "@dev Thrown if whitelisted mode is enabled, and an action is attempted that is\n not allowed in whitelisted mode" - }, - "errorSelector": "5aa66767", - "id": 11605, - "name": "NotAllowedInWhitelistedMode", - "nameLocation": "5690:27:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11604, - "nodeType": "ParameterList", - "parameters": [], - "src": "5717:2:29" - }, - "src": "5684:36:29" - }, - { - "documentation": { - "id": 11606, - "nodeType": "StructuredDocumentation", - "src": "5726:86:29", - "text": "@dev Thrown if a user attempts to transfer a CA to an address that didn't allow it" - }, - "errorSelector": "85b07726", - "id": 11608, - "name": "AccountTransferNotAllowedException", - "nameLocation": "5823:34:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11607, - "nodeType": "ParameterList", - "parameters": [], - "src": "5857:2:29" - }, - "src": "5817:43:29" - }, - { - "documentation": { - "id": 11609, - "nodeType": "StructuredDocumentation", - "src": "5866:90:29", - "text": "@dev Thrown if a liquidator tries to liquidate an account with a health factor above 1" - }, - "errorSelector": "1fdd676f", - "id": 11611, - "name": "CantLiquidateWithSuchHealthFactorException", - "nameLocation": "5967:42:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11610, - "nodeType": "ParameterList", - "parameters": [], - "src": "6009:2:29" - }, - "src": "5961:51:29" - }, - { - "documentation": { - "id": 11612, - "nodeType": "StructuredDocumentation", - "src": "6018:108:29", - "text": "@dev Thrown if a liquidator tries to liquidate an account by expiry while a Credit Facade is not expired" - }, - "errorSelector": "7e52ccb4", - "id": 11614, - "name": "CantLiquidateNonExpiredException", - "nameLocation": "6137:32:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11613, - "nodeType": "ParameterList", - "parameters": [], - "src": "6169:2:29" - }, - "src": "6131:41:29" - }, - { - "documentation": { - "id": 11615, - "nodeType": "StructuredDocumentation", - "src": "6178:63:29", - "text": "@dev Thrown if call data passed to a multicall is too short" - }, - "errorSelector": "e2b0e506", - "id": 11617, - "name": "IncorrectCallDataException", - "nameLocation": "6252:26:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11616, - "nodeType": "ParameterList", - "parameters": [], - "src": "6278:2:29" - }, - "src": "6246:35:29" - }, - { - "documentation": { - "id": 11618, - "nodeType": "StructuredDocumentation", - "src": "6287:136:29", - "text": "@dev Thrown inside account closure multicall if the borrower attempts an action that is forbidden on closing\n an account" - }, - "errorSelector": "5fb9107f", - "id": 11620, - "name": "ForbiddenDuringClosureException", - "nameLocation": "6434:31:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11619, - "nodeType": "ParameterList", - "parameters": [], - "src": "6465:2:29" - }, - "src": "6428:40:29" - }, - { - "documentation": { - "id": 11621, - "nodeType": "StructuredDocumentation", - "src": "6474:89:29", - "text": "@dev Thrown if debt increase and decrease are subsequently attempted in one multicall" - }, - "errorSelector": "c0b0caa8", - "id": 11623, - "name": "IncreaseAndDecreaseForbiddenInOneCallException", - "nameLocation": "6574:46:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11622, - "nodeType": "ParameterList", - "parameters": [], - "src": "6620:2:29" - }, - "src": "6568:55:29" - }, - { - "documentation": { - "id": 11624, - "nodeType": "StructuredDocumentation", - "src": "6629:132:29", - "text": "@dev Thrown if a selector that doesn't match any allowed function is passed to the Credit Facade\n during a multicall" - }, - "errorSelector": "1e9e7e7a", - "id": 11626, - "name": "UnknownMethodException", - "nameLocation": "6772:22:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11625, - "nodeType": "ParameterList", - "parameters": [], - "src": "6794:2:29" - }, - "src": "6766:31:29" - }, - { - "documentation": { - "id": 11627, - "nodeType": "StructuredDocumentation", - "src": "6803:102:29", - "text": "@dev Thrown if a user tries to open an account or increase debt with increaseDebtForbidden mode on" - }, - "errorSelector": "7615238d", - "id": 11629, - "name": "IncreaseDebtForbiddenException", - "nameLocation": "6916:30:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11628, - "nodeType": "ParameterList", - "parameters": [], - "src": "6946:2:29" - }, - "src": "6910:39:29" - }, - { - "documentation": { - "id": 11630, - "nodeType": "StructuredDocumentation", - "src": "6955:75:29", - "text": "@dev Thrown if the account owner tries to transfer an unhealthy account" - }, - "errorSelector": "f713841e", - "id": 11632, - "name": "CantTransferLiquidatableAccountException", - "nameLocation": "7041:40:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11631, - "nodeType": "ParameterList", - "parameters": [], - "src": "7081:2:29" - }, - "src": "7035:49:29" - }, - { - "documentation": { - "id": 11633, - "nodeType": "StructuredDocumentation", - "src": "7090:68:29", - "text": "@dev Thrown if too much new debt was taken within a single block" - }, - "errorSelector": "675f1a56", - "id": 11635, - "name": "BorrowedBlockLimitException", - "nameLocation": "7169:27:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11634, - "nodeType": "ParameterList", - "parameters": [], - "src": "7196:2:29" - }, - "src": "7163:36:29" - }, - { - "documentation": { - "id": 11636, - "nodeType": "StructuredDocumentation", - "src": "7205:84:29", - "text": "@dev Thrown if the new debt principal for a CA falls outside of borrowing limits" - }, - "errorSelector": "ce167994", - "id": 11638, - "name": "BorrowAmountOutOfLimitsException", - "nameLocation": "7300:32:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11637, - "nodeType": "ParameterList", - "parameters": [], - "src": "7332:2:29" - }, - "src": "7294:41:29" - }, - { - "documentation": { - "id": 11639, - "nodeType": "StructuredDocumentation", - "src": "7341:159:29", - "text": "@dev Thrown if one of the balances on a Credit Account is less than expected\n at the end of a multicall, if revertIfReceivedLessThan was called" - }, - "errorSelector": "2f42bd87", - "id": 11643, - "name": "BalanceLessThanMinimumDesiredException", - "nameLocation": "7511:38:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11642, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11641, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11643, - "src": "7550:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11640, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7550:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7549:9:29" - }, - "src": "7505:54:29" - }, - { - "documentation": { - "id": 11644, - "nodeType": "StructuredDocumentation", - "src": "7565:89:29", - "text": "@dev Thrown if a user attempts to open an account on a Credit Facade that has expired" - }, - "errorSelector": "cba1df9b", - "id": 11646, - "name": "OpenAccountNotAllowedAfterExpirationException", - "nameLocation": "7665:45:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11645, - "nodeType": "ParameterList", - "parameters": [], - "src": "7710:2:29" - }, - "src": "7659:54:29" - }, - { - "documentation": { - "id": 11647, - "nodeType": "StructuredDocumentation", - "src": "7719:99:29", - "text": "@dev Thrown if expected balances are attempted to be set through revertIfReceivedLessThan twice" - }, - "errorSelector": "e61eedf5", - "id": 11649, - "name": "ExpectedBalancesAlreadySetException", - "nameLocation": "7829:35:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11648, - "nodeType": "ParameterList", - "parameters": [], - "src": "7864:2:29" - }, - "src": "7823:44:29" - }, - { - "documentation": { - "id": 11650, - "nodeType": "StructuredDocumentation", - "src": "7873:175:29", - "text": "@dev Thrown if a Credit Account has enabled forbidden tokens and the owner attempts to perform an action\n that is not allowed with any forbidden tokens enabled" - }, - "errorSelector": "aea975da", - "id": 11652, - "name": "ActionProhibitedWithForbiddenTokensException", - "nameLocation": "8059:44:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11651, - "nodeType": "ParameterList", - "parameters": [], - "src": "8103:2:29" - }, - "src": "8053:53:29" - }, - { - "documentation": { - "id": 11653, - "nodeType": "StructuredDocumentation", - "src": "8112:133:29", - "text": "@dev Thrown when attempting to perform an action on behalf of a borrower\n that is blacklisted in the underlying token" - }, - "errorSelector": "03cd1712", - "id": 11655, - "name": "NotAllowedForBlacklistedAddressException", - "nameLocation": "8256:40:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11654, - "nodeType": "ParameterList", - "parameters": [], - "src": "8296:2:29" - }, - "src": "8250:49:29" - }, - { - "documentation": { - "id": 11656, - "nodeType": "StructuredDocumentation", - "src": "8305:98:29", - "text": "@dev Thrown when the pool receives less funds than borrowAmountWithInterest on account closure" - }, - "errorSelector": "1e05cdad", - "id": 11658, - "name": "LiquiditySanityCheckException", - "nameLocation": "8414:29:29", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11657, - "nodeType": "ParameterList", - "parameters": [], - "src": "8443:2:29" - }, - "src": "8408:38:29" - } - ], - "scope": 11931, - "src": "5307:3141:29", - "usedErrors": [ - 11602, 11605, 11608, 11611, 11614, 11617, 11620, 11623, 11626, - 11629, 11632, 11635, 11638, 11643, 11646, 11649, 11652, 11655, - 11658, 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, - 11981, 11984, 11987, 11990, 11993 - ] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 11660, - "name": "ICreditFacadeEvents", - "nameLocations": ["8481:19:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11597, - "src": "8481:19:29" - }, - "id": 11661, - "nodeType": "InheritanceSpecifier", - "src": "8481:19:29" - }, - { - "baseName": { - "id": 11662, - "name": "ICreditFacadeExceptions", - "nameLocations": ["8506:23:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11659, - "src": "8506:23:29" - }, - "id": 11663, - "nodeType": "InheritanceSpecifier", - "src": "8506:23:29" - }, - { - "baseName": { - "id": 11664, - "name": "IVersion", - "nameLocations": ["8535:8:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "8535:8:29" - }, - "id": 11665, - "nodeType": "InheritanceSpecifier", - "src": "8535:8:29" - } - ], - "canonicalName": "ICreditFacade", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11919, - "linearizedBaseContracts": [11919, 12963, 11659, 11994, 11597], - "name": "ICreditFacade", - "nameLocation": "8460:13:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11666, - "nodeType": "StructuredDocumentation", - "src": "8598:621:29", - "text": "@dev Opens credit account, borrows funds from the pool and pulls collateral\n without any additional action.\n @param amount The amount of collateral provided by the borrower\n @param onBehalfOf The address to open an account for. Transfers to it have to be allowed if\n msg.sender != obBehalfOf\n @param leverageFactor Percentage of the user's own funds to borrow. 100 is equal to 100% - borrows the same amount\n as the user's own collateral, equivalent to 2x leverage.\n @param referralCode Referral code that is used for potential rewards. 0 if no referral code provided." - }, - "functionSelector": "6c8f225d", - "id": 11677, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "openCreditAccount", - "nameLocation": "9233:17:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11675, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11668, - "mutability": "mutable", - "name": "amount", - "nameLocation": "9268:6:29", - "nodeType": "VariableDeclaration", - "scope": 11677, - "src": "9260:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11667, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9260:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11670, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "9292:10:29", - "nodeType": "VariableDeclaration", - "scope": 11677, - "src": "9284:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11669, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9284:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11672, - "mutability": "mutable", - "name": "leverageFactor", - "nameLocation": "9319:14:29", - "nodeType": "VariableDeclaration", - "scope": 11677, - "src": "9312:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11671, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9312:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11674, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "9350:12:29", - "nodeType": "VariableDeclaration", - "scope": 11677, - "src": "9343:19:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11673, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "9343:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "9250:118:29" - }, - "returnParameters": { - "id": 11676, - "nodeType": "ParameterList", - "parameters": [], - "src": "9385:0:29" - }, - "scope": 11919, - "src": "9224:162:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11678, - "nodeType": "StructuredDocumentation", - "src": "9392:560:29", - "text": "@dev Opens a Credit Account and runs a batch of operations in a multicall\n @param borrowedAmount Debt size\n @param onBehalfOf The address to open an account for. Transfers to it have to be allowed if\n msg.sender != obBehalfOf\n @param calls The array of MultiCall structs encoding the required operations. Generally must have\n at least a call to addCollateral, as otherwise the health check at the end will fail.\n @param referralCode Referral code which is used for potential rewards. 0 if no referral code provided" - }, - "functionSelector": "7071b7c5", - "id": 11691, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "openCreditAccountMulticall", - "nameLocation": "9966:26:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11689, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11680, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "10010:14:29", - "nodeType": "VariableDeclaration", - "scope": 11691, - "src": "10002:22:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11679, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10002:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11682, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "10042:10:29", - "nodeType": "VariableDeclaration", - "scope": 11691, - "src": "10034:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10034:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11686, - "mutability": "mutable", - "name": "calls", - "nameLocation": "10083:5:29", - "nodeType": "VariableDeclaration", - "scope": 11691, - "src": "10062:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11684, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11683, - "name": "MultiCall", - "nameLocations": ["10062:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "10062:9:29" - }, - "referencedDeclaration": 14040, - "src": "10062:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11685, - "nodeType": "ArrayTypeName", - "src": "10062:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11688, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "10105:12:29", - "nodeType": "VariableDeclaration", - "scope": 11691, - "src": "10098:19:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11687, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "10098:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "9992:131:29" - }, - "returnParameters": { - "id": 11690, - "nodeType": "ParameterList", - "parameters": [], - "src": "10140:0:29" - }, - "scope": 11919, - "src": "9957:184:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11692, - "nodeType": "StructuredDocumentation", - "src": "10147:1046:29", - "text": "@dev Runs a batch of transactions within a multicall and closes the account\n - Wraps ETH to WETH and sends it msg.sender if value > 0\n - Executes the multicall - the main purpose of a multicall when closing is to convert all assets to underlying\n in order to pay the debt.\n - Closes credit account:\n + Checks the underlying balance: if it is greater than the amount paid to the pool, transfers the underlying\n from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender.\n + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked\n to be skipped in skipTokenMask\n - Emits a CloseCreditAccount event\n @param to Address to send funds to during account closing\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before closing the account." - }, - "functionSelector": "12de90c9", - "id": 11703, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "closeCreditAccount", - "nameLocation": "11207:18:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11701, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11694, - "mutability": "mutable", - "name": "to", - "nameLocation": "11243:2:29", - "nodeType": "VariableDeclaration", - "scope": 11703, - "src": "11235:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11693, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11235:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11696, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "11263:13:29", - "nodeType": "VariableDeclaration", - "scope": 11703, - "src": "11255:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11695, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11255:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11700, - "mutability": "mutable", - "name": "calls", - "nameLocation": "11307:5:29", - "nodeType": "VariableDeclaration", - "scope": 11703, - "src": "11286:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11698, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11697, - "name": "MultiCall", - "nameLocations": ["11286:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "11286:9:29" - }, - "referencedDeclaration": 14040, - "src": "11286:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11699, - "nodeType": "ArrayTypeName", - "src": "11286:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "11225:93:29" - }, - "returnParameters": { - "id": 11702, - "nodeType": "ParameterList", - "parameters": [], - "src": "11335:0:29" - }, - "scope": 11919, - "src": "11198:138:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11704, - "nodeType": "StructuredDocumentation", - "src": "11342:134:29", - "text": "@dev A version of `closeCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "5f73fbec", - "id": 11717, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "closeCreditAccount", - "nameLocation": "11490:18:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11715, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11706, - "mutability": "mutable", - "name": "to", - "nameLocation": "11526:2:29", - "nodeType": "VariableDeclaration", - "scope": 11717, - "src": "11518:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11705, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11518:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11708, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "11546:13:29", - "nodeType": "VariableDeclaration", - "scope": 11717, - "src": "11538:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11707, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11538:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11710, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "11574:11:29", - "nodeType": "VariableDeclaration", - "scope": 11717, - "src": "11569:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11709, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11569:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11714, - "mutability": "mutable", - "name": "calls", - "nameLocation": "11616:5:29", - "nodeType": "VariableDeclaration", - "scope": 11717, - "src": "11595:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11712, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11711, - "name": "MultiCall", - "nameLocations": ["11595:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "11595:9:29" - }, - "referencedDeclaration": 14040, - "src": "11595:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11713, - "nodeType": "ArrayTypeName", - "src": "11595:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "11508:119:29" - }, - "returnParameters": { - "id": 11716, - "nodeType": "ParameterList", - "parameters": [], - "src": "11644:0:29" - }, - "scope": 11919, - "src": "11481:164:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11718, - "nodeType": "StructuredDocumentation", - "src": "11651:1928:29", - "text": "@dev Runs a batch of transactions within a multicall and liquidates the account\n - Computes the total value and checks that hf < 1. An account can't be liquidated when hf >= 1.\n Total value has to be computed before the multicall, otherwise the liquidator would be able\n to manipulate it.\n - Wraps ETH to WETH and sends it to msg.sender (liquidator) if value > 0\n - Executes the multicall - the main purpose of a multicall when liquidating is to convert all assets to underlying\n in order to pay the debt.\n - Liquidate credit account:\n + Computes the amount that needs to be paid to the pool. If totalValue * liquidationDiscount < borrow + interest + fees,\n only totalValue * liquidationDiscount has to be paid. Since liquidationDiscount < 1, the liquidator can take\n totalValue * (1 - liquidationDiscount) as premium. Also computes the remaining funds to be sent to borrower\n as totalValue * liquidationDiscount - amountToPool.\n + Checks the underlying balance: if it is greater than amountToPool + remainingFunds, transfers the underlying\n from the Credit Account and proceeds. If not, tries to transfer the shortfall from the liquidator.\n + Transfers all enabled assets with non-zero balances to the \"to\" address, unless they are marked\n to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted\n during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying\n - Emits LiquidateCreditAccount event\n @param to Address to send funds to after liquidation\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before liquidating the account." - }, - "functionSelector": "5c1ca80f", - "id": 11731, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidateCreditAccount", - "nameLocation": "13593:22:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11720, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "13633:8:29", - "nodeType": "VariableDeclaration", - "scope": 11731, - "src": "13625:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11719, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13625:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11722, - "mutability": "mutable", - "name": "to", - "nameLocation": "13659:2:29", - "nodeType": "VariableDeclaration", - "scope": 11731, - "src": "13651:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11721, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13651:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11724, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "13679:13:29", - "nodeType": "VariableDeclaration", - "scope": 11731, - "src": "13671:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11723, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13671:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11728, - "mutability": "mutable", - "name": "calls", - "nameLocation": "13723:5:29", - "nodeType": "VariableDeclaration", - "scope": 11731, - "src": "13702:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11726, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11725, - "name": "MultiCall", - "nameLocations": ["13702:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "13702:9:29" - }, - "referencedDeclaration": 14040, - "src": "13702:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11727, - "nodeType": "ArrayTypeName", - "src": "13702:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "13615:119:29" - }, - "returnParameters": { - "id": 11730, - "nodeType": "ParameterList", - "parameters": [], - "src": "13751:0:29" - }, - "scope": 11919, - "src": "13584:168:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11732, - "nodeType": "StructuredDocumentation", - "src": "13758:138:29", - "text": "@dev A version of `liquidateCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "5d91a0e0", - "id": 11747, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidateCreditAccount", - "nameLocation": "13910:22:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11745, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11734, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "13950:8:29", - "nodeType": "VariableDeclaration", - "scope": 11747, - "src": "13942:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11733, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13942:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11736, - "mutability": "mutable", - "name": "to", - "nameLocation": "13976:2:29", - "nodeType": "VariableDeclaration", - "scope": 11747, - "src": "13968:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11735, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13968:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11738, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "13996:13:29", - "nodeType": "VariableDeclaration", - "scope": 11747, - "src": "13988:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11737, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13988:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11740, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "14024:11:29", - "nodeType": "VariableDeclaration", - "scope": 11747, - "src": "14019:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11739, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "14019:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11744, - "mutability": "mutable", - "name": "calls", - "nameLocation": "14066:5:29", - "nodeType": "VariableDeclaration", - "scope": 11747, - "src": "14045:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11742, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11741, - "name": "MultiCall", - "nameLocations": ["14045:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "14045:9:29" - }, - "referencedDeclaration": 14040, - "src": "14045:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11743, - "nodeType": "ArrayTypeName", - "src": "14045:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "13932:145:29" - }, - "returnParameters": { - "id": 11746, - "nodeType": "ParameterList", - "parameters": [], - "src": "14094:0:29" - }, - "scope": 11919, - "src": "13901:194:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11748, - "nodeType": "StructuredDocumentation", - "src": "14101:1063:29", - "text": "@dev Runs a batch of transactions within a multicall and liquidates the account when\n this Credit Facade is expired\n The general flow of liquidation is nearly the same as normal liquidations, with two main differences:\n - An account can be liquidated on an expired Credit Facade even with hf > 1. However,\n no accounts can be liquidated through this function if the Credit Facade is not expired.\n - Liquidation premiums and fees for liquidating expired accounts are reduced.\n It is still possible to normally liquidate an underwater Credit Account, even when the Credit Facade\n is expired.\n @param to Address to send funds to after liquidation\n @param skipTokenMask Uint-encoded bit mask where 1's mark tokens that shouldn't be transferred\n @param calls The array of MultiCall structs encoding the operations to execute before liquidating the account.\n @notice See more at https://dev.gearbox.fi/docs/documentation/credit/liquidation#liquidating-accounts-by-expiration" - }, - "functionSelector": "26aac859", - "id": 11761, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidateExpiredCreditAccount", - "nameLocation": "15178:29:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11750, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "15225:8:29", - "nodeType": "VariableDeclaration", - "scope": 11761, - "src": "15217:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11749, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15217:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11752, - "mutability": "mutable", - "name": "to", - "nameLocation": "15251:2:29", - "nodeType": "VariableDeclaration", - "scope": 11761, - "src": "15243:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11751, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15243:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11754, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "15271:13:29", - "nodeType": "VariableDeclaration", - "scope": 11761, - "src": "15263:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11753, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15263:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11758, - "mutability": "mutable", - "name": "calls", - "nameLocation": "15315:5:29", - "nodeType": "VariableDeclaration", - "scope": 11761, - "src": "15294:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11756, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11755, - "name": "MultiCall", - "nameLocations": ["15294:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "15294:9:29" - }, - "referencedDeclaration": 14040, - "src": "15294:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11757, - "nodeType": "ArrayTypeName", - "src": "15294:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "15207:119:29" - }, - "returnParameters": { - "id": 11760, - "nodeType": "ParameterList", - "parameters": [], - "src": "15343:0:29" - }, - "scope": 11919, - "src": "15169:175:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11762, - "nodeType": "StructuredDocumentation", - "src": "15350:145:29", - "text": "@dev A version of `liquidateExpiredCreditAccount` with `convertWETH` parameter that is ignored.\n Used for backward compatibility." - }, - "functionSelector": "82871ace", - "id": 11777, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidateExpiredCreditAccount", - "nameLocation": "15509:29:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11775, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11764, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "15556:8:29", - "nodeType": "VariableDeclaration", - "scope": 11777, - "src": "15548:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11763, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15548:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11766, - "mutability": "mutable", - "name": "to", - "nameLocation": "15582:2:29", - "nodeType": "VariableDeclaration", - "scope": 11777, - "src": "15574:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11765, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15574:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11768, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "15602:13:29", - "nodeType": "VariableDeclaration", - "scope": 11777, - "src": "15594:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11767, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15594:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11770, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "15630:11:29", - "nodeType": "VariableDeclaration", - "scope": 11777, - "src": "15625:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11769, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "15625:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11774, - "mutability": "mutable", - "name": "calls", - "nameLocation": "15672:5:29", - "nodeType": "VariableDeclaration", - "scope": 11777, - "src": "15651:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11772, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11771, - "name": "MultiCall", - "nameLocations": ["15651:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "15651:9:29" - }, - "referencedDeclaration": 14040, - "src": "15651:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11773, - "nodeType": "ArrayTypeName", - "src": "15651:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "15538:145:29" - }, - "returnParameters": { - "id": 11776, - "nodeType": "ParameterList", - "parameters": [], - "src": "15700:0:29" - }, - "scope": 11919, - "src": "15500:201:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11778, - "nodeType": "StructuredDocumentation", - "src": "15707:214:29", - "text": "@dev Adds collateral to borrower's credit account\n @param onBehalfOf Address of the borrower whose account is funded\n @param token Address of a collateral token\n @param amount Amount to add" - }, - "functionSelector": "59781034", - "id": 11787, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addCollateral", - "nameLocation": "15935:13:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11780, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "15966:10:29", - "nodeType": "VariableDeclaration", - "scope": 11787, - "src": "15958:18:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11779, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15958:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11782, - "mutability": "mutable", - "name": "token", - "nameLocation": "15994:5:29", - "nodeType": "VariableDeclaration", - "scope": 11787, - "src": "15986:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11781, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15986:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11784, - "mutability": "mutable", - "name": "amount", - "nameLocation": "16017:6:29", - "nodeType": "VariableDeclaration", - "scope": 11787, - "src": "16009:14:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11783, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16009:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15948:81:29" - }, - "returnParameters": { - "id": 11786, - "nodeType": "ParameterList", - "parameters": [], - "src": "16046:0:29" - }, - "scope": 11919, - "src": "15926:121:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11788, - "nodeType": "StructuredDocumentation", - "src": "16053:362:29", - "text": "@dev Executes a batch of transactions within a Multicall, to manage an existing account\n - Wraps ETH and sends it back to msg.sender, if value > 0\n - Executes the Multicall\n - Performs a fullCollateralCheck to verify that hf > 1 after all actions\n @param calls The array of MultiCall structs encoding the operations to execute." - }, - "functionSelector": "caa5c23f", - "id": 11795, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "multicall", - "nameLocation": "16429:9:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11793, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11792, - "mutability": "mutable", - "name": "calls", - "nameLocation": "16460:5:29", - "nodeType": "VariableDeclaration", - "scope": 11795, - "src": "16439:26:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 11790, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11789, - "name": "MultiCall", - "nameLocations": ["16439:9:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "16439:9:29" - }, - "referencedDeclaration": 14040, - "src": "16439:9:29", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 11791, - "nodeType": "ArrayTypeName", - "src": "16439:11:29", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "16438:28:29" - }, - "returnParameters": { - "id": 11794, - "nodeType": "ParameterList", - "parameters": [], - "src": "16483:0:29" - }, - "scope": 11919, - "src": "16420:64:29", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11796, - "nodeType": "StructuredDocumentation", - "src": "16490:105:29", - "text": "@dev Returns true if the borrower has an open Credit Account\n @param borrower Borrower address" - }, - "functionSelector": "256ac915", - "id": 11803, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "hasOpenedCreditAccount", - "nameLocation": "16609:22:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11799, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11798, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "16640:8:29", - "nodeType": "VariableDeclaration", - "scope": 11803, - "src": "16632:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11797, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16632:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16631:18:29" - }, - "returnParameters": { - "id": 11802, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11801, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11803, - "src": "16697:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11800, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "16697:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "16696:6:29" - }, - "scope": 11919, - "src": "16600:103:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11804, - "nodeType": "StructuredDocumentation", - "src": "16709:213:29", - "text": "@dev Approves account transfer from another user to msg.sender\n @param from Address for which account transfers are allowed/forbidden\n @param state True is transfer is allowed, false if forbidden" - }, - "functionSelector": "00842b57", - "id": 11811, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveAccountTransfer", - "nameLocation": "16936:22:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11809, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11806, - "mutability": "mutable", - "name": "from", - "nameLocation": "16967:4:29", - "nodeType": "VariableDeclaration", - "scope": 11811, - "src": "16959:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11805, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16959:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11808, - "mutability": "mutable", - "name": "state", - "nameLocation": "16978:5:29", - "nodeType": "VariableDeclaration", - "scope": 11811, - "src": "16973:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11807, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "16973:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "16958:26:29" - }, - "returnParameters": { - "id": 11810, - "nodeType": "ParameterList", - "parameters": [], - "src": "16993:0:29" - }, - "scope": 11919, - "src": "16927:67:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11812, - "nodeType": "StructuredDocumentation", - "src": "17000:355:29", - "text": "@dev Transfers credit account to another user\n By default, this action is forbidden, and the user has to approve transfers from sender to itself\n by calling approveAccountTransfer.\n This is done to prevent malicious actors from transferring compromised accounts to other users.\n @param to Address to transfer the account to" - }, - "functionSelector": "5019e20a", - "id": 11817, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferAccountOwnership", - "nameLocation": "17369:24:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11815, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11814, - "mutability": "mutable", - "name": "to", - "nameLocation": "17402:2:29", - "nodeType": "VariableDeclaration", - "scope": 11817, - "src": "17394:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11813, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17394:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17393:12:29" - }, - "returnParameters": { - "id": 11816, - "nodeType": "ParameterList", - "parameters": [], - "src": "17414:0:29" - }, - "scope": 11919, - "src": "17360:55:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11818, - "nodeType": "StructuredDocumentation", - "src": "17451:275:29", - "text": "@dev Calculates total value for provided Credit Account in underlying\n @param creditAccount Credit Account address\n @return total Total value in underlying\n @return twv Total weighted (discounted by liquidation thresholds) value in underlying" - }, - "functionSelector": "c7de38a6", - "id": 11827, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcTotalValue", - "nameLocation": "17740:14:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11821, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11820, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "17763:13:29", - "nodeType": "VariableDeclaration", - "scope": 11827, - "src": "17755:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17755:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17754:23:29" - }, - "returnParameters": { - "id": 11826, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11823, - "mutability": "mutable", - "name": "total", - "nameLocation": "17833:5:29", - "nodeType": "VariableDeclaration", - "scope": 11827, - "src": "17825:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11822, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17825:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11825, - "mutability": "mutable", - "name": "twv", - "nameLocation": "17848:3:29", - "nodeType": "VariableDeclaration", - "scope": 11827, - "src": "17840:11:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11824, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17840:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17824:28:29" - }, - "scope": 11919, - "src": "17731:122:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11828, - "nodeType": "StructuredDocumentation", - "src": "17859:490:29", - "text": " @dev Calculates health factor for the credit account\n sum(asset[i] * liquidation threshold[i])\n Hf = --------------------------------------------\n borrowed amount + interest accrued + fees\n More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\n @param creditAccount Credit account address\n @return hf = Health factor in bp (see PERCENTAGE FACTOR in PercentageMath.sol)" - }, - "functionSelector": "dfd59465", - "id": 11835, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountHealthFactor", - "nameLocation": "18363:29:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11831, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11830, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "18401:13:29", - "nodeType": "VariableDeclaration", - "scope": 11835, - "src": "18393:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11829, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18393:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18392:23:29" - }, - "returnParameters": { - "id": 11834, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11833, - "mutability": "mutable", - "name": "hf", - "nameLocation": "18471:2:29", - "nodeType": "VariableDeclaration", - "scope": 11835, - "src": "18463:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 11832, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18463:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18462:12:29" - }, - "scope": 11919, - "src": "18354:121:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11836, - "nodeType": "StructuredDocumentation", - "src": "18481:142:29", - "text": "@dev Returns true if token is a collateral token and is not forbidden,\n otherwise returns false\n @param token Token to check" - }, - "functionSelector": "f9eaee0d", - "id": 11843, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isTokenAllowed", - "nameLocation": "18637:14:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11839, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11838, - "mutability": "mutable", - "name": "token", - "nameLocation": "18660:5:29", - "nodeType": "VariableDeclaration", - "scope": 11843, - "src": "18652:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11837, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18652:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18651:15:29" - }, - "returnParameters": { - "id": 11842, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11841, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11843, - "src": "18690:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11840, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "18690:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "18689:6:29" - }, - "scope": 11919, - "src": "18628:68:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11844, - "nodeType": "StructuredDocumentation", - "src": "18702:66:29", - "text": "@dev Returns the CreditManager connected to this Credit Facade" - }, - "functionSelector": "c12c21c0", - "id": 11850, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManager", - "nameLocation": "18782:13:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11845, - "nodeType": "ParameterList", - "parameters": [], - "src": "18795:2:29" - }, - "returnParameters": { - "id": 11849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11848, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11850, - "src": "18821:16:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - }, - "typeName": { - "id": 11847, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 11846, - "name": "ICreditManagerV2", - "nameLocations": ["18821:16:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12355, - "src": "18821:16:29" - }, - "referencedDeclaration": 12355, - "src": "18821:16:29", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditManagerV2_$12355", - "typeString": "contract ICreditManagerV2" - } - }, - "visibility": "internal" - } - ], - "src": "18820:18:29" - }, - "scope": 11919, - "src": "18773:66:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11851, - "nodeType": "StructuredDocumentation", - "src": "18845:194:29", - "text": "@dev Returns true if 'from' is allowed to transfer Credit Accounts to 'to'\n @param from Sender address to check allowance for\n @param to Receiver address to check allowance for" - }, - "functionSelector": "d9ccbec1", - "id": 11860, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfersAllowed", - "nameLocation": "19053:16:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11856, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11853, - "mutability": "mutable", - "name": "from", - "nameLocation": "19078:4:29", - "nodeType": "VariableDeclaration", - "scope": 11860, - "src": "19070:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11852, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19070:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11855, - "mutability": "mutable", - "name": "to", - "nameLocation": "19092:2:29", - "nodeType": "VariableDeclaration", - "scope": 11860, - "src": "19084:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11854, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19084:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "19069:26:29" - }, - "returnParameters": { - "id": 11859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11858, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11860, - "src": "19143:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11857, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19143:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "19142:6:29" - }, - "scope": 11919, - "src": "19044:105:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11861, - "nodeType": "StructuredDocumentation", - "src": "19155:365:29", - "text": "@return maxBorrowedAmountPerBlock Maximal amount of new debt that can be taken per block\n @return isIncreaseDebtForbidden True if increasing debt is forbidden\n @return expirationDate Timestamp of the next expiration (for expirable Credit Facades only)\n @return emergencyLiquidationDiscount Premium for liquidations when the system is paused" - }, - "functionSelector": "cff0ab96", - "id": 11872, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "params", - "nameLocation": "19534:6:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11862, - "nodeType": "ParameterList", - "parameters": [], - "src": "19540:2:29" - }, - "returnParameters": { - "id": 11871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11864, - "mutability": "mutable", - "name": "maxBorrowedAmountPerBlock", - "nameLocation": "19611:25:29", - "nodeType": "VariableDeclaration", - "scope": 11872, - "src": "19603:33:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11863, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "19603:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11866, - "mutability": "mutable", - "name": "isIncreaseDebtForbidden", - "nameLocation": "19655:23:29", - "nodeType": "VariableDeclaration", - "scope": 11872, - "src": "19650:28:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11865, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19650:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11868, - "mutability": "mutable", - "name": "expirationDate", - "nameLocation": "19699:14:29", - "nodeType": "VariableDeclaration", - "scope": 11872, - "src": "19692:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 11867, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "19692:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11870, - "mutability": "mutable", - "name": "emergencyLiquidationDiscount", - "nameLocation": "19734:28:29", - "nodeType": "VariableDeclaration", - "scope": 11872, - "src": "19727:35:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 11869, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "19727:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "19589:183:29" - }, - "scope": 11919, - "src": "19525:248:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11873, - "nodeType": "StructuredDocumentation", - "src": "19779:149:29", - "text": "@return minBorrowedAmount Minimal borrowed amount per credit account\n @return maxBorrowedAmount Maximal borrowed amount per credit account" - }, - "functionSelector": "860aefcf", - "id": 11880, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "limits", - "nameLocation": "19942:6:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11874, - "nodeType": "ParameterList", - "parameters": [], - "src": "19948:2:29" - }, - "returnParameters": { - "id": 11879, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11876, - "mutability": "mutable", - "name": "minBorrowedAmount", - "nameLocation": "20006:17:29", - "nodeType": "VariableDeclaration", - "scope": 11880, - "src": "19998:25:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11875, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "19998:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11878, - "mutability": "mutable", - "name": "maxBorrowedAmount", - "nameLocation": "20033:17:29", - "nodeType": "VariableDeclaration", - "scope": 11880, - "src": "20025:25:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11877, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "20025:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "19997:54:29" - }, - "scope": 11919, - "src": "19933:119:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "50393109", - "id": 11887, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lossParams", - "nameLocation": "20067:10:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11881, - "nodeType": "ParameterList", - "parameters": [], - "src": "20077:2:29" - }, - "returnParameters": { - "id": 11886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11883, - "mutability": "mutable", - "name": "currentCumulativeLoss", - "nameLocation": "20135:21:29", - "nodeType": "VariableDeclaration", - "scope": 11887, - "src": "20127:29:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11882, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "20127:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11885, - "mutability": "mutable", - "name": "maxCumulativeLoss", - "nameLocation": "20166:17:29", - "nodeType": "VariableDeclaration", - "scope": 11887, - "src": "20158:25:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11884, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "20158:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "20126:58:29" - }, - "scope": 11919, - "src": "20058:127:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "fc7b9c18", - "id": 11894, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalDebt", - "nameLocation": "20200:9:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11888, - "nodeType": "ParameterList", - "parameters": [], - "src": "20209:2:29" - }, - "returnParameters": { - "id": 11893, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11890, - "mutability": "mutable", - "name": "currentTotalDebt", - "nameLocation": "20267:16:29", - "nodeType": "VariableDeclaration", - "scope": 11894, - "src": "20259:24:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11889, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "20259:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11892, - "mutability": "mutable", - "name": "totalDebtLimit", - "nameLocation": "20293:14:29", - "nodeType": "VariableDeclaration", - "scope": 11894, - "src": "20285:22:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11891, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "20285:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "20258:50:29" - }, - "scope": 11919, - "src": "20191:118:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11895, - "nodeType": "StructuredDocumentation", - "src": "20315:84:29", - "text": "@dev Address of the DegenNFT that gatekeeps account openings in whitelisted mode" - }, - "functionSelector": "9408b63f", - "id": 11900, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "degenNFT", - "nameLocation": "20413:8:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11896, - "nodeType": "ParameterList", - "parameters": [], - "src": "20421:2:29" - }, - "returnParameters": { - "id": 11899, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11898, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11900, - "src": "20447:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11897, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20447:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "20446:9:29" - }, - "scope": 11919, - "src": "20404:52:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11901, - "nodeType": "StructuredDocumentation", - "src": "20462:40:29", - "text": "@dev Address of the underlying asset" - }, - "functionSelector": "6f307dc3", - "id": 11906, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlying", - "nameLocation": "20516:10:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11902, - "nodeType": "ParameterList", - "parameters": [], - "src": "20526:2:29" - }, - "returnParameters": { - "id": 11905, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11904, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11906, - "src": "20552:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11903, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20552:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "20551:9:29" - }, - "scope": 11919, - "src": "20507:54:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11907, - "nodeType": "StructuredDocumentation", - "src": "20567:90:29", - "text": "@dev Address of the blacklist helper or address(0), if underlying is not blacklistable" - }, - "functionSelector": "938294a9", - "id": 11912, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "blacklistHelper", - "nameLocation": "20671:15:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11908, - "nodeType": "ParameterList", - "parameters": [], - "src": "20686:2:29" - }, - "returnParameters": { - "id": 11911, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11910, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11912, - "src": "20712:7:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11909, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20712:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "20711:9:29" - }, - "scope": 11919, - "src": "20662:59:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 11913, - "nodeType": "StructuredDocumentation", - "src": "20727:76:29", - "text": "@dev Whether the underlying of connected Credit Manager is blacklistable" - }, - "functionSelector": "e1d49d7d", - "id": 11918, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isBlacklistableUnderlying", - "nameLocation": "20817:25:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11914, - "nodeType": "ParameterList", - "parameters": [], - "src": "20842:2:29" - }, - "returnParameters": { - "id": 11917, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11916, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 11918, - "src": "20868:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11915, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "20868:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "20867:6:29" - }, - "scope": 11919, - "src": "20808:66:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11931, - "src": "8450:12426:29", - "usedErrors": [ - 11602, 11605, 11608, 11611, 11614, 11617, 11620, 11623, 11626, - 11629, 11632, 11635, 11638, 11643, 11646, 11649, 11652, 11655, - 11658, 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, - 11981, 11984, 11987, 11990, 11993 - ] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditFacadeV2", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 11930, - "linearizedBaseContracts": [11930], - "name": "ICreditFacadeV2", - "nameLocation": "20888:15:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11920, - "nodeType": "StructuredDocumentation", - "src": "20910:269:29", - "text": "@return maxBorrowedAmountPerBlock Maximal amount of new debt that can be taken per block\n @return isIncreaseDebtForbidden True if increasing debt is forbidden\n @return expirationDate Timestamp of the next expiration (for expirable Credit Facades only)" - }, - "functionSelector": "cff0ab96", - "id": 11929, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "params", - "nameLocation": "21193:6:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 11921, - "nodeType": "ParameterList", - "parameters": [], - "src": "21199:2:29" - }, - "returnParameters": { - "id": 11928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11923, - "mutability": "mutable", - "name": "maxBorrowedAmountPerBlock", - "nameLocation": "21270:25:29", - "nodeType": "VariableDeclaration", - "scope": 11929, - "src": "21262:33:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 11922, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "21262:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11925, - "mutability": "mutable", - "name": "isIncreaseDebtForbidden", - "nameLocation": "21314:23:29", - "nodeType": "VariableDeclaration", - "scope": 11929, - "src": "21309:28:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 11924, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "21309:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11927, - "mutability": "mutable", - "name": "expirationDate", - "nameLocation": "21358:14:29", - "nodeType": "VariableDeclaration", - "scope": 11929, - "src": "21351:21:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 11926, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "21351:6:29", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - } - ], - "src": "21248:134:29" - }, - "scope": 11930, - "src": "21184:199:29", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 11931, - "src": "20878:507:29", - "usedErrors": [] - } - ], - "src": "123:21263:29" - }, - "id": 29 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol", - "exportedSymbols": { - "ClosureAction": [11941], - "ICreditManagerV2": [12355], - "ICreditManagerV2Events": [11954], - "ICreditManagerV2Exceptions": [11994], - "IPriceOracleV2": [12942], - "IVersion": [12963] - }, - "id": 12356, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 11932, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:30" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "file": "./IPriceOracle.sol", - "id": 11934, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12356, - "sourceUnit": 12954, - "src": "149:52:30", - "symbolAliases": [ - { - "foreign": { - "id": 11933, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "158:14:30", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 11936, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12356, - "sourceUnit": 12964, - "src": "202:42:30", - "symbolAliases": [ - { - "foreign": { - "id": 11935, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "211:8:30", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "ClosureAction", - "id": 11941, - "members": [ - { - "id": 11937, - "name": "CLOSE_ACCOUNT", - "nameLocation": "271:13:30", - "nodeType": "EnumValue", - "src": "271:13:30" - }, - { - "id": 11938, - "name": "LIQUIDATE_ACCOUNT", - "nameLocation": "290:17:30", - "nodeType": "EnumValue", - "src": "290:17:30" - }, - { - "id": 11939, - "name": "LIQUIDATE_EXPIRED_ACCOUNT", - "nameLocation": "313:25:30", - "nodeType": "EnumValue", - "src": "313:25:30" - }, - { - "id": 11940, - "name": "LIQUIDATE_PAUSED", - "nameLocation": "344:16:30", - "nodeType": "EnumValue", - "src": "344:16:30" - } - ], - "name": "ClosureAction", - "nameLocation": "251:13:30", - "nodeType": "EnumDefinition", - "src": "246:116:30" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditManagerV2Events", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 11954, - "linearizedBaseContracts": [11954], - "name": "ICreditManagerV2Events", - "nameLocation": "374:22:30", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 11942, - "nodeType": "StructuredDocumentation", - "src": "403:85:30", - "text": "@dev Emits when a call to an external contract is made through the Credit Manager" - }, - "eventSelector": "aed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab03", - "id": 11948, - "name": "ExecuteOrder", - "nameLocation": "499:12:30", - "nodeType": "EventDefinition", - "parameters": { - "id": 11947, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11944, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "528:8:30", - "nodeType": "VariableDeclaration", - "scope": 11948, - "src": "512:24:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11943, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "512:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 11946, - "indexed": true, - "mutability": "mutable", - "name": "target", - "nameLocation": "554:6:30", - "nodeType": "VariableDeclaration", - "scope": 11948, - "src": "538:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11945, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "538:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "511:50:30" - }, - "src": "493:69:30" - }, - { - "anonymous": false, - "documentation": { - "id": 11949, - "nodeType": "StructuredDocumentation", - "src": "568:46:30", - "text": "@dev Emits when a configurator is upgraded" - }, - "eventSelector": "f62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af", - "id": 11953, - "name": "NewConfigurator", - "nameLocation": "625:15:30", - "nodeType": "EventDefinition", - "parameters": { - "id": 11952, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 11951, - "indexed": true, - "mutability": "mutable", - "name": "newConfigurator", - "nameLocation": "657:15:30", - "nodeType": "VariableDeclaration", - "scope": 11953, - "src": "641:31:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 11950, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "641:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "640:33:30" - }, - "src": "619:55:30" - } - ], - "scope": 12356, - "src": "364:312:30", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditManagerV2Exceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 11994, - "linearizedBaseContracts": [11994], - "name": "ICreditManagerV2Exceptions", - "nameLocation": "688:26:30", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 11955, - "nodeType": "StructuredDocumentation", - "src": "721:148:30", - "text": "@dev Thrown if an access-restricted function is called by an address that is not\n the connected Credit Facade, or an allowed adapter" - }, - "errorSelector": "ad40d9e9", - "id": 11957, - "name": "AdaptersOrCreditFacadeOnlyException", - "nameLocation": "880:35:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11956, - "nodeType": "ParameterList", - "parameters": [], - "src": "915:2:30" - }, - "src": "874:44:30" - }, - { - "documentation": { - "id": 11958, - "nodeType": "StructuredDocumentation", - "src": "924:125:30", - "text": "@dev Thrown if an access-restricted function is called by an address that is not\n the connected Credit Facade" - }, - "errorSelector": "d8026b22", - "id": 11960, - "name": "CreditFacadeOnlyException", - "nameLocation": "1060:25:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11959, - "nodeType": "ParameterList", - "parameters": [], - "src": "1085:2:30" - }, - "src": "1054:34:30" - }, - { - "documentation": { - "id": 11961, - "nodeType": "StructuredDocumentation", - "src": "1094:131:30", - "text": "@dev Thrown if an access-restricted function is called by an address that is not\n the connected Credit Configurator" - }, - "errorSelector": "eee47169", - "id": 11963, - "name": "CreditConfiguratorOnlyException", - "nameLocation": "1236:31:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11962, - "nodeType": "ParameterList", - "parameters": [], - "src": "1267:2:30" - }, - "src": "1230:40:30" - }, - { - "documentation": { - "id": 11964, - "nodeType": "StructuredDocumentation", - "src": "1276:169:30", - "text": "@dev Thrown on attempting to open a Credit Account for or transfer a Credit Account\n to the zero address or an address that already owns a Credit Account" - }, - "errorSelector": "9e59609e", - "id": 11966, - "name": "ZeroAddressOrUserAlreadyHasAccountException", - "nameLocation": "1456:43:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11965, - "nodeType": "ParameterList", - "parameters": [], - "src": "1499:2:30" - }, - "src": "1450:52:30" - }, - { - "documentation": { - "id": 11967, - "nodeType": "StructuredDocumentation", - "src": "1508:115:30", - "text": "@dev Thrown on attempting to execute an order to an address that is not an allowed\n target contract" - }, - "errorSelector": "fc1a5543", - "id": 11969, - "name": "TargetContractNotAllowedException", - "nameLocation": "1634:33:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11968, - "nodeType": "ParameterList", - "parameters": [], - "src": "1667:2:30" - }, - "src": "1628:42:30" - }, - { - "documentation": { - "id": 11970, - "nodeType": "StructuredDocumentation", - "src": "1676:69:30", - "text": "@dev Thrown on failing a full collateral check after an operation" - }, - "errorSelector": "532e7bb6", - "id": 11972, - "name": "NotEnoughCollateralException", - "nameLocation": "1756:28:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11971, - "nodeType": "ParameterList", - "parameters": [], - "src": "1784:2:30" - }, - "src": "1750:37:30" - }, - { - "documentation": { - "id": 11973, - "nodeType": "StructuredDocumentation", - "src": "1793:109:30", - "text": "@dev Thrown on attempting to receive a token that is not a collateral token\n or was forbidden" - }, - "errorSelector": "700ca0af", - "id": 11975, - "name": "TokenNotAllowedException", - "nameLocation": "1913:24:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11974, - "nodeType": "ParameterList", - "parameters": [], - "src": "1937:2:30" - }, - "src": "1907:33:30" - }, - { - "documentation": { - "id": 11976, - "nodeType": "StructuredDocumentation", - "src": "1946:87:30", - "text": "@dev Thrown if an attempt to approve a collateral token to a target contract failed" - }, - "errorSelector": "2f10a7f3", - "id": 11978, - "name": "AllowanceFailedException", - "nameLocation": "2044:24:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11977, - "nodeType": "ParameterList", - "parameters": [], - "src": "2068:2:30" - }, - "src": "2038:33:30" - }, - { - "documentation": { - "id": 11979, - "nodeType": "StructuredDocumentation", - "src": "2077:93:30", - "text": "@dev Thrown on attempting to perform an action for an address that owns no Credit Account" - }, - "errorSelector": "b5ba4c4d", - "id": 11981, - "name": "HasNoOpenedAccountException", - "nameLocation": "2181:27:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11980, - "nodeType": "ParameterList", - "parameters": [], - "src": "2208:2:30" - }, - "src": "2175:36:30" - }, - { - "documentation": { - "id": 11982, - "nodeType": "StructuredDocumentation", - "src": "2217:81:30", - "text": "@dev Thrown on attempting to add a token that is already in a collateral list" - }, - "errorSelector": "2e5a5c77", - "id": 11984, - "name": "TokenAlreadyAddedException", - "nameLocation": "2309:26:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11983, - "nodeType": "ParameterList", - "parameters": [], - "src": "2335:2:30" - }, - "src": "2303:35:30" - }, - { - "documentation": { - "id": 11985, - "nodeType": "StructuredDocumentation", - "src": "2344:81:30", - "text": "@dev Thrown on configurator attempting to add more than 256 collateral tokens" - }, - "errorSelector": "7e050c52", - "id": 11987, - "name": "TooManyTokensException", - "nameLocation": "2436:22:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11986, - "nodeType": "ParameterList", - "parameters": [], - "src": "2458:2:30" - }, - "src": "2430:31:30" - }, - { - "documentation": { - "id": 11988, - "nodeType": "StructuredDocumentation", - "src": "2467:153:30", - "text": "@dev Thrown if more than the maximal number of tokens were enabled on a Credit Account,\n and there are not enough unused token to disable" - }, - "errorSelector": "30b5495c", - "id": 11990, - "name": "TooManyEnabledTokensException", - "nameLocation": "2631:29:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11989, - "nodeType": "ParameterList", - "parameters": [], - "src": "2660:2:30" - }, - "src": "2625:38:30" - }, - { - "documentation": { - "id": 11991, - "nodeType": "StructuredDocumentation", - "src": "2669:64:30", - "text": "@dev Thrown when a reentrancy into the contract is attempted" - }, - "errorSelector": "69bc183d", - "id": 11993, - "name": "ReentrancyLockException", - "nameLocation": "2744:23:30", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 11992, - "nodeType": "ParameterList", - "parameters": [], - "src": "2767:2:30" - }, - "src": "2738:32:30" - } - ], - "scope": 12356, - "src": "678:2094:30", - "usedErrors": [ - 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, 11981, - 11984, 11987, 11990, 11993 - ] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 11996, - "name": "ICreditManagerV2Events", - "nameLocations": ["3027:22:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11954, - "src": "3027:22:30" - }, - "id": 11997, - "nodeType": "InheritanceSpecifier", - "src": "3027:22:30" - }, - { - "baseName": { - "id": 11998, - "name": "ICreditManagerV2Exceptions", - "nameLocations": ["3055:26:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11994, - "src": "3055:26:30" - }, - "id": 11999, - "nodeType": "InheritanceSpecifier", - "src": "3055:26:30" - }, - { - "baseName": { - "id": 12000, - "name": "IVersion", - "nameLocations": ["3087:8:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "3087:8:30" - }, - "id": 12001, - "nodeType": "InheritanceSpecifier", - "src": "3087:8:30" - } - ], - "canonicalName": "ICreditManagerV2", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 11995, - "nodeType": "StructuredDocumentation", - "src": "2774:219:30", - "text": "@notice All Credit Manager functions are access-restricted and can only be called\n by the Credit Facade or allowed adapters. Users are not allowed to\n interact with the Credit Manager directly" - }, - "fullyImplemented": false, - "id": 12355, - "linearizedBaseContracts": [12355, 12963, 11994, 11954], - "name": "ICreditManagerV2", - "nameLocation": "3003:16:30", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12002, - "nodeType": "StructuredDocumentation", - "src": "3150:334:30", - "text": "@dev Opens credit account and borrows funds from the pool.\n - Takes Credit Account from the factory;\n - Requests the pool to lend underlying to the Credit Account\n @param borrowedAmount Amount to be borrowed by the Credit Account\n @param onBehalfOf The owner of the newly opened Credit Account" - }, - "functionSelector": "8fe3f93f", - "id": 12011, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "openCreditAccount", - "nameLocation": "3498:17:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12007, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12004, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "3524:14:30", - "nodeType": "VariableDeclaration", - "scope": 12011, - "src": "3516:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12003, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3516:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12006, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "3548:10:30", - "nodeType": "VariableDeclaration", - "scope": 12011, - "src": "3540:18:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12005, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3540:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3515:44:30" - }, - "returnParameters": { - "id": 12010, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12009, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12011, - "src": "3594:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12008, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3594:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3593:9:30" - }, - "scope": 12355, - "src": "3489:114:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12012, - "nodeType": "StructuredDocumentation", - "src": "3609:2051:30", - "text": "@dev Closes a Credit Account - covers both normal closure and liquidation\n - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator.\n Only emergency liquidators are able to liquidate account while the CM is paused.\n Emergency liquidations do not pay a liquidator premium or liquidation fees.\n - Calculates payments to various recipients on closure:\n + Computes amountToPool, which is the amount to be sent back to the pool.\n This includes the principal, interest and fees, but can't be more than\n total position value\n + Computes remainingFunds during liquidations - these are leftover funds\n after paying the pool and the liquidator, and are sent to the borrower\n + Computes protocol profit, which includes interest and liquidation fees\n + Computes loss if the totalValue is less than borrow amount + interest\n - Checks the underlying token balance:\n + if it is larger than amountToPool, then the pool is paid fully from funds on the Credit Account\n + else tries to transfer the shortfall from the payer - either the borrower during closure, or liquidator during liquidation\n - Send assets to the \"to\" address, as long as they are not included into skipTokenMask\n - If convertWETH is true, the function converts WETH into ETH before sending\n - Returns the Credit Account back to factory\n @param borrower Borrower address\n @param closureActionType Whether the account is closed, liquidated or liquidated due to expiry\n @param totalValue Portfolio value for liqution, 0 for ordinary closure\n @param payer Address which would be charged if credit account has not enough funds to cover amountToPool\n @param to Address to which the leftover funds will be sent\n @param skipTokenMask Tokenmask contains 1 for tokens which needed to be skipped for sending\n @param convertWETH If true converts WETH to ETH" - }, - "functionSelector": "2362a2d8", - "id": 12032, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "closeCreditAccount", - "nameLocation": "5674:18:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12028, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12014, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "5710:8:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5702:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12013, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5702:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12017, - "mutability": "mutable", - "name": "closureActionType", - "nameLocation": "5742:17:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5728:31:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "typeName": { - "id": 12016, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12015, - "name": "ClosureAction", - "nameLocations": ["5728:13:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11941, - "src": "5728:13:30" - }, - "referencedDeclaration": 11941, - "src": "5728:13:30", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12019, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "5777:10:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5769:18:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12018, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5769:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12021, - "mutability": "mutable", - "name": "payer", - "nameLocation": "5805:5:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5797:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12020, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5797:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12023, - "mutability": "mutable", - "name": "to", - "nameLocation": "5828:2:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5820:10:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12022, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5820:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12025, - "mutability": "mutable", - "name": "skipTokenMask", - "nameLocation": "5848:13:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5840:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12024, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5840:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12027, - "mutability": "mutable", - "name": "convertWETH", - "nameLocation": "5876:11:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5871:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12026, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5871:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5692:201:30" - }, - "returnParameters": { - "id": 12031, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12030, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "5920:14:30", - "nodeType": "VariableDeclaration", - "scope": 12032, - "src": "5912:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12029, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5912:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5911:24:30" - }, - "scope": 12355, - "src": "5665:271:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12033, - "nodeType": "StructuredDocumentation", - "src": "5942:887:30", - "text": "@dev Manages debt size for borrower:\n - Increase debt:\n + Increases debt by transferring funds from the pool to the credit account\n + Updates the cumulative index to keep interest the same. Since interest\n is always computed dynamically as borrowedAmount * (cumulativeIndexNew / cumulativeIndexOpen - 1),\n cumulativeIndexOpen needs to be updated, as the borrow amount has changed\n - Decrease debt:\n + Repays debt partially + all interest and fees accrued thus far\n + Updates cunulativeIndex to cumulativeIndex now\n @param creditAccount Address of the Credit Account to change debt for\n @param amount Amount to increase / decrease the principal by\n @param increase True to increase principal, false to decrease\n @return newBorrowedAmount The new debt principal" - }, - "functionSelector": "94cf073a", - "id": 12044, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "manageDebt", - "nameLocation": "6843:10:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12040, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12035, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "6871:13:30", - "nodeType": "VariableDeclaration", - "scope": 12044, - "src": "6863:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12034, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6863:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12037, - "mutability": "mutable", - "name": "amount", - "nameLocation": "6902:6:30", - "nodeType": "VariableDeclaration", - "scope": 12044, - "src": "6894:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12036, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6894:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12039, - "mutability": "mutable", - "name": "increase", - "nameLocation": "6923:8:30", - "nodeType": "VariableDeclaration", - "scope": 12044, - "src": "6918:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12038, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6918:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6853:84:30" - }, - "returnParameters": { - "id": 12043, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12042, - "mutability": "mutable", - "name": "newBorrowedAmount", - "nameLocation": "6964:17:30", - "nodeType": "VariableDeclaration", - "scope": 12044, - "src": "6956:25:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12041, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6956:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6955:27:30" - }, - "scope": 12355, - "src": "6834:149:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12045, - "nodeType": "StructuredDocumentation", - "src": "6989:292:30", - "text": "@dev Adds collateral to borrower's credit account\n @param payer Address of the account which will be charged to provide additional collateral\n @param creditAccount Address of the Credit Account\n @param token Collateral token to add\n @param amount Amount to add" - }, - "functionSelector": "830aa745", - "id": 12056, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addCollateral", - "nameLocation": "7295:13:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12054, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12047, - "mutability": "mutable", - "name": "payer", - "nameLocation": "7326:5:30", - "nodeType": "VariableDeclaration", - "scope": 12056, - "src": "7318:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12046, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7318:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12049, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "7349:13:30", - "nodeType": "VariableDeclaration", - "scope": 12056, - "src": "7341:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12048, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7341:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12051, - "mutability": "mutable", - "name": "token", - "nameLocation": "7380:5:30", - "nodeType": "VariableDeclaration", - "scope": 12056, - "src": "7372:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7372:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12053, - "mutability": "mutable", - "name": "amount", - "nameLocation": "7403:6:30", - "nodeType": "VariableDeclaration", - "scope": 12056, - "src": "7395:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12052, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7395:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7308:107:30" - }, - "returnParameters": { - "id": 12055, - "nodeType": "ParameterList", - "parameters": [], - "src": "7424:0:30" - }, - "scope": 12355, - "src": "7286:139:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12057, - "nodeType": "StructuredDocumentation", - "src": "7431:147:30", - "text": "@dev Transfers Credit Account ownership to another address\n @param from Address of previous owner\n @param to Address of new owner" - }, - "functionSelector": "e1998cf9", - "id": 12064, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferAccountOwnership", - "nameLocation": "7592:24:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12062, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12059, - "mutability": "mutable", - "name": "from", - "nameLocation": "7625:4:30", - "nodeType": "VariableDeclaration", - "scope": 12064, - "src": "7617:12:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12058, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7617:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12061, - "mutability": "mutable", - "name": "to", - "nameLocation": "7639:2:30", - "nodeType": "VariableDeclaration", - "scope": 12064, - "src": "7631:10:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12060, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7631:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7616:26:30" - }, - "returnParameters": { - "id": 12063, - "nodeType": "ParameterList", - "parameters": [], - "src": "7651:0:30" - }, - "scope": 12355, - "src": "7583:69:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12065, - "nodeType": "StructuredDocumentation", - "src": "7658:284:30", - "text": "@dev Requests the Credit Account to approve a collateral token to another contract.\n @param borrower Borrower's address\n @param targetContract Spender to change allowance for\n @param token Collateral token to approve\n @param amount New allowance amount" - }, - "functionSelector": "46fb371d", - "id": 12076, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveCreditAccount", - "nameLocation": "7956:20:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12074, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12067, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "7994:8:30", - "nodeType": "VariableDeclaration", - "scope": 12076, - "src": "7986:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12066, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7986:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12069, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "8020:14:30", - "nodeType": "VariableDeclaration", - "scope": 12076, - "src": "8012:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12068, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8012:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12071, - "mutability": "mutable", - "name": "token", - "nameLocation": "8052:5:30", - "nodeType": "VariableDeclaration", - "scope": 12076, - "src": "8044:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12070, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8044:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12073, - "mutability": "mutable", - "name": "amount", - "nameLocation": "8075:6:30", - "nodeType": "VariableDeclaration", - "scope": 12076, - "src": "8067:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12072, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8067:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7976:111:30" - }, - "returnParameters": { - "id": 12075, - "nodeType": "ParameterList", - "parameters": [], - "src": "8096:0:30" - }, - "scope": 12355, - "src": "7947:150:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12077, - "nodeType": "StructuredDocumentation", - "src": "8103:314:30", - "text": "@dev Requests a Credit Account to make a low-level call with provided data\n This is the intended pathway for state-changing interactions with 3rd-party protocols\n @param borrower Borrower's address\n @param targetContract Contract to be called\n @param data Data to pass with the call" - }, - "functionSelector": "6ce4074a", - "id": 12088, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "executeOrder", - "nameLocation": "8431:12:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12084, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12079, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "8461:8:30", - "nodeType": "VariableDeclaration", - "scope": 12088, - "src": "8453:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12078, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8453:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12081, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "8487:14:30", - "nodeType": "VariableDeclaration", - "scope": 12088, - "src": "8479:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12080, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8479:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12083, - "mutability": "mutable", - "name": "data", - "nameLocation": "8524:4:30", - "nodeType": "VariableDeclaration", - "scope": 12088, - "src": "8511:17:30", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 12082, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8511:5:30", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8443:91:30" - }, - "returnParameters": { - "id": 12087, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12086, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12088, - "src": "8553:12:30", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 12085, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8553:5:30", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8552:14:30" - }, - "scope": 12355, - "src": "8422:145:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12089, - "nodeType": "StructuredDocumentation", - "src": "8641:252:30", - "text": "@dev Enables a token on a Credit Account, including it\n into account health and total value calculations\n @param creditAccount Address of a Credit Account to enable the token for\n @param token Address of the token to be enabled" - }, - "functionSelector": "51e3f160", - "id": 12096, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkAndEnableToken", - "nameLocation": "8907:19:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12094, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12091, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "8935:13:30", - "nodeType": "VariableDeclaration", - "scope": 12096, - "src": "8927:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12090, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8927:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12093, - "mutability": "mutable", - "name": "token", - "nameLocation": "8958:5:30", - "nodeType": "VariableDeclaration", - "scope": 12096, - "src": "8950:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12092, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8950:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8926:38:30" - }, - "returnParameters": { - "id": 12095, - "nodeType": "ParameterList", - "parameters": [], - "src": "8973:0:30" - }, - "scope": 12355, - "src": "8898:76:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12097, - "nodeType": "StructuredDocumentation", - "src": "8980:1112:30", - "text": "@dev Optimized health check for individual swap-like operations.\n @notice Fast health check assumes that only two tokens (input and output)\n participate in the operation and computes a % change in weighted value between\n inbound and outbound collateral. The cumulative negative change across several\n swaps in sequence cannot be larger than feeLiquidation (a fee that the\n protocol is ready to waive if needed). Since this records a % change\n between just two tokens, the corresponding % change in TWV will always be smaller,\n which makes this check safe.\n More details at https://dev.gearbox.fi/docs/documentation/risk/fast-collateral-check#fast-check-protection\n @param creditAccount Address of the Credit Account\n @param tokenIn Address of the token spent by the swap\n @param tokenOut Address of the token received from the swap\n @param balanceInBefore Balance of tokenIn before the operation\n @param balanceOutBefore Balance of tokenOut before the operation" - }, - "functionSelector": "654a9eda", - "id": 12110, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "fastCollateralCheck", - "nameLocation": "10106:19:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12108, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12099, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "10143:13:30", - "nodeType": "VariableDeclaration", - "scope": 12110, - "src": "10135:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12098, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10135:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12101, - "mutability": "mutable", - "name": "tokenIn", - "nameLocation": "10174:7:30", - "nodeType": "VariableDeclaration", - "scope": 12110, - "src": "10166:15:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12100, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10166:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12103, - "mutability": "mutable", - "name": "tokenOut", - "nameLocation": "10199:8:30", - "nodeType": "VariableDeclaration", - "scope": 12110, - "src": "10191:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12102, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10191:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12105, - "mutability": "mutable", - "name": "balanceInBefore", - "nameLocation": "10225:15:30", - "nodeType": "VariableDeclaration", - "scope": 12110, - "src": "10217:23:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12104, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10217:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12107, - "mutability": "mutable", - "name": "balanceOutBefore", - "nameLocation": "10258:16:30", - "nodeType": "VariableDeclaration", - "scope": 12110, - "src": "10250:24:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12106, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10250:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10125:155:30" - }, - "returnParameters": { - "id": 12109, - "nodeType": "ParameterList", - "parameters": [], - "src": "10289:0:30" - }, - "scope": 12355, - "src": "10097:193:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12111, - "nodeType": "StructuredDocumentation", - "src": "10296:178:30", - "text": "@dev Performs a full health check on an account, summing up\n value of all enabled collateral tokens\n @param creditAccount Address of the Credit Account to check" - }, - "functionSelector": "95373018", - "id": 12116, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "fullCollateralCheck", - "nameLocation": "10488:19:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12114, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12113, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "10516:13:30", - "nodeType": "VariableDeclaration", - "scope": 12116, - "src": "10508:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10508:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10507:23:30" - }, - "returnParameters": { - "id": 12115, - "nodeType": "ParameterList", - "parameters": [], - "src": "10539:0:30" - }, - "scope": 12355, - "src": "10479:61:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12117, - "nodeType": "StructuredDocumentation", - "src": "10546:255:30", - "text": "@dev Checks that the number of enabled tokens on a Credit Account\n does not violate the maximal enabled token limit and tries\n to disable unused tokens if it does\n @param creditAccount Account to check enabled tokens for" - }, - "functionSelector": "29df0b93", - "id": 12122, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkAndOptimizeEnabledTokens", - "nameLocation": "10815:29:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12119, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "10853:13:30", - "nodeType": "VariableDeclaration", - "scope": 12122, - "src": "10845:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10845:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10844:23:30" - }, - "returnParameters": { - "id": 12121, - "nodeType": "ParameterList", - "parameters": [], - "src": "10876:0:30" - }, - "scope": 12355, - "src": "10806:71:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12123, - "nodeType": "StructuredDocumentation", - "src": "10883:309:30", - "text": "@dev Disables a token on a credit account\n @notice Usually called by adapters to disable spent tokens during a multicall,\n but can also be called separately from the Credit Facade to remove\n unwanted tokens\n @return True if token mask was change otherwise False" - }, - "functionSelector": "0d8f9cee", - "id": 12132, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "disableToken", - "nameLocation": "11206:12:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12128, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12125, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "11227:13:30", - "nodeType": "VariableDeclaration", - "scope": 12132, - "src": "11219:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12124, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11219:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12127, - "mutability": "mutable", - "name": "token", - "nameLocation": "11250:5:30", - "nodeType": "VariableDeclaration", - "scope": 12132, - "src": "11242:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12126, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11242:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11218:38:30" - }, - "returnParameters": { - "id": 12131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12130, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12132, - "src": "11291:4:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12129, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11291:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "11290:6:30" - }, - "scope": 12355, - "src": "11197:100:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12133, - "nodeType": "StructuredDocumentation", - "src": "11333:132:30", - "text": "@dev Returns the address of a borrower's Credit Account, or reverts if there is none.\n @param borrower Borrower's address" - }, - "functionSelector": "e958b704", - "id": 12140, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountOrRevert", - "nameLocation": "11479:24:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12136, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12135, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "11512:8:30", - "nodeType": "VariableDeclaration", - "scope": 12140, - "src": "11504:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12134, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11504:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11503:18:30" - }, - "returnParameters": { - "id": 12139, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12138, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12140, - "src": "11569:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12137, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11569:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11568:9:30" - }, - "scope": 12355, - "src": "11470:108:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12141, - "nodeType": "StructuredDocumentation", - "src": "11584:1101:30", - "text": "@dev Computes amounts that must be sent to various addresses before closing an account\n @param totalValue Credit Accounts total value in underlying\n @param closureActionType Type of account closure\n * CLOSE_ACCOUNT: The account is healthy and is closed normally\n * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt\n * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium)\n * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium)\n @param borrowedAmount Credit Account's debt principal\n @param borrowedAmountWithInterest Credit Account's debt principal + interest\n @return amountToPool Amount of underlying to be sent to the pool\n @return remainingFunds Amount of underlying to be sent to the borrower (only applicable to liquidations)\n @return profit Protocol's profit from fees (if any)\n @return loss Protocol's loss from bad debt (if any)" - }, - "functionSelector": "5063524a", - "id": 12161, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcClosePayments", - "nameLocation": "12699:17:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12143, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "12734:10:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12726:18:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12142, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12726:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12146, - "mutability": "mutable", - "name": "closureActionType", - "nameLocation": "12768:17:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12754:31:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - }, - "typeName": { - "id": 12145, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12144, - "name": "ClosureAction", - "nameLocations": ["12754:13:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 11941, - "src": "12754:13:30" - }, - "referencedDeclaration": 11941, - "src": "12754:13:30", - "typeDescriptions": { - "typeIdentifier": "t_enum$_ClosureAction_$11941", - "typeString": "enum ClosureAction" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12148, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "12803:14:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12795:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12147, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12795:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12150, - "mutability": "mutable", - "name": "borrowedAmountWithInterest", - "nameLocation": "12835:26:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12827:34:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12149, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12827:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12716:151:30" - }, - "returnParameters": { - "id": 12160, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12153, - "mutability": "mutable", - "name": "amountToPool", - "nameLocation": "12936:12:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12928:20:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12152, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12928:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12155, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "12970:14:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12962:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12154, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12962:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12157, - "mutability": "mutable", - "name": "profit", - "nameLocation": "13006:6:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "12998:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12156, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12998:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12159, - "mutability": "mutable", - "name": "loss", - "nameLocation": "13034:4:30", - "nodeType": "VariableDeclaration", - "scope": 12161, - "src": "13026:12:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12158, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13026:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12914:134:30" - }, - "scope": 12355, - "src": "12690:359:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12162, - "nodeType": "StructuredDocumentation", - "src": "13055:352:30", - "text": "@dev Calculates the debt accrued by a Credit Account\n @param creditAccount Address of the Credit Account\n @return borrowedAmount The debt principal\n @return borrowedAmountWithInterest The debt principal + accrued interest\n @return borrowedAmountWithInterestAndFees The debt principal + accrued interest and protocol fees" - }, - "functionSelector": "3192195c", - "id": 12173, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountAccruedInterest", - "nameLocation": "13421:32:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12165, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12164, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "13462:13:30", - "nodeType": "VariableDeclaration", - "scope": 12173, - "src": "13454:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12163, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13454:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "13453:23:30" - }, - "returnParameters": { - "id": 12172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12167, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "13545:14:30", - "nodeType": "VariableDeclaration", - "scope": 12173, - "src": "13537:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12166, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13537:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12169, - "mutability": "mutable", - "name": "borrowedAmountWithInterest", - "nameLocation": "13581:26:30", - "nodeType": "VariableDeclaration", - "scope": 12173, - "src": "13573:34:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12168, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13573:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12171, - "mutability": "mutable", - "name": "borrowedAmountWithInterestAndFees", - "nameLocation": "13629:33:30", - "nodeType": "VariableDeclaration", - "scope": 12173, - "src": "13621:41:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12170, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13621:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13523:149:30" - }, - "scope": 12355, - "src": "13412:261:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12174, - "nodeType": "StructuredDocumentation", - "src": "13679:295:30", - "text": "@dev Maps Credit Accounts to bit masks encoding their enabled token sets\n Only enabled tokens are counted as collateral for the Credit Account\n @notice An enabled token mask encodes an enabled token by setting\n the bit at the position equal to token's index to 1" - }, - "functionSelector": "8991b2f1", - "id": 12181, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "enabledTokensMap", - "nameLocation": "13988:16:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12176, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "14013:13:30", - "nodeType": "VariableDeclaration", - "scope": 12181, - "src": "14005:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12175, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14005:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "14004:23:30" - }, - "returnParameters": { - "id": 12180, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12179, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12181, - "src": "14075:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12178, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14075:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14074:9:30" - }, - "scope": 12355, - "src": "13979:105:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12182, - "nodeType": "StructuredDocumentation", - "src": "14090:134:30", - "text": "@dev Maps the Credit Account to its current percentage drop across all swaps since\n the last full check, in RAY format" - }, - "functionSelector": "3e8297ca", - "id": 12189, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "cumulativeDropAtFastCheckRAY", - "nameLocation": "14238:28:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12185, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12184, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "14275:13:30", - "nodeType": "VariableDeclaration", - "scope": 12189, - "src": "14267:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12183, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14267:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "14266:23:30" - }, - "returnParameters": { - "id": 12188, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12187, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12189, - "src": "14337:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12186, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14337:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14336:9:30" - }, - "scope": 12355, - "src": "14229:117:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12190, - "nodeType": "StructuredDocumentation", - "src": "14352:133:30", - "text": "@dev Returns the collateral token at requested index and its liquidation threshold\n @param id The index of token to return" - }, - "functionSelector": "172c48c7", - "id": 12199, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collateralTokens", - "nameLocation": "14499:16:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12193, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12192, - "mutability": "mutable", - "name": "id", - "nameLocation": "14524:2:30", - "nodeType": "VariableDeclaration", - "scope": 12199, - "src": "14516:10:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12191, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14516:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14515:12:30" - }, - "returnParameters": { - "id": 12198, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12195, - "mutability": "mutable", - "name": "token", - "nameLocation": "14583:5:30", - "nodeType": "VariableDeclaration", - "scope": 12199, - "src": "14575:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12194, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14575:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12197, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "14597:20:30", - "nodeType": "VariableDeclaration", - "scope": 12199, - "src": "14590:27:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12196, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "14590:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "14574:44:30" - }, - "scope": 12355, - "src": "14490:129:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12200, - "nodeType": "StructuredDocumentation", - "src": "14625:149:30", - "text": "@dev Returns the collateral token with requested mask and its liquidationThreshold\n @param tokenMask Token mask corresponding to the token" - }, - "functionSelector": "e75538c7", - "id": 12209, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collateralTokensByMask", - "nameLocation": "14788:22:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12203, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12202, - "mutability": "mutable", - "name": "tokenMask", - "nameLocation": "14819:9:30", - "nodeType": "VariableDeclaration", - "scope": 12209, - "src": "14811:17:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12201, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14811:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14810:19:30" - }, - "returnParameters": { - "id": 12208, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12205, - "mutability": "mutable", - "name": "token", - "nameLocation": "14885:5:30", - "nodeType": "VariableDeclaration", - "scope": 12209, - "src": "14877:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12204, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14877:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12207, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "14899:20:30", - "nodeType": "VariableDeclaration", - "scope": 12209, - "src": "14892:27:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12206, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "14892:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "14876:44:30" - }, - "scope": 12355, - "src": "14779:142:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12210, - "nodeType": "StructuredDocumentation", - "src": "14927:49:30", - "text": "@dev Total number of known collateral tokens." - }, - "functionSelector": "458936f5", - "id": 12215, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "collateralTokensCount", - "nameLocation": "14990:21:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12211, - "nodeType": "ParameterList", - "parameters": [], - "src": "15011:2:30" - }, - "returnParameters": { - "id": 12214, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12213, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12215, - "src": "15037:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12212, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15037:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15036:9:30" - }, - "scope": 12355, - "src": "14981:65:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12216, - "nodeType": "StructuredDocumentation", - "src": "15052:99:30", - "text": "@dev Returns the mask for the provided token\n @param token Token to returns the mask for" - }, - "functionSelector": "f67c5bd0", - "id": 12223, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "tokenMasksMap", - "nameLocation": "15165:13:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12219, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12218, - "mutability": "mutable", - "name": "token", - "nameLocation": "15187:5:30", - "nodeType": "VariableDeclaration", - "scope": 12223, - "src": "15179:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12217, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15179:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15178:15:30" - }, - "returnParameters": { - "id": 12222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12221, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12223, - "src": "15217:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12220, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15217:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15216:9:30" - }, - "scope": 12355, - "src": "15156:70:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12224, - "nodeType": "StructuredDocumentation", - "src": "15232:52:30", - "text": "@dev Bit mask encoding a set of forbidden tokens" - }, - "functionSelector": "9fd12b77", - "id": 12229, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forbiddenTokenMask", - "nameLocation": "15298:18:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12225, - "nodeType": "ParameterList", - "parameters": [], - "src": "15316:2:30" - }, - "returnParameters": { - "id": 12228, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12227, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12229, - "src": "15342:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12226, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15342:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15341:9:30" - }, - "scope": 12355, - "src": "15289:62:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12230, - "nodeType": "StructuredDocumentation", - "src": "15357:68:30", - "text": "@dev Maps allowed adapters to their respective target contracts." - }, - "functionSelector": "ff687543", - "id": 12237, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "adapterToContract", - "nameLocation": "15439:17:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12233, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12232, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "15465:7:30", - "nodeType": "VariableDeclaration", - "scope": 12237, - "src": "15457:15:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12231, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15457:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15456:17:30" - }, - "returnParameters": { - "id": 12236, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12235, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12237, - "src": "15497:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12234, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15497:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15496:9:30" - }, - "scope": 12355, - "src": "15430:76:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12238, - "nodeType": "StructuredDocumentation", - "src": "15512:62:30", - "text": "@dev Maps 3rd party contracts to their respective adapters" - }, - "functionSelector": "fdd57645", - "id": 12245, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "contractToAdapter", - "nameLocation": "15588:17:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12241, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12240, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "15614:14:30", - "nodeType": "VariableDeclaration", - "scope": 12245, - "src": "15606:22:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12239, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15606:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15605:24:30" - }, - "returnParameters": { - "id": 12244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12243, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12245, - "src": "15677:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12242, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15677:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15676:9:30" - }, - "scope": 12355, - "src": "15579:107:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12246, - "nodeType": "StructuredDocumentation", - "src": "15692:40:30", - "text": "@dev Address of the underlying asset" - }, - "functionSelector": "6f307dc3", - "id": 12251, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlying", - "nameLocation": "15746:10:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12247, - "nodeType": "ParameterList", - "parameters": [], - "src": "15756:2:30" - }, - "returnParameters": { - "id": 12250, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12249, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12251, - "src": "15782:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12248, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15782:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15781:9:30" - }, - "scope": 12355, - "src": "15737:54:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12252, - "nodeType": "StructuredDocumentation", - "src": "15797:38:30", - "text": "@dev Address of the connected pool" - }, - "functionSelector": "16f0115b", - "id": 12257, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "pool", - "nameLocation": "15849:4:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12253, - "nodeType": "ParameterList", - "parameters": [], - "src": "15853:2:30" - }, - "returnParameters": { - "id": 12256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12255, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12257, - "src": "15879:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12254, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15879:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "15878:9:30" - }, - "scope": 12355, - "src": "15840:48:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12258, - "nodeType": "StructuredDocumentation", - "src": "15894:88:30", - "text": "@dev Address of the connected pool\n @notice [DEPRECATED]: use pool() instead." - }, - "functionSelector": "570a7af2", - "id": 12263, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "poolService", - "nameLocation": "15996:11:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12259, - "nodeType": "ParameterList", - "parameters": [], - "src": "16007:2:30" - }, - "returnParameters": { - "id": 12262, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12261, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12263, - "src": "16033:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12260, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16033:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16032:9:30" - }, - "scope": 12355, - "src": "15987:55:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12264, - "nodeType": "StructuredDocumentation", - "src": "16048:66:30", - "text": "@dev A map from borrower addresses to Credit Account addresses" - }, - "functionSelector": "055ee9b5", - "id": 12271, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditAccounts", - "nameLocation": "16128:14:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12267, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12266, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "16151:8:30", - "nodeType": "VariableDeclaration", - "scope": 12271, - "src": "16143:16:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12265, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16143:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16142:18:30" - }, - "returnParameters": { - "id": 12270, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12269, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12271, - "src": "16184:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12268, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16184:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16183:9:30" - }, - "scope": 12355, - "src": "16119:74:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12272, - "nodeType": "StructuredDocumentation", - "src": "16199:53:30", - "text": "@dev Address of the connected Credit Configurator" - }, - "functionSelector": "f9aa028a", - "id": 12277, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditConfigurator", - "nameLocation": "16266:18:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12273, - "nodeType": "ParameterList", - "parameters": [], - "src": "16284:2:30" - }, - "returnParameters": { - "id": 12276, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12275, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12277, - "src": "16310:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12274, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16310:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16309:9:30" - }, - "scope": 12355, - "src": "16257:62:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12278, - "nodeType": "StructuredDocumentation", - "src": "16325:24:30", - "text": "@dev Address of WETH" - }, - "functionSelector": "4f0e0ef3", - "id": 12283, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "wethAddress", - "nameLocation": "16363:11:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12279, - "nodeType": "ParameterList", - "parameters": [], - "src": "16374:2:30" - }, - "returnParameters": { - "id": 12282, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12281, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12283, - "src": "16400:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12280, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16400:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16399:9:30" - }, - "scope": 12355, - "src": "16354:55:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12284, - "nodeType": "StructuredDocumentation", - "src": "16415:115:30", - "text": "@dev Returns the liquidation threshold for the provided token\n @param token Token to retrieve the LT for" - }, - "functionSelector": "78327438", - "id": 12291, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidationThresholds", - "nameLocation": "16544:21:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12286, - "mutability": "mutable", - "name": "token", - "nameLocation": "16574:5:30", - "nodeType": "VariableDeclaration", - "scope": 12291, - "src": "16566:13:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12285, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16566:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "16565:15:30" - }, - "returnParameters": { - "id": 12290, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12289, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12291, - "src": "16628:6:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12288, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "16628:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "16627:8:30" - }, - "scope": 12355, - "src": "16535:101:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12292, - "nodeType": "StructuredDocumentation", - "src": "16642:72:30", - "text": "@dev The maximal number of enabled tokens on a single Credit Account" - }, - "functionSelector": "8345f26e", - "id": 12297, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxAllowedEnabledTokenLength", - "nameLocation": "16728:28:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12293, - "nodeType": "ParameterList", - "parameters": [], - "src": "16756:2:30" - }, - "returnParameters": { - "id": 12296, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12295, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12297, - "src": "16782:5:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 12294, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "16782:5:30", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "16781:7:30" - }, - "scope": 12355, - "src": "16719:70:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12298, - "nodeType": "StructuredDocumentation", - "src": "16795:425:30", - "text": "@dev Maps addresses to their status as emergency liquidator.\n @notice Emergency liquidators are trusted addresses\n that are able to liquidate positions while the contracts are paused,\n e.g. when there is a risk of bad debt while an exploit is being patched.\n In the interest of fairness, emergency liquidators do not receive a premium\n And are compensated by the Gearbox DAO separately." - }, - "functionSelector": "38975bc4", - "id": 12305, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "canLiquidateWhilePaused", - "nameLocation": "17234:23:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12300, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12305, - "src": "17258:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "17258:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "17257:9:30" - }, - "returnParameters": { - "id": 12304, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12303, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12305, - "src": "17290:4:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12302, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "17290:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "17289:6:30" - }, - "scope": 12355, - "src": "17225:71:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12306, - "nodeType": "StructuredDocumentation", - "src": "17302:943:30", - "text": "@dev Returns the fee parameters of the Credit Manager\n @return feeInterest Percentage of interest taken by the protocol as profit\n @return feeLiquidation Percentage of account value taken by the protocol as profit\n during unhealthy account liquidations\n @return liquidationDiscount Multiplier that reduces the effective totalValue during unhealthy account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremium)\n @return feeLiquidationExpired Percentage of account value taken by the protocol as profit\n during expired account liquidations\n @return liquidationDiscountExpired Multiplier that reduces the effective totalValue during expired account liquidations,\n allowing the liquidator to take the unaccounted for remainder as premium. Equal to (1 - liquidationPremiumExpired)" - }, - "functionSelector": "9af1d35a", - "id": 12319, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "fees", - "nameLocation": "18259:4:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12307, - "nodeType": "ParameterList", - "parameters": [], - "src": "18263:2:30" - }, - "returnParameters": { - "id": 12318, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12309, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "18333:11:30", - "nodeType": "VariableDeclaration", - "scope": 12319, - "src": "18326:18:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12308, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "18326:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12311, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "18365:14:30", - "nodeType": "VariableDeclaration", - "scope": 12319, - "src": "18358:21:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12310, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "18358:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12313, - "mutability": "mutable", - "name": "liquidationDiscount", - "nameLocation": "18400:19:30", - "nodeType": "VariableDeclaration", - "scope": 12319, - "src": "18393:26:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12312, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "18393:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12315, - "mutability": "mutable", - "name": "feeLiquidationExpired", - "nameLocation": "18440:21:30", - "nodeType": "VariableDeclaration", - "scope": 12319, - "src": "18433:28:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12314, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "18433:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12317, - "mutability": "mutable", - "name": "liquidationDiscountExpired", - "nameLocation": "18482:26:30", - "nodeType": "VariableDeclaration", - "scope": 12319, - "src": "18475:33:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12316, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "18475:6:30", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "18312:206:30" - }, - "scope": 12355, - "src": "18250:269:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12320, - "nodeType": "StructuredDocumentation", - "src": "18525:47:30", - "text": "@dev Address of the connected Credit Facade" - }, - "functionSelector": "2f7a1881", - "id": 12325, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditFacade", - "nameLocation": "18586:12:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12321, - "nodeType": "ParameterList", - "parameters": [], - "src": "18598:2:30" - }, - "returnParameters": { - "id": 12324, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12323, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12325, - "src": "18624:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12322, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18624:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18623:9:30" - }, - "scope": 12355, - "src": "18577:56:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12326, - "nodeType": "StructuredDocumentation", - "src": "18639:46:30", - "text": "@dev Address of the connected Price Oracle" - }, - "functionSelector": "2630c12f", - "id": 12332, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "priceOracle", - "nameLocation": "18699:11:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12327, - "nodeType": "ParameterList", - "parameters": [], - "src": "18710:2:30" - }, - "returnParameters": { - "id": 12331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12330, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12332, - "src": "18736:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - }, - "typeName": { - "id": 12329, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12328, - "name": "IPriceOracleV2", - "nameLocations": ["18736:14:30"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "18736:14:30" - }, - "referencedDeclaration": 12942, - "src": "18736:14:30", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceOracleV2_$12942", - "typeString": "contract IPriceOracleV2" - } - }, - "visibility": "internal" - } - ], - "src": "18735:16:30" - }, - "scope": 12355, - "src": "18690:62:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12333, - "nodeType": "StructuredDocumentation", - "src": "18758:41:30", - "text": "@dev Address of the universal adapter" - }, - "functionSelector": "fe47cde7", - "id": 12338, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "universalAdapter", - "nameLocation": "18813:16:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12334, - "nodeType": "ParameterList", - "parameters": [], - "src": "18829:2:30" - }, - "returnParameters": { - "id": 12337, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12336, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12338, - "src": "18855:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12335, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "18855:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "18854:9:30" - }, - "scope": 12355, - "src": "18804:60:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12962], - "documentation": { - "id": 12339, - "nodeType": "StructuredDocumentation", - "src": "18870:27:30", - "text": "@dev Contract's version" - }, - "functionSelector": "54fd4d50", - "id": 12344, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "18911:7:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12340, - "nodeType": "ParameterList", - "parameters": [], - "src": "18918:2:30" - }, - "returnParameters": { - "id": 12343, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12342, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12344, - "src": "18944:7:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12341, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18944:7:30", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18943:9:30" - }, - "scope": 12355, - "src": "18902:51:30", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12345, - "nodeType": "StructuredDocumentation", - "src": "18959:23:30", - "text": "@dev Paused() state" - }, - "functionSelector": "eb99c2bf", - "id": 12354, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkEmergencyPausable", - "nameLocation": "18996:22:30", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12350, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12347, - "mutability": "mutable", - "name": "caller", - "nameLocation": "19027:6:30", - "nodeType": "VariableDeclaration", - "scope": 12354, - "src": "19019:14:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12346, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19019:7:30", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12349, - "mutability": "mutable", - "name": "state", - "nameLocation": "19040:5:30", - "nodeType": "VariableDeclaration", - "scope": 12354, - "src": "19035:10:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12348, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19035:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "19018:28:30" - }, - "returnParameters": { - "id": 12353, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12352, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12354, - "src": "19081:4:30", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12351, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "19081:4:30", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "19080:6:30" - }, - "scope": 12355, - "src": "18987:100:30", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12356, - "src": "2993:16096:30", - "usedErrors": [ - 11957, 11960, 11963, 11966, 11969, 11972, 11975, 11978, 11981, - 11984, 11987, 11990, 11993 - ] - } - ], - "src": "123:18967:30" - }, - "id": 30 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol", - "exportedSymbols": { - "CreditAccountData": [14533], - "CreditManagerData": [14590], - "IDataCompressor": [12451], - "IDataCompressorExceptions": [12371], - "IVersion": [12963], - "PoolData": [14623], - "TokenInfo": [14630] - }, - "id": 12452, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12357, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:31" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol", - "file": "../libraries/Types.sol", - "id": 12362, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12452, - "sourceUnit": 14659, - "src": "149:99:31", - "symbolAliases": [ - { - "foreign": { - "id": 12358, - "name": "CreditAccountData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14533, - "src": "158:17:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 12359, - "name": "CreditManagerData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14590, - "src": "177:17:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 12360, - "name": "PoolData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14623, - "src": "196:8:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 12361, - "name": "TokenInfo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14630, - "src": "206:9:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 12364, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12452, - "sourceUnit": 12964, - "src": "249:42:31", - "symbolAliases": [ - { - "foreign": { - "id": 12363, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "258:8:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IDataCompressorExceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12371, - "linearizedBaseContracts": [12371], - "name": "IDataCompressorExceptions", - "nameLocation": "303:25:31", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12365, - "nodeType": "StructuredDocumentation", - "src": "335:108:31", - "text": "@dev Thrown if attempting to get data on a contract that is not a registered\n Credit Manager" - }, - "errorSelector": "2cf3d0de", - "id": 12367, - "name": "NotCreditManagerException", - "nameLocation": "454:25:31", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12366, - "nodeType": "ParameterList", - "parameters": [], - "src": "479:2:31" - }, - "src": "448:34:31" - }, - { - "documentation": { - "id": 12368, - "nodeType": "StructuredDocumentation", - "src": "488:99:31", - "text": "@dev Thrown if attempting the get data on a contract that is not a registered\n pool" - }, - "errorSelector": "d384b238", - "id": 12370, - "name": "NotPoolException", - "nameLocation": "598:16:31", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12369, - "nodeType": "ParameterList", - "parameters": [], - "src": "614:2:31" - }, - "src": "592:25:31" - } - ], - "scope": 12452, - "src": "293:326:31", - "usedErrors": [12367, 12370] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 12372, - "name": "IDataCompressorExceptions", - "nameLocations": ["650:25:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12371, - "src": "650:25:31" - }, - "id": 12373, - "nodeType": "InheritanceSpecifier", - "src": "650:25:31" - }, - { - "baseName": { - "id": 12374, - "name": "IVersion", - "nameLocations": ["677:8:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "677:8:31" - }, - "id": 12375, - "nodeType": "InheritanceSpecifier", - "src": "677:8:31" - } - ], - "canonicalName": "IDataCompressor", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12451, - "linearizedBaseContracts": [12451, 12963, 12371], - "name": "IDataCompressor", - "nameLocation": "631:15:31", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12376, - "nodeType": "StructuredDocumentation", - "src": "692:123:31", - "text": "@dev Returns CreditAccountData for all opened accounts for particular borrower\n @param borrower Borrower address" - }, - "functionSelector": "a80deda3", - "id": 12385, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountList", - "nameLocation": "829:20:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12379, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12378, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "858:8:31", - "nodeType": "VariableDeclaration", - "scope": 12385, - "src": "850:16:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12377, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "850:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "849:18:31" - }, - "returnParameters": { - "id": 12384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12383, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12385, - "src": "915:26:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditAccountData[]" - }, - "typeName": { - "baseType": { - "id": 12381, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12380, - "name": "CreditAccountData", - "nameLocations": ["915:17:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14533, - "src": "915:17:31" - }, - "referencedDeclaration": 14533, - "src": "915:17:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_storage_ptr", - "typeString": "struct CreditAccountData" - } - }, - "id": 12382, - "nodeType": "ArrayTypeName", - "src": "915:19:31", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditAccountData_$14533_storage_$dyn_storage_ptr", - "typeString": "struct CreditAccountData[]" - } - }, - "visibility": "internal" - } - ], - "src": "914:28:31" - }, - "scope": 12451, - "src": "820:123:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12386, - "nodeType": "StructuredDocumentation", - "src": "949:183:31", - "text": "@dev Returns whether the borrower has an open credit account with the credit manager\n @param creditManager Credit manager to check\n @param borrower Borrower to check" - }, - "functionSelector": "fc9914cb", - "id": 12395, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "hasOpenedCreditAccount", - "nameLocation": "1146:22:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12391, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12388, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1177:13:31", - "nodeType": "VariableDeclaration", - "scope": 12395, - "src": "1169:21:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12387, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1169:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12390, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "1200:8:31", - "nodeType": "VariableDeclaration", - "scope": 12395, - "src": "1192:16:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12389, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1192:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1168:41:31" - }, - "returnParameters": { - "id": 12394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12393, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12395, - "src": "1257:4:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12392, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1257:4:31", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1256:6:31" - }, - "scope": 12451, - "src": "1137:126:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12396, - "nodeType": "StructuredDocumentation", - "src": "1269:205:31", - "text": "@dev Returns CreditAccountData for a particular Credit Account account, based on creditManager and borrower\n @param _creditManager Credit manager address\n @param borrower Borrower address" - }, - "functionSelector": "0dbd616d", - "id": 12406, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountData", - "nameLocation": "1488:20:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12401, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12398, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "1517:14:31", - "nodeType": "VariableDeclaration", - "scope": 12406, - "src": "1509:22:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12397, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1509:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12400, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "1541:8:31", - "nodeType": "VariableDeclaration", - "scope": 12406, - "src": "1533:16:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12399, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1533:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1508:42:31" - }, - "returnParameters": { - "id": 12405, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12404, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12406, - "src": "1598:24:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_memory_ptr", - "typeString": "struct CreditAccountData" - }, - "typeName": { - "id": 12403, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12402, - "name": "CreditAccountData", - "nameLocations": ["1598:17:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14533, - "src": "1598:17:31" - }, - "referencedDeclaration": 14533, - "src": "1598:17:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditAccountData_$14533_storage_ptr", - "typeString": "struct CreditAccountData" - } - }, - "visibility": "internal" - } - ], - "src": "1597:26:31" - }, - "scope": 12451, - "src": "1479:145:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12407, - "nodeType": "StructuredDocumentation", - "src": "1630:58:31", - "text": "@dev Returns CreditManagerData for all Credit Managers" - }, - "functionSelector": "663b8fdb", - "id": 12414, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditManagersList", - "nameLocation": "1702:21:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12408, - "nodeType": "ParameterList", - "parameters": [], - "src": "1723:2:31" - }, - "returnParameters": { - "id": 12413, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12412, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12414, - "src": "1773:26:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_memory_ptr_$dyn_memory_ptr", - "typeString": "struct CreditManagerData[]" - }, - "typeName": { - "baseType": { - "id": 12410, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12409, - "name": "CreditManagerData", - "nameLocations": ["1773:17:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14590, - "src": "1773:17:31" - }, - "referencedDeclaration": 14590, - "src": "1773:17:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_storage_ptr", - "typeString": "struct CreditManagerData" - } - }, - "id": 12411, - "nodeType": "ArrayTypeName", - "src": "1773:19:31", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_CreditManagerData_$14590_storage_$dyn_storage_ptr", - "typeString": "struct CreditManagerData[]" - } - }, - "visibility": "internal" - } - ], - "src": "1772:28:31" - }, - "scope": 12451, - "src": "1693:108:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12415, - "nodeType": "StructuredDocumentation", - "src": "1807:118:31", - "text": "@dev Returns CreditManagerData for a particular _creditManager\n @param _creditManager CreditManager address" - }, - "functionSelector": "ae093f3f", - "id": 12423, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditManagerData", - "nameLocation": "1939:20:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12418, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12417, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "1968:14:31", - "nodeType": "VariableDeclaration", - "scope": 12423, - "src": "1960:22:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12416, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1960:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1959:24:31" - }, - "returnParameters": { - "id": 12422, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12421, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12423, - "src": "2031:24:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_memory_ptr", - "typeString": "struct CreditManagerData" - }, - "typeName": { - "id": 12420, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12419, - "name": "CreditManagerData", - "nameLocations": ["2031:17:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14590, - "src": "2031:17:31" - }, - "referencedDeclaration": 14590, - "src": "2031:17:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CreditManagerData_$14590_storage_ptr", - "typeString": "struct CreditManagerData" - } - }, - "visibility": "internal" - } - ], - "src": "2030:26:31" - }, - "scope": 12451, - "src": "1930:127:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12424, - "nodeType": "StructuredDocumentation", - "src": "2063:81:31", - "text": "@dev Returns PoolData for a particular pool\n @param _pool Pool address" - }, - "functionSelector": "13d21cdf", - "id": 12432, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPoolData", - "nameLocation": "2158:11:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12427, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12426, - "mutability": "mutable", - "name": "_pool", - "nameLocation": "2178:5:31", - "nodeType": "VariableDeclaration", - "scope": 12432, - "src": "2170:13:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12425, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2170:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2169:15:31" - }, - "returnParameters": { - "id": 12431, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12430, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12432, - "src": "2208:15:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_memory_ptr", - "typeString": "struct PoolData" - }, - "typeName": { - "id": 12429, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12428, - "name": "PoolData", - "nameLocations": ["2208:8:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14623, - "src": "2208:8:31" - }, - "referencedDeclaration": 14623, - "src": "2208:8:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_storage_ptr", - "typeString": "struct PoolData" - } - }, - "visibility": "internal" - } - ], - "src": "2207:17:31" - }, - "scope": 12451, - "src": "2149:76:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12433, - "nodeType": "StructuredDocumentation", - "src": "2231:50:31", - "text": "@dev Returns PoolData for all registered pools" - }, - "functionSelector": "1bcd8fc0", - "id": 12440, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPoolsList", - "nameLocation": "2295:12:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12434, - "nodeType": "ParameterList", - "parameters": [], - "src": "2307:2:31" - }, - "returnParameters": { - "id": 12439, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12438, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12440, - "src": "2333:17:31", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PoolData[]" - }, - "typeName": { - "baseType": { - "id": 12436, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12435, - "name": "PoolData", - "nameLocations": ["2333:8:31"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14623, - "src": "2333:8:31" - }, - "referencedDeclaration": 14623, - "src": "2333:8:31", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PoolData_$14623_storage_ptr", - "typeString": "struct PoolData" - } - }, - "id": 12437, - "nodeType": "ArrayTypeName", - "src": "2333:10:31", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PoolData_$14623_storage_$dyn_storage_ptr", - "typeString": "struct PoolData[]" - } - }, - "visibility": "internal" - } - ], - "src": "2332:19:31" - }, - "scope": 12451, - "src": "2286:66:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12441, - "nodeType": "StructuredDocumentation", - "src": "2358:86:31", - "text": "@dev Returns the adapter address for a particular creditManager and targetContract" - }, - "functionSelector": "4c472fc9", - "id": 12450, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getAdapter", - "nameLocation": "2458:10:31", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12446, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12443, - "mutability": "mutable", - "name": "_creditManager", - "nameLocation": "2477:14:31", - "nodeType": "VariableDeclaration", - "scope": 12450, - "src": "2469:22:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12442, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2469:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12445, - "mutability": "mutable", - "name": "_allowedContract", - "nameLocation": "2501:16:31", - "nodeType": "VariableDeclaration", - "scope": 12450, - "src": "2493:24:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12444, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2493:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2468:50:31" - }, - "returnParameters": { - "id": 12449, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12448, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "2574:7:31", - "nodeType": "VariableDeclaration", - "scope": 12450, - "src": "2566:15:31", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12447, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2566:7:31", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2565:17:31" - }, - "scope": 12451, - "src": "2449:134:31", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12452, - "src": "621:1964:31", - "usedErrors": [12367, 12370] - } - ], - "src": "123:2463:31" - }, - "id": 31 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol", - "exportedSymbols": { - "IDegenNFT": [12529], - "IDegenNFTEvents": [12486], - "IDegenNFTExceptions": [12470], - "IERC721Metadata": [18390], - "IVersion": [12963] - }, - "id": 12530, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12453, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:32" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 12455, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12530, - "sourceUnit": 12964, - "src": "148:42:32", - "symbolAliases": [ - { - "foreign": { - "id": 12454, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:32", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", - "id": 12457, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12530, - "sourceUnit": 18391, - "src": "191:142:32", - "symbolAliases": [ - { - "foreign": { - "id": 12456, - "name": "IERC721Metadata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18390, - "src": "200:15:32", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IDegenNFTExceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12470, - "linearizedBaseContracts": [12470], - "name": "IDegenNFTExceptions", - "nameLocation": "345:19:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12458, - "nodeType": "StructuredDocumentation", - "src": "371:79:32", - "text": "@dev Thrown if an access-restricted function was called by non-CreditFacade" - }, - "errorSelector": "1e0d0485", - "id": 12460, - "name": "CreditFacadeOrConfiguratorOnlyException", - "nameLocation": "461:39:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12459, - "nodeType": "ParameterList", - "parameters": [], - "src": "500:2:32" - }, - "src": "455:48:32" - }, - { - "documentation": { - "id": 12461, - "nodeType": "StructuredDocumentation", - "src": "509:73:32", - "text": "@dev Thrown if an access-restricted function was called by non-minter" - }, - "errorSelector": "5c2967f5", - "id": 12463, - "name": "MinterOnlyException", - "nameLocation": "593:19:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12462, - "nodeType": "ParameterList", - "parameters": [], - "src": "612:2:32" - }, - "src": "587:28:32" - }, - { - "documentation": { - "id": 12464, - "nodeType": "StructuredDocumentation", - "src": "621:85:32", - "text": "@dev Thrown if trying to add a burner address that is not a correct Credit Facade" - }, - "errorSelector": "9c01f6a9", - "id": 12466, - "name": "InvalidCreditFacadeException", - "nameLocation": "717:28:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12465, - "nodeType": "ParameterList", - "parameters": [], - "src": "745:2:32" - }, - "src": "711:37:32" - }, - { - "documentation": { - "id": 12467, - "nodeType": "StructuredDocumentation", - "src": "754:89:32", - "text": "@dev Thrown if the account's balance is not sufficient for an action (usually a burn)" - }, - "errorSelector": "90c9142d", - "id": 12469, - "name": "InsufficientBalanceException", - "nameLocation": "854:28:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12468, - "nodeType": "ParameterList", - "parameters": [], - "src": "882:2:32" - }, - "src": "848:37:32" - } - ], - "scope": 12530, - "src": "335:552:32", - "usedErrors": [12460, 12463, 12466, 12469] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IDegenNFTEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12486, - "linearizedBaseContracts": [12486], - "name": "IDegenNFTEvents", - "nameLocation": "899:15:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 12471, - "nodeType": "StructuredDocumentation", - "src": "921:35:32", - "text": "@dev Minted when new minter set" - }, - "eventSelector": "49d62ab6a85289b2ebfd2d2384816f22284bc5ff5ae18c124df358e9db03158e", - "id": 12475, - "name": "NewMinterSet", - "nameLocation": "967:12:32", - "nodeType": "EventDefinition", - "parameters": { - "id": 12474, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12473, - "indexed": true, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12475, - "src": "980:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12472, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "980:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "979:17:32" - }, - "src": "961:36:32" - }, - { - "anonymous": false, - "documentation": { - "id": 12476, - "nodeType": "StructuredDocumentation", - "src": "1003:54:32", - "text": "@dev Minted each time when new credit facade added" - }, - "eventSelector": "8de8732e27fafa42885cd4371b667b9c76e3bfc2837f01ebe809e3a49f5fcbad", - "id": 12480, - "name": "NewCreditFacadeAdded", - "nameLocation": "1068:20:32", - "nodeType": "EventDefinition", - "parameters": { - "id": 12479, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12478, - "indexed": true, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12480, - "src": "1089:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12477, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1089:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1088:17:32" - }, - "src": "1062:44:32" - }, - { - "anonymous": false, - "documentation": { - "id": 12481, - "nodeType": "StructuredDocumentation", - "src": "1112:54:32", - "text": "@dev Minted each time when new credit facade added" - }, - "eventSelector": "ebbf1afa794a370cdfc745705fb79430bd57343fe03fcfecfce9f9769e4e5f2f", - "id": 12485, - "name": "NewCreditFacadeRemoved", - "nameLocation": "1177:22:32", - "nodeType": "EventDefinition", - "parameters": { - "id": 12484, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12483, - "indexed": true, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12485, - "src": "1200:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12482, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1200:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1199:17:32" - }, - "src": "1171:46:32" - } - ], - "scope": 12530, - "src": "889:330:32", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 12487, - "name": "IDegenNFTExceptions", - "nameLocations": ["1248:19:32"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12470, - "src": "1248:19:32" - }, - "id": 12488, - "nodeType": "InheritanceSpecifier", - "src": "1248:19:32" - }, - { - "baseName": { - "id": 12489, - "name": "IDegenNFTEvents", - "nameLocations": ["1273:15:32"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12486, - "src": "1273:15:32" - }, - "id": 12490, - "nodeType": "InheritanceSpecifier", - "src": "1273:15:32" - }, - { - "baseName": { - "id": 12491, - "name": "IVersion", - "nameLocations": ["1294:8:32"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "1294:8:32" - }, - "id": 12492, - "nodeType": "InheritanceSpecifier", - "src": "1294:8:32" - }, - { - "baseName": { - "id": 12493, - "name": "IERC721Metadata", - "nameLocations": ["1308:15:32"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18390, - "src": "1308:15:32" - }, - "id": 12494, - "nodeType": "InheritanceSpecifier", - "src": "1308:15:32" - } - ], - "canonicalName": "IDegenNFT", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12529, - "linearizedBaseContracts": [ - 12529, 18390, 18363, 18754, 12963, 12486, 12470 - ], - "name": "IDegenNFT", - "nameLocation": "1231:9:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12495, - "nodeType": "StructuredDocumentation", - "src": "1330:38:32", - "text": "@dev address of the current minter" - }, - "functionSelector": "07546172", - "id": 12500, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "minter", - "nameLocation": "1382:6:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12496, - "nodeType": "ParameterList", - "parameters": [], - "src": "1388:2:32" - }, - "returnParameters": { - "id": 12499, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12498, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12500, - "src": "1414:7:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12497, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1414:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1413:9:32" - }, - "scope": 12529, - "src": "1373:50:32", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12501, - "nodeType": "StructuredDocumentation", - "src": "1429:61:32", - "text": "@dev Stores the total number of tokens on holder accounts" - }, - "functionSelector": "18160ddd", - "id": 12506, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "1504:11:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12502, - "nodeType": "ParameterList", - "parameters": [], - "src": "1515:2:32" - }, - "returnParameters": { - "id": 12505, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12504, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12506, - "src": "1541:7:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12503, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1541:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1540:9:32" - }, - "scope": 12529, - "src": "1495:55:32", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12507, - "nodeType": "StructuredDocumentation", - "src": "1556:45:32", - "text": "@dev Stores the base URI for NFT metadata" - }, - "functionSelector": "6c0360eb", - "id": 12512, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "baseURI", - "nameLocation": "1615:7:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12508, - "nodeType": "ParameterList", - "parameters": [], - "src": "1622:2:32" - }, - "returnParameters": { - "id": 12511, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12510, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12512, - "src": "1648:13:32", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 12509, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1648:6:32", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1647:15:32" - }, - "scope": 12529, - "src": "1606:57:32", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12513, - "nodeType": "StructuredDocumentation", - "src": "1669:160:32", - "text": "@dev Mints a specified amount of tokens to the address\n @param to Address the tokens are minted to\n @param amount The number of tokens to mint" - }, - "functionSelector": "40c10f19", - "id": 12520, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "1843:4:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12515, - "mutability": "mutable", - "name": "to", - "nameLocation": "1856:2:32", - "nodeType": "VariableDeclaration", - "scope": 12520, - "src": "1848:10:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1848:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12517, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1868:6:32", - "nodeType": "VariableDeclaration", - "scope": 12520, - "src": "1860:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1860:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1847:28:32" - }, - "returnParameters": { - "id": 12519, - "nodeType": "ParameterList", - "parameters": [], - "src": "1884:0:32" - }, - "scope": 12529, - "src": "1834:51:32", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12521, - "nodeType": "StructuredDocumentation", - "src": "1891:168:32", - "text": "@dev Burns a number of tokens from a specified address\n @param from The address a token will be burnt from\n @param amount The number of tokens to burn" - }, - "functionSelector": "9dc29fac", - "id": 12528, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nameLocation": "2073:4:32", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12526, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12523, - "mutability": "mutable", - "name": "from", - "nameLocation": "2086:4:32", - "nodeType": "VariableDeclaration", - "scope": 12528, - "src": "2078:12:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12522, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2078:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12525, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2100:6:32", - "nodeType": "VariableDeclaration", - "scope": 12528, - "src": "2092:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12524, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2092:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2077:30:32" - }, - "returnParameters": { - "id": 12527, - "nodeType": "ParameterList", - "parameters": [], - "src": "2116:0:32" - }, - "scope": 12529, - "src": "2064:53:32", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12530, - "src": "1221:898:32", - "usedErrors": [12460, 12463, 12466, 12469] - } - ], - "src": "123:1997:32" - }, - "id": 32 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol", - "exportedSymbols": { - "AddressIsNotContractException": [12542], - "CallerNotConfiguratorException": [12551], - "CallerNotControllerException": [12554], - "CallerNotPausableAdminException": [12557], - "CallerNotUnPausableAdminException": [12560], - "IncorrectPriceFeedException": [12548], - "IncorrectTokenContractException": [12545], - "NotImplementedException": [12537], - "ZeroAddressException": [12534] - }, - "id": 12561, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12531, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:33" - }, - { - "documentation": { - "id": 12532, - "nodeType": "StructuredDocumentation", - "src": "186:74:33", - "text": "@dev Thrown on attempting to set an important address to zero address" - }, - "errorSelector": "b2335f2e", - "id": 12534, - "name": "ZeroAddressException", - "nameLocation": "266:20:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12533, - "nodeType": "ParameterList", - "parameters": [], - "src": "286:2:33" - }, - "src": "260:29:33" - }, - { - "documentation": { - "id": 12535, - "nodeType": "StructuredDocumentation", - "src": "291:65:33", - "text": "@dev Thrown on attempting to call a non-implemented function" - }, - "errorSelector": "24e46f70", - "id": 12537, - "name": "NotImplementedException", - "nameLocation": "362:23:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12536, - "nodeType": "ParameterList", - "parameters": [], - "src": "385:2:33" - }, - "src": "356:32:33" - }, - { - "documentation": { - "id": 12538, - "nodeType": "StructuredDocumentation", - "src": "390:83:33", - "text": "@dev Thrown on attempting to set an EOA as an important contract in the system" - }, - "errorSelector": "df4c572d", - "id": 12542, - "name": "AddressIsNotContractException", - "nameLocation": "479:29:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12541, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12540, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12542, - "src": "509:7:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12539, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "509:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "508:9:33" - }, - "src": "473:45:33" - }, - { - "documentation": { - "id": 12543, - "nodeType": "StructuredDocumentation", - "src": "520:79:33", - "text": "@dev Thrown on attempting to use a non-ERC20 contract or an EOA as a token" - }, - "errorSelector": "528ca31d", - "id": 12545, - "name": "IncorrectTokenContractException", - "nameLocation": "605:31:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12544, - "nodeType": "ParameterList", - "parameters": [], - "src": "636:2:33" - }, - "src": "599:40:33" - }, - { - "documentation": { - "id": 12546, - "nodeType": "StructuredDocumentation", - "src": "641:112:33", - "text": "@dev Thrown on attempting to set a token price feed to an address that is not a\n correct price feed" - }, - "errorSelector": "67a7cd43", - "id": 12548, - "name": "IncorrectPriceFeedException", - "nameLocation": "759:27:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12547, - "nodeType": "ParameterList", - "parameters": [], - "src": "786:2:33" - }, - "src": "753:36:33" - }, - { - "documentation": { - "id": 12549, - "nodeType": "StructuredDocumentation", - "src": "791:90:33", - "text": "@dev Thrown on attempting to call an access restricted function as a non-Configurator" - }, - "errorSelector": "61081c15", - "id": 12551, - "name": "CallerNotConfiguratorException", - "nameLocation": "887:30:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12550, - "nodeType": "ParameterList", - "parameters": [], - "src": "917:2:33" - }, - "src": "881:39:33" - }, - { - "documentation": { - "id": 12552, - "nodeType": "StructuredDocumentation", - "src": "922:90:33", - "text": "@dev Thrown on attempting to call an access restricted function as a non-Configurator" - }, - "errorSelector": "0129bb99", - "id": 12554, - "name": "CallerNotControllerException", - "nameLocation": "1018:28:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12553, - "nodeType": "ParameterList", - "parameters": [], - "src": "1046:2:33" - }, - "src": "1012:37:33" - }, - { - "documentation": { - "id": 12555, - "nodeType": "StructuredDocumentation", - "src": "1051:74:33", - "text": "@dev Thrown on attempting to pause a contract as a non-Pausable admin" - }, - "errorSelector": "d794b1e7", - "id": 12557, - "name": "CallerNotPausableAdminException", - "nameLocation": "1131:31:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12556, - "nodeType": "ParameterList", - "parameters": [], - "src": "1162:2:33" - }, - "src": "1125:40:33" - }, - { - "documentation": { - "id": 12558, - "nodeType": "StructuredDocumentation", - "src": "1167:76:33", - "text": "@dev Thrown on attempting to pause a contract as a non-Unpausable admin" - }, - "errorSelector": "10332dee", - "id": 12560, - "name": "CallerNotUnPausableAdminException", - "nameLocation": "1249:33:33", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12559, - "nodeType": "ParameterList", - "parameters": [], - "src": "1282:2:33" - }, - "src": "1243:42:33" - } - ], - "src": "123:1163:33" - }, - "id": 33 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol", - "exportedSymbols": { - "IPausable": [12566] - }, - "id": 12567, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12562, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:34" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPausable", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12566, - "linearizedBaseContracts": [12566], - "name": "IPausable", - "nameLocation": "159:9:34", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "8456cb59", - "id": 12565, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "pause", - "nameLocation": "184:5:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12563, - "nodeType": "ParameterList", - "parameters": [], - "src": "189:2:34" - }, - "returnParameters": { - "id": 12564, - "nodeType": "ParameterList", - "parameters": [], - "src": "200:0:34" - }, - "scope": 12566, - "src": "175:26:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12567, - "src": "149:54:34", - "usedErrors": [] - } - ], - "src": "123:81:34" - }, - "id": 34 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol", - "exportedSymbols": { - "ACCOUNT_FACTORY": [2585], - "ACL": [2579], - "AddressProvider": [2931], - "CONTRACTS_REGISTER": [2576], - "Claimable": [4791], - "DATA_COMPRESSOR": [2588], - "Errors": [14033], - "GEAR_TOKEN": [2594], - "IAddressProvider": [10799], - "IPoolService": [12805], - "IPoolServiceEvents": [12644], - "IVersion": [12963], - "LEVERAGED_ACTIONS": [2603], - "PRICE_ORACLE": [2582], - "TREASURY_CONTRACT": [2591], - "WETH_GATEWAY": [2600], - "WETH_TOKEN": [2597] - }, - "id": 12806, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12568, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:35" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "../core/AddressProvider.sol", - "id": 12569, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12806, - "sourceUnit": 2932, - "src": "148:37:35", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 12571, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12806, - "sourceUnit": 12964, - "src": "186:42:35", - "symbolAliases": [ - { - "foreign": { - "id": 12570, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "195:8:35", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPoolServiceEvents", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12644, - "linearizedBaseContracts": [12644], - "name": "IPoolServiceEvents", - "nameLocation": "240:18:35", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 12572, - "nodeType": "StructuredDocumentation", - "src": "265:55:35", - "text": "@dev Emits on new liquidity being added to the pool" - }, - "eventSelector": "d2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e", - "id": 12582, - "name": "AddLiquidity", - "nameLocation": "331:12:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12581, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12574, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "369:6:35", - "nodeType": "VariableDeclaration", - "scope": 12582, - "src": "353:22:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12573, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "353:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12576, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "401:10:35", - "nodeType": "VariableDeclaration", - "scope": 12582, - "src": "385:26:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12575, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "385:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12578, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "429:6:35", - "nodeType": "VariableDeclaration", - "scope": 12582, - "src": "421:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12577, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "421:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12580, - "indexed": false, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "453:12:35", - "nodeType": "VariableDeclaration", - "scope": 12582, - "src": "445:20:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12579, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "445:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "343:128:35" - }, - "src": "325:147:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12583, - "nodeType": "StructuredDocumentation", - "src": "478:53:35", - "text": "@dev Emits on liquidity being removed to the pool" - }, - "eventSelector": "d8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf6", - "id": 12591, - "name": "RemoveLiquidity", - "nameLocation": "542:15:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12590, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12585, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "583:6:35", - "nodeType": "VariableDeclaration", - "scope": 12591, - "src": "567:22:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12584, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "567:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12587, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "615:2:35", - "nodeType": "VariableDeclaration", - "scope": 12591, - "src": "599:18:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12586, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "599:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12589, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "635:6:35", - "nodeType": "VariableDeclaration", - "scope": 12591, - "src": "627:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12588, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "627:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "557:90:35" - }, - "src": "536:112:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12592, - "nodeType": "StructuredDocumentation", - "src": "654:71:35", - "text": "@dev Emits on a Credit Manager borrowing funds for a Credit Account" - }, - "eventSelector": "312a5e5e1079f5dda4e95dbbd0b908b291fd5b992ef22073643ab691572c5b52", - "id": 12600, - "name": "Borrow", - "nameLocation": "736:6:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12594, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "768:13:35", - "nodeType": "VariableDeclaration", - "scope": 12600, - "src": "752:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12593, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "752:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12596, - "indexed": true, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "807:13:35", - "nodeType": "VariableDeclaration", - "scope": 12600, - "src": "791:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12595, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "791:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12598, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "838:6:35", - "nodeType": "VariableDeclaration", - "scope": 12600, - "src": "830:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12597, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "830:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "742:108:35" - }, - "src": "730:121:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12601, - "nodeType": "StructuredDocumentation", - "src": "857:54:35", - "text": "@dev Emits on repayment of a Credit Account's debt" - }, - "eventSelector": "2fe77b1c99aca6b022b8efc6e3e8dd1b48b30748709339b65c50ef3263443e09", - "id": 12611, - "name": "Repay", - "nameLocation": "922:5:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12610, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12603, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "953:13:35", - "nodeType": "VariableDeclaration", - "scope": 12611, - "src": "937:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12602, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "937:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12605, - "indexed": false, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "984:14:35", - "nodeType": "VariableDeclaration", - "scope": 12611, - "src": "976:22:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12604, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "976:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12607, - "indexed": false, - "mutability": "mutable", - "name": "profit", - "nameLocation": "1016:6:35", - "nodeType": "VariableDeclaration", - "scope": 12611, - "src": "1008:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12606, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1008:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12609, - "indexed": false, - "mutability": "mutable", - "name": "loss", - "nameLocation": "1040:4:35", - "nodeType": "VariableDeclaration", - "scope": 12611, - "src": "1032:12:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12608, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1032:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "927:123:35" - }, - "src": "916:135:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12612, - "nodeType": "StructuredDocumentation", - "src": "1057:50:35", - "text": "@dev Emits on updating the interest rate model" - }, - "eventSelector": "0ec6cb7631d36954a05ffd646135bfd9995c71e7fa36d26abb1ad9f24a040ea1", - "id": 12616, - "name": "NewInterestRateModel", - "nameLocation": "1118:20:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12615, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12614, - "indexed": true, - "mutability": "mutable", - "name": "newInterestRateModel", - "nameLocation": "1155:20:35", - "nodeType": "VariableDeclaration", - "scope": 12616, - "src": "1139:36:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12613, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1139:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1138:38:35" - }, - "src": "1112:65:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12617, - "nodeType": "StructuredDocumentation", - "src": "1183:49:35", - "text": "@dev Emits on connecting a new Credit Manager" - }, - "eventSelector": "e076020e7eac3915d33aec40c24f95e73eb6c9921ff89747d50aa8fd934d2c01", - "id": 12621, - "name": "NewCreditManagerConnected", - "nameLocation": "1243:25:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12620, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12619, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1285:13:35", - "nodeType": "VariableDeclaration", - "scope": 12621, - "src": "1269:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12618, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1269:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1268:31:35" - }, - "src": "1237:63:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12622, - "nodeType": "StructuredDocumentation", - "src": "1306:59:35", - "text": "@dev Emits when a Credit Manager is forbidden to borrow" - }, - "eventSelector": "9181736fce85d2d4cca2e4406f10679302ae5c387180fdb62963af3cd9a24fd6", - "id": 12626, - "name": "BorrowForbidden", - "nameLocation": "1376:15:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12625, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12624, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1408:13:35", - "nodeType": "VariableDeclaration", - "scope": 12626, - "src": "1392:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12623, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1392:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1391:31:35" - }, - "src": "1370:53:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12627, - "nodeType": "StructuredDocumentation", - "src": "1429:78:35", - "text": "@dev Emitted when loss is incurred that can't be covered by treasury funds" - }, - "eventSelector": "ef3653ded679720ab04913b6f3820be7cedc8286d42ff5dd8dff17e91bd2964c", - "id": 12633, - "name": "UncoveredLoss", - "nameLocation": "1518:13:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12632, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12629, - "indexed": true, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "1548:13:35", - "nodeType": "VariableDeclaration", - "scope": 12633, - "src": "1532:29:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12628, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1532:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12631, - "indexed": false, - "mutability": "mutable", - "name": "loss", - "nameLocation": "1571:4:35", - "nodeType": "VariableDeclaration", - "scope": 12633, - "src": "1563:12:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12630, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1563:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1531:45:35" - }, - "src": "1512:65:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12634, - "nodeType": "StructuredDocumentation", - "src": "1583:50:35", - "text": "@dev Emits when the liquidity limit is changed" - }, - "eventSelector": "d7a183c9fe85b604c25d54bd676e0866f6c13bcca9fb9b0850213de118fdc99c", - "id": 12638, - "name": "NewExpectedLiquidityLimit", - "nameLocation": "1644:25:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12637, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12636, - "indexed": false, - "mutability": "mutable", - "name": "newLimit", - "nameLocation": "1678:8:35", - "nodeType": "VariableDeclaration", - "scope": 12638, - "src": "1670:16:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12635, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1670:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1669:18:35" - }, - "src": "1638:50:35" - }, - { - "anonymous": false, - "documentation": { - "id": 12639, - "nodeType": "StructuredDocumentation", - "src": "1694:49:35", - "text": "@dev Emits when the withdrawal fee is changed" - }, - "eventSelector": "d5fe46099fa396290a7f57e36c3c3c8774e2562c18ed5d1dcc0fa75071e03f1d", - "id": 12643, - "name": "NewWithdrawFee", - "nameLocation": "1754:14:35", - "nodeType": "EventDefinition", - "parameters": { - "id": 12642, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12641, - "indexed": false, - "mutability": "mutable", - "name": "fee", - "nameLocation": "1777:3:35", - "nodeType": "VariableDeclaration", - "scope": 12643, - "src": "1769:11:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12640, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1769:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1768:13:35" - }, - "src": "1748:34:35" - } - ], - "scope": 12806, - "src": "230:1554:35", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 12646, - "name": "IPoolServiceEvents", - "nameLocations": ["2083:18:35"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12644, - "src": "2083:18:35" - }, - "id": 12647, - "nodeType": "InheritanceSpecifier", - "src": "2083:18:35" - }, - { - "baseName": { - "id": 12648, - "name": "IVersion", - "nameLocations": ["2103:8:35"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "2103:8:35" - }, - "id": 12649, - "nodeType": "InheritanceSpecifier", - "src": "2103:8:35" - } - ], - "canonicalName": "IPoolService", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 12645, - "nodeType": "StructuredDocumentation", - "src": "1786:271:35", - "text": "@title Pool Service Interface\n @notice Implements business logic:\n - Adding/removing pool liquidity\n - Managing diesel tokens & diesel rates\n - Taking/repaying Credit Manager debt\n More: https://dev.gearbox.fi/developers/pool/abstractpoolservice" - }, - "fullyImplemented": false, - "id": 12805, - "linearizedBaseContracts": [12805, 12963, 12644], - "name": "IPoolService", - "nameLocation": "2067:12:35", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12650, - "nodeType": "StructuredDocumentation", - "src": "2161:456:35", - "text": " @dev Adds liquidity to pool\n - transfers the underlying to the pool\n - mints Diesel (LP) tokens to onBehalfOf\n @param amount Amount of tokens to be deposited\n @param onBehalfOf The address that will receive the dToken\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n 0 if the action is executed directly by the user, without a facilitator." - }, - "functionSelector": "9aa5d462", - "id": 12659, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addLiquidity", - "nameLocation": "2631:12:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12652, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2661:6:35", - "nodeType": "VariableDeclaration", - "scope": 12659, - "src": "2653:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12651, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2653:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12654, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "2685:10:35", - "nodeType": "VariableDeclaration", - "scope": 12659, - "src": "2677:18:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12653, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2677:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12656, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "2713:12:35", - "nodeType": "VariableDeclaration", - "scope": 12659, - "src": "2705:20:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12655, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2705:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2643:88:35" - }, - "returnParameters": { - "id": 12658, - "nodeType": "ParameterList", - "parameters": [], - "src": "2740:0:35" - }, - "scope": 12805, - "src": "2622:119:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12660, - "nodeType": "StructuredDocumentation", - "src": "2747:259:35", - "text": " @dev Removes liquidity from pool\n - burns LP's Diesel (LP) tokens\n - returns the equivalent amount of underlying to 'to'\n @param amount Amount of Diesel tokens to burn\n @param to Address to transfer the underlying to" - }, - "functionSelector": "05fe138b", - "id": 12669, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "removeLiquidity", - "nameLocation": "3021:15:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12665, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12662, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3045:6:35", - "nodeType": "VariableDeclaration", - "scope": 12669, - "src": "3037:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12661, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3037:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12664, - "mutability": "mutable", - "name": "to", - "nameLocation": "3061:2:35", - "nodeType": "VariableDeclaration", - "scope": 12669, - "src": "3053:10:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12663, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3053:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3036:28:35" - }, - "returnParameters": { - "id": 12668, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12667, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12669, - "src": "3099:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12666, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3099:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3098:9:35" - }, - "scope": 12805, - "src": "3012:96:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12670, - "nodeType": "StructuredDocumentation", - "src": "3114:174:35", - "text": " @dev Lends pool funds to a Credit Account\n @param borrowedAmount Credit Account's debt principal\n @param creditAccount Credit Account's address" - }, - "functionSelector": "bf28068b", - "id": 12677, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lendCreditAccount", - "nameLocation": "3302:17:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12675, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12672, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "3328:14:35", - "nodeType": "VariableDeclaration", - "scope": 12677, - "src": "3320:22:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12671, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3320:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12674, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "3352:13:35", - "nodeType": "VariableDeclaration", - "scope": 12677, - "src": "3344:21:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12673, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3344:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3319:47:35" - }, - "returnParameters": { - "id": 12676, - "nodeType": "ParameterList", - "parameters": [], - "src": "3383:0:35" - }, - "scope": 12805, - "src": "3293:91:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12678, - "nodeType": "StructuredDocumentation", - "src": "3390:364:35", - "text": " @dev Repays the Credit Account's debt\n @param borrowedAmount Amount of principal ro repay\n @param profit The treasury profit from repayment\n @param loss Amount of underlying that the CA wan't able to repay\n @notice Assumes that the underlying (including principal + interest + fees)\n was already transferred" - }, - "functionSelector": "ca9505e4", - "id": 12687, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "repayCreditAccount", - "nameLocation": "3768:18:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12685, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12680, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "3804:14:35", - "nodeType": "VariableDeclaration", - "scope": 12687, - "src": "3796:22:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12679, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3796:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12682, - "mutability": "mutable", - "name": "profit", - "nameLocation": "3836:6:35", - "nodeType": "VariableDeclaration", - "scope": 12687, - "src": "3828:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12681, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3828:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12684, - "mutability": "mutable", - "name": "loss", - "nameLocation": "3860:4:35", - "nodeType": "VariableDeclaration", - "scope": 12687, - "src": "3852:12:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12683, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3852:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3786:84:35" - }, - "returnParameters": { - "id": 12686, - "nodeType": "ParameterList", - "parameters": [], - "src": "3879:0:35" - }, - "scope": 12805, - "src": "3759:121:35", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12688, - "nodeType": "StructuredDocumentation", - "src": "3916:113:35", - "text": " @dev Returns the total amount of liquidity in the pool, including borrowed and available funds" - }, - "functionSelector": "fe14112d", - "id": 12693, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "expectedLiquidity", - "nameLocation": "4043:17:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12689, - "nodeType": "ParameterList", - "parameters": [], - "src": "4060:2:35" - }, - "returnParameters": { - "id": 12692, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12691, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12693, - "src": "4086:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12690, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4086:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4085:9:35" - }, - "scope": 12805, - "src": "4034:61:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12694, - "nodeType": "StructuredDocumentation", - "src": "4101:60:35", - "text": " @dev Returns the limit on total liquidity" - }, - "functionSelector": "ef8d9603", - "id": 12699, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "expectedLiquidityLimit", - "nameLocation": "4175:22:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12695, - "nodeType": "ParameterList", - "parameters": [], - "src": "4197:2:35" - }, - "returnParameters": { - "id": 12698, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12697, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12699, - "src": "4223:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12696, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4223:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4222:9:35" - }, - "scope": 12805, - "src": "4166:66:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12700, - "nodeType": "StructuredDocumentation", - "src": "4238:99:35", - "text": " @dev Returns the available liquidity, which is expectedLiquidity - totalBorrowed" - }, - "functionSelector": "74375359", - "id": 12705, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "availableLiquidity", - "nameLocation": "4351:18:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12701, - "nodeType": "ParameterList", - "parameters": [], - "src": "4369:2:35" - }, - "returnParameters": { - "id": 12704, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12703, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12705, - "src": "4395:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12702, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4395:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4394:9:35" - }, - "scope": 12805, - "src": "4342:62:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12706, - "nodeType": "StructuredDocumentation", - "src": "4410:73:35", - "text": " @dev Calculates the current interest index, RAY format" - }, - "functionSelector": "0fce70fb", - "id": 12711, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcLinearCumulative_RAY", - "nameLocation": "4497:24:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12707, - "nodeType": "ParameterList", - "parameters": [], - "src": "4521:2:35" - }, - "returnParameters": { - "id": 12710, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12709, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12711, - "src": "4547:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4547:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4546:9:35" - }, - "scope": 12805, - "src": "4488:68:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12712, - "nodeType": "StructuredDocumentation", - "src": "4562:70:35", - "text": " @dev Calculates the current borrow rate, RAY format" - }, - "functionSelector": "45d31f9d", - "id": 12717, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "borrowAPY_RAY", - "nameLocation": "4646:13:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12713, - "nodeType": "ParameterList", - "parameters": [], - "src": "4659:2:35" - }, - "returnParameters": { - "id": 12716, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12715, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12717, - "src": "4685:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12714, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4685:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4684:9:35" - }, - "scope": 12805, - "src": "4637:57:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12718, - "nodeType": "StructuredDocumentation", - "src": "4700:83:35", - "text": " @dev Returns the total borrowed amount (includes principal only)" - }, - "functionSelector": "4c19386c", - "id": 12723, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalBorrowed", - "nameLocation": "4797:13:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12719, - "nodeType": "ParameterList", - "parameters": [], - "src": "4810:2:35" - }, - "returnParameters": { - "id": 12722, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12721, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12723, - "src": "4836:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12720, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4836:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4835:9:35" - }, - "scope": 12805, - "src": "4788:57:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12724, - "nodeType": "StructuredDocumentation", - "src": "4851:22:35", - "text": " ç*" - }, - "functionSelector": "788c6bfe", - "id": 12729, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getDieselRate_RAY", - "nameLocation": "4888:17:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12725, - "nodeType": "ParameterList", - "parameters": [], - "src": "4905:2:35" - }, - "returnParameters": { - "id": 12728, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12727, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12729, - "src": "4931:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12726, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4931:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4930:9:35" - }, - "scope": 12805, - "src": "4879:61:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12730, - "nodeType": "StructuredDocumentation", - "src": "4946:61:35", - "text": " @dev Returns the address of the underlying" - }, - "functionSelector": "2495a599", - "id": 12735, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlyingToken", - "nameLocation": "5021:15:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12731, - "nodeType": "ParameterList", - "parameters": [], - "src": "5036:2:35" - }, - "returnParameters": { - "id": 12734, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12733, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12735, - "src": "5062:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12732, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5062:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5061:9:35" - }, - "scope": 12805, - "src": "5012:59:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12736, - "nodeType": "StructuredDocumentation", - "src": "5077:63:35", - "text": " @dev Returns the address of the diesel token" - }, - "functionSelector": "36dda7d5", - "id": 12741, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "dieselToken", - "nameLocation": "5154:11:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12737, - "nodeType": "ParameterList", - "parameters": [], - "src": "5165:2:35" - }, - "returnParameters": { - "id": 12740, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12739, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12741, - "src": "5191:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12738, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5191:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5190:9:35" - }, - "scope": 12805, - "src": "5145:55:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12742, - "nodeType": "StructuredDocumentation", - "src": "5206:73:35", - "text": " @dev Returns the address of a Credit Manager by its id" - }, - "functionSelector": "1e16e4fc", - "id": 12749, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagers", - "nameLocation": "5293:14:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12745, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12744, - "mutability": "mutable", - "name": "id", - "nameLocation": "5316:2:35", - "nodeType": "VariableDeclaration", - "scope": 12749, - "src": "5308:10:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12743, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5308:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5307:12:35" - }, - "returnParameters": { - "id": 12748, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12747, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12749, - "src": "5343:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12746, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5343:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5342:9:35" - }, - "scope": 12805, - "src": "5284:68:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12750, - "nodeType": "StructuredDocumentation", - "src": "5358:67:35", - "text": " @dev Returns the number of known Credit Managers" - }, - "functionSelector": "a4e8273e", - "id": 12755, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagersCount", - "nameLocation": "5439:19:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12751, - "nodeType": "ParameterList", - "parameters": [], - "src": "5458:2:35" - }, - "returnParameters": { - "id": 12754, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12753, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12755, - "src": "5484:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12752, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5484:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5483:9:35" - }, - "scope": 12805, - "src": "5430:63:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12756, - "nodeType": "StructuredDocumentation", - "src": "5499:139:35", - "text": " @dev Maps Credit Manager addresses to their status as a borrower.\n Returns false if borrowing is not allowed." - }, - "functionSelector": "2e97ca21", - "id": 12763, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditManagersCanBorrow", - "nameLocation": "5652:23:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12758, - "mutability": "mutable", - "name": "id", - "nameLocation": "5684:2:35", - "nodeType": "VariableDeclaration", - "scope": 12763, - "src": "5676:10:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12757, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5676:7:35", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5675:12:35" - }, - "returnParameters": { - "id": 12762, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12761, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12763, - "src": "5711:4:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12760, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5711:4:35", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5710:6:35" - }, - "scope": 12805, - "src": "5643:74:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12764, - "nodeType": "StructuredDocumentation", - "src": "5723:63:35", - "text": "@dev Converts a quantity of the underlying to Diesel tokens" - }, - "functionSelector": "4d778ad1", - "id": 12771, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "toDiesel", - "nameLocation": "5800:8:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12766, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5817:6:35", - "nodeType": "VariableDeclaration", - "scope": 12771, - "src": "5809:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12765, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5809:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5808:16:35" - }, - "returnParameters": { - "id": 12770, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12769, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12771, - "src": "5848:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12768, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5848:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5847:9:35" - }, - "scope": 12805, - "src": "5791:66:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12772, - "nodeType": "StructuredDocumentation", - "src": "5863:63:35", - "text": "@dev Converts a quantity of Diesel tokens to the underlying" - }, - "functionSelector": "5427c938", - "id": 12779, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "fromDiesel", - "nameLocation": "5940:10:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12775, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12774, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5959:6:35", - "nodeType": "VariableDeclaration", - "scope": 12779, - "src": "5951:14:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12773, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5951:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5950:16:35" - }, - "returnParameters": { - "id": 12778, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12777, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12779, - "src": "5990:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12776, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5990:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5989:9:35" - }, - "scope": 12805, - "src": "5931:68:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12780, - "nodeType": "StructuredDocumentation", - "src": "6005:35:35", - "text": "@dev Returns the withdrawal fee" - }, - "functionSelector": "e941fa78", - "id": 12785, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawFee", - "nameLocation": "6054:11:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12781, - "nodeType": "ParameterList", - "parameters": [], - "src": "6065:2:35" - }, - "returnParameters": { - "id": 12784, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12783, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12785, - "src": "6091:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12782, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6091:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6090:9:35" - }, - "scope": 12805, - "src": "6045:55:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12786, - "nodeType": "StructuredDocumentation", - "src": "6106:56:35", - "text": "@dev Returns the timestamp of the pool's last update" - }, - "functionSelector": "609ae317", - "id": 12791, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_timestampLU", - "nameLocation": "6176:12:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12787, - "nodeType": "ParameterList", - "parameters": [], - "src": "6188:2:35" - }, - "returnParameters": { - "id": 12790, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12789, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12791, - "src": "6214:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12788, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6214:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6213:9:35" - }, - "scope": 12805, - "src": "6167:56:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12792, - "nodeType": "StructuredDocumentation", - "src": "6229:59:35", - "text": "@dev Returns the interest index at the last pool update" - }, - "functionSelector": "dbcb313b", - "id": 12797, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_cumulativeIndex_RAY", - "nameLocation": "6302:20:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12793, - "nodeType": "ParameterList", - "parameters": [], - "src": "6322:2:35" - }, - "returnParameters": { - "id": 12796, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12795, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12797, - "src": "6348:7:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12794, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6348:7:35", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6347:9:35" - }, - "scope": 12805, - "src": "6293:64:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12798, - "nodeType": "StructuredDocumentation", - "src": "6363:37:35", - "text": "@dev Returns the address provider" - }, - "functionSelector": "2954018c", - "id": 12804, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addressProvider", - "nameLocation": "6414:15:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12799, - "nodeType": "ParameterList", - "parameters": [], - "src": "6429:2:35" - }, - "returnParameters": { - "id": 12803, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12802, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12804, - "src": "6455:15:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - }, - "typeName": { - "id": 12801, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12800, - "name": "AddressProvider", - "nameLocations": ["6455:15:35"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "6455:15:35" - }, - "referencedDeclaration": 2931, - "src": "6455:15:35", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "visibility": "internal" - } - ], - "src": "6454:17:35" - }, - "scope": 12805, - "src": "6405:67:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12806, - "src": "2057:4417:35", - "usedErrors": [] - } - ], - "src": "123:6352:35" - }, - "id": 35 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol", - "exportedSymbols": { - "IPriceFeedType": [12836], - "PriceFeedType": [12822] - }, - "id": 12837, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12807, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "32:23:36" - }, - { - "canonicalName": "PriceFeedType", - "id": 12822, - "members": [ - { - "id": 12808, - "name": "CHAINLINK_ORACLE", - "nameLocation": "147:16:36", - "nodeType": "EnumValue", - "src": "147:16:36" - }, - { - "id": 12809, - "name": "YEARN_ORACLE", - "nameLocation": "169:12:36", - "nodeType": "EnumValue", - "src": "169:12:36" - }, - { - "id": 12810, - "name": "CURVE_2LP_ORACLE", - "nameLocation": "187:16:36", - "nodeType": "EnumValue", - "src": "187:16:36" - }, - { - "id": 12811, - "name": "CURVE_3LP_ORACLE", - "nameLocation": "209:16:36", - "nodeType": "EnumValue", - "src": "209:16:36" - }, - { - "id": 12812, - "name": "CURVE_4LP_ORACLE", - "nameLocation": "231:16:36", - "nodeType": "EnumValue", - "src": "231:16:36" - }, - { - "id": 12813, - "name": "ZERO_ORACLE", - "nameLocation": "253:11:36", - "nodeType": "EnumValue", - "src": "253:11:36" - }, - { - "id": 12814, - "name": "WSTETH_ORACLE", - "nameLocation": "270:13:36", - "nodeType": "EnumValue", - "src": "270:13:36" - }, - { - "id": 12815, - "name": "BOUNDED_ORACLE", - "nameLocation": "289:14:36", - "nodeType": "EnumValue", - "src": "289:14:36" - }, - { - "id": 12816, - "name": "COMPOSITE_ORACLE", - "nameLocation": "309:16:36", - "nodeType": "EnumValue", - "src": "309:16:36" - }, - { - "id": 12817, - "name": "AAVE_ORACLE", - "nameLocation": "331:11:36", - "nodeType": "EnumValue", - "src": "331:11:36" - }, - { - "id": 12818, - "name": "COMPOUND_ORACLE", - "nameLocation": "348:15:36", - "nodeType": "EnumValue", - "src": "348:15:36" - }, - { - "id": 12819, - "name": "BALANCER_STABLE_LP_ORACLE", - "nameLocation": "369:25:36", - "nodeType": "EnumValue", - "src": "369:25:36" - }, - { - "id": 12820, - "name": "BALANCER_WEIGHTED_LP_ORACLE", - "nameLocation": "400:27:36", - "nodeType": "EnumValue", - "src": "400:27:36" - }, - { - "id": 12821, - "name": "CURVE_CRYPTO_ORACLE", - "nameLocation": "433:19:36", - "nodeType": "EnumValue", - "src": "433:19:36" - } - ], - "name": "PriceFeedType", - "nameLocation": "127:13:36", - "nodeType": "EnumDefinition", - "src": "122:332:36" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPriceFeedType", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12836, - "linearizedBaseContracts": [12836], - "name": "IPriceFeedType", - "nameLocation": "466:14:36", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12823, - "nodeType": "StructuredDocumentation", - "src": "487:36:36", - "text": "@dev Returns the price feed type" - }, - "functionSelector": "3fd0875f", - "id": 12829, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "priceFeedType", - "nameLocation": "537:13:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12824, - "nodeType": "ParameterList", - "parameters": [], - "src": "550:2:36" - }, - "returnParameters": { - "id": 12828, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12827, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12829, - "src": "576:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PriceFeedType_$12822", - "typeString": "enum PriceFeedType" - }, - "typeName": { - "id": 12826, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 12825, - "name": "PriceFeedType", - "nameLocations": ["576:13:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12822, - "src": "576:13:36" - }, - "referencedDeclaration": 12822, - "src": "576:13:36", - "typeDescriptions": { - "typeIdentifier": "t_enum$_PriceFeedType_$12822", - "typeString": "enum PriceFeedType" - } - }, - "visibility": "internal" - } - ], - "src": "575:15:36" - }, - "scope": 12836, - "src": "528:63:36", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12830, - "nodeType": "StructuredDocumentation", - "src": "597:77:36", - "text": "@dev Returns whether sanity checks on price feed result should be skipped" - }, - "functionSelector": "d62ada11", - "id": 12835, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "skipPriceCheck", - "nameLocation": "688:14:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12831, - "nodeType": "ParameterList", - "parameters": [], - "src": "702:2:36" - }, - "returnParameters": { - "id": 12834, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12833, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12835, - "src": "728:4:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12832, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "728:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "727:6:36" - }, - "scope": 12836, - "src": "679:55:36", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12837, - "src": "456:280:36", - "usedErrors": [] - } - ], - "src": "32:705:36" - }, - "id": 36 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "exportedSymbols": { - "IPriceOracleV2": [12942], - "IPriceOracleV2Events": [12848], - "IPriceOracleV2Exceptions": [12858], - "IPriceOracleV2Ext": [12953], - "IVersion": [12963] - }, - "id": 12954, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12838, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:37" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "file": "./IVersion.sol", - "id": 12840, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 12954, - "sourceUnit": 12964, - "src": "148:42:37", - "symbolAliases": [ - { - "foreign": { - "id": 12839, - "name": "IVersion", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12963, - "src": "157:8:37", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPriceOracleV2Events", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12848, - "linearizedBaseContracts": [12848], - "name": "IPriceOracleV2Events", - "nameLocation": "202:20:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 12841, - "nodeType": "StructuredDocumentation", - "src": "229:45:37", - "text": "@dev Emits when a new price feed is added" - }, - "eventSelector": "e263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e", - "id": 12847, - "name": "NewPriceFeed", - "nameLocation": "285:12:37", - "nodeType": "EventDefinition", - "parameters": { - "id": 12846, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12843, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "314:5:37", - "nodeType": "VariableDeclaration", - "scope": 12847, - "src": "298:21:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12842, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "298:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12845, - "indexed": true, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "337:9:37", - "nodeType": "VariableDeclaration", - "scope": 12847, - "src": "321:25:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12844, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "321:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "297:50:37" - }, - "src": "279:69:37" - } - ], - "scope": 12954, - "src": "192:158:37", - "usedErrors": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPriceOracleV2Exceptions", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": true, - "id": 12858, - "linearizedBaseContracts": [12858], - "name": "IPriceOracleV2Exceptions", - "nameLocation": "362:24:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12849, - "nodeType": "StructuredDocumentation", - "src": "393:41:37", - "text": "@dev Thrown if a price feed returns 0" - }, - "errorSelector": "56e05d2b", - "id": 12851, - "name": "ZeroPriceException", - "nameLocation": "445:18:37", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12850, - "nodeType": "ParameterList", - "parameters": [], - "src": "463:2:37" - }, - "src": "439:27:37" - }, - { - "documentation": { - "id": 12852, - "nodeType": "StructuredDocumentation", - "src": "472:77:37", - "text": "@dev Thrown if the last recorded result was not updated in the last round" - }, - "errorSelector": "b1cf6755", - "id": 12854, - "name": "ChainPriceStaleException", - "nameLocation": "560:24:37", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12853, - "nodeType": "ParameterList", - "parameters": [], - "src": "584:2:37" - }, - "src": "554:33:37" - }, - { - "documentation": { - "id": 12855, - "nodeType": "StructuredDocumentation", - "src": "593:89:37", - "text": "@dev Thrown on attempting to get a result for a token that does not have a price feed" - }, - "errorSelector": "4bb8ad82", - "id": 12857, - "name": "PriceOracleNotExistsException", - "nameLocation": "693:29:37", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 12856, - "nodeType": "ParameterList", - "parameters": [], - "src": "722:2:37" - }, - "src": "687:38:37" - } - ], - "scope": 12954, - "src": "352:375:37", - "usedErrors": [12851, 12854, 12857] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 12860, - "name": "IPriceOracleV2Events", - "nameLocations": ["795:20:37"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12848, - "src": "795:20:37" - }, - "id": 12861, - "nodeType": "InheritanceSpecifier", - "src": "795:20:37" - }, - { - "baseName": { - "id": 12862, - "name": "IPriceOracleV2Exceptions", - "nameLocations": ["821:24:37"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12858, - "src": "821:24:37" - }, - "id": 12863, - "nodeType": "InheritanceSpecifier", - "src": "821:24:37" - }, - { - "baseName": { - "id": 12864, - "name": "IVersion", - "nameLocations": ["851:8:37"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12963, - "src": "851:8:37" - }, - "id": 12865, - "nodeType": "InheritanceSpecifier", - "src": "851:8:37" - } - ], - "canonicalName": "IPriceOracleV2", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 12859, - "nodeType": "StructuredDocumentation", - "src": "729:34:37", - "text": "@title Price oracle interface" - }, - "fullyImplemented": false, - "id": 12942, - "linearizedBaseContracts": [12942, 12963, 12858, 12848], - "name": "IPriceOracleV2", - "nameLocation": "773:14:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12866, - "nodeType": "StructuredDocumentation", - "src": "866:161:37", - "text": "@dev Converts a quantity of an asset to USD (decimals = 8).\n @param amount Amount to convert\n @param token Address of the token to be converted" - }, - "functionSelector": "f9a65030", - "id": 12875, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "convertToUSD", - "nameLocation": "1041:12:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12868, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1062:6:37", - "nodeType": "VariableDeclaration", - "scope": 12875, - "src": "1054:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12867, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1054:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12870, - "mutability": "mutable", - "name": "token", - "nameLocation": "1078:5:37", - "nodeType": "VariableDeclaration", - "scope": 12875, - "src": "1070:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12869, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1070:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1053:31:37" - }, - "returnParameters": { - "id": 12874, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12873, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12875, - "src": "1132:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12872, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1132:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1131:9:37" - }, - "scope": 12942, - "src": "1032:109:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12876, - "nodeType": "StructuredDocumentation", - "src": "1147:181:37", - "text": "@dev Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset\n @param amount Amount to convert\n @param token Address of the token converted to" - }, - "functionSelector": "7afb0104", - "id": 12885, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "convertFromUSD", - "nameLocation": "1342:14:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12881, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12878, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1365:6:37", - "nodeType": "VariableDeclaration", - "scope": 12885, - "src": "1357:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12877, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1357:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12880, - "mutability": "mutable", - "name": "token", - "nameLocation": "1381:5:37", - "nodeType": "VariableDeclaration", - "scope": 12885, - "src": "1373:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12879, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1373:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1356:31:37" - }, - "returnParameters": { - "id": 12884, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12883, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12885, - "src": "1435:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12882, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1435:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1434:9:37" - }, - "scope": 12942, - "src": "1333:111:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12886, - "nodeType": "StructuredDocumentation", - "src": "1450:208:37", - "text": "@dev Converts one asset into another\n @param amount Amount to convert\n @param tokenFrom Address of the token to convert from\n @param tokenTo Address of the token to convert to" - }, - "functionSelector": "b66102df", - "id": 12897, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "convert", - "nameLocation": "1672:7:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12893, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12888, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1697:6:37", - "nodeType": "VariableDeclaration", - "scope": 12897, - "src": "1689:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12887, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1689:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12890, - "mutability": "mutable", - "name": "tokenFrom", - "nameLocation": "1721:9:37", - "nodeType": "VariableDeclaration", - "scope": 12897, - "src": "1713:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12889, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1713:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12892, - "mutability": "mutable", - "name": "tokenTo", - "nameLocation": "1748:7:37", - "nodeType": "VariableDeclaration", - "scope": 12897, - "src": "1740:15:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12891, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1740:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1679:82:37" - }, - "returnParameters": { - "id": 12896, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12895, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12897, - "src": "1785:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12894, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1785:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1784:9:37" - }, - "scope": 12942, - "src": "1663:131:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12898, - "nodeType": "StructuredDocumentation", - "src": "1800:433:37", - "text": "@dev Returns collateral values for two tokens, required for a fast check\n @param amountFrom Amount of the outbound token\n @param tokenFrom Address of the outbound token\n @param amountTo Amount of the inbound token\n @param tokenTo Address of the inbound token\n @return collateralFrom Value of the outbound token amount in USD\n @return collateralTo Value of the inbound token amount in USD" - }, - "functionSelector": "5cecbd0e", - "id": 12913, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "fastCheck", - "nameLocation": "2247:9:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12907, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12900, - "mutability": "mutable", - "name": "amountFrom", - "nameLocation": "2274:10:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2266:18:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12899, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2266:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12902, - "mutability": "mutable", - "name": "tokenFrom", - "nameLocation": "2302:9:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2294:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12901, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2294:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12904, - "mutability": "mutable", - "name": "amountTo", - "nameLocation": "2329:8:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2321:16:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12903, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2321:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12906, - "mutability": "mutable", - "name": "tokenTo", - "nameLocation": "2355:7:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2347:15:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12905, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2347:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2256:112:37" - }, - "returnParameters": { - "id": 12912, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12909, - "mutability": "mutable", - "name": "collateralFrom", - "nameLocation": "2400:14:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2392:22:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12908, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2392:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12911, - "mutability": "mutable", - "name": "collateralTo", - "nameLocation": "2424:12:37", - "nodeType": "VariableDeclaration", - "scope": 12913, - "src": "2416:20:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12910, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2416:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2391:46:37" - }, - "scope": 12942, - "src": "2238:200:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12914, - "nodeType": "StructuredDocumentation", - "src": "2444:106:37", - "text": "@dev Returns token's price in USD (8 decimals)\n @param token The token to compute the price for" - }, - "functionSelector": "41976e09", - "id": 12921, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getPrice", - "nameLocation": "2564:8:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12917, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12916, - "mutability": "mutable", - "name": "token", - "nameLocation": "2581:5:37", - "nodeType": "VariableDeclaration", - "scope": 12921, - "src": "2573:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12915, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2573:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2572:15:37" - }, - "returnParameters": { - "id": 12920, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12919, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12921, - "src": "2611:7:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12918, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2611:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2610:9:37" - }, - "scope": 12942, - "src": "2555:65:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12922, - "nodeType": "StructuredDocumentation", - "src": "2626:113:37", - "text": "@dev Returns the price feed address for the passed token\n @param token Token to get the price feed for" - }, - "functionSelector": "9dcb511a", - "id": 12929, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "priceFeeds", - "nameLocation": "2753:10:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12925, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12924, - "mutability": "mutable", - "name": "token", - "nameLocation": "2772:5:37", - "nodeType": "VariableDeclaration", - "scope": 12929, - "src": "2764:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12923, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2764:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2763:15:37" - }, - "returnParameters": { - "id": 12928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12927, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "2834:9:37", - "nodeType": "VariableDeclaration", - "scope": 12929, - "src": "2826:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12926, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2826:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2825:19:37" - }, - "scope": 12942, - "src": "2744:101:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12930, - "nodeType": "StructuredDocumentation", - "src": "2851:146:37", - "text": "@dev Returns the price feed for the passed token,\n with additional parameters\n @param token Token to get the price feed for" - }, - "functionSelector": "f190e5fa", - "id": 12941, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "priceFeedsWithFlags", - "nameLocation": "3011:19:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12933, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12932, - "mutability": "mutable", - "name": "token", - "nameLocation": "3039:5:37", - "nodeType": "VariableDeclaration", - "scope": 12941, - "src": "3031:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12931, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3031:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3030:15:37" - }, - "returnParameters": { - "id": 12940, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12935, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "3114:9:37", - "nodeType": "VariableDeclaration", - "scope": 12941, - "src": "3106:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12934, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3106:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12937, - "mutability": "mutable", - "name": "skipCheck", - "nameLocation": "3142:9:37", - "nodeType": "VariableDeclaration", - "scope": 12941, - "src": "3137:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 12936, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3137:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12939, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "3173:8:37", - "nodeType": "VariableDeclaration", - "scope": 12941, - "src": "3165:16:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12938, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3165:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3092:99:37" - }, - "scope": 12942, - "src": "3002:190:37", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12954, - "src": "763:2431:37", - "usedErrors": [12851, 12854, 12857] - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 12943, - "name": "IPriceOracleV2", - "nameLocations": ["3227:14:37"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "3227:14:37" - }, - "id": 12944, - "nodeType": "InheritanceSpecifier", - "src": "3227:14:37" - } - ], - "canonicalName": "IPriceOracleV2Ext", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12953, - "linearizedBaseContracts": [12953, 12942, 12963, 12858, 12848], - "name": "IPriceOracleV2Ext", - "nameLocation": "3206:17:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12945, - "nodeType": "StructuredDocumentation", - "src": "3248:229:37", - "text": "@dev Sets a price feed if it doesn't exist, or updates an existing one\n @param token Address of the token to set the price feed for\n @param priceFeed Address of a USD price feed adhering to Chainlink's interface" - }, - "functionSelector": "e8a97a3e", - "id": 12952, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addPriceFeed", - "nameLocation": "3491:12:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12950, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12947, - "mutability": "mutable", - "name": "token", - "nameLocation": "3512:5:37", - "nodeType": "VariableDeclaration", - "scope": 12952, - "src": "3504:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12946, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3504:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12949, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "3527:9:37", - "nodeType": "VariableDeclaration", - "scope": 12952, - "src": "3519:17:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12948, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3519:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3503:34:37" - }, - "returnParameters": { - "id": 12951, - "nodeType": "ParameterList", - "parameters": [], - "src": "3546:0:37" - }, - "scope": 12953, - "src": "3482:65:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12954, - "src": "3196:353:37", - "usedErrors": [12851, 12854, 12857] - } - ], - "src": "123:3427:37" - }, - "id": 37 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol", - "exportedSymbols": { - "IVersion": [12963] - }, - "id": 12964, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12955, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:38" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IVersion", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 12956, - "nodeType": "StructuredDocumentation", - "src": "149:94:38", - "text": "@title IVersion\n @dev Declares a version function which returns the contract's version" - }, - "fullyImplemented": false, - "id": 12963, - "linearizedBaseContracts": [12963], - "name": "IVersion", - "nameLocation": "253:8:38", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12957, - "nodeType": "StructuredDocumentation", - "src": "268:33:38", - "text": "@dev Returns contract version" - }, - "functionSelector": "54fd4d50", - "id": 12962, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "315:7:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12958, - "nodeType": "ParameterList", - "parameters": [], - "src": "322:2:38" - }, - "returnParameters": { - "id": 12961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12960, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 12962, - "src": "348:7:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12959, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "348:7:38", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "347:9:38" - }, - "scope": 12963, - "src": "306:51:38", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12964, - "src": "243:116:38", - "usedErrors": [] - } - ], - "src": "123:237:38" - }, - "id": 38 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol", - "exportedSymbols": { - "IWETHGateway": [12994] - }, - "id": 12995, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12965, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:39" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IWETHGateway", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 12994, - "linearizedBaseContracts": [12994], - "name": "IWETHGateway", - "nameLocation": "159:12:39", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 12966, - "nodeType": "StructuredDocumentation", - "src": "178:366:39", - "text": "@dev Converts ETH to WETH and add liqudity to the pool\n @param pool Address of PoolService contract to add liquidity to. This pool must have WETH as an underlying.\n @param onBehalfOf The address that will receive the diesel token.\n @param referralCode Code used to log the transaction facilitator, for potential rewards. 0 if non-applicable." - }, - "functionSelector": "deecfbc9", - "id": 12975, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addLiquidityETH", - "nameLocation": "558:15:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12973, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12968, - "mutability": "mutable", - "name": "pool", - "nameLocation": "591:4:39", - "nodeType": "VariableDeclaration", - "scope": 12975, - "src": "583:12:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12967, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "583:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12970, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "613:10:39", - "nodeType": "VariableDeclaration", - "scope": 12975, - "src": "605:18:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12969, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "605:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12972, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "640:12:39", - "nodeType": "VariableDeclaration", - "scope": 12975, - "src": "633:19:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 12971, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "633:6:39", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "573:85:39" - }, - "returnParameters": { - "id": 12974, - "nodeType": "ParameterList", - "parameters": [], - "src": "675:0:39" - }, - "scope": 12994, - "src": "549:127:39", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12976, - "nodeType": "StructuredDocumentation", - "src": "682:391:39", - "text": "@dev Removes liquidity from the pool and converts WETH to ETH\n - burns lp's diesel (LP) tokens\n - unwraps WETH to ETH and sends to the LP\n @param pool Address of PoolService contract to withdraw liquidity from. This pool must have WETH as an underlying.\n @param amount Amount of Diesel tokens to send.\n @param to Address to transfer ETH to." - }, - "functionSelector": "e79a4089", - "id": 12985, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "removeLiquidityETH", - "nameLocation": "1087:18:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12978, - "mutability": "mutable", - "name": "pool", - "nameLocation": "1123:4:39", - "nodeType": "VariableDeclaration", - "scope": 12985, - "src": "1115:12:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12977, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1115:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12980, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1145:6:39", - "nodeType": "VariableDeclaration", - "scope": 12985, - "src": "1137:14:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12979, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1137:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12982, - "mutability": "mutable", - "name": "to", - "nameLocation": "1177:2:39", - "nodeType": "VariableDeclaration", - "scope": 12985, - "src": "1161:18:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 12981, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1161:15:39", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - } - ], - "src": "1105:80:39" - }, - "returnParameters": { - "id": 12984, - "nodeType": "ParameterList", - "parameters": [], - "src": "1194:0:39" - }, - "scope": 12994, - "src": "1078:117:39", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 12986, - "nodeType": "StructuredDocumentation", - "src": "1201:150:39", - "text": "@dev Converts WETH to ETH, and sends to the passed address\n @param to Address to send ETH to\n @param amount Amount of WETH to unwrap" - }, - "functionSelector": "5869dba8", - "id": 12993, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "unwrapWETH", - "nameLocation": "1365:10:39", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 12991, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12988, - "mutability": "mutable", - "name": "to", - "nameLocation": "1384:2:39", - "nodeType": "VariableDeclaration", - "scope": 12993, - "src": "1376:10:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12987, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1376:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 12990, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1396:6:39", - "nodeType": "VariableDeclaration", - "scope": 12993, - "src": "1388:14:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 12989, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1388:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1375:28:39" - }, - "returnParameters": { - "id": 12992, - "nodeType": "ParameterList", - "parameters": [], - "src": "1412:0:39" - }, - "scope": 12994, - "src": "1356:57:39", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 12995, - "src": "149:1266:39", - "usedErrors": [] - } - ], - "src": "123:1293:39" - }, - "id": 39 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol", - "exportedSymbols": { - "ICreditFilter": [13277] - }, - "id": 13278, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 12996, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:40" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditFilter", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 13277, - "linearizedBaseContracts": [13277], - "name": "ICreditFilter", - "nameLocation": "159:13:40", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 12997, - "nodeType": "StructuredDocumentation", - "src": "179:75:40", - "text": "@dev Emits when a token is allowed or a liquidtion threshold is changed" - }, - "eventSelector": "a52fb6bfa514a4ddcb31de40a5f6c20d767db1f921a8b7747973d93dc5da7a02", - "id": 13003, - "name": "TokenAllowed", - "nameLocation": "265:12:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13002, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 12999, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "294:5:40", - "nodeType": "VariableDeclaration", - "scope": 13003, - "src": "278:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 12998, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "278:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13001, - "indexed": false, - "mutability": "mutable", - "name": "liquidityThreshold", - "nameLocation": "309:18:40", - "nodeType": "VariableDeclaration", - "scope": 13003, - "src": "301:26:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13000, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "301:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "277:51:40" - }, - "src": "259:70:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13004, - "nodeType": "StructuredDocumentation", - "src": "335:40:40", - "text": "@dev Emits when a token is forbidden" - }, - "eventSelector": "f17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f05", - "id": 13008, - "name": "TokenForbidden", - "nameLocation": "386:14:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13007, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13006, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "417:5:40", - "nodeType": "VariableDeclaration", - "scope": 13008, - "src": "401:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13005, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "401:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "400:23:40" - }, - "src": "380:44:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13009, - "nodeType": "StructuredDocumentation", - "src": "430:66:40", - "text": "@dev Emits when a 3rd-party contract / adapter pair is allowed" - }, - "eventSelector": "4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd1305", - "id": 13015, - "name": "ContractAllowed", - "nameLocation": "507:15:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13011, - "indexed": true, - "mutability": "mutable", - "name": "protocol", - "nameLocation": "539:8:40", - "nodeType": "VariableDeclaration", - "scope": 13015, - "src": "523:24:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13010, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "523:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13013, - "indexed": true, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "565:7:40", - "nodeType": "VariableDeclaration", - "scope": 13015, - "src": "549:23:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13012, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "549:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "522:51:40" - }, - "src": "501:73:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13016, - "nodeType": "StructuredDocumentation", - "src": "580:40:40", - "text": "@dev Emits when a 3rd-party contract" - }, - "eventSelector": "ab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f", - "id": 13020, - "name": "ContractForbidden", - "nameLocation": "631:17:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13019, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13018, - "indexed": true, - "mutability": "mutable", - "name": "protocol", - "nameLocation": "665:8:40", - "nodeType": "VariableDeclaration", - "scope": 13020, - "src": "649:24:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13017, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "649:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "648:26:40" - }, - "src": "625:50:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13021, - "nodeType": "StructuredDocumentation", - "src": "681:53:40", - "text": "@dev Emits when fast check parameters are updated" - }, - "eventSelector": "727652fff0946c19c233fd3eab5fc03db9e9fdd907e902d9136c2a9cac47101c", - "id": 13027, - "name": "NewFastCheckParameters", - "nameLocation": "745:22:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13026, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13023, - "indexed": false, - "mutability": "mutable", - "name": "chiThreshold", - "nameLocation": "776:12:40", - "nodeType": "VariableDeclaration", - "scope": 13027, - "src": "768:20:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13022, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "768:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13025, - "indexed": false, - "mutability": "mutable", - "name": "fastCheckDelay", - "nameLocation": "798:14:40", - "nodeType": "VariableDeclaration", - "scope": 13027, - "src": "790:22:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13024, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "790:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "767:46:40" - }, - "src": "739:75:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13028, - "nodeType": "StructuredDocumentation", - "src": "820:86:40", - "text": "@dev Emits when account transfer allowance status is changed between two addresses" - }, - "eventSelector": "9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0", - "id": 13036, - "name": "TransferAccountAllowed", - "nameLocation": "917:22:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13035, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13030, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "965:4:40", - "nodeType": "VariableDeclaration", - "scope": 13036, - "src": "949:20:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13029, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "949:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13032, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "995:2:40", - "nodeType": "VariableDeclaration", - "scope": 13036, - "src": "979:18:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13031, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "979:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13034, - "indexed": false, - "mutability": "mutable", - "name": "state", - "nameLocation": "1012:5:40", - "nodeType": "VariableDeclaration", - "scope": 13036, - "src": "1007:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13033, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1007:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "939:84:40" - }, - "src": "911:113:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13037, - "nodeType": "StructuredDocumentation", - "src": "1030:90:40", - "text": "@dev Emits when a priviledged address that can transfer accounts to anyone, is allowed" - }, - "eventSelector": "c7d2592986c53f858769b011e8ce6298936f8609789988e9f5ad4f0a20798897", - "id": 13043, - "name": "TransferPluginAllowed", - "nameLocation": "1131:21:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13042, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13039, - "indexed": true, - "mutability": "mutable", - "name": "plugin", - "nameLocation": "1169:6:40", - "nodeType": "VariableDeclaration", - "scope": 13043, - "src": "1153:22:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13038, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1153:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13041, - "indexed": false, - "mutability": "mutable", - "name": "state", - "nameLocation": "1182:5:40", - "nodeType": "VariableDeclaration", - "scope": 13043, - "src": "1177:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13040, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1177:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1152:36:40" - }, - "src": "1125:64:40" - }, - { - "anonymous": false, - "documentation": { - "id": 13044, - "nodeType": "StructuredDocumentation", - "src": "1195:53:40", - "text": "@dev Emits when a new price oracle address is set" - }, - "eventSelector": "efe8ab924ca486283a79dc604baa67add51afb82af1db8ac386ebbba643cdffd", - "id": 13048, - "name": "PriceOracleUpdated", - "nameLocation": "1259:18:40", - "nodeType": "EventDefinition", - "parameters": { - "id": 13047, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13046, - "indexed": true, - "mutability": "mutable", - "name": "newPriceOracle", - "nameLocation": "1294:14:40", - "nodeType": "VariableDeclaration", - "scope": 13048, - "src": "1278:30:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13045, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1278:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1277:32:40" - }, - "src": "1253:57:40" - }, - { - "documentation": { - "id": 13049, - "nodeType": "StructuredDocumentation", - "src": "1363:222:40", - "text": "@dev Adds a token to the list of allowed tokens\n @param token Address of allowed token\n @param liquidationThreshold A constant determining the maximal allowed ratio of Loan-To-Value for the allowed token." - }, - "functionSelector": "a147c6c6", - "id": 13056, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowToken", - "nameLocation": "1599:10:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13054, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13051, - "mutability": "mutable", - "name": "token", - "nameLocation": "1618:5:40", - "nodeType": "VariableDeclaration", - "scope": 13056, - "src": "1610:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1610:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13053, - "mutability": "mutable", - "name": "liquidationThreshold", - "nameLocation": "1633:20:40", - "nodeType": "VariableDeclaration", - "scope": 13056, - "src": "1625:28:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13052, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1625:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1609:45:40" - }, - "returnParameters": { - "id": 13055, - "nodeType": "ParameterList", - "parameters": [], - "src": "1663:0:40" - }, - "scope": 13277, - "src": "1590:74:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13057, - "nodeType": "StructuredDocumentation", - "src": "1670:205:40", - "text": "@dev Allows an adapter <> 3rd-party contract to be used with the connected Credit Manager\n @param targetContract Address of contract to be allowed\n @param adapter Adapter contract address" - }, - "functionSelector": "7bccacee", - "id": 13064, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowContract", - "nameLocation": "1889:13:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13062, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13059, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "1911:14:40", - "nodeType": "VariableDeclaration", - "scope": 13064, - "src": "1903:22:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13058, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1903:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13061, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "1935:7:40", - "nodeType": "VariableDeclaration", - "scope": 13064, - "src": "1927:15:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13060, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1927:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1902:41:40" - }, - "returnParameters": { - "id": 13063, - "nodeType": "ParameterList", - "parameters": [], - "src": "1952:0:40" - }, - "scope": 13277, - "src": "1880:73:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13065, - "nodeType": "StructuredDocumentation", - "src": "1959:133:40", - "text": "@dev Forbids contract and removes it from the list of allowed contracts\n @param targetContract Address of allowed contract" - }, - "functionSelector": "52438e54", - "id": 13070, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "forbidContract", - "nameLocation": "2106:14:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13068, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13067, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "2129:14:40", - "nodeType": "VariableDeclaration", - "scope": 13070, - "src": "2121:22:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13066, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2121:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2120:24:40" - }, - "returnParameters": { - "id": 13069, - "nodeType": "ParameterList", - "parameters": [], - "src": "2153:0:40" - }, - "scope": 13277, - "src": "2097:57:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13071, - "nodeType": "StructuredDocumentation", - "src": "2160:369:40", - "text": "@dev Checks financial order and reverts if tokens aren't in list or collateral protection alerts\n @param creditAccount Address of credit account\n @param tokenIn Address of token In in swap operation\n @param tokenOut Address of token Out in swap operation\n @param amountIn Amount of tokens in\n @param amountOut Amount of tokens out" - }, - "functionSelector": "e1c8ef0d", - "id": 13084, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkCollateralChange", - "nameLocation": "2543:21:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13082, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13073, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "2582:13:40", - "nodeType": "VariableDeclaration", - "scope": 13084, - "src": "2574:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13072, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2574:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13075, - "mutability": "mutable", - "name": "tokenIn", - "nameLocation": "2613:7:40", - "nodeType": "VariableDeclaration", - "scope": 13084, - "src": "2605:15:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13074, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2605:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13077, - "mutability": "mutable", - "name": "tokenOut", - "nameLocation": "2638:8:40", - "nodeType": "VariableDeclaration", - "scope": 13084, - "src": "2630:16:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13076, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2630:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13079, - "mutability": "mutable", - "name": "amountIn", - "nameLocation": "2664:8:40", - "nodeType": "VariableDeclaration", - "scope": 13084, - "src": "2656:16:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13078, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2656:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13081, - "mutability": "mutable", - "name": "amountOut", - "nameLocation": "2690:9:40", - "nodeType": "VariableDeclaration", - "scope": 13084, - "src": "2682:17:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13080, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2682:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2564:141:40" - }, - "returnParameters": { - "id": 13083, - "nodeType": "ParameterList", - "parameters": [], - "src": "2714:0:40" - }, - "scope": 13277, - "src": "2534:181:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "7e4a6863", - "id": 13101, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkMultiTokenCollateral", - "nameLocation": "2730:25:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13099, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13086, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "2773:13:40", - "nodeType": "VariableDeclaration", - "scope": 13101, - "src": "2765:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13085, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2765:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13089, - "mutability": "mutable", - "name": "amountIn", - "nameLocation": "2813:8:40", - "nodeType": "VariableDeclaration", - "scope": 13101, - "src": "2796:25:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 13087, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2796:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13088, - "nodeType": "ArrayTypeName", - "src": "2796:9:40", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13092, - "mutability": "mutable", - "name": "amountOut", - "nameLocation": "2848:9:40", - "nodeType": "VariableDeclaration", - "scope": 13101, - "src": "2831:26:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 13090, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2831:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13091, - "nodeType": "ArrayTypeName", - "src": "2831:9:40", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13095, - "mutability": "mutable", - "name": "tokenIn", - "nameLocation": "2884:7:40", - "nodeType": "VariableDeclaration", - "scope": 13101, - "src": "2867:24:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 13093, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2867:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 13094, - "nodeType": "ArrayTypeName", - "src": "2867:9:40", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13098, - "mutability": "mutable", - "name": "tokenOut", - "nameLocation": "2918:8:40", - "nodeType": "VariableDeclaration", - "scope": 13101, - "src": "2901:25:40", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 13096, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2901:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 13097, - "nodeType": "ArrayTypeName", - "src": "2901:9:40", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "2755:177:40" - }, - "returnParameters": { - "id": 13100, - "nodeType": "ParameterList", - "parameters": [], - "src": "2941:0:40" - }, - "scope": 13277, - "src": "2721:221:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13102, - "nodeType": "StructuredDocumentation", - "src": "2948:95:40", - "text": "@dev Connects credit managaer, hecks that all needed price feeds exists and finalize config" - }, - "functionSelector": "cf33d955", - "id": 13107, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "connectCreditManager", - "nameLocation": "3057:20:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13105, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13104, - "mutability": "mutable", - "name": "poolService", - "nameLocation": "3086:11:40", - "nodeType": "VariableDeclaration", - "scope": 13107, - "src": "3078:19:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13103, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3078:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3077:21:40" - }, - "returnParameters": { - "id": 13106, - "nodeType": "ParameterList", - "parameters": [], - "src": "3107:0:40" - }, - "scope": 13277, - "src": "3048:60:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13108, - "nodeType": "StructuredDocumentation", - "src": "3114:59:40", - "text": "@dev Sets collateral protection for new credit accounts" - }, - "functionSelector": "e54fe9c8", - "id": 13113, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "initEnabledTokens", - "nameLocation": "3187:17:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13111, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13110, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "3213:13:40", - "nodeType": "VariableDeclaration", - "scope": 13113, - "src": "3205:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13109, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3205:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3204:23:40" - }, - "returnParameters": { - "id": 13112, - "nodeType": "ParameterList", - "parameters": [], - "src": "3236:0:40" - }, - "scope": 13277, - "src": "3178:59:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "51e3f160", - "id": 13120, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "checkAndEnableToken", - "nameLocation": "3252:19:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13115, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "3280:13:40", - "nodeType": "VariableDeclaration", - "scope": 13120, - "src": "3272:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13114, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3272:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13117, - "mutability": "mutable", - "name": "token", - "nameLocation": "3303:5:40", - "nodeType": "VariableDeclaration", - "scope": 13120, - "src": "3295:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13116, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3295:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3271:38:40" - }, - "returnParameters": { - "id": 13119, - "nodeType": "ParameterList", - "parameters": [], - "src": "3318:0:40" - }, - "scope": 13277, - "src": "3243:76:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13121, - "nodeType": "StructuredDocumentation", - "src": "3355:54:40", - "text": "@dev Returns quantity of contracts in allowed list" - }, - "functionSelector": "50e036ff", - "id": 13126, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowedContractsCount", - "nameLocation": "3423:21:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13122, - "nodeType": "ParameterList", - "parameters": [], - "src": "3444:2:40" - }, - "returnParameters": { - "id": 13125, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13124, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13126, - "src": "3470:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13123, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3470:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3469:9:40" - }, - "scope": 13277, - "src": "3414:65:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13127, - "nodeType": "StructuredDocumentation", - "src": "3485:68:40", - "text": "@dev Returns of contract address from the allowed list by its id" - }, - "functionSelector": "5094cb4f", - "id": 13134, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowedContracts", - "nameLocation": "3567:16:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13130, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13129, - "mutability": "mutable", - "name": "id", - "nameLocation": "3592:2:40", - "nodeType": "VariableDeclaration", - "scope": 13134, - "src": "3584:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13128, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3584:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3583:12:40" - }, - "returnParameters": { - "id": 13133, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13132, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13134, - "src": "3619:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13131, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3619:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3618:9:40" - }, - "scope": 13277, - "src": "3558:70:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13135, - "nodeType": "StructuredDocumentation", - "src": "3634:53:40", - "text": "@dev Reverts if token isn't in token allowed list" - }, - "functionSelector": "7dd0ba82", - "id": 13140, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revertIfTokenNotAllowed", - "nameLocation": "3701:23:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13138, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13137, - "mutability": "mutable", - "name": "token", - "nameLocation": "3733:5:40", - "nodeType": "VariableDeclaration", - "scope": 13140, - "src": "3725:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13136, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3725:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3724:15:40" - }, - "returnParameters": { - "id": 13139, - "nodeType": "ParameterList", - "parameters": [], - "src": "3753:0:40" - }, - "scope": 13277, - "src": "3692:62:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13141, - "nodeType": "StructuredDocumentation", - "src": "3760:65:40", - "text": "@dev Returns true if token is in allowed list otherwise false" - }, - "functionSelector": "f9eaee0d", - "id": 13148, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isTokenAllowed", - "nameLocation": "3839:14:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13144, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13143, - "mutability": "mutable", - "name": "token", - "nameLocation": "3862:5:40", - "nodeType": "VariableDeclaration", - "scope": 13148, - "src": "3854:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13142, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3854:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3853:15:40" - }, - "returnParameters": { - "id": 13147, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13146, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13148, - "src": "3892:4:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13145, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3892:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3891:6:40" - }, - "scope": 13277, - "src": "3830:68:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13149, - "nodeType": "StructuredDocumentation", - "src": "3904:51:40", - "text": "@dev Returns quantity of tokens in allowed list" - }, - "functionSelector": "20a05ff7", - "id": 13154, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowedTokensCount", - "nameLocation": "3969:18:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13150, - "nodeType": "ParameterList", - "parameters": [], - "src": "3987:2:40" - }, - "returnParameters": { - "id": 13153, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13152, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13154, - "src": "4013:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13151, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4013:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4012:9:40" - }, - "scope": 13277, - "src": "3960:62:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13155, - "nodeType": "StructuredDocumentation", - "src": "4028:61:40", - "text": "@dev Returns of token address from allowed list by its id" - }, - "functionSelector": "5e5f2e26", - "id": 13162, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowedTokens", - "nameLocation": "4103:13:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13157, - "mutability": "mutable", - "name": "id", - "nameLocation": "4125:2:40", - "nodeType": "VariableDeclaration", - "scope": 13162, - "src": "4117:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13156, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4117:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4116:12:40" - }, - "returnParameters": { - "id": 13161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13160, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13162, - "src": "4152:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4152:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4151:9:40" - }, - "scope": 13277, - "src": "4094:67:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13163, - "nodeType": "StructuredDocumentation", - "src": "4167:192:40", - "text": "@dev Calculates total value for provided address\n More: https://dev.gearbox.fi/developers/credit/economy#total-value\n @param creditAccount Token creditAccount address" - }, - "functionSelector": "c7de38a6", - "id": 13170, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcTotalValue", - "nameLocation": "4373:14:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13166, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13165, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "4396:13:40", - "nodeType": "VariableDeclaration", - "scope": 13170, - "src": "4388:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13164, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4388:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4387:23:40" - }, - "returnParameters": { - "id": 13169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13168, - "mutability": "mutable", - "name": "total", - "nameLocation": "4466:5:40", - "nodeType": "VariableDeclaration", - "scope": 13170, - "src": "4458:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13167, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4458:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4457:15:40" - }, - "scope": 13277, - "src": "4364:109:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13171, - "nodeType": "StructuredDocumentation", - "src": "4479:197:40", - "text": "@dev Calculates Threshold Weighted Total Value\n More: https://dev.gearbox.fi/developers/credit/economy#threshold-weighted-value\n@param creditAccount Credit account address" - }, - "functionSelector": "90b1300a", - "id": 13178, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcThresholdWeightedValue", - "nameLocation": "4690:26:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13174, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13173, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "4725:13:40", - "nodeType": "VariableDeclaration", - "scope": 13178, - "src": "4717:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4717:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4716:23:40" - }, - "returnParameters": { - "id": 13177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13176, - "mutability": "mutable", - "name": "total", - "nameLocation": "4795:5:40", - "nodeType": "VariableDeclaration", - "scope": 13178, - "src": "4787:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13175, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4787:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4786:15:40" - }, - "scope": 13277, - "src": "4681:121:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "fdd57645", - "id": 13185, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "contractToAdapter", - "nameLocation": "4817:17:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13181, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13180, - "mutability": "mutable", - "name": "allowedContract", - "nameLocation": "4843:15:40", - "nodeType": "VariableDeclaration", - "scope": 13185, - "src": "4835:23:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13179, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4835:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4834:25:40" - }, - "returnParameters": { - "id": 13184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13183, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13185, - "src": "4907:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4907:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4906:9:40" - }, - "scope": 13277, - "src": "4808:108:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13186, - "nodeType": "StructuredDocumentation", - "src": "4922:44:40", - "text": "@dev Returns address of underlying token" - }, - "functionSelector": "2495a599", - "id": 13191, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlyingToken", - "nameLocation": "4980:15:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13187, - "nodeType": "ParameterList", - "parameters": [], - "src": "4995:2:40" - }, - "returnParameters": { - "id": 13190, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13189, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13191, - "src": "5021:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13188, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5021:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5020:9:40" - }, - "scope": 13277, - "src": "4971:59:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13192, - "nodeType": "StructuredDocumentation", - "src": "5036:257:40", - "text": "@dev Returns address & balance of token by the id of allowed token in the list\n @param creditAccount Credit account address\n @param id Id of token in allowed list\n @return token Address of token\n @return balance Token balance" - }, - "functionSelector": "af0a6502", - "id": 13207, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountTokenById", - "nameLocation": "5307:25:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13197, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13194, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "5341:13:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5333:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13193, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5333:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13196, - "mutability": "mutable", - "name": "id", - "nameLocation": "5364:2:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5356:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13195, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5356:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5332:35:40" - }, - "returnParameters": { - "id": 13206, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13199, - "mutability": "mutable", - "name": "token", - "nameLocation": "5436:5:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5428:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13198, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5428:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13201, - "mutability": "mutable", - "name": "balance", - "nameLocation": "5463:7:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5455:15:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13200, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5455:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13203, - "mutability": "mutable", - "name": "tv", - "nameLocation": "5492:2:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5484:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13202, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5484:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13205, - "mutability": "mutable", - "name": "twv", - "nameLocation": "5516:3:40", - "nodeType": "VariableDeclaration", - "scope": 13207, - "src": "5508:11:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13204, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5508:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5414:115:40" - }, - "scope": 13277, - "src": "5298:232:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13208, - "nodeType": "StructuredDocumentation", - "src": "5536:487:40", - "text": " @dev Calculates health factor for the credit account\n sum(asset[i] * liquidation threshold[i])\n Hf = --------------------------------------------\n borrowed amount + interest accrued\n More info: https://dev.gearbox.fi/developers/credit/economy#health-factor\n @param creditAccount Credit account address\n @return Health factor in percents (see PERCENTAGE FACTOR in PercentageMath.sol)" - }, - "functionSelector": "dfd59465", - "id": 13215, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountHealthFactor", - "nameLocation": "6037:29:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13211, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13210, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "6075:13:40", - "nodeType": "VariableDeclaration", - "scope": 13215, - "src": "6067:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13209, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6067:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6066:23:40" - }, - "returnParameters": { - "id": 13214, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13213, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13215, - "src": "6137:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13212, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6137:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6136:9:40" - }, - "scope": 13277, - "src": "6028:118:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13216, - "nodeType": "StructuredDocumentation", - "src": "6152:196:40", - "text": "@dev Calculates credit account interest accrued\n More: https://dev.gearbox.fi/developers/credit/economy#interest-rate-accrued\n @param creditAccount Credit account address" - }, - "functionSelector": "3192195c", - "id": 13223, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcCreditAccountAccruedInterest", - "nameLocation": "6362:32:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13219, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13218, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "6403:13:40", - "nodeType": "VariableDeclaration", - "scope": 13223, - "src": "6395:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13217, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6395:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6394:23:40" - }, - "returnParameters": { - "id": 13222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13221, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13223, - "src": "6465:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13220, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6465:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6464:9:40" - }, - "scope": 13277, - "src": "6353:121:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13224, - "nodeType": "StructuredDocumentation", - "src": "6480:86:40", - "text": "@dev Return enabled tokens - token masks where each bit is \"1\" is token is enabled" - }, - "functionSelector": "b451cecc", - "id": 13231, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "enabledTokens", - "nameLocation": "6580:13:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13227, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13226, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "6602:13:40", - "nodeType": "VariableDeclaration", - "scope": 13231, - "src": "6594:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13225, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6594:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6593:23:40" - }, - "returnParameters": { - "id": 13230, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13229, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13231, - "src": "6664:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13228, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6664:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6663:9:40" - }, - "scope": 13277, - "src": "6571:102:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "78327438", - "id": 13238, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidationThresholds", - "nameLocation": "6688:21:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13234, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13233, - "mutability": "mutable", - "name": "token", - "nameLocation": "6718:5:40", - "nodeType": "VariableDeclaration", - "scope": 13238, - "src": "6710:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13232, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6710:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6709:15:40" - }, - "returnParameters": { - "id": 13237, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13236, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13238, - "src": "6772:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13235, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6772:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6771:9:40" - }, - "scope": 13277, - "src": "6679:102:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2630c12f", - "id": 13243, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "priceOracle", - "nameLocation": "6796:11:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13239, - "nodeType": "ParameterList", - "parameters": [], - "src": "6807:2:40" - }, - "returnParameters": { - "id": 13242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13241, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13243, - "src": "6833:7:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6833:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6832:9:40" - }, - "scope": 13277, - "src": "6787:55:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "40631828", - "id": 13246, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "updateUnderlyingTokenLiquidationThreshold", - "nameLocation": "6857:41:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13244, - "nodeType": "ParameterList", - "parameters": [], - "src": "6898:2:40" - }, - "returnParameters": { - "id": 13245, - "nodeType": "ParameterList", - "parameters": [], - "src": "6909:0:40" - }, - "scope": 13277, - "src": "6848:62:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a5757517", - "id": 13253, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revertIfCantIncreaseBorrowing", - "nameLocation": "6925:29:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13251, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13248, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "6972:13:40", - "nodeType": "VariableDeclaration", - "scope": 13253, - "src": "6964:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13247, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6964:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13250, - "mutability": "mutable", - "name": "minHealthFactor", - "nameLocation": "7003:15:40", - "nodeType": "VariableDeclaration", - "scope": 13253, - "src": "6995:23:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13249, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6995:7:40", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6954:70:40" - }, - "returnParameters": { - "id": 13252, - "nodeType": "ParameterList", - "parameters": [], - "src": "7038:0:40" - }, - "scope": 13277, - "src": "6916:123:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "3b00ae70", - "id": 13260, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "revertIfAccountTransferIsNotAllowed", - "nameLocation": "7054:35:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13258, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13255, - "mutability": "mutable", - "name": "onwer", - "nameLocation": "7107:5:40", - "nodeType": "VariableDeclaration", - "scope": 13260, - "src": "7099:13:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13254, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7099:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13257, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "7130:13:40", - "nodeType": "VariableDeclaration", - "scope": 13260, - "src": "7122:21:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13256, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7122:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7089:60:40" - }, - "returnParameters": { - "id": 13259, - "nodeType": "ParameterList", - "parameters": [], - "src": "7163:0:40" - }, - "scope": 13277, - "src": "7045:119:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "00842b57", - "id": 13267, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveAccountTransfer", - "nameLocation": "7179:22:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13265, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13262, - "mutability": "mutable", - "name": "from", - "nameLocation": "7210:4:40", - "nodeType": "VariableDeclaration", - "scope": 13267, - "src": "7202:12:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13261, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7202:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13264, - "mutability": "mutable", - "name": "state", - "nameLocation": "7221:5:40", - "nodeType": "VariableDeclaration", - "scope": 13267, - "src": "7216:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13263, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7216:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7201:26:40" - }, - "returnParameters": { - "id": 13266, - "nodeType": "ParameterList", - "parameters": [], - "src": "7236:0:40" - }, - "scope": 13277, - "src": "7170:67:40", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5a29be45", - "id": 13276, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowanceForAccountTransfers", - "nameLocation": "7252:28:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13272, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13269, - "mutability": "mutable", - "name": "from", - "nameLocation": "7289:4:40", - "nodeType": "VariableDeclaration", - "scope": 13276, - "src": "7281:12:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13268, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7281:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13271, - "mutability": "mutable", - "name": "to", - "nameLocation": "7303:2:40", - "nodeType": "VariableDeclaration", - "scope": 13276, - "src": "7295:10:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13270, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7295:7:40", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7280:26:40" - }, - "returnParameters": { - "id": 13275, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13274, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13276, - "src": "7354:4:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13273, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7354:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "7353:6:40" - }, - "scope": 13277, - "src": "7243:117:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 13278, - "src": "149:7213:40", - "usedErrors": [] - } - ], - "src": "123:7240:40" - }, - "id": 40 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol", - "exportedSymbols": { - "Exchange": [13287], - "ICreditFilter": [13277], - "ICreditManager": [13579] - }, - "id": 13580, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13279, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:41" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol", - "file": "./ICreditFilter.sol", - "id": 13281, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 13580, - "sourceUnit": 13278, - "src": "149:52:41", - "symbolAliases": [ - { - "foreign": { - "id": 13280, - "name": "ICreditFilter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13277, - "src": "158:13:41", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "Exchange", - "id": 13287, - "members": [ - { - "constant": false, - "id": 13284, - "mutability": "mutable", - "name": "path", - "nameLocation": "235:4:41", - "nodeType": "VariableDeclaration", - "scope": 13287, - "src": "225:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 13282, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "225:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 13283, - "nodeType": "ArrayTypeName", - "src": "225:9:41", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13286, - "mutability": "mutable", - "name": "amountOutMin", - "nameLocation": "253:12:41", - "nodeType": "VariableDeclaration", - "scope": 13287, - "src": "245:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "245:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Exchange", - "nameLocation": "210:8:41", - "nodeType": "StructDefinition", - "scope": 13580, - "src": "203:65:41", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ICreditManager", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 13288, - "nodeType": "StructuredDocumentation", - "src": "270:183:41", - "text": "@title Credit Manager interface\n @notice It encapsulates business logic for managing credit accounts\n More info: https://dev.gearbox.fi/developers/credit/credit_manager" - }, - "fullyImplemented": false, - "id": 13579, - "linearizedBaseContracts": [13579], - "name": "ICreditManager", - "nameLocation": "463:14:41", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "eventSelector": "7b20ae77867a263a1074203a2da261ef0d096c99395c59c9d4a0104b9f334a27", - "id": 13302, - "name": "OpenCreditAccount", - "nameLocation": "547:17:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13290, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "590:6:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "574:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13289, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "574:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13292, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "622:10:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "606:26:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13291, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "606:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13294, - "indexed": true, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "658:13:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "642:29:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13293, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "642:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13296, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "689:6:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "681:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13295, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "681:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13298, - "indexed": false, - "mutability": "mutable", - "name": "borrowAmount", - "nameLocation": "713:12:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "705:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13297, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "705:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13300, - "indexed": false, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "743:12:41", - "nodeType": "VariableDeclaration", - "scope": 13302, - "src": "735:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13299, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "735:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "564:197:41" - }, - "src": "541:221:41" - }, - { - "anonymous": false, - "eventSelector": "ca05b632388199c23de1352b2e96fd72a0ec71611683330b38060c004bbf0a76", - "id": 13310, - "name": "CloseCreditAccount", - "nameLocation": "831:18:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13309, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13304, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "875:5:41", - "nodeType": "VariableDeclaration", - "scope": 13310, - "src": "859:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13303, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "859:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13306, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "906:2:41", - "nodeType": "VariableDeclaration", - "scope": 13310, - "src": "890:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13305, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "890:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13308, - "indexed": false, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "926:14:41", - "nodeType": "VariableDeclaration", - "scope": 13310, - "src": "918:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13307, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "918:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "849:97:41" - }, - "src": "825:122:41" - }, - { - "anonymous": false, - "eventSelector": "5e5da6c348e62989f9cfe029252433fc99009b7d28fa3c20d675520a10ff5896", - "id": 13318, - "name": "LiquidateCreditAccount", - "nameLocation": "1020:22:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13317, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13312, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1068:5:41", - "nodeType": "VariableDeclaration", - "scope": 13318, - "src": "1052:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13311, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1052:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13314, - "indexed": true, - "mutability": "mutable", - "name": "liquidator", - "nameLocation": "1099:10:41", - "nodeType": "VariableDeclaration", - "scope": 13318, - "src": "1083:26:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13313, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1083:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13316, - "indexed": false, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "1127:14:41", - "nodeType": "VariableDeclaration", - "scope": 13318, - "src": "1119:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13315, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1119:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1042:105:41" - }, - "src": "1014:134:41" - }, - { - "anonymous": false, - "eventSelector": "9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c45", - "id": 13324, - "name": "IncreaseBorrowedAmount", - "nameLocation": "1223:22:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13323, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13320, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "1262:8:41", - "nodeType": "VariableDeclaration", - "scope": 13324, - "src": "1246:24:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13319, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1246:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13322, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1280:6:41", - "nodeType": "VariableDeclaration", - "scope": 13324, - "src": "1272:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13321, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1272:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1245:42:41" - }, - "src": "1217:71:41" - }, - { - "anonymous": false, - "eventSelector": "a32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f", - "id": 13332, - "name": "AddCollateral", - "nameLocation": "1353:13:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13331, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13326, - "indexed": true, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "1392:10:41", - "nodeType": "VariableDeclaration", - "scope": 13332, - "src": "1376:26:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13325, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1376:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13328, - "indexed": true, - "mutability": "mutable", - "name": "token", - "nameLocation": "1428:5:41", - "nodeType": "VariableDeclaration", - "scope": 13332, - "src": "1412:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13327, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1412:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13330, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "1451:5:41", - "nodeType": "VariableDeclaration", - "scope": 13332, - "src": "1443:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13329, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1443:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1366:96:41" - }, - "src": "1347:116:41" - }, - { - "anonymous": false, - "eventSelector": "e7c7987373a0cc4913d307f23ab8ef02e0333a2af445065e2ef7636cffc6daa7", - "id": 13338, - "name": "RepayCreditAccount", - "nameLocation": "1532:18:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13337, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13334, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1567:5:41", - "nodeType": "VariableDeclaration", - "scope": 13338, - "src": "1551:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13333, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1551:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13336, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "1590:2:41", - "nodeType": "VariableDeclaration", - "scope": 13338, - "src": "1574:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13335, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1574:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1550:43:41" - }, - "src": "1526:68:41" - }, - { - "anonymous": false, - "eventSelector": "aed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab03", - "id": 13344, - "name": "ExecuteOrder", - "nameLocation": "1661:12:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13343, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13340, - "indexed": true, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "1690:8:41", - "nodeType": "VariableDeclaration", - "scope": 13344, - "src": "1674:24:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13339, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1674:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13342, - "indexed": true, - "mutability": "mutable", - "name": "target", - "nameLocation": "1716:6:41", - "nodeType": "VariableDeclaration", - "scope": 13344, - "src": "1700:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13341, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1700:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1673:50:41" - }, - "src": "1655:69:41" - }, - { - "anonymous": false, - "eventSelector": "a32137411fc7c20db359079cd84af0e2cad58cd7a182a8a5e23e08e554e88bf0", - "id": 13358, - "name": "NewParameters", - "nameLocation": "1781:13:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13357, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13346, - "indexed": false, - "mutability": "mutable", - "name": "minAmount", - "nameLocation": "1812:9:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1804:17:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1804:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13348, - "indexed": false, - "mutability": "mutable", - "name": "maxAmount", - "nameLocation": "1839:9:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1831:17:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13347, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1831:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13350, - "indexed": false, - "mutability": "mutable", - "name": "maxLeverage", - "nameLocation": "1866:11:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1858:19:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13349, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1858:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13352, - "indexed": false, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "1895:11:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1887:19:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13351, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1887:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13354, - "indexed": false, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "1924:14:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1916:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13353, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1916:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13356, - "indexed": false, - "mutability": "mutable", - "name": "liquidationDiscount", - "nameLocation": "1956:19:41", - "nodeType": "VariableDeclaration", - "scope": 13358, - "src": "1948:27:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13355, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1948:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1794:187:41" - }, - "src": "1775:207:41" - }, - { - "anonymous": false, - "eventSelector": "93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d", - "id": 13364, - "name": "TransferAccount", - "nameLocation": "1994:15:41", - "nodeType": "EventDefinition", - "parameters": { - "id": 13363, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13360, - "indexed": true, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "2026:8:41", - "nodeType": "VariableDeclaration", - "scope": 13364, - "src": "2010:24:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13359, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2010:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13362, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "2052:8:41", - "nodeType": "VariableDeclaration", - "scope": 13364, - "src": "2036:24:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13361, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2036:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2009:52:41" - }, - "src": "1988:74:41" - }, - { - "documentation": { - "id": 13365, - "nodeType": "StructuredDocumentation", - "src": "2116:1078:41", - "text": " @dev Opens credit account and provides credit funds.\n - Opens credit account (take it from account factory)\n - Transfers trader /farmers initial funds to credit account\n - Transfers borrowed leveraged amount from pool (= amount x leverageFactor) calling lendCreditAccount() on connected Pool contract.\n - Emits OpenCreditAccount event\n Function reverts if user has already opened position\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#open-credit-account\n @param amount Borrowers own funds\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n is a different wallet\n @param leverageFactor Multiplier to borrowers own funds\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n 0 if the action is executed directly by the user, without any middle-man" - }, - "functionSelector": "5288ba4b", - "id": 13376, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "openCreditAccount", - "nameLocation": "3208:17:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13367, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3243:6:41", - "nodeType": "VariableDeclaration", - "scope": 13376, - "src": "3235:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13366, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3235:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13369, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "3267:10:41", - "nodeType": "VariableDeclaration", - "scope": 13376, - "src": "3259:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13368, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3259:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13371, - "mutability": "mutable", - "name": "leverageFactor", - "nameLocation": "3295:14:41", - "nodeType": "VariableDeclaration", - "scope": 13376, - "src": "3287:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13370, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3287:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13373, - "mutability": "mutable", - "name": "referralCode", - "nameLocation": "3327:12:41", - "nodeType": "VariableDeclaration", - "scope": 13376, - "src": "3319:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13372, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3319:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3225:120:41" - }, - "returnParameters": { - "id": 13375, - "nodeType": "ParameterList", - "parameters": [], - "src": "3354:0:41" - }, - "scope": 13579, - "src": "3199:156:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13377, - "nodeType": "StructuredDocumentation", - "src": "3361:619:41", - "text": " @dev Closes credit account\n - Swaps all assets to underlying one using default swap protocol\n - Pays borrowed amount + interest accrued + fees back to the pool by calling repayCreditAccount\n - Transfers remaining funds to the trader / farmer\n - Closes the credit account and return it to account factory\n - Emits CloseCreditAccount event\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#close-credit-account\n @param to Address to send remaining funds\n @param paths Exchange type data which provides paths + amountMinOut" - }, - "functionSelector": "ab114805", - "id": 13386, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "closeCreditAccount", - "nameLocation": "3994:18:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13384, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13379, - "mutability": "mutable", - "name": "to", - "nameLocation": "4021:2:41", - "nodeType": "VariableDeclaration", - "scope": 13386, - "src": "4013:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13378, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4013:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13383, - "mutability": "mutable", - "name": "paths", - "nameLocation": "4045:5:41", - "nodeType": "VariableDeclaration", - "scope": 13386, - "src": "4025:25:41", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Exchange_$13287_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct Exchange[]" - }, - "typeName": { - "baseType": { - "id": 13381, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13380, - "name": "Exchange", - "nameLocations": ["4025:8:41"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13287, - "src": "4025:8:41" - }, - "referencedDeclaration": 13287, - "src": "4025:8:41", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Exchange_$13287_storage_ptr", - "typeString": "struct Exchange" - } - }, - "id": 13382, - "nodeType": "ArrayTypeName", - "src": "4025:10:41", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Exchange_$13287_storage_$dyn_storage_ptr", - "typeString": "struct Exchange[]" - } - }, - "visibility": "internal" - } - ], - "src": "4012:39:41" - }, - "returnParameters": { - "id": 13385, - "nodeType": "ParameterList", - "parameters": [], - "src": "4060:0:41" - }, - "scope": 13579, - "src": "3985:76:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13387, - "nodeType": "StructuredDocumentation", - "src": "4067:732:41", - "text": " @dev Liquidates credit account\n - Transfers discounted total credit account value from liquidators account\n - Pays borrowed funds + interest + fees back to pool, than transfers remaining funds to credit account owner\n - Transfer all assets from credit account to liquidator (\"to\") account\n - Returns credit account to factory\n - Emits LiquidateCreditAccount event\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#liquidate-credit-account\n @param borrower Borrower address\n @param to Address to transfer all assets from credit account\n @param force If true, use transfer function for transferring tokens instead of safeTransfer" - }, - "functionSelector": "a69a7dd6", - "id": 13396, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidateCreditAccount", - "nameLocation": "4813:22:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13394, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13389, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "4853:8:41", - "nodeType": "VariableDeclaration", - "scope": 13396, - "src": "4845:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13388, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4845:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13391, - "mutability": "mutable", - "name": "to", - "nameLocation": "4879:2:41", - "nodeType": "VariableDeclaration", - "scope": 13396, - "src": "4871:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13390, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4871:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13393, - "mutability": "mutable", - "name": "force", - "nameLocation": "4896:5:41", - "nodeType": "VariableDeclaration", - "scope": 13396, - "src": "4891:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13392, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4891:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4835:72:41" - }, - "returnParameters": { - "id": 13395, - "nodeType": "ParameterList", - "parameters": [], - "src": "4916:0:41" - }, - "scope": 13579, - "src": "4804:113:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13397, - "nodeType": "StructuredDocumentation", - "src": "4923:190:41", - "text": "@dev Repays credit account\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#repay-credit-account\n @param to Address to send credit account assets" - }, - "functionSelector": "d692ba33", - "id": 13402, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "repayCreditAccount", - "nameLocation": "5127:18:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13400, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13399, - "mutability": "mutable", - "name": "to", - "nameLocation": "5154:2:41", - "nodeType": "VariableDeclaration", - "scope": 13402, - "src": "5146:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13398, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5146:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5145:12:41" - }, - "returnParameters": { - "id": 13401, - "nodeType": "ParameterList", - "parameters": [], - "src": "5166:0:41" - }, - "scope": 13579, - "src": "5118:49:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13403, - "nodeType": "StructuredDocumentation", - "src": "5173:193:41", - "text": "@dev Repays credit account with ETH. Restricted to be called by WETH Gateway only\n @param borrower Address of borrower\n @param to Address to send credit account assets" - }, - "functionSelector": "a6eab5c2", - "id": 13412, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "repayCreditAccountETH", - "nameLocation": "5380:21:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13408, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13405, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "5410:8:41", - "nodeType": "VariableDeclaration", - "scope": 13412, - "src": "5402:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13404, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5402:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13407, - "mutability": "mutable", - "name": "to", - "nameLocation": "5428:2:41", - "nodeType": "VariableDeclaration", - "scope": 13412, - "src": "5420:10:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13406, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5420:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5401:30:41" - }, - "returnParameters": { - "id": 13411, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13410, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13412, - "src": "5466:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13409, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5466:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5465:9:41" - }, - "scope": 13579, - "src": "5371:104:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13413, - "nodeType": "StructuredDocumentation", - "src": "5481:293:41", - "text": "@dev Increases borrowed amount by transferring additional funds from\n the pool if after that HealthFactor > minHealth\n More info: https://dev.gearbox.fi/developers/credit/credit_manager#increase-borrowed-amount\n @param amount Amount to increase borrowed amount" - }, - "functionSelector": "9efc60d0", - "id": 13418, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "increaseBorrowedAmount", - "nameLocation": "5788:22:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13416, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13415, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5819:6:41", - "nodeType": "VariableDeclaration", - "scope": 13418, - "src": "5811:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13414, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5811:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5810:16:41" - }, - "returnParameters": { - "id": 13417, - "nodeType": "ParameterList", - "parameters": [], - "src": "5835:0:41" - }, - "scope": 13579, - "src": "5779:57:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13419, - "nodeType": "StructuredDocumentation", - "src": "5842:183:41", - "text": "@dev Adds collateral to borrower's credit account\n @param onBehalfOf Address of borrower to add funds\n @param token Token address\n @param amount Amount to add" - }, - "functionSelector": "59781034", - "id": 13428, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "addCollateral", - "nameLocation": "6039:13:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13421, - "mutability": "mutable", - "name": "onBehalfOf", - "nameLocation": "6070:10:41", - "nodeType": "VariableDeclaration", - "scope": 13428, - "src": "6062:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13420, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6062:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13423, - "mutability": "mutable", - "name": "token", - "nameLocation": "6098:5:41", - "nodeType": "VariableDeclaration", - "scope": 13428, - "src": "6090:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13422, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6090:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13425, - "mutability": "mutable", - "name": "amount", - "nameLocation": "6121:6:41", - "nodeType": "VariableDeclaration", - "scope": 13428, - "src": "6113:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13424, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6113:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6052:81:41" - }, - "returnParameters": { - "id": 13427, - "nodeType": "ParameterList", - "parameters": [], - "src": "6142:0:41" - }, - "scope": 13579, - "src": "6030:113:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13429, - "nodeType": "StructuredDocumentation", - "src": "6149:106:41", - "text": "@dev Returns true if the borrower has opened a credit account\n @param borrower Borrower account" - }, - "functionSelector": "256ac915", - "id": 13436, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "hasOpenedCreditAccount", - "nameLocation": "6269:22:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13432, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13431, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "6300:8:41", - "nodeType": "VariableDeclaration", - "scope": 13436, - "src": "6292:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13430, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6292:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6291:18:41" - }, - "returnParameters": { - "id": 13435, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13434, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13436, - "src": "6357:4:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13433, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6357:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6356:6:41" - }, - "scope": 13579, - "src": "6260:103:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13437, - "nodeType": "StructuredDocumentation", - "src": "6369:356:41", - "text": "@dev Calculates Repay amount = borrow amount + interest accrued + fee\n More info: https://dev.gearbox.fi/developers/credit/economy#repay\n https://dev.gearbox.fi/developers/credit/economy#liquidate\n @param borrower Borrower address\n @param isLiquidated True if calculated repay amount for liquidator" - }, - "functionSelector": "3ce07355", - "id": 13446, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "calcRepayAmount", - "nameLocation": "6739:15:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13442, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13439, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "6763:8:41", - "nodeType": "VariableDeclaration", - "scope": 13446, - "src": "6755:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13438, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6755:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13441, - "mutability": "mutable", - "name": "isLiquidated", - "nameLocation": "6778:12:41", - "nodeType": "VariableDeclaration", - "scope": 13446, - "src": "6773:17:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13440, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6773:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6754:37:41" - }, - "returnParameters": { - "id": 13445, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13444, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13446, - "src": "6839:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13443, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6839:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6838:9:41" - }, - "scope": 13579, - "src": "6730:118:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13447, - "nodeType": "StructuredDocumentation", - "src": "6854:55:41", - "text": "@dev Returns minimal amount for open credit account" - }, - "functionSelector": "9b2cb5d8", - "id": 13452, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "minAmount", - "nameLocation": "6923:9:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13448, - "nodeType": "ParameterList", - "parameters": [], - "src": "6932:2:41" - }, - "returnParameters": { - "id": 13451, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13450, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13452, - "src": "6958:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13449, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6958:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6957:9:41" - }, - "scope": 13579, - "src": "6914:53:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13453, - "nodeType": "StructuredDocumentation", - "src": "6973:55:41", - "text": "@dev Returns maximum amount for open credit account" - }, - "functionSelector": "5f48f393", - "id": 13458, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxAmount", - "nameLocation": "7042:9:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13454, - "nodeType": "ParameterList", - "parameters": [], - "src": "7051:2:41" - }, - "returnParameters": { - "id": 13457, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13456, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13458, - "src": "7077:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13455, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7077:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7076:9:41" - }, - "scope": 13579, - "src": "7033:53:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13459, - "nodeType": "StructuredDocumentation", - "src": "7092:63:41", - "text": "@dev Returns maximum leveraged factor allowed for this pool" - }, - "functionSelector": "b2c53a6c", - "id": 13464, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxLeverageFactor", - "nameLocation": "7169:17:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13460, - "nodeType": "ParameterList", - "parameters": [], - "src": "7186:2:41" - }, - "returnParameters": { - "id": 13463, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13462, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13464, - "src": "7212:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13461, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7212:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7211:9:41" - }, - "scope": 13579, - "src": "7160:61:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13465, - "nodeType": "StructuredDocumentation", - "src": "7227:41:41", - "text": "@dev Returns underlying token address" - }, - "functionSelector": "2495a599", - "id": 13470, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "underlyingToken", - "nameLocation": "7282:15:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13466, - "nodeType": "ParameterList", - "parameters": [], - "src": "7297:2:41" - }, - "returnParameters": { - "id": 13469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13468, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13470, - "src": "7323:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13467, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7323:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7322:9:41" - }, - "scope": 13579, - "src": "7273:59:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13471, - "nodeType": "StructuredDocumentation", - "src": "7338:42:41", - "text": "@dev Returns address of connected pool" - }, - "functionSelector": "570a7af2", - "id": 13476, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "poolService", - "nameLocation": "7394:11:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13472, - "nodeType": "ParameterList", - "parameters": [], - "src": "7405:2:41" - }, - "returnParameters": { - "id": 13475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13474, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13476, - "src": "7431:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13473, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7431:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7430:9:41" - }, - "scope": 13579, - "src": "7385:55:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13477, - "nodeType": "StructuredDocumentation", - "src": "7446:40:41", - "text": "@dev Returns address of CreditFilter" - }, - "functionSelector": "f93f515b", - "id": 13483, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditFilter", - "nameLocation": "7500:12:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13478, - "nodeType": "ParameterList", - "parameters": [], - "src": "7512:2:41" - }, - "returnParameters": { - "id": 13482, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13481, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13483, - "src": "7538:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - }, - "typeName": { - "id": 13480, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13479, - "name": "ICreditFilter", - "nameLocations": ["7538:13:41"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13277, - "src": "7538:13:41" - }, - "referencedDeclaration": 13277, - "src": "7538:13:41", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ICreditFilter_$13277", - "typeString": "contract ICreditFilter" - } - }, - "visibility": "internal" - } - ], - "src": "7537:15:41" - }, - "scope": 13579, - "src": "7491:62:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13484, - "nodeType": "StructuredDocumentation", - "src": "7559:40:41", - "text": "@dev Returns address of CreditFilter" - }, - "functionSelector": "055ee9b5", - "id": 13491, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "creditAccounts", - "nameLocation": "7613:14:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13487, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13486, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "7636:8:41", - "nodeType": "VariableDeclaration", - "scope": 13491, - "src": "7628:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13485, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7628:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7627:18:41" - }, - "returnParameters": { - "id": 13490, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13489, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13491, - "src": "7669:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13488, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7669:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7668:9:41" - }, - "scope": 13579, - "src": "7604:74:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13492, - "nodeType": "StructuredDocumentation", - "src": "7684:219:41", - "text": "@dev Executes filtered order on credit account which is connected with particular borrowers\n @param borrower Borrower address\n @param target Target smart-contract\n @param data Call data for call" - }, - "functionSelector": "6ce4074a", - "id": 13503, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "executeOrder", - "nameLocation": "7917:12:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13499, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13494, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "7947:8:41", - "nodeType": "VariableDeclaration", - "scope": 13503, - "src": "7939:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13493, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7939:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13496, - "mutability": "mutable", - "name": "target", - "nameLocation": "7973:6:41", - "nodeType": "VariableDeclaration", - "scope": 13503, - "src": "7965:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13495, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7965:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13498, - "mutability": "mutable", - "name": "data", - "nameLocation": "8002:4:41", - "nodeType": "VariableDeclaration", - "scope": 13503, - "src": "7989:17:41", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 13497, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7989:5:41", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "7929:83:41" - }, - "returnParameters": { - "id": 13502, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13501, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13503, - "src": "8031:12:41", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 13500, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8031:5:41", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8030:14:41" - }, - "scope": 13579, - "src": "7908:137:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13504, - "nodeType": "StructuredDocumentation", - "src": "8051:55:41", - "text": "@dev Approves token for msg.sender's credit account" - }, - "functionSelector": "7e5465ba", - "id": 13511, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "8120:7:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13509, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13506, - "mutability": "mutable", - "name": "targetContract", - "nameLocation": "8136:14:41", - "nodeType": "VariableDeclaration", - "scope": 13511, - "src": "8128:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13505, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8128:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13508, - "mutability": "mutable", - "name": "token", - "nameLocation": "8160:5:41", - "nodeType": "VariableDeclaration", - "scope": 13511, - "src": "8152:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13507, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8152:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8127:39:41" - }, - "returnParameters": { - "id": 13510, - "nodeType": "ParameterList", - "parameters": [], - "src": "8175:0:41" - }, - "scope": 13579, - "src": "8111:65:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13512, - "nodeType": "StructuredDocumentation", - "src": "8182:73:41", - "text": "@dev Approve tokens for credit accounts. Restricted for adapters only" - }, - "functionSelector": "579122ab", - "id": 13521, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "provideCreditAccountAllowance", - "nameLocation": "8269:29:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13514, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "8316:13:41", - "nodeType": "VariableDeclaration", - "scope": 13521, - "src": "8308:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13513, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8308:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13516, - "mutability": "mutable", - "name": "toContract", - "nameLocation": "8347:10:41", - "nodeType": "VariableDeclaration", - "scope": 13521, - "src": "8339:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13515, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8339:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13518, - "mutability": "mutable", - "name": "token", - "nameLocation": "8375:5:41", - "nodeType": "VariableDeclaration", - "scope": 13521, - "src": "8367:13:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13517, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8367:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8298:88:41" - }, - "returnParameters": { - "id": 13520, - "nodeType": "ParameterList", - "parameters": [], - "src": "8395:0:41" - }, - "scope": 13579, - "src": "8260:136:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5019e20a", - "id": 13526, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferAccountOwnership", - "nameLocation": "8411:24:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13524, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13523, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "8444:8:41", - "nodeType": "VariableDeclaration", - "scope": 13526, - "src": "8436:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13522, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8436:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8435:18:41" - }, - "returnParameters": { - "id": 13525, - "nodeType": "ParameterList", - "parameters": [], - "src": "8462:0:41" - }, - "scope": 13579, - "src": "8402:61:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13527, - "nodeType": "StructuredDocumentation", - "src": "8469:130:41", - "text": "@dev Returns address of borrower's credit account and reverts of borrower has no one.\n @param borrower Borrower address" - }, - "functionSelector": "e958b704", - "id": 13534, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getCreditAccountOrRevert", - "nameLocation": "8613:24:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13530, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13529, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "8646:8:41", - "nodeType": "VariableDeclaration", - "scope": 13534, - "src": "8638:16:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13528, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8638:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8637:18:41" - }, - "returnParameters": { - "id": 13533, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13532, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13534, - "src": "8703:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13531, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8703:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8702:9:41" - }, - "scope": 13579, - "src": "8604:108:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5e0b63d3", - "id": 13539, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "feeInterest", - "nameLocation": "8793:11:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13535, - "nodeType": "ParameterList", - "parameters": [], - "src": "8804:2:41" - }, - "returnParameters": { - "id": 13538, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13537, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13539, - "src": "8830:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13536, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8830:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8829:9:41" - }, - "scope": 13579, - "src": "8784:55:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "3915ffaa", - "id": 13544, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "feeLiquidation", - "nameLocation": "8854:14:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13540, - "nodeType": "ParameterList", - "parameters": [], - "src": "8868:2:41" - }, - "returnParameters": { - "id": 13543, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13542, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13544, - "src": "8894:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13541, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8894:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8893:9:41" - }, - "scope": 13579, - "src": "8845:58:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "8053fcbe", - "id": 13549, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "liquidationDiscount", - "nameLocation": "8918:19:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13545, - "nodeType": "ParameterList", - "parameters": [], - "src": "8937:2:41" - }, - "returnParameters": { - "id": 13548, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13547, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13549, - "src": "8963:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13546, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8963:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8962:9:41" - }, - "scope": 13579, - "src": "8909:63:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e1b4264c", - "id": 13554, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "minHealthFactor", - "nameLocation": "8987:15:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13550, - "nodeType": "ParameterList", - "parameters": [], - "src": "9002:2:41" - }, - "returnParameters": { - "id": 13553, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13552, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13554, - "src": "9028:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13551, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9028:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9027:9:41" - }, - "scope": 13579, - "src": "8978:59:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e0c011b7", - "id": 13559, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "defaultSwapContract", - "nameLocation": "9052:19:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13555, - "nodeType": "ParameterList", - "parameters": [], - "src": "9071:2:41" - }, - "returnParameters": { - "id": 13558, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13557, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13559, - "src": "9097:7:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13556, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9097:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9096:9:41" - }, - "scope": 13579, - "src": "9043:63:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "996329f8", - "id": 13578, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_calcClosePayments", - "nameLocation": "9121:18:41", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13566, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13561, - "mutability": "mutable", - "name": "creditAccount", - "nameLocation": "9157:13:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9149:21:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13560, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9149:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13563, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "9188:10:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9180:18:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13562, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9180:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13565, - "mutability": "mutable", - "name": "isLiquidated", - "nameLocation": "9213:12:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9208:17:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13564, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9208:4:41", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9139:92:41" - }, - "returnParameters": { - "id": 13577, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13568, - "mutability": "mutable", - "name": "_borrowedAmount", - "nameLocation": "9300:15:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9292:23:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13567, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9292:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13570, - "mutability": "mutable", - "name": "amountToPool", - "nameLocation": "9337:12:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9329:20:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13569, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9329:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13572, - "mutability": "mutable", - "name": "remainingFunds", - "nameLocation": "9371:14:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9363:22:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13571, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9363:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13574, - "mutability": "mutable", - "name": "profit", - "nameLocation": "9407:6:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9399:14:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13573, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9399:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13576, - "mutability": "mutable", - "name": "loss", - "nameLocation": "9435:4:41", - "nodeType": "VariableDeclaration", - "scope": 13578, - "src": "9427:12:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13575, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9427:7:41", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9278:171:41" - }, - "scope": 13579, - "src": "9112:338:41", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 13580, - "src": "453:8999:41", - "usedErrors": [] - } - ], - "src": "123:9330:41" - }, - "id": 41 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol", - "exportedSymbols": { - "IWETH": [13602] - }, - "id": 13603, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13581, - "literals": ["solidity", ">=", "0.7", ".4"], - "nodeType": "PragmaDirective", - "src": "33:24:42" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IWETH", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 13602, - "linearizedBaseContracts": [13602], - "name": "IWETH", - "nameLocation": "69:5:42", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 13582, - "nodeType": "StructuredDocumentation", - "src": "81:61:42", - "text": "@dev Deposits native ETH into the contract and mints WETH" - }, - "functionSelector": "d0e30db0", - "id": 13585, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nameLocation": "156:7:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13583, - "nodeType": "ParameterList", - "parameters": [], - "src": "163:2:42" - }, - "returnParameters": { - "id": 13584, - "nodeType": "ParameterList", - "parameters": [], - "src": "182:0:42" - }, - "scope": 13602, - "src": "147:36:42", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13586, - "nodeType": "StructuredDocumentation", - "src": "189:42:42", - "text": "@dev Transfers WETH to another account" - }, - "functionSelector": "a9059cbb", - "id": 13595, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "245:8:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13591, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13588, - "mutability": "mutable", - "name": "to", - "nameLocation": "262:2:42", - "nodeType": "VariableDeclaration", - "scope": 13595, - "src": "254:10:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13587, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "254:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13590, - "mutability": "mutable", - "name": "value", - "nameLocation": "274:5:42", - "nodeType": "VariableDeclaration", - "scope": 13595, - "src": "266:13:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13589, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "266:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "253:27:42" - }, - "returnParameters": { - "id": 13594, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13593, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13595, - "src": "299:4:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 13592, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "299:4:42", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "298:6:42" - }, - "scope": 13602, - "src": "236:69:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 13596, - "nodeType": "StructuredDocumentation", - "src": "311:60:42", - "text": "@dev Burns WETH from msg.sender and send back native ETH" - }, - "functionSelector": "2e1a7d4d", - "id": 13601, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nameLocation": "385:8:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13598, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13601, - "src": "394:7:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13597, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "394:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "393:9:42" - }, - "returnParameters": { - "id": 13600, - "nodeType": "ParameterList", - "parameters": [], - "src": "411:0:42" - }, - "scope": 13602, - "src": "376:36:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 13603, - "src": "59:355:42", - "usedErrors": [] - } - ], - "src": "33:382:42" - }, - "id": 42 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol", - "exportedSymbols": { - "Balance": [13609], - "BalanceOps": [13869] - }, - "id": 13870, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13604, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:43" - }, - { - "canonicalName": "Balance", - "id": 13609, - "members": [ - { - "constant": false, - "id": 13606, - "mutability": "mutable", - "name": "token", - "nameLocation": "178:5:43", - "nodeType": "VariableDeclaration", - "scope": 13609, - "src": "170:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13605, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "170:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13608, - "mutability": "mutable", - "name": "balance", - "nameLocation": "197:7:43", - "nodeType": "VariableDeclaration", - "scope": 13609, - "src": "189:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13607, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "189:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Balance", - "nameLocation": "156:7:43", - "nodeType": "StructDefinition", - "scope": 13870, - "src": "149:58:43", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "BalanceOps", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 13869, - "linearizedBaseContracts": [13869], - "name": "BalanceOps", - "nameLocation": "217:10:43", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "81a3b1be", - "id": 13613, - "name": "UnknownToken", - "nameLocation": "240:12:43", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 13612, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13611, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13613, - "src": "253:7:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13610, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "253:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "252:9:43" - }, - "src": "234:28:43" - }, - { - "body": { - "id": 13629, - "nodeType": "Block", - "src": "374:71:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 13623, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13616, - "src": "408:1:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13624, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "410:5:43", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 13606, - "src": "408:7:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 13625, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13616, - "src": "426:1:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13626, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "428:7:43", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "426:9:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13622, - "name": "Balance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13609, - "src": "391:7:43", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Balance_$13609_storage_ptr_$", - "typeString": "type(struct Balance storage pointer)" - } - }, - "id": 13627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": ["401:5:43", "417:7:43"], - "names": ["token", "balance"], - "nodeType": "FunctionCall", - "src": "391:47:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "functionReturnParameters": 13621, - "id": 13628, - "nodeType": "Return", - "src": "384:54:43" - } - ] - }, - "id": 13630, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "copyBalance", - "nameLocation": "277:11:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13617, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13616, - "mutability": "mutable", - "name": "b", - "nameLocation": "304:1:43", - "nodeType": "VariableDeclaration", - "scope": 13630, - "src": "289:16:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance" - }, - "typeName": { - "id": 13615, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13614, - "name": "Balance", - "nameLocations": ["289:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "289:7:43" - }, - "referencedDeclaration": 13609, - "src": "289:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "visibility": "internal" - } - ], - "src": "288:18:43" - }, - "returnParameters": { - "id": 13621, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13620, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13630, - "src": "354:14:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance" - }, - "typeName": { - "id": 13619, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13618, - "name": "Balance", - "nameLocations": ["354:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "354:7:43" - }, - "referencedDeclaration": 13609, - "src": "354:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "visibility": "internal" - } - ], - "src": "353:16:43" - }, - "scope": 13869, - "src": "268:177:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13651, - "nodeType": "Block", - "src": "566:56:43", - "statements": [ - { - "expression": { - "id": 13649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 13641, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13634, - "src": "576:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13646, - "indexExpression": { - "arguments": [ - { - "id": 13643, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13634, - "src": "587:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13644, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13636, - "src": "590:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13642, - "name": "getIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13755, - "src": "578:8:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "578:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "576:21:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13647, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "598:7:43", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "576:29:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 13648, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13638, - "src": "609:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "576:39:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13650, - "nodeType": "ExpressionStatement", - "src": "576:39:43" - } - ] - }, - "id": 13652, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addBalance", - "nameLocation": "460:10:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13639, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13634, - "mutability": "mutable", - "name": "b", - "nameLocation": "497:1:43", - "nodeType": "VariableDeclaration", - "scope": 13652, - "src": "480:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13632, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13631, - "name": "Balance", - "nameLocations": ["480:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "480:7:43" - }, - "referencedDeclaration": 13609, - "src": "480:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13633, - "nodeType": "ArrayTypeName", - "src": "480:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13636, - "mutability": "mutable", - "name": "token", - "nameLocation": "516:5:43", - "nodeType": "VariableDeclaration", - "scope": 13652, - "src": "508:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "508:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13638, - "mutability": "mutable", - "name": "amount", - "nameLocation": "539:6:43", - "nodeType": "VariableDeclaration", - "scope": 13652, - "src": "531:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13637, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "531:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "470:81:43" - }, - "returnParameters": { - "id": 13640, - "nodeType": "ParameterList", - "parameters": [], - "src": "566:0:43" - }, - "scope": 13869, - "src": "451:171:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13673, - "nodeType": "Block", - "src": "743:56:43", - "statements": [ - { - "expression": { - "id": 13671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 13663, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13656, - "src": "753:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13668, - "indexExpression": { - "arguments": [ - { - "id": 13665, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13656, - "src": "764:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13666, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13658, - "src": "767:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13664, - "name": "getIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13755, - "src": "755:8:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13667, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "755:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "753:21:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13669, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "775:7:43", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "753:29:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "id": 13670, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13660, - "src": "786:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "753:39:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13672, - "nodeType": "ExpressionStatement", - "src": "753:39:43" - } - ] - }, - "id": 13674, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "subBalance", - "nameLocation": "637:10:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13661, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13656, - "mutability": "mutable", - "name": "b", - "nameLocation": "674:1:43", - "nodeType": "VariableDeclaration", - "scope": 13674, - "src": "657:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13654, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13653, - "name": "Balance", - "nameLocations": ["657:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "657:7:43" - }, - "referencedDeclaration": 13609, - "src": "657:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13655, - "nodeType": "ArrayTypeName", - "src": "657:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13658, - "mutability": "mutable", - "name": "token", - "nameLocation": "693:5:43", - "nodeType": "VariableDeclaration", - "scope": 13674, - "src": "685:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13657, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "685:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13660, - "mutability": "mutable", - "name": "amount", - "nameLocation": "716:6:43", - "nodeType": "VariableDeclaration", - "scope": 13674, - "src": "708:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13659, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "708:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "647:81:43" - }, - "returnParameters": { - "id": 13662, - "nodeType": "ParameterList", - "parameters": [], - "src": "743:0:43" - }, - "scope": 13869, - "src": "628:171:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13693, - "nodeType": "Block", - "src": "927:53:43", - "statements": [ - { - "expression": { - "expression": { - "baseExpression": { - "id": 13685, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13678, - "src": "944:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13690, - "indexExpression": { - "arguments": [ - { - "id": 13687, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13678, - "src": "955:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13688, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13680, - "src": "958:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13686, - "name": "getIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13755, - "src": "946:8:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "946:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "944:21:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13691, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "966:7:43", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "944:29:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 13684, - "id": 13692, - "nodeType": "Return", - "src": "937:36:43" - } - ] - }, - "id": 13694, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getBalance", - "nameLocation": "814:10:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13681, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13678, - "mutability": "mutable", - "name": "b", - "nameLocation": "842:1:43", - "nodeType": "VariableDeclaration", - "scope": 13694, - "src": "825:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13676, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13675, - "name": "Balance", - "nameLocations": ["825:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "825:7:43" - }, - "referencedDeclaration": 13609, - "src": "825:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13677, - "nodeType": "ArrayTypeName", - "src": "825:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13680, - "mutability": "mutable", - "name": "token", - "nameLocation": "853:5:43", - "nodeType": "VariableDeclaration", - "scope": 13694, - "src": "845:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13679, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "845:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "824:35:43" - }, - "returnParameters": { - "id": 13684, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13683, - "mutability": "mutable", - "name": "amount", - "nameLocation": "915:6:43", - "nodeType": "VariableDeclaration", - "scope": 13694, - "src": "907:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13682, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "907:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "906:16:43" - }, - "scope": 13869, - "src": "805:175:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13715, - "nodeType": "Block", - "src": "1101:55:43", - "statements": [ - { - "expression": { - "id": 13713, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 13705, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13698, - "src": "1111:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13710, - "indexExpression": { - "arguments": [ - { - "id": 13707, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13698, - "src": "1122:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13708, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13700, - "src": "1125:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13706, - "name": "getIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13755, - "src": "1113:8:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1113:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1111:21:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13711, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1133:7:43", - "memberName": "balance", - "nodeType": "MemberAccess", - "referencedDeclaration": 13608, - "src": "1111:29:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 13712, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13702, - "src": "1143:6:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1111:38:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13714, - "nodeType": "ExpressionStatement", - "src": "1111:38:43" - } - ] - }, - "id": 13716, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "setBalance", - "nameLocation": "995:10:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13703, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13698, - "mutability": "mutable", - "name": "b", - "nameLocation": "1032:1:43", - "nodeType": "VariableDeclaration", - "scope": 13716, - "src": "1015:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13696, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13695, - "name": "Balance", - "nameLocations": ["1015:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1015:7:43" - }, - "referencedDeclaration": 13609, - "src": "1015:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13697, - "nodeType": "ArrayTypeName", - "src": "1015:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13700, - "mutability": "mutable", - "name": "token", - "nameLocation": "1051:5:43", - "nodeType": "VariableDeclaration", - "scope": 13716, - "src": "1043:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13699, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1043:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13702, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1074:6:43", - "nodeType": "VariableDeclaration", - "scope": 13716, - "src": "1066:14:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13701, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1066:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1005:81:43" - }, - "returnParameters": { - "id": 13704, - "nodeType": "ParameterList", - "parameters": [], - "src": "1101:0:43" - }, - "scope": 13869, - "src": "986:170:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13754, - "nodeType": "Block", - "src": "1281:234:43", - "statements": [ - { - "body": { - "id": 13748, - "nodeType": "Block", - "src": "1323:150:43", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 13739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 13734, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13720, - "src": "1341:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13736, - "indexExpression": { - "id": 13735, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13728, - "src": "1343:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1341:4:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13737, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1346:5:43", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 13606, - "src": "1341:10:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 13738, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13722, - "src": "1355:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1341:19:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 13743, - "nodeType": "IfStatement", - "src": "1337:66:43", - "trueBody": { - "id": 13742, - "nodeType": "Block", - "src": "1362:41:43", - "statements": [ - { - "expression": { - "id": 13740, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13728, - "src": "1387:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 13726, - "id": 13741, - "nodeType": "Return", - "src": "1380:8:43" - } - ] - } - }, - { - "id": 13747, - "nodeType": "UncheckedBlock", - "src": "1417:46:43", - "statements": [ - { - "expression": { - "id": 13745, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "1445:3:43", - "subExpression": { - "id": 13744, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13728, - "src": "1447:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13746, - "nodeType": "ExpressionStatement", - "src": "1445:3:43" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 13730, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13728, - "src": "1307:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 13731, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13720, - "src": "1311:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1313:6:43", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1311:8:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1307:12:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 13749, - "initializationExpression": { - "assignments": [13728], - "declarations": [ - { - "constant": false, - "id": 13728, - "mutability": "mutable", - "name": "i", - "nameLocation": "1304:1:43", - "nodeType": "VariableDeclaration", - "scope": 13749, - "src": "1296:9:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13727, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1296:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 13729, - "nodeType": "VariableDeclarationStatement", - "src": "1296:9:43" - }, - "nodeType": "ForStatement", - "src": "1291:182:43" - }, - { - "errorCall": { - "arguments": [ - { - "id": 13751, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13722, - "src": "1502:5:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13750, - "name": "UnknownToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13613, - "src": "1489:12:43", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 13752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1489:19:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13753, - "nodeType": "RevertStatement", - "src": "1482:26:43" - } - ] - }, - "id": 13755, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getIndex", - "nameLocation": "1171:8:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13723, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13720, - "mutability": "mutable", - "name": "b", - "nameLocation": "1197:1:43", - "nodeType": "VariableDeclaration", - "scope": 13755, - "src": "1180:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13718, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13717, - "name": "Balance", - "nameLocations": ["1180:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1180:7:43" - }, - "referencedDeclaration": 13609, - "src": "1180:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13719, - "nodeType": "ArrayTypeName", - "src": "1180:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13722, - "mutability": "mutable", - "name": "token", - "nameLocation": "1208:5:43", - "nodeType": "VariableDeclaration", - "scope": 13755, - "src": "1200:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13721, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1200:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1179:35:43" - }, - "returnParameters": { - "id": 13726, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13725, - "mutability": "mutable", - "name": "index", - "nameLocation": "1270:5:43", - "nodeType": "VariableDeclaration", - "scope": 13755, - "src": "1262:13:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13724, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1262:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1261:15:43" - }, - "scope": 13869, - "src": "1162:353:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13799, - "nodeType": "Block", - "src": "1641:187:43", - "statements": [ - { - "expression": { - "id": 13775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13768, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13766, - "src": "1651:3:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13773, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13761, - "src": "1671:3:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13772, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1657:13:43", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct Balance memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 13770, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13769, - "name": "Balance", - "nameLocations": ["1661:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1661:7:43" - }, - "referencedDeclaration": 13609, - "src": "1661:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13771, - "nodeType": "ArrayTypeName", - "src": "1661:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - } - }, - "id": 13774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1657:18:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "src": "1651:24:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13776, - "nodeType": "ExpressionStatement", - "src": "1651:24:43" - }, - { - "body": { - "id": 13797, - "nodeType": "Block", - "src": "1712:110:43", - "statements": [ - { - "expression": { - "id": 13791, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 13783, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13766, - "src": "1726:3:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13785, - "indexExpression": { - "id": 13784, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13778, - "src": "1730:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1726:6:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 13787, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13759, - "src": "1747:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13789, - "indexExpression": { - "id": 13788, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13778, - "src": "1749:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1747:4:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - ], - "id": 13786, - "name": "copyBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13630, - "src": "1735:11:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_Balance_$13609_memory_ptr_$returns$_t_struct$_Balance_$13609_memory_ptr_$", - "typeString": "function (struct Balance memory) pure returns (struct Balance memory)" - } - }, - "id": 13790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1735:17:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "src": "1726:26:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_memory_ptr", - "typeString": "struct Balance memory" - } - }, - "id": 13792, - "nodeType": "ExpressionStatement", - "src": "1726:26:43" - }, - { - "id": 13796, - "nodeType": "UncheckedBlock", - "src": "1766:46:43", - "statements": [ - { - "expression": { - "id": 13794, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "1794:3:43", - "subExpression": { - "id": 13793, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13778, - "src": "1796:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 13795, - "nodeType": "ExpressionStatement", - "src": "1794:3:43" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13782, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 13780, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13778, - "src": "1701:1:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 13781, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13761, - "src": "1705:3:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1701:7:43", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 13798, - "initializationExpression": { - "assignments": [13778], - "declarations": [ - { - "constant": false, - "id": 13778, - "mutability": "mutable", - "name": "i", - "nameLocation": "1698:1:43", - "nodeType": "VariableDeclaration", - "scope": 13798, - "src": "1690:9:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13777, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1690:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 13779, - "nodeType": "VariableDeclarationStatement", - "src": "1690:9:43" - }, - "nodeType": "ForStatement", - "src": "1685:137:43" - } - ] - }, - "id": 13800, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "copy", - "nameLocation": "1530:4:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13762, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13759, - "mutability": "mutable", - "name": "b", - "nameLocation": "1552:1:43", - "nodeType": "VariableDeclaration", - "scope": 13800, - "src": "1535:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13757, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13756, - "name": "Balance", - "nameLocations": ["1535:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1535:7:43" - }, - "referencedDeclaration": 13609, - "src": "1535:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13758, - "nodeType": "ArrayTypeName", - "src": "1535:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13761, - "mutability": "mutable", - "name": "len", - "nameLocation": "1563:3:43", - "nodeType": "VariableDeclaration", - "scope": 13800, - "src": "1555:11:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13760, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1555:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1534:33:43" - }, - "returnParameters": { - "id": 13767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13766, - "mutability": "mutable", - "name": "res", - "nameLocation": "1632:3:43", - "nodeType": "VariableDeclaration", - "scope": 13800, - "src": "1615:20:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13764, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13763, - "name": "Balance", - "nameLocations": ["1615:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1615:7:43" - }, - "referencedDeclaration": 13609, - "src": "1615:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13765, - "nodeType": "ArrayTypeName", - "src": "1615:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "1614:22:43" - }, - "scope": 13869, - "src": "1521:307:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13817, - "nodeType": "Block", - "src": "1938:41:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 13812, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13804, - "src": "1960:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "expression": { - "id": 13813, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13804, - "src": "1963:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1965:6:43", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1963:8:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13811, - "name": "copy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13800, - "src": "1955:4:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct Balance memory[] memory,uint256) pure returns (struct Balance memory[] memory)" - } - }, - "id": 13815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1955:17:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "functionReturnParameters": 13810, - "id": 13816, - "nodeType": "Return", - "src": "1948:24:43" - } - ] - }, - "id": 13818, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "clone", - "nameLocation": "1843:5:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13805, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13804, - "mutability": "mutable", - "name": "b", - "nameLocation": "1866:1:43", - "nodeType": "VariableDeclaration", - "scope": 13818, - "src": "1849:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13802, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13801, - "name": "Balance", - "nameLocations": ["1849:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1849:7:43" - }, - "referencedDeclaration": 13609, - "src": "1849:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13803, - "nodeType": "ArrayTypeName", - "src": "1849:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "1848:20:43" - }, - "returnParameters": { - "id": 13810, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13809, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 13818, - "src": "1916:16:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13807, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13806, - "name": "Balance", - "nameLocations": ["1916:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "1916:7:43" - }, - "referencedDeclaration": 13609, - "src": "1916:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13808, - "nodeType": "ArrayTypeName", - "src": "1916:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "1915:18:43" - }, - "scope": 13869, - "src": "1834:145:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 13867, - "nodeType": "Block", - "src": "2200:184:43", - "statements": [ - { - "expression": { - "id": 13843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 13837, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13835, - "src": "2210:3:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 13839, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13822, - "src": "2221:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "expression": { - "id": 13840, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13822, - "src": "2224:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2226:6:43", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2224:8:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13838, - "name": "copy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13800, - "src": "2216:4:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct Balance memory[] memory,uint256) pure returns (struct Balance memory[] memory)" - } - }, - "id": 13842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2216:17:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "src": "2210:23:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - "id": 13844, - "nodeType": "ExpressionStatement", - "src": "2210:23:43" - }, - { - "expression": { - "arguments": [ - { - "id": 13846, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13835, - "src": "2254:3:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13847, - "name": "tokenFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13824, - "src": "2259:9:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 13849, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13822, - "src": "2281:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13850, - "name": "tokenFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13824, - "src": "2284:9:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13848, - "name": "getBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13694, - "src": "2270:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2270:24:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 13852, - "name": "amountFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13826, - "src": "2297:10:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2270:37:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13845, - "name": "setBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13716, - "src": "2243:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (struct Balance memory[] memory,address,uint256) pure" - } - }, - "id": 13854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2243:65:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13855, - "nodeType": "ExpressionStatement", - "src": "2243:65:43" - }, - { - "expression": { - "arguments": [ - { - "id": 13857, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13835, - "src": "2329:3:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13858, - "name": "tokenTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13828, - "src": "2334:7:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 13860, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13822, - "src": "2354:1:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - } - }, - { - "id": 13861, - "name": "tokenTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13828, - "src": "2357:7:43", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 13859, - "name": "getBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13694, - "src": "2343:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$", - "typeString": "function (struct Balance memory[] memory,address) pure returns (uint256)" - } - }, - "id": 13862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2343:22:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 13863, - "name": "amountTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13830, - "src": "2368:8:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2343:33:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance memory[] memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 13856, - "name": "setBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13716, - "src": "2318:10:43", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (struct Balance memory[] memory,address,uint256) pure" - } - }, - "id": 13865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2318:59:43", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 13866, - "nodeType": "ExpressionStatement", - "src": "2318:59:43" - } - ] - }, - "id": 13868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getModifiedAfterSwap", - "nameLocation": "1994:20:43", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 13831, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13822, - "mutability": "mutable", - "name": "b", - "nameLocation": "2041:1:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2024:18:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13820, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13819, - "name": "Balance", - "nameLocations": ["2024:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "2024:7:43" - }, - "referencedDeclaration": 13609, - "src": "2024:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13821, - "nodeType": "ArrayTypeName", - "src": "2024:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13824, - "mutability": "mutable", - "name": "tokenFrom", - "nameLocation": "2060:9:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2052:17:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13823, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2052:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13826, - "mutability": "mutable", - "name": "amountFrom", - "nameLocation": "2087:10:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2079:18:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13825, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2079:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13828, - "mutability": "mutable", - "name": "tokenTo", - "nameLocation": "2115:7:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2107:15:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13827, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2107:7:43", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13830, - "mutability": "mutable", - "name": "amountTo", - "nameLocation": "2140:8:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2132:16:43", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13829, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2132:7:43", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2014:140:43" - }, - "returnParameters": { - "id": 13836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 13835, - "mutability": "mutable", - "name": "res", - "nameLocation": "2195:3:43", - "nodeType": "VariableDeclaration", - "scope": 13868, - "src": "2178:20:43", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_memory_ptr_$dyn_memory_ptr", - "typeString": "struct Balance[]" - }, - "typeName": { - "baseType": { - "id": 13833, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 13832, - "name": "Balance", - "nameLocations": ["2178:7:43"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 13609, - "src": "2178:7:43" - }, - "referencedDeclaration": 13609, - "src": "2178:7:43", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Balance_$13609_storage_ptr", - "typeString": "struct Balance" - } - }, - "id": 13834, - "nodeType": "ArrayTypeName", - "src": "2178:9:43", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Balance_$13609_storage_$dyn_storage_ptr", - "typeString": "struct Balance[]" - } - }, - "visibility": "internal" - } - ], - "src": "2177:22:43" - }, - "scope": 13869, - "src": "1985:399:43", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 13870, - "src": "209:2177:43", - "usedErrors": [13613] - } - ], - "src": "123:2264:43" - }, - "id": 43 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol", - "exportedSymbols": { - "ALLOWANCE_THRESHOLD": [13886], - "DEFAULT_FEE_INTEREST": [13889], - "DEFAULT_FEE_LIQUIDATION": [13892], - "DEFAULT_FEE_LIQUIDATION_EXPIRED": [13898], - "DEFAULT_LIMIT_PER_BLOCK_MULTIPLIER": [13904], - "DEFAULT_LIQUIDATION_PREMIUM": [13895], - "DEFAULT_LIQUIDATION_PREMIUM_EXPIRED": [13901], - "EXACT_INPUT": [13924], - "EXACT_OUTPUT": [13927], - "LEVERAGE_DECIMALS": [13918], - "MAX_WITHDRAW_FEE": [13921], - "RAY": [13877], - "SECONDS_PER_ONE_AND_HALF_YEAR": [13915], - "SECONDS_PER_YEAR": [13907], - "UNIVERSAL_CONTRACT": [13930], - "WAD": [13874] - }, - "id": 13931, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13871, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:44" - }, - { - "constant": true, - "id": 13874, - "mutability": "constant", - "name": "WAD", - "nameLocation": "184:3:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "167:27:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13872, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "167:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31653138", - "id": 13873, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "190:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000000000000_by_1", - "typeString": "int_const 1000000000000000000" - }, - "value": "1e18" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13877, - "mutability": "constant", - "name": "RAY", - "nameLocation": "213:3:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "196:27:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13875, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "196:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31653237", - "id": 13876, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "219:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_1000000000000000000000000000_by_1", - "typeString": "int_const 1000000000000000000000000000" - }, - "value": "1e27" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13886, - "mutability": "constant", - "name": "ALLOWANCE_THRESHOLD", - "nameLocation": "271:19:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "254:60:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13878, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "254:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 13885, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 13881, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "298:6:44", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 13880, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "298:6:44", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - } - ], - "id": 13879, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "293:4:44", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 13882, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "293:12:44", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint96", - "typeString": "type(uint96)" - } - }, - "id": 13883, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "306:3:44", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "293:16:44", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "hexValue": "33", - "id": 13884, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "313:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "293:21:44", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13889, - "mutability": "constant", - "name": "DEFAULT_FEE_INTEREST", - "nameLocation": "346:20:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "330:44:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13887, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "330:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "35305f3030", - "id": 13888, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "369:5:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_5000_by_1", - "typeString": "int_const 5000" - }, - "value": "50_00" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13892, - "mutability": "constant", - "name": "DEFAULT_FEE_LIQUIDATION", - "nameLocation": "424:23:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "408:46:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13890, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "408:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "315f3530", - "id": 13891, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "450:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_150_by_1", - "typeString": "int_const 150" - }, - "value": "1_50" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13895, - "mutability": "constant", - "name": "DEFAULT_LIQUIDATION_PREMIUM", - "nameLocation": "507:27:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "491:50:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13893, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "491:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "345f3030", - "id": 13894, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "537:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_400_by_1", - "typeString": "int_const 400" - }, - "value": "4_00" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13898, - "mutability": "constant", - "name": "DEFAULT_FEE_LIQUIDATION_EXPIRED", - "nameLocation": "596:31:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "580:54:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13896, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "580:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "315f3030", - "id": 13897, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "630:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "1_00" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13901, - "mutability": "constant", - "name": "DEFAULT_LIQUIDATION_PREMIUM_EXPIRED", - "nameLocation": "693:35:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "677:58:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13899, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "677:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "325f3030", - "id": 13900, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "731:4:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_200_by_1", - "typeString": "int_const 200" - }, - "value": "2_00" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13904, - "mutability": "constant", - "name": "DEFAULT_LIMIT_PER_BLOCK_MULTIPLIER", - "nameLocation": "836:34:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "820:54:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 13902, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "820:6:44", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "32", - "id": 13903, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "873:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13907, - "mutability": "constant", - "name": "SECONDS_PER_YEAR", - "nameLocation": "915:16:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "898:44:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13905, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "898:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "333635", - "id": 13906, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "934:8:44", - "subdenomination": "days", - "typeDescriptions": { - "typeIdentifier": "t_rational_31536000_by_1", - "typeString": "int_const 31536000" - }, - "value": "365" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13915, - "mutability": "constant", - "name": "SECONDS_PER_ONE_AND_HALF_YEAR", - "nameLocation": "961:29:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "944:75:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13908, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "944:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13914, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 13911, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 13909, - "name": "SECONDS_PER_YEAR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 13907, - "src": "994:16:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "hexValue": "33", - "id": 13910, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1013:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "src": "994:20:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 13912, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "993:22:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "hexValue": "32", - "id": 13913, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1018:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "993:26:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13918, - "mutability": "constant", - "name": "LEVERAGE_DECIMALS", - "nameLocation": "1155:17:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "1140:38:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 13916, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1140:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "313030", - "id": 13917, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1175:3:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "100" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13921, - "mutability": "constant", - "name": "MAX_WITHDRAW_FEE", - "nameLocation": "1257:16:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "1242:37:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 13919, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1242:5:44", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "313030", - "id": 13920, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1276:3:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_100_by_1", - "typeString": "int_const 100" - }, - "value": "100" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13924, - "mutability": "constant", - "name": "EXACT_INPUT", - "nameLocation": "1299:11:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "1282:32:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13922, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1282:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 13923, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1313:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13927, - "mutability": "constant", - "name": "EXACT_OUTPUT", - "nameLocation": "1333:12:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "1316:33:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 13925, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1316:7:44", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "32", - "id": 13926, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1348:1:44", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 13930, - "mutability": "constant", - "name": "UNIVERSAL_CONTRACT", - "nameLocation": "1369:18:44", - "nodeType": "VariableDeclaration", - "scope": 13931, - "src": "1352:80:44", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 13928, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1352:7:44", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": { - "hexValue": "307843634343636363634343434363434343434343634363436363436343434363436363636363636343", - "id": 13929, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1390:42:44", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "value": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" - }, - "visibility": "internal" - } - ], - "src": "123:1311:44" - }, - "id": 44 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "exportedSymbols": { - "Errors": [14033] - }, - "id": 14034, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 13932, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:45" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Errors", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 13933, - "nodeType": "StructuredDocumentation", - "src": "149:26:45", - "text": "@title Errors library" - }, - "fullyImplemented": true, - "id": 14033, - "linearizedBaseContracts": [14033], - "name": "Errors", - "nameLocation": "183:6:45", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "functionSelector": "3f3153b2", - "id": 13936, - "mutability": "constant", - "name": "ZERO_ADDRESS_IS_NOT_ALLOWED", - "nameLocation": "247:27:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "224:57:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13934, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "224:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "5a30", - "id": 13935, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "277:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fc8df00e96ea1bd9b18af5bf7b7cbf0822c7b2a66ceac481f3e975f17b08e64d", - "typeString": "literal_string \"Z0\"" - }, - "value": "Z0" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "43f6e4ab", - "id": 13939, - "mutability": "constant", - "name": "NOT_IMPLEMENTED", - "nameLocation": "310:15:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "287:45:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13937, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "287:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4e49", - "id": 13938, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "328:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e817963341ac54b6c6630a42fcd594b50ae6e47bc5952aa5478cb70078a54ca0", - "typeString": "literal_string \"NI\"" - }, - "value": "NI" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "3df46fe5", - "id": 13942, - "mutability": "constant", - "name": "INCORRECT_PATH_LENGTH", - "nameLocation": "361:21:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "338:51:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13940, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "338:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "504c", - "id": 13941, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "385:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_876138161d860b1265e6206748b138a5de33dd60f8d22eb8229bb1ff8d1d9fd0", - "typeString": "literal_string \"PL\"" - }, - "value": "PL" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "e7f3be0c", - "id": 13945, - "mutability": "constant", - "name": "INCORRECT_ARRAY_LENGTH", - "nameLocation": "418:22:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "395:52:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13943, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "395:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4352", - "id": 13944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "443:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_73f1429c83bb08d86ce57612ba13adaf5257497567380c7e791a81fb49da0289", - "typeString": "literal_string \"CR\"" - }, - "value": "CR" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "94391a4a", - "id": 13948, - "mutability": "constant", - "name": "REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY", - "nameLocation": "476:39:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "453:69:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13946, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "453:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4350", - "id": 13947, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "518:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d085404b3f08c695c951642257938955b9cf745289932fae5e9c15e37a2b9dfb", - "typeString": "literal_string \"CP\"" - }, - "value": "CP" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "0afeee97", - "id": 13951, - "mutability": "constant", - "name": "REGISTERED_POOLS_ONLY", - "nameLocation": "551:21:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "528:51:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13949, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "528:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "5250", - "id": 13950, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "575:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_acd1619802ca605fa3d277f62f0cbe8455424afd9ebfdc7f5ad065cab00fae03", - "typeString": "literal_string \"RP\"" - }, - "value": "RP" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "bdcb2576", - "id": 13954, - "mutability": "constant", - "name": "INCORRECT_PARAMETER", - "nameLocation": "608:19:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "585:49:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13952, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "585:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4950", - "id": 13953, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "630:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ea7cc243c1adfefd7098535f6043322da9c8a0b78273c80a6b325a47c98cb9b3", - "typeString": "literal_string \"IP\"" - }, - "value": "IP" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "029d2344", - "id": 13957, - "mutability": "constant", - "name": "MATH_MULTIPLICATION_OVERFLOW", - "nameLocation": "690:28:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "667:58:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13955, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "667:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4d31", - "id": 13956, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "721:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b12041addd3285c2b6d2a98e6dc83b6f7dc08f5942fa2296e6ce355782d133de", - "typeString": "literal_string \"M1\"" - }, - "value": "M1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "0f5ee482", - "id": 13960, - "mutability": "constant", - "name": "MATH_ADDITION_OVERFLOW", - "nameLocation": "754:22:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "731:52:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13958, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "731:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4d32", - "id": 13959, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "779:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_eb6c02be93266c1911f682867f541341551226a2aa32deae66949c656ba5868f", - "typeString": "literal_string \"M2\"" - }, - "value": "M2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "4349e3d8", - "id": 13963, - "mutability": "constant", - "name": "MATH_DIVISION_BY_ZERO", - "nameLocation": "812:21:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "789:51:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13961, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "789:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "4d33", - "id": 13962, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "836:4:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_721524c7a65bcdea5ad76a237d624e47657207991239740ed4ec0fb801069816", - "typeString": "literal_string \"M3\"" - }, - "value": "M3" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "76d9ebb8", - "id": 13966, - "mutability": "constant", - "name": "POOL_CONNECTED_CREDIT_MANAGERS_ONLY", - "nameLocation": "896:35:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "873:66:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13964, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "873:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "505330", - "id": 13965, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "934:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_41a64d3ee9970486ca8faac11e7e0c944164493c365dc060d8b4b918faa4fd42", - "typeString": "literal_string \"PS0\"" - }, - "value": "PS0" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "a27c0370", - "id": 13969, - "mutability": "constant", - "name": "POOL_INCOMPATIBLE_CREDIT_ACCOUNT_MANAGER", - "nameLocation": "968:40:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "945:71:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13967, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "945:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "505331", - "id": 13968, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1011:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_84aef4bc15ed6ed1bf69736233f77a2d4c2b1d6356a4ae711fd9bca9c5fb69b4", - "typeString": "literal_string \"PS1\"" - }, - "value": "PS1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "119427c5", - "id": 13972, - "mutability": "constant", - "name": "POOL_MORE_THAN_EXPECTED_LIQUIDITY_LIMIT", - "nameLocation": "1045:39:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1022:70:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13970, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1022:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "505332", - "id": 13971, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1087:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ad64a30f4ca30ab71c8f90f9cbe3521725a743c91ba2c0359ff54db0c2173daf", - "typeString": "literal_string \"PS2\"" - }, - "value": "PS2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "28432c22", - "id": 13975, - "mutability": "constant", - "name": "POOL_INCORRECT_WITHDRAW_FEE", - "nameLocation": "1121:27:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1098:58:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13973, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1098:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "505333", - "id": 13974, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1151:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ca3ed237cc053dab851bd92409b6665f8a259fae55c8f0a812810fd9ed230aea", - "typeString": "literal_string \"PS3\"" - }, - "value": "PS3" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "ccbf9278", - "id": 13978, - "mutability": "constant", - "name": "POOL_CANT_ADD_CREDIT_MANAGER_TWICE", - "nameLocation": "1185:34:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1162:65:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13976, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1162:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "505334", - "id": 13977, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1222:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6cf4702f477372490d7d9e375cca17f95617bedcdc5e6dd2ca006e7b2fa2f7d8", - "typeString": "literal_string \"PS4\"" - }, - "value": "PS4" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "0c9409e7", - "id": 13981, - "mutability": "constant", - "name": "AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK", - "nameLocation": "1294:46:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1271:85:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13979, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1271:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "414631", - "id": 13980, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1351:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b136a939ea7c07f536046c864b73f177a8032f6565b8110ddc85a9020c88077d", - "typeString": "literal_string \"AF1\"" - }, - "value": "AF1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "87f88ef4", - "id": 13984, - "mutability": "constant", - "name": "AF_MINING_IS_FINISHED", - "nameLocation": "1385:21:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1362:52:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13982, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1362:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "414632", - "id": 13983, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1409:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3faf556ab9f88c08b09363207eafbcce6d7a95f129b667bbe8c2587671a17059", - "typeString": "literal_string \"AF2\"" - }, - "value": "AF2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "ac757139", - "id": 13987, - "mutability": "constant", - "name": "AF_CREDIT_ACCOUNT_NOT_IN_STOCK", - "nameLocation": "1443:30:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1420:61:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13985, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1420:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "414633", - "id": 13986, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1476:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6bbdea17fd0bbbfb56f6f6ba25b7f9bf1b07beb9ce47504378a86c963ec24049", - "typeString": "literal_string \"AF3\"" - }, - "value": "AF3" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "d1a65a38", - "id": 13990, - "mutability": "constant", - "name": "AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN", - "nameLocation": "1510:34:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1487:65:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13988, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1487:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "414634", - "id": 13989, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1547:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6973ba6b4a62f9f8c1fd49ebd3541505343ab962681ed0c387fdd3e5ba535860", - "typeString": "literal_string \"AF4\"" - }, - "value": "AF4" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "de63cd40", - "id": 13993, - "mutability": "constant", - "name": "AS_ADDRESS_NOT_FOUND", - "nameLocation": "1620:20:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1597:51:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13991, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1597:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "415031", - "id": 13992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1643:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_18b117340645cfb38a7414f6a51f090965f4e22ead292d9dad633e05e91ff811", - "typeString": "literal_string \"AP1\"" - }, - "value": "AP1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "0a2b1d3a", - "id": 13996, - "mutability": "constant", - "name": "CR_POOL_ALREADY_ADDED", - "nameLocation": "1718:21:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1695:52:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13994, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1695:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "435231", - "id": 13995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1742:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_1f50fcd7e2c7f798fcd73d95ad809bad3de27e72b5ef29537bff898668632b5b", - "typeString": "literal_string \"CR1\"" - }, - "value": "CR1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "99a98c99", - "id": 13999, - "mutability": "constant", - "name": "CR_CREDIT_MANAGER_ALREADY_ADDED", - "nameLocation": "1776:31:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1753:62:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 13997, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1753:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "435232", - "id": 13998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1810:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6c5a5f1a0defa7fe7c5fd4d267bc1242e274440135b9e5cbdac57f7794a07af1", - "typeString": "literal_string \"CR2\"" - }, - "value": "CR2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "ff2a04e3", - "id": 14002, - "mutability": "constant", - "name": "CA_CONNECTED_CREDIT_MANAGER_ONLY", - "nameLocation": "1881:32:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1858:63:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14000, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1858:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "434131", - "id": 14001, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1916:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6a613ede754813e305fb04881d2d49205488fe75eec8ba76e07060abdb99fa63", - "typeString": "literal_string \"CA1\"" - }, - "value": "CA1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "2357f362", - "id": 14005, - "mutability": "constant", - "name": "CA_FACTORY_ONLY", - "nameLocation": "1950:15:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "1927:46:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14003, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1927:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "434132", - "id": 14004, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1968:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_32d46136924ec962000b09aca01f5b9657261bb70080ff4a2ea4d043ac138ff6", - "typeString": "literal_string \"CA2\"" - }, - "value": "CA2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "a988ac60", - "id": 14008, - "mutability": "constant", - "name": "ACL_CALLER_NOT_PAUSABLE_ADMIN", - "nameLocation": "2028:29:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2005:61:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14006, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2005:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "41434c31", - "id": 14007, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2060:6:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_564a8c95153e348f00f89db4ae82c574b68bdc3231aea2d43248950d8cad1ad8", - "typeString": "literal_string \"ACL1\"" - }, - "value": "ACL1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "ebbd977f", - "id": 14011, - "mutability": "constant", - "name": "ACL_CALLER_NOT_CONFIGURATOR", - "nameLocation": "2095:27:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2072:59:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14009, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2072:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "41434c32", - "id": 14010, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2125:6:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e30622d85bce17f521f4be8079dc1ea86d851924897a63adb7ea56b5ac2b2764", - "typeString": "literal_string \"ACL2\"" - }, - "value": "ACL2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "3647c9f9", - "id": 14014, - "mutability": "constant", - "name": "WG_DESTINATION_IS_NOT_WETH_COMPATIBLE", - "nameLocation": "2195:37:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2172:68:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14012, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2172:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "574731", - "id": 14013, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2235:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2474ef7020d39575765788ee9c60c12da4a58a242a40cec44c8380fc082362ef", - "typeString": "literal_string \"WG1\"" - }, - "value": "WG1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "447d8e42", - "id": 14017, - "mutability": "constant", - "name": "WG_RECEIVE_IS_NOT_ALLOWED", - "nameLocation": "2269:25:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2246:56:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14015, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2246:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "574732", - "id": 14016, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2297:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4fcfbb13d1ffca34db72086f6540079e6eee55e4ccae725bc031e88f5393eae1", - "typeString": "literal_string \"WG2\"" - }, - "value": "WG2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "beea5ec2", - "id": 14020, - "mutability": "constant", - "name": "WG_NOT_ENOUGH_FUNDS", - "nameLocation": "2331:19:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2308:50:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14018, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2308:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "574733", - "id": 14019, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2353:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cbc54123b268241e51c3c82262fb7b192314d657c2dfea62e49b9c709acfa435", - "typeString": "literal_string \"WG3\"" - }, - "value": "WG3" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "53278911", - "id": 14023, - "mutability": "constant", - "name": "TD_WALLET_IS_ALREADY_CONNECTED_TO_VC", - "nameLocation": "2427:36:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2404:67:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14021, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2404:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "544431", - "id": 14022, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2466:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_00726654c72a793079358eaa71e4b466a98edcd82126f7b9adccb376de1f535d", - "typeString": "literal_string \"TD1\"" - }, - "value": "TD1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "fe32e65d", - "id": 14026, - "mutability": "constant", - "name": "TD_INCORRECT_WEIGHTS", - "nameLocation": "2500:20:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2477:51:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14024, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2477:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "544432", - "id": 14025, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2523:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c36f83c12d173d461734b192f25e0488335a54a32efbc10c9304970fa11bff6d", - "typeString": "literal_string \"TD2\"" - }, - "value": "TD2" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "abc3d254", - "id": 14029, - "mutability": "constant", - "name": "TD_NON_ZERO_BALANCE_AFTER_DISTRIBUTION", - "nameLocation": "2557:38:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2534:69:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14027, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2534:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "544433", - "id": 14028, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2598:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_acf45e83d69944d040832b4b08f74551dead7536c71ab18690e1abd0b15f4a4e", - "typeString": "literal_string \"TD3\"" - }, - "value": "TD3" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "b563b300", - "id": 14032, - "mutability": "constant", - "name": "TD_CONTRIBUTOR_IS_NOT_REGISTERED", - "nameLocation": "2632:32:45", - "nodeType": "VariableDeclaration", - "scope": 14033, - "src": "2609:63:45", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14030, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2609:6:45", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "544434", - "id": 14031, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2667:5:45", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6478d83755ef1dbfa78afd0d228f767519ccb507287073d5476d3c80093f22bd", - "typeString": "literal_string \"TD4\"" - }, - "value": "TD4" - }, - "visibility": "public" - } - ], - "scope": 14034, - "src": "175:2500:45", - "usedErrors": [] - } - ], - "src": "123:2553:45" - }, - "id": 45 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol", - "exportedSymbols": { - "MultiCall": [14040], - "MultiCallOps": [14391] - }, - "id": 14392, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 14035, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "32:24:46" - }, - { - "canonicalName": "MultiCall", - "id": 14040, - "members": [ - { - "constant": false, - "id": 14037, - "mutability": "mutable", - "name": "target", - "nameLocation": "89:6:46", - "nodeType": "VariableDeclaration", - "scope": 14040, - "src": "81:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14036, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "81:7:46", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14039, - "mutability": "mutable", - "name": "callData", - "nameLocation": "107:8:46", - "nodeType": "VariableDeclaration", - "scope": 14040, - "src": "101:14:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 14038, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "101:5:46", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "MultiCall", - "nameLocation": "65:9:46", - "nodeType": "StructDefinition", - "scope": 14392, - "src": "58:60:46", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "MultiCallOps", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 14391, - "linearizedBaseContracts": [14391], - "name": "MultiCallOps", - "nameLocation": "128:12:46", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 14056, - "nodeType": "Block", - "src": "262:83:46", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 14050, - "name": "call", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14043, - "src": "299:4:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14051, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "304:6:46", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "299:11:46", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 14052, - "name": "call", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14043, - "src": "322:4:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14053, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "327:8:46", - "memberName": "callData", - "nodeType": "MemberAccess", - "referencedDeclaration": 14039, - "src": "322:13:46", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 14049, - "name": "MultiCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14040, - "src": "279:9:46", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_MultiCall_$14040_storage_ptr_$", - "typeString": "type(struct MultiCall storage pointer)" - } - }, - "id": 14054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": ["291:6:46", "312:8:46"], - "names": ["target", "callData"], - "nodeType": "FunctionCall", - "src": "279:59:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "functionReturnParameters": 14048, - "id": 14055, - "nodeType": "Return", - "src": "272:66:46" - } - ] - }, - "id": 14057, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "copyMulticall", - "nameLocation": "156:13:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14043, - "mutability": "mutable", - "name": "call", - "nameLocation": "187:4:46", - "nodeType": "VariableDeclaration", - "scope": 14057, - "src": "170:21:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall" - }, - "typeName": { - "id": 14042, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14041, - "name": "MultiCall", - "nameLocations": ["170:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "170:9:46" - }, - "referencedDeclaration": 14040, - "src": "170:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "visibility": "internal" - } - ], - "src": "169:23:46" - }, - "returnParameters": { - "id": 14048, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14047, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 14057, - "src": "240:16:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall" - }, - "typeName": { - "id": 14046, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14045, - "name": "MultiCall", - "nameLocations": ["240:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "240:9:46" - }, - "referencedDeclaration": 14040, - "src": "240:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "visibility": "internal" - } - ], - "src": "239:18:46" - }, - "scope": 14391, - "src": "147:198:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14112, - "nodeType": "Block", - "src": "470:346:46", - "statements": [ - { - "assignments": [14069], - "declarations": [ - { - "constant": false, - "id": 14069, - "mutability": "mutable", - "name": "len", - "nameLocation": "488:3:46", - "nodeType": "VariableDeclaration", - "scope": 14112, - "src": "480:11:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14068, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "480:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14072, - "initialValue": { - "expression": { - "id": 14070, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14061, - "src": "494:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "500:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "494:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "480:26:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14073, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14069, - "src": "521:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 14074, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "528:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "521:8:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14078, - "nodeType": "IfStatement", - "src": "517:26:46", - "trueBody": { - "expression": { - "id": 14076, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14061, - "src": "538:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14067, - "id": 14077, - "nodeType": "Return", - "src": "531:12:46" - } - }, - { - "assignments": [14080], - "declarations": [ - { - "constant": false, - "id": 14080, - "mutability": "mutable", - "name": "foundLen", - "nameLocation": "562:8:46", - "nodeType": "VariableDeclaration", - "scope": 14112, - "src": "554:16:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14079, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "554:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14081, - "nodeType": "VariableDeclarationStatement", - "src": "554:16:46" - }, - { - "body": { - "id": 14101, - "nodeType": "Block", - "src": "625:128:46", - "statements": [ - { - "id": 14100, - "nodeType": "UncheckedBlock", - "src": "639:104:46", - "statements": [ - { - "expression": { - "id": 14092, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "667:10:46", - "subExpression": { - "id": 14091, - "name": "foundLen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14080, - "src": "669:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14093, - "nodeType": "ExpressionStatement", - "src": "667:10:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14094, - "name": "foundLen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14080, - "src": "699:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 14095, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14069, - "src": "711:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "699:15:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14099, - "nodeType": "IfStatement", - "src": "695:33:46", - "trueBody": { - "expression": { - "id": 14097, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14061, - "src": "723:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14067, - "id": 14098, - "nodeType": "Return", - "src": "716:12:46" - } - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 14090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "id": 14082, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14061, - "src": "587:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14084, - "indexExpression": { - "id": 14083, - "name": "foundLen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14080, - "src": "593:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "587:15:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14085, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "603:6:46", - "memberName": "target", - "nodeType": "MemberAccess", - "referencedDeclaration": 14037, - "src": "587:22:46", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 14088, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "621:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 14087, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "613:7:46", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 14086, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "613:7:46", - "typeDescriptions": {} - } - }, - "id": 14089, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "613:10:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "587:36:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14102, - "nodeType": "WhileStatement", - "src": "580:173:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14105, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14103, - "name": "foundLen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14080, - "src": "767:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 14104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "778:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "767:12:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14111, - "nodeType": "IfStatement", - "src": "763:46:46", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 14107, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14061, - "src": "793:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - { - "id": 14108, - "name": "foundLen", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14080, - "src": "800:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14106, - "name": "copy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14158, - "src": "788:4:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct MultiCall memory[] memory,uint256) pure returns (struct MultiCall memory[] memory)" - } - }, - "id": 14109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "788:21:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14067, - "id": 14110, - "nodeType": "Return", - "src": "781:28:46" - } - } - ] - }, - "id": 14113, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "trim", - "nameLocation": "360:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14062, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14061, - "mutability": "mutable", - "name": "calls", - "nameLocation": "384:5:46", - "nodeType": "VariableDeclaration", - "scope": 14113, - "src": "365:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14059, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14058, - "name": "MultiCall", - "nameLocations": ["365:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "365:9:46" - }, - "referencedDeclaration": 14040, - "src": "365:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14060, - "nodeType": "ArrayTypeName", - "src": "365:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "364:26:46" - }, - "returnParameters": { - "id": 14067, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14066, - "mutability": "mutable", - "name": "trimmed", - "nameLocation": "457:7:46", - "nodeType": "VariableDeclaration", - "scope": 14113, - "src": "438:26:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14064, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14063, - "name": "MultiCall", - "nameLocations": ["438:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "438:9:46" - }, - "referencedDeclaration": 14040, - "src": "438:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14065, - "nodeType": "ArrayTypeName", - "src": "438:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "437:28:46" - }, - "scope": 14391, - "src": "351:465:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14157, - "nodeType": "Block", - "src": "950:195:46", - "statements": [ - { - "expression": { - "id": 14133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14126, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14124, - "src": "960:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 14131, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14119, - "src": "982:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14130, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "966:15:46", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct MultiCall memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 14128, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14127, - "name": "MultiCall", - "nameLocations": ["970:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "970:9:46" - }, - "referencedDeclaration": 14040, - "src": "970:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14129, - "nodeType": "ArrayTypeName", - "src": "970:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - } - }, - "id": 14132, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "966:20:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "src": "960:26:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14134, - "nodeType": "ExpressionStatement", - "src": "960:26:46" - }, - { - "body": { - "id": 14155, - "nodeType": "Block", - "src": "1023:116:46", - "statements": [ - { - "expression": { - "id": 14149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14141, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14124, - "src": "1037:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14143, - "indexExpression": { - "id": 14142, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14136, - "src": "1041:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1037:6:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 14145, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14117, - "src": "1060:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14147, - "indexExpression": { - "id": 14146, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14136, - "src": "1066:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1060:8:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14144, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "1046:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1046:23:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "1037:32:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14150, - "nodeType": "ExpressionStatement", - "src": "1037:32:46" - }, - { - "id": 14154, - "nodeType": "UncheckedBlock", - "src": "1083:46:46", - "statements": [ - { - "expression": { - "id": 14152, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "1111:3:46", - "subExpression": { - "id": 14151, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14136, - "src": "1113:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14153, - "nodeType": "ExpressionStatement", - "src": "1111:3:46" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14138, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14136, - "src": "1012:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14139, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14119, - "src": "1016:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1012:7:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14156, - "initializationExpression": { - "assignments": [14136], - "declarations": [ - { - "constant": false, - "id": 14136, - "mutability": "mutable", - "name": "i", - "nameLocation": "1009:1:46", - "nodeType": "VariableDeclaration", - "scope": 14156, - "src": "1001:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14135, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1001:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14137, - "nodeType": "VariableDeclarationStatement", - "src": "1001:9:46" - }, - "nodeType": "ForStatement", - "src": "996:143:46" - } - ] - }, - "id": 14158, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "copy", - "nameLocation": "831:4:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14117, - "mutability": "mutable", - "name": "calls", - "nameLocation": "855:5:46", - "nodeType": "VariableDeclaration", - "scope": 14158, - "src": "836:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14115, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14114, - "name": "MultiCall", - "nameLocations": ["836:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "836:9:46" - }, - "referencedDeclaration": 14040, - "src": "836:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14116, - "nodeType": "ArrayTypeName", - "src": "836:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14119, - "mutability": "mutable", - "name": "len", - "nameLocation": "870:3:46", - "nodeType": "VariableDeclaration", - "scope": 14158, - "src": "862:11:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14118, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "862:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "835:39:46" - }, - "returnParameters": { - "id": 14125, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14124, - "mutability": "mutable", - "name": "res", - "nameLocation": "941:3:46", - "nodeType": "VariableDeclaration", - "scope": 14158, - "src": "922:22:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14122, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14121, - "name": "MultiCall", - "nameLocations": ["922:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "922:9:46" - }, - "referencedDeclaration": 14040, - "src": "922:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14123, - "nodeType": "ArrayTypeName", - "src": "922:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "921:24:46" - }, - "scope": 14391, - "src": "822:323:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14175, - "nodeType": "Block", - "src": "1267:49:46", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 14170, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14162, - "src": "1289:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - { - "expression": { - "id": 14171, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14162, - "src": "1296:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1302:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1296:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14169, - "name": "copy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14158, - "src": "1284:4:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct MultiCall memory[] memory,uint256) pure returns (struct MultiCall memory[] memory)" - } - }, - "id": 14173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1284:25:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14168, - "id": 14174, - "nodeType": "Return", - "src": "1277:32:46" - } - ] - }, - "id": 14176, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "clone", - "nameLocation": "1160:5:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14163, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14162, - "mutability": "mutable", - "name": "calls", - "nameLocation": "1185:5:46", - "nodeType": "VariableDeclaration", - "scope": 14176, - "src": "1166:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14160, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14159, - "name": "MultiCall", - "nameLocations": ["1166:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1166:9:46" - }, - "referencedDeclaration": 14040, - "src": "1166:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14161, - "nodeType": "ArrayTypeName", - "src": "1166:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "1165:26:46" - }, - "returnParameters": { - "id": 14168, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14167, - "mutability": "mutable", - "name": "res", - "nameLocation": "1258:3:46", - "nodeType": "VariableDeclaration", - "scope": 14176, - "src": "1239:22:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14165, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14164, - "name": "MultiCall", - "nameLocations": ["1239:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1239:9:46" - }, - "referencedDeclaration": 14040, - "src": "1239:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14166, - "nodeType": "ArrayTypeName", - "src": "1239:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "1238:24:46" - }, - "scope": 14391, - "src": "1151:165:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14236, - "nodeType": "Block", - "src": "1465:278:46", - "statements": [ - { - "assignments": [14191], - "declarations": [ - { - "constant": false, - "id": 14191, - "mutability": "mutable", - "name": "len", - "nameLocation": "1483:3:46", - "nodeType": "VariableDeclaration", - "scope": 14236, - "src": "1475:11:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1475:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14194, - "initialValue": { - "expression": { - "id": 14192, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14180, - "src": "1489:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14193, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1495:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1489:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1475:26:46" - }, - { - "expression": { - "id": 14204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14195, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14188, - "src": "1511:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14200, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14191, - "src": "1533:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 14201, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1539:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1533:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14199, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1517:15:46", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct MultiCall memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 14197, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14196, - "name": "MultiCall", - "nameLocations": ["1521:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1521:9:46" - }, - "referencedDeclaration": 14040, - "src": "1521:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14198, - "nodeType": "ArrayTypeName", - "src": "1521:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - } - }, - "id": 14203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1517:24:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "src": "1511:30:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14205, - "nodeType": "ExpressionStatement", - "src": "1511:30:46" - }, - { - "body": { - "id": 14226, - "nodeType": "Block", - "src": "1578:116:46", - "statements": [ - { - "expression": { - "id": 14220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14212, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14188, - "src": "1592:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14214, - "indexExpression": { - "id": 14213, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14207, - "src": "1596:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1592:6:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 14216, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14180, - "src": "1615:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14218, - "indexExpression": { - "id": 14217, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14207, - "src": "1621:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1615:8:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14215, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "1601:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1601:23:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "1592:32:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14221, - "nodeType": "ExpressionStatement", - "src": "1592:32:46" - }, - { - "id": 14225, - "nodeType": "UncheckedBlock", - "src": "1638:46:46", - "statements": [ - { - "expression": { - "id": 14223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "1666:3:46", - "subExpression": { - "id": 14222, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14207, - "src": "1668:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14224, - "nodeType": "ExpressionStatement", - "src": "1666:3:46" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14209, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14207, - "src": "1567:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14210, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14191, - "src": "1571:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1567:7:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14227, - "initializationExpression": { - "assignments": [14207], - "declarations": [ - { - "constant": false, - "id": 14207, - "mutability": "mutable", - "name": "i", - "nameLocation": "1564:1:46", - "nodeType": "VariableDeclaration", - "scope": 14227, - "src": "1556:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14206, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1556:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14208, - "nodeType": "VariableDeclarationStatement", - "src": "1556:9:46" - }, - "nodeType": "ForStatement", - "src": "1551:143:46" - }, - { - "expression": { - "id": 14234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14228, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14188, - "src": "1703:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14230, - "indexExpression": { - "id": 14229, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14191, - "src": "1707:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1703:8:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 14232, - "name": "newCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14183, - "src": "1728:7:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14231, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "1714:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1714:22:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "1703:33:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14235, - "nodeType": "ExpressionStatement", - "src": "1703:33:46" - } - ] - }, - "id": 14237, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "append", - "nameLocation": "1331:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14180, - "mutability": "mutable", - "name": "calls", - "nameLocation": "1357:5:46", - "nodeType": "VariableDeclaration", - "scope": 14237, - "src": "1338:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14178, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14177, - "name": "MultiCall", - "nameLocations": ["1338:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1338:9:46" - }, - "referencedDeclaration": 14040, - "src": "1338:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14179, - "nodeType": "ArrayTypeName", - "src": "1338:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14183, - "mutability": "mutable", - "name": "newCall", - "nameLocation": "1381:7:46", - "nodeType": "VariableDeclaration", - "scope": 14237, - "src": "1364:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall" - }, - "typeName": { - "id": 14182, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14181, - "name": "MultiCall", - "nameLocations": ["1364:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1364:9:46" - }, - "referencedDeclaration": 14040, - "src": "1364:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "visibility": "internal" - } - ], - "src": "1337:52:46" - }, - "returnParameters": { - "id": 14189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14188, - "mutability": "mutable", - "name": "res", - "nameLocation": "1456:3:46", - "nodeType": "VariableDeclaration", - "scope": 14237, - "src": "1437:22:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14186, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14185, - "name": "MultiCall", - "nameLocations": ["1437:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1437:9:46" - }, - "referencedDeclaration": 14040, - "src": "1437:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14187, - "nodeType": "ArrayTypeName", - "src": "1437:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "1436:24:46" - }, - "scope": 14391, - "src": "1322:421:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14300, - "nodeType": "Block", - "src": "1893:285:46", - "statements": [ - { - "assignments": [14252], - "declarations": [ - { - "constant": false, - "id": 14252, - "mutability": "mutable", - "name": "len", - "nameLocation": "1911:3:46", - "nodeType": "VariableDeclaration", - "scope": 14300, - "src": "1903:11:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14251, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1903:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14255, - "initialValue": { - "expression": { - "id": 14253, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14241, - "src": "1917:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1923:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1917:12:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1903:26:46" - }, - { - "expression": { - "id": 14265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14256, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14249, - "src": "1939:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14261, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14252, - "src": "1961:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 14262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1967:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "1961:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14260, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1945:15:46", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct MultiCall memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 14258, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14257, - "name": "MultiCall", - "nameLocations": ["1949:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1949:9:46" - }, - "referencedDeclaration": 14040, - "src": "1949:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14259, - "nodeType": "ArrayTypeName", - "src": "1949:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - } - }, - "id": 14264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1945:24:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "src": "1939:30:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14266, - "nodeType": "ExpressionStatement", - "src": "1939:30:46" - }, - { - "expression": { - "id": 14273, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14267, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14249, - "src": "1979:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14269, - "indexExpression": { - "hexValue": "30", - "id": 14268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1983:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1979:6:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 14271, - "name": "newCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14244, - "src": "2002:7:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14270, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "1988:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1988:22:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "1979:31:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14274, - "nodeType": "ExpressionStatement", - "src": "1979:31:46" - }, - { - "body": { - "id": 14298, - "nodeType": "Block", - "src": "2056:116:46", - "statements": [ - { - "expression": { - "id": 14292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14284, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14249, - "src": "2070:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14286, - "indexExpression": { - "id": 14285, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14276, - "src": "2074:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2070:6:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 14288, - "name": "calls", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14241, - "src": "2093:5:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14290, - "indexExpression": { - "id": 14289, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14276, - "src": "2099:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2093:8:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14287, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "2079:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2079:23:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "2070:32:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14293, - "nodeType": "ExpressionStatement", - "src": "2070:32:46" - }, - { - "id": 14297, - "nodeType": "UncheckedBlock", - "src": "2116:46:46", - "statements": [ - { - "expression": { - "id": 14295, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "2144:3:46", - "subExpression": { - "id": 14294, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14276, - "src": "2146:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14296, - "nodeType": "ExpressionStatement", - "src": "2144:3:46" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14279, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14276, - "src": "2041:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14280, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14252, - "src": "2045:3:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 14281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2051:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "2045:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2041:11:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14299, - "initializationExpression": { - "assignments": [14276], - "declarations": [ - { - "constant": false, - "id": 14276, - "mutability": "mutable", - "name": "i", - "nameLocation": "2034:1:46", - "nodeType": "VariableDeclaration", - "scope": 14299, - "src": "2026:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14275, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2026:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14278, - "initialValue": { - "hexValue": "31", - "id": 14277, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2038:1:46", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "VariableDeclarationStatement", - "src": "2026:13:46" - }, - "nodeType": "ForStatement", - "src": "2021:151:46" - } - ] - }, - "id": 14301, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "prepend", - "nameLocation": "1758:7:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14245, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14241, - "mutability": "mutable", - "name": "calls", - "nameLocation": "1785:5:46", - "nodeType": "VariableDeclaration", - "scope": 14301, - "src": "1766:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14239, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14238, - "name": "MultiCall", - "nameLocations": ["1766:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1766:9:46" - }, - "referencedDeclaration": 14040, - "src": "1766:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14240, - "nodeType": "ArrayTypeName", - "src": "1766:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14244, - "mutability": "mutable", - "name": "newCall", - "nameLocation": "1809:7:46", - "nodeType": "VariableDeclaration", - "scope": 14301, - "src": "1792:24:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall" - }, - "typeName": { - "id": 14243, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14242, - "name": "MultiCall", - "nameLocations": ["1792:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1792:9:46" - }, - "referencedDeclaration": 14040, - "src": "1792:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "visibility": "internal" - } - ], - "src": "1765:52:46" - }, - "returnParameters": { - "id": 14250, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14249, - "mutability": "mutable", - "name": "res", - "nameLocation": "1884:3:46", - "nodeType": "VariableDeclaration", - "scope": 14301, - "src": "1865:22:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14247, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14246, - "name": "MultiCall", - "nameLocations": ["1865:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "1865:9:46" - }, - "referencedDeclaration": 14040, - "src": "1865:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14248, - "nodeType": "ArrayTypeName", - "src": "1865:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "1864:24:46" - }, - "scope": 14391, - "src": "1749:429:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14389, - "nodeType": "Block", - "src": "2329:497:46", - "statements": [ - { - "assignments": [14317], - "declarations": [ - { - "constant": false, - "id": 14317, - "mutability": "mutable", - "name": "len1", - "nameLocation": "2347:4:46", - "nodeType": "VariableDeclaration", - "scope": 14389, - "src": "2339:12:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14316, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2339:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14320, - "initialValue": { - "expression": { - "id": 14318, - "name": "calls1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14305, - "src": "2354:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2361:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2354:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2339:28:46" - }, - { - "assignments": [14322], - "declarations": [ - { - "constant": false, - "id": 14322, - "mutability": "mutable", - "name": "lenTotal", - "nameLocation": "2385:8:46", - "nodeType": "VariableDeclaration", - "scope": 14389, - "src": "2377:16:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14321, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2377:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14327, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14323, - "name": "len1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14317, - "src": "2396:4:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "expression": { - "id": 14324, - "name": "calls2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14309, - "src": "2403:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2410:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2403:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2396:20:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2377:39:46" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14331, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14328, - "name": "lenTotal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14322, - "src": "2431:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 14329, - "name": "calls1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14305, - "src": "2443:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2450:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2443:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2431:25:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14336, - "nodeType": "IfStatement", - "src": "2427:51:46", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 14333, - "name": "calls1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14305, - "src": "2471:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - ], - "id": 14332, - "name": "clone", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14176, - "src": "2465:5:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct MultiCall memory[] memory) pure returns (struct MultiCall memory[] memory)" - } - }, - "id": 14334, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2465:13:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14315, - "id": 14335, - "nodeType": "Return", - "src": "2458:20:46" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14340, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14337, - "name": "lenTotal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14322, - "src": "2492:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 14338, - "name": "calls2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14309, - "src": "2504:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14339, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2511:6:46", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2504:13:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2492:25:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14345, - "nodeType": "IfStatement", - "src": "2488:51:46", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 14342, - "name": "calls2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14309, - "src": "2532:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - ], - "id": 14341, - "name": "clone", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14176, - "src": "2526:5:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (struct MultiCall memory[] memory) pure returns (struct MultiCall memory[] memory)" - } - }, - "id": 14343, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2526:13:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "functionReturnParameters": 14315, - "id": 14344, - "nodeType": "Return", - "src": "2519:20:46" - } - }, - { - "expression": { - "id": 14353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14346, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14314, - "src": "2550:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 14351, - "name": "lenTotal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14322, - "src": "2572:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 14350, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2556:15:46", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct MultiCall memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 14348, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14347, - "name": "MultiCall", - "nameLocations": ["2560:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "2560:9:46" - }, - "referencedDeclaration": 14040, - "src": "2560:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14349, - "nodeType": "ArrayTypeName", - "src": "2560:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - } - }, - "id": 14352, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2556:25:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "src": "2550:31:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14354, - "nodeType": "ExpressionStatement", - "src": "2550:31:46" - }, - { - "body": { - "id": 14387, - "nodeType": "Block", - "src": "2624:196:46", - "statements": [ - { - "expression": { - "id": 14381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 14361, - "name": "res", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14314, - "src": "2638:3:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14363, - "indexExpression": { - "id": 14362, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2642:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2638:6:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14364, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2648:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14365, - "name": "len1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14317, - "src": "2652:4:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2648:8:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 14367, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2647:10:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "baseExpression": { - "id": 14374, - "name": "calls2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14309, - "src": "2733:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14378, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14377, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14375, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2740:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 14376, - "name": "len1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14317, - "src": "2744:4:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2740:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2733:16:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14373, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "2719:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2719:31:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "2647:103:46", - "trueExpression": { - "arguments": [ - { - "baseExpression": { - "id": 14369, - "name": "calls1", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14305, - "src": "2690:6:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall memory[] memory" - } - }, - "id": 14371, - "indexExpression": { - "id": 14370, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2697:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2690:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - ], - "id": 14368, - "name": "copyMulticall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14057, - "src": "2676:13:46", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_MultiCall_$14040_memory_ptr_$returns$_t_struct$_MultiCall_$14040_memory_ptr_$", - "typeString": "function (struct MultiCall memory) pure returns (struct MultiCall memory)" - } - }, - "id": 14372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2676:24:46", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "src": "2638:112:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_memory_ptr", - "typeString": "struct MultiCall memory" - } - }, - "id": 14382, - "nodeType": "ExpressionStatement", - "src": "2638:112:46" - }, - { - "id": 14386, - "nodeType": "UncheckedBlock", - "src": "2764:46:46", - "statements": [ - { - "expression": { - "id": 14384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "2792:3:46", - "subExpression": { - "id": 14383, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2794:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14385, - "nodeType": "ExpressionStatement", - "src": "2792:3:46" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14360, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14358, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14356, - "src": "2608:1:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14359, - "name": "lenTotal", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14322, - "src": "2612:8:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2608:12:46", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14388, - "initializationExpression": { - "assignments": [14356], - "declarations": [ - { - "constant": false, - "id": 14356, - "mutability": "mutable", - "name": "i", - "nameLocation": "2605:1:46", - "nodeType": "VariableDeclaration", - "scope": 14388, - "src": "2597:9:46", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14355, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2597:7:46", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14357, - "nodeType": "VariableDeclarationStatement", - "src": "2597:9:46" - }, - "nodeType": "ForStatement", - "src": "2592:228:46" - } - ] - }, - "id": 14390, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "concat", - "nameLocation": "2193:6:46", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14305, - "mutability": "mutable", - "name": "calls1", - "nameLocation": "2219:6:46", - "nodeType": "VariableDeclaration", - "scope": 14390, - "src": "2200:25:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14303, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14302, - "name": "MultiCall", - "nameLocations": ["2200:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "2200:9:46" - }, - "referencedDeclaration": 14040, - "src": "2200:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14304, - "nodeType": "ArrayTypeName", - "src": "2200:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14309, - "mutability": "mutable", - "name": "calls2", - "nameLocation": "2246:6:46", - "nodeType": "VariableDeclaration", - "scope": 14390, - "src": "2227:25:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14307, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14306, - "name": "MultiCall", - "nameLocations": ["2227:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "2227:9:46" - }, - "referencedDeclaration": 14040, - "src": "2227:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14308, - "nodeType": "ArrayTypeName", - "src": "2227:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "2199:54:46" - }, - "returnParameters": { - "id": 14315, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14314, - "mutability": "mutable", - "name": "res", - "nameLocation": "2320:3:46", - "nodeType": "VariableDeclaration", - "scope": 14390, - "src": "2301:22:46", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_memory_ptr_$dyn_memory_ptr", - "typeString": "struct MultiCall[]" - }, - "typeName": { - "baseType": { - "id": 14312, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14311, - "name": "MultiCall", - "nameLocations": ["2301:9:46"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14040, - "src": "2301:9:46" - }, - "referencedDeclaration": 14040, - "src": "2301:9:46", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MultiCall_$14040_storage_ptr", - "typeString": "struct MultiCall" - } - }, - "id": 14313, - "nodeType": "ArrayTypeName", - "src": "2301:11:46", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_MultiCall_$14040_storage_$dyn_storage_ptr", - "typeString": "struct MultiCall[]" - } - }, - "visibility": "internal" - } - ], - "src": "2300:24:46" - }, - "scope": 14391, - "src": "2184:642:46", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 14392, - "src": "120:2708:46", - "usedErrors": [] - } - ], - "src": "32:2797:46" - }, - "id": 46 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol", - "exportedSymbols": { - "Errors": [14033], - "HALF_PERCENT": [14403], - "PERCENTAGE_FACTOR": [14398], - "PercentageMath": [14470] - }, - "id": 14471, - "license": "agpl-3.0", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 14393, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "37:24:47" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol", - "file": "./Errors.sol", - "id": 14395, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 14471, - "sourceUnit": 14034, - "src": "63:38:47", - "symbolAliases": [ - { - "foreign": { - "id": 14394, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "72:6:47", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "constant": true, - "id": 14398, - "mutability": "constant", - "name": "PERCENTAGE_FACTOR", - "nameLocation": "119:17:47", - "nodeType": "VariableDeclaration", - "scope": 14471, - "src": "103:39:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14396, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "103:6:47", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "316534", - "id": 14397, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "139:3:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000_by_1", - "typeString": "int_const 10000" - }, - "value": "1e4" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 14403, - "mutability": "constant", - "name": "HALF_PERCENT", - "nameLocation": "192:12:47", - "nodeType": "VariableDeclaration", - "scope": 14471, - "src": "175:53:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14399, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "175:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "id": 14402, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "id": 14400, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "207:17:47", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "hexValue": "32", - "id": 14401, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "227:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "207:21:47", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "PercentageMath", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 14404, - "nodeType": "StructuredDocumentation", - "src": "231:291:47", - "text": " @title PercentageMath library\n @author Aave\n @notice Provides functions to perform percentage calculations\n @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\n @dev Operations are rounded half up*" - }, - "fullyImplemented": true, - "id": 14470, - "linearizedBaseContracts": [14470], - "name": "PercentageMath", - "nameLocation": "532:14:47", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 14434, - "nodeType": "Block", - "src": "920:380:47", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 14420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14414, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14407, - "src": "934:5:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 14415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "943:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "934:10:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14419, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14417, - "name": "percentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14409, - "src": "948:10:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 14418, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "962:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "948:15:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "934:29:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14424, - "nodeType": "IfStatement", - "src": "930:80:47", - "trueBody": { - "id": 14423, - "nodeType": "Block", - "src": "965:45:47", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 14421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "986:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 14413, - "id": 14422, - "nodeType": "Return", - "src": "979:8:47" - } - ] - } - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14425, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14407, - "src": "1227:5:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 14426, - "name": "percentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14409, - "src": "1235:10:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1227:18:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 14428, - "name": "HALF_PERCENT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14403, - "src": "1248:12:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1227:33:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 14430, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1226:35:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 14431, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "1264:17:47", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "1226:55:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 14413, - "id": 14433, - "nodeType": "Return", - "src": "1219:62:47" - } - ] - }, - "documentation": { - "id": 14405, - "nodeType": "StructuredDocumentation", - "src": "553:247:47", - "text": " @dev Executes a percentage multiplication\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return The percentage of value*" - }, - "id": 14435, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "percentMul", - "nameLocation": "814:10:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14410, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14407, - "mutability": "mutable", - "name": "value", - "nameLocation": "833:5:47", - "nodeType": "VariableDeclaration", - "scope": 14435, - "src": "825:13:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14406, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "825:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14409, - "mutability": "mutable", - "name": "percentage", - "nameLocation": "848:10:47", - "nodeType": "VariableDeclaration", - "scope": 14435, - "src": "840:18:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14408, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "840:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "824:35:47" - }, - "returnParameters": { - "id": 14413, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14412, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 14435, - "src": "907:7:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14411, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "907:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "906:9:47" - }, - "scope": 14470, - "src": "805:495:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 14468, - "nodeType": "Block", - "src": "1676:427:47", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14446, - "name": "percentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14440, - "src": "1694:10:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 14447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1708:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1694:15:47", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "expression": { - "id": 14449, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14033, - "src": "1711:6:47", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$14033_$", - "typeString": "type(library Errors)" - } - }, - "id": 14450, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1718:21:47", - "memberName": "MATH_DIVISION_BY_ZERO", - "nodeType": "MemberAccess", - "referencedDeclaration": 13963, - "src": "1711:28:47", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 14445, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1686:7:47", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 14451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1686:54:47", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14452, - "nodeType": "ExpressionStatement", - "src": "1686:54:47" - }, - { - "assignments": [14454], - "declarations": [ - { - "constant": false, - "id": 14454, - "mutability": "mutable", - "name": "halfPercentage", - "nameLocation": "1770:14:47", - "nodeType": "VariableDeclaration", - "scope": 14468, - "src": "1762:22:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14453, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1762:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14458, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14455, - "name": "percentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14440, - "src": "1787:10:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "hexValue": "32", - "id": 14456, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1800:1:47", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "1787:14:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1762:39:47" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14459, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14438, - "src": "2040:5:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 14460, - "name": "PERCENTAGE_FACTOR", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14398, - "src": "2048:17:47", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "2040:25:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 14462, - "name": "halfPercentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14454, - "src": "2068:14:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2040:42:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 14464, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2039:44:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 14465, - "name": "percentage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14440, - "src": "2086:10:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2039:57:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 14444, - "id": 14467, - "nodeType": "Return", - "src": "2032:64:47" - } - ] - }, - "documentation": { - "id": 14436, - "nodeType": "StructuredDocumentation", - "src": "1306:250:47", - "text": " @dev Executes a percentage division\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return The value divided the percentage*" - }, - "id": 14469, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "percentDiv", - "nameLocation": "1570:10:47", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14441, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14438, - "mutability": "mutable", - "name": "value", - "nameLocation": "1589:5:47", - "nodeType": "VariableDeclaration", - "scope": 14469, - "src": "1581:13:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14437, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1581:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14440, - "mutability": "mutable", - "name": "percentage", - "nameLocation": "1604:10:47", - "nodeType": "VariableDeclaration", - "scope": 14469, - "src": "1596:18:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14439, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1596:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1580:35:47" - }, - "returnParameters": { - "id": 14444, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14443, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 14469, - "src": "1663:7:47", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14442, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1663:7:47", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1662:9:47" - }, - "scope": 14470, - "src": "1561:542:47", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 14471, - "src": "524:1581:47", - "usedErrors": [] - } - ], - "src": "37:2069:47" - }, - "id": 47 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol", - "exportedSymbols": { - "AddressProviderData": [14653], - "ContractAdapter": [14492], - "CreditAccountData": [14533], - "CreditManagerData": [14590], - "Exchange": [14478], - "MiningApproval": [14658], - "PoolData": [14623], - "TokenBalance": [14487], - "TokenInfo": [14630] - }, - "id": 14659, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 14472, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "123:24:48" - }, - { - "canonicalName": "Exchange", - "id": 14478, - "members": [ - { - "constant": false, - "id": 14475, - "mutability": "mutable", - "name": "path", - "nameLocation": "210:4:48", - "nodeType": "VariableDeclaration", - "scope": 14478, - "src": "200:14:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 14473, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "200:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 14474, - "nodeType": "ArrayTypeName", - "src": "200:9:48", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14477, - "mutability": "mutable", - "name": "amountOutMin", - "nameLocation": "228:12:48", - "nodeType": "VariableDeclaration", - "scope": 14478, - "src": "220:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14476, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "220:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Exchange", - "nameLocation": "185:8:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "178:65:48", - "visibility": "public" - }, - { - "canonicalName": "TokenBalance", - "id": 14487, - "members": [ - { - "constant": false, - "id": 14480, - "mutability": "mutable", - "name": "token", - "nameLocation": "279:5:48", - "nodeType": "VariableDeclaration", - "scope": 14487, - "src": "271:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14479, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "271:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14482, - "mutability": "mutable", - "name": "balance", - "nameLocation": "298:7:48", - "nodeType": "VariableDeclaration", - "scope": 14487, - "src": "290:15:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14481, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "290:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14484, - "mutability": "mutable", - "name": "isAllowed", - "nameLocation": "316:9:48", - "nodeType": "VariableDeclaration", - "scope": 14487, - "src": "311:14:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14483, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "311:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14486, - "mutability": "mutable", - "name": "isEnabled", - "nameLocation": "336:9:48", - "nodeType": "VariableDeclaration", - "scope": 14487, - "src": "331:14:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14485, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "331:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "TokenBalance", - "nameLocation": "252:12:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "245:103:48", - "visibility": "public" - }, - { - "canonicalName": "ContractAdapter", - "id": 14492, - "members": [ - { - "constant": false, - "id": 14489, - "mutability": "mutable", - "name": "allowedContract", - "nameLocation": "387:15:48", - "nodeType": "VariableDeclaration", - "scope": 14492, - "src": "379:23:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14488, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "379:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14491, - "mutability": "mutable", - "name": "adapter", - "nameLocation": "416:7:48", - "nodeType": "VariableDeclaration", - "scope": 14492, - "src": "408:15:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14490, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "408:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "name": "ContractAdapter", - "nameLocation": "357:15:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "350:76:48", - "visibility": "public" - }, - { - "canonicalName": "CreditAccountData", - "id": 14533, - "members": [ - { - "constant": false, - "id": 14494, - "mutability": "mutable", - "name": "addr", - "nameLocation": "467:4:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "459:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14493, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "459:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14496, - "mutability": "mutable", - "name": "borrower", - "nameLocation": "485:8:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "477:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14495, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "477:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14498, - "mutability": "mutable", - "name": "inUse", - "nameLocation": "504:5:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "499:10:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14497, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "499:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14500, - "mutability": "mutable", - "name": "creditManager", - "nameLocation": "523:13:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "515:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14499, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "515:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14502, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "550:10:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "542:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14501, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "542:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14504, - "mutability": "mutable", - "name": "borrowedAmountPlusInterest", - "nameLocation": "574:26:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "566:34:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14503, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "566:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14506, - "mutability": "mutable", - "name": "borrowedAmountPlusInterestAndFees", - "nameLocation": "614:33:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "606:41:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14505, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "606:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14508, - "mutability": "mutable", - "name": "totalValue", - "nameLocation": "661:10:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "653:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14507, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "653:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14510, - "mutability": "mutable", - "name": "healthFactor", - "nameLocation": "685:12:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "677:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14509, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "677:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14512, - "mutability": "mutable", - "name": "borrowRate", - "nameLocation": "711:10:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "703:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "703:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14516, - "mutability": "mutable", - "name": "balances", - "nameLocation": "742:8:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "727:23:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_storage_$dyn_storage_ptr", - "typeString": "struct TokenBalance[]" - }, - "typeName": { - "baseType": { - "id": 14514, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14513, - "name": "TokenBalance", - "nameLocations": ["727:12:48"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14487, - "src": "727:12:48" - }, - "referencedDeclaration": 14487, - "src": "727:12:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TokenBalance_$14487_storage_ptr", - "typeString": "struct TokenBalance" - } - }, - "id": 14515, - "nodeType": "ArrayTypeName", - "src": "727:14:48", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_TokenBalance_$14487_storage_$dyn_storage_ptr", - "typeString": "struct TokenBalance[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14518, - "mutability": "mutable", - "name": "repayAmount", - "nameLocation": "764:11:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "756:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14517, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "756:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14520, - "mutability": "mutable", - "name": "liquidationAmount", - "nameLocation": "813:17:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "805:25:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14519, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "805:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14522, - "mutability": "mutable", - "name": "canBeClosed", - "nameLocation": "865:11:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "860:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14521, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "860:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14524, - "mutability": "mutable", - "name": "borrowedAmount", - "nameLocation": "914:14:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "906:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14523, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "906:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14526, - "mutability": "mutable", - "name": "cumulativeIndexAtOpen", - "nameLocation": "942:21:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "934:29:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "934:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14528, - "mutability": "mutable", - "name": "since", - "nameLocation": "977:5:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "969:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14527, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "969:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14530, - "mutability": "mutable", - "name": "version", - "nameLocation": "994:7:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "988:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14529, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "988:5:48", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14532, - "mutability": "mutable", - "name": "enabledTokenMask", - "nameLocation": "1015:16:48", - "nodeType": "VariableDeclaration", - "scope": 14533, - "src": "1007:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14531, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1007:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "CreditAccountData", - "nameLocation": "435:17:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "428:606:48", - "visibility": "public" - }, - { - "canonicalName": "CreditManagerData", - "id": 14590, - "members": [ - { - "constant": false, - "id": 14535, - "mutability": "mutable", - "name": "addr", - "nameLocation": "1075:4:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1067:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14534, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1067:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14537, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "1093:10:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1085:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14536, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1085:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14539, - "mutability": "mutable", - "name": "pool", - "nameLocation": "1117:4:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1109:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14538, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1109:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14541, - "mutability": "mutable", - "name": "isWETH", - "nameLocation": "1132:6:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1127:11:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14540, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1127:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14543, - "mutability": "mutable", - "name": "canBorrow", - "nameLocation": "1149:9:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1144:14:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14542, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1144:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14545, - "mutability": "mutable", - "name": "borrowRate", - "nameLocation": "1172:10:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1164:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14544, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1164:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14547, - "mutability": "mutable", - "name": "minAmount", - "nameLocation": "1196:9:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1188:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14546, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1188:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14549, - "mutability": "mutable", - "name": "maxAmount", - "nameLocation": "1219:9:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1211:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14548, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1211:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14551, - "mutability": "mutable", - "name": "maxLeverageFactor", - "nameLocation": "1242:17:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1234:25:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14550, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1234:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14553, - "mutability": "mutable", - "name": "availableLiquidity", - "nameLocation": "1288:18:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1280:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14552, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1280:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14556, - "mutability": "mutable", - "name": "collateralTokens", - "nameLocation": "1322:16:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1312:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 14554, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1312:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 14555, - "nodeType": "ArrayTypeName", - "src": "1312:9:48", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14560, - "mutability": "mutable", - "name": "adapters", - "nameLocation": "1362:8:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1344:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_storage_$dyn_storage_ptr", - "typeString": "struct ContractAdapter[]" - }, - "typeName": { - "baseType": { - "id": 14558, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14557, - "name": "ContractAdapter", - "nameLocations": ["1344:15:48"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14492, - "src": "1344:15:48" - }, - "referencedDeclaration": 14492, - "src": "1344:15:48", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ContractAdapter_$14492_storage_ptr", - "typeString": "struct ContractAdapter" - } - }, - "id": 14559, - "nodeType": "ArrayTypeName", - "src": "1344:17:48", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_ContractAdapter_$14492_storage_$dyn_storage_ptr", - "typeString": "struct ContractAdapter[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14563, - "mutability": "mutable", - "name": "liquidationThresholds", - "nameLocation": "1386:21:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1376:31:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 14561, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1376:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14562, - "nodeType": "ArrayTypeName", - "src": "1376:9:48", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14565, - "mutability": "mutable", - "name": "version", - "nameLocation": "1419:7:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1413:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14564, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1413:5:48", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14567, - "mutability": "mutable", - "name": "creditFacade", - "nameLocation": "1440:12:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1432:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14566, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1432:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14569, - "mutability": "mutable", - "name": "creditConfigurator", - "nameLocation": "1502:18:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1494:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14568, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1494:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14571, - "mutability": "mutable", - "name": "isDegenMode", - "nameLocation": "1573:11:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1568:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14570, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1568:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14573, - "mutability": "mutable", - "name": "degenNFT", - "nameLocation": "1644:8:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1636:16:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14572, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1636:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14575, - "mutability": "mutable", - "name": "isIncreaseDebtForbidden", - "nameLocation": "1717:23:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1712:28:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14574, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1712:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14577, - "mutability": "mutable", - "name": "forbiddenTokenMask", - "nameLocation": "1803:18:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1795:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14576, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1795:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14579, - "mutability": "mutable", - "name": "maxEnabledTokensLength", - "nameLocation": "1887:22:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1881:28:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14578, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1881:5:48", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14581, - "mutability": "mutable", - "name": "feeInterest", - "nameLocation": "1983:11:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "1976:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14580, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1976:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14583, - "mutability": "mutable", - "name": "feeLiquidation", - "nameLocation": "2078:14:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "2071:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14582, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2071:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14585, - "mutability": "mutable", - "name": "liquidationDiscount", - "nameLocation": "2176:19:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "2169:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14584, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2169:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14587, - "mutability": "mutable", - "name": "feeLiquidationExpired", - "nameLocation": "2307:21:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "2300:28:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14586, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2300:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14589, - "mutability": "mutable", - "name": "liquidationDiscountExpired", - "nameLocation": "2397:26:48", - "nodeType": "VariableDeclaration", - "scope": 14590, - "src": "2390:33:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 14588, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2390:6:48", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "name": "CreditManagerData", - "nameLocation": "1043:17:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "1036:1477:48", - "visibility": "public" - }, - { - "canonicalName": "PoolData", - "id": 14623, - "members": [ - { - "constant": false, - "id": 14592, - "mutability": "mutable", - "name": "addr", - "nameLocation": "2545:4:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2537:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14591, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2537:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14594, - "mutability": "mutable", - "name": "isWETH", - "nameLocation": "2560:6:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2555:11:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14593, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2555:4:48", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14596, - "mutability": "mutable", - "name": "underlying", - "nameLocation": "2580:10:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2572:18:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14595, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2572:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14598, - "mutability": "mutable", - "name": "dieselToken", - "nameLocation": "2604:11:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2596:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14597, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2596:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14600, - "mutability": "mutable", - "name": "linearCumulativeIndex", - "nameLocation": "2629:21:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2621:29:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14599, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2621:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14602, - "mutability": "mutable", - "name": "availableLiquidity", - "nameLocation": "2664:18:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2656:26:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14601, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2656:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14604, - "mutability": "mutable", - "name": "expectedLiquidity", - "nameLocation": "2696:17:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2688:25:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14603, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2688:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14606, - "mutability": "mutable", - "name": "expectedLiquidityLimit", - "nameLocation": "2727:22:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2719:30:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14605, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2719:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14608, - "mutability": "mutable", - "name": "totalBorrowed", - "nameLocation": "2763:13:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2755:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14607, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2755:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14610, - "mutability": "mutable", - "name": "depositAPY_RAY", - "nameLocation": "2790:14:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2782:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14609, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2782:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14612, - "mutability": "mutable", - "name": "borrowAPY_RAY", - "nameLocation": "2818:13:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2810:21:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14611, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2810:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14614, - "mutability": "mutable", - "name": "dieselRate_RAY", - "nameLocation": "2845:14:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2837:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14613, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2837:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14616, - "mutability": "mutable", - "name": "withdrawFee", - "nameLocation": "2873:11:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2865:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14615, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2865:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14618, - "mutability": "mutable", - "name": "cumulativeIndex_RAY", - "nameLocation": "2898:19:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2890:27:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14617, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2890:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14620, - "mutability": "mutable", - "name": "timestampLU", - "nameLocation": "2931:11:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2923:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14619, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2923:7:48", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14622, - "mutability": "mutable", - "name": "version", - "nameLocation": "2954:7:48", - "nodeType": "VariableDeclaration", - "scope": 14623, - "src": "2948:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14621, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2948:5:48", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "name": "PoolData", - "nameLocation": "2522:8:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "2515:449:48", - "visibility": "public" - }, - { - "canonicalName": "TokenInfo", - "id": 14630, - "members": [ - { - "constant": false, - "id": 14625, - "mutability": "mutable", - "name": "addr", - "nameLocation": "2997:4:48", - "nodeType": "VariableDeclaration", - "scope": 14630, - "src": "2989:12:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14624, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2989:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14627, - "mutability": "mutable", - "name": "symbol", - "nameLocation": "3014:6:48", - "nodeType": "VariableDeclaration", - "scope": 14630, - "src": "3007:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 14626, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3007:6:48", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14629, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "3032:8:48", - "nodeType": "VariableDeclaration", - "scope": 14630, - "src": "3026:14:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14628, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3026:5:48", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "name": "TokenInfo", - "nameLocation": "2973:9:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "2966:77:48", - "visibility": "public" - }, - { - "canonicalName": "AddressProviderData", - "id": 14653, - "members": [ - { - "constant": false, - "id": 14632, - "mutability": "mutable", - "name": "contractRegister", - "nameLocation": "3086:16:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3078:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14631, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3078:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14634, - "mutability": "mutable", - "name": "acl", - "nameLocation": "3116:3:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3108:11:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14633, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3108:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14636, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "3133:11:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3125:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3125:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14638, - "mutability": "mutable", - "name": "traderAccountFactory", - "nameLocation": "3158:20:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3150:28:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14637, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3150:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14640, - "mutability": "mutable", - "name": "dataCompressor", - "nameLocation": "3192:14:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3184:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3184:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14642, - "mutability": "mutable", - "name": "farmingFactory", - "nameLocation": "3220:14:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3212:22:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14641, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3212:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14644, - "mutability": "mutable", - "name": "accountMiner", - "nameLocation": "3248:12:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3240:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14643, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3240:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14646, - "mutability": "mutable", - "name": "treasuryContract", - "nameLocation": "3274:16:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3266:24:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14645, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3266:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14648, - "mutability": "mutable", - "name": "gearToken", - "nameLocation": "3304:9:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3296:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14647, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3296:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14650, - "mutability": "mutable", - "name": "wethToken", - "nameLocation": "3327:9:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3319:17:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14649, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3319:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14652, - "mutability": "mutable", - "name": "wethGateway", - "nameLocation": "3350:11:48", - "nodeType": "VariableDeclaration", - "scope": 14653, - "src": "3342:19:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14651, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3342:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "name": "AddressProviderData", - "nameLocation": "3052:19:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "3045:319:48", - "visibility": "public" - }, - { - "canonicalName": "MiningApproval", - "id": 14658, - "members": [ - { - "constant": false, - "id": 14655, - "mutability": "mutable", - "name": "token", - "nameLocation": "3402:5:48", - "nodeType": "VariableDeclaration", - "scope": 14658, - "src": "3394:13:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14654, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3394:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14657, - "mutability": "mutable", - "name": "swapContract", - "nameLocation": "3421:12:48", - "nodeType": "VariableDeclaration", - "scope": 14658, - "src": "3413:20:48", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14656, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3413:7:48", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "name": "MiningApproval", - "nameLocation": "3373:14:48", - "nodeType": "StructDefinition", - "scope": 14659, - "src": "3366:70:48", - "visibility": "public" - } - ], - "src": "123:3314:48" - }, - "id": 48 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol", - "exportedSymbols": { - "IPriceOracleV2Exceptions": [12858], - "PriceFeedChecker": [14696] - }, - "id": 14697, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 14660, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:49" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "file": "../interfaces/IPriceOracle.sol", - "id": 14662, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 14697, - "sourceUnit": 12954, - "src": "154:74:49", - "symbolAliases": [ - { - "foreign": { - "id": 14661, - "name": "IPriceOracleV2Exceptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12858, - "src": "163:24:49", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 14664, - "name": "IPriceOracleV2Exceptions", - "nameLocations": ["318:24:49"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12858, - "src": "318:24:49" - }, - "id": 14665, - "nodeType": "InheritanceSpecifier", - "src": "318:24:49" - } - ], - "canonicalName": "PriceFeedChecker", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 14663, - "nodeType": "StructuredDocumentation", - "src": "230:59:49", - "text": "@title Sanity checker for Chainlink price feed results" - }, - "fullyImplemented": true, - "id": 14696, - "linearizedBaseContracts": [14696, 12858], - "name": "PriceFeedChecker", - "nameLocation": "298:16:49", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 14694, - "nodeType": "Block", - "src": "496:188:49", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 14678, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14676, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14669, - "src": "510:5:49", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "hexValue": "30", - "id": 14677, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "519:1:49", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "510:10:49", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14682, - "nodeType": "IfStatement", - "src": "506:43:49", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14679, - "name": "ZeroPriceException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12851, - "src": "529:18:49", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "529:20:49", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14681, - "nodeType": "RevertStatement", - "src": "522:27:49" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 14689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "id": 14685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14683, - "name": "answeredInRound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14673, - "src": "575:15:49", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14684, - "name": "roundID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14667, - "src": "593:7:49", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "src": "575:25:49", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14686, - "name": "updatedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14671, - "src": "604:9:49", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 14687, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "617:1:49", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "604:14:49", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "575:43:49", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14693, - "nodeType": "IfStatement", - "src": "571:94:49", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14690, - "name": "ChainPriceStaleException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12854, - "src": "639:24:49", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "639:26:49", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14692, - "nodeType": "RevertStatement", - "src": "632:33:49" - } - } - ] - }, - "id": 14695, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkAnswer", - "nameLocation": "358:12:49", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14674, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14667, - "mutability": "mutable", - "name": "roundID", - "nameLocation": "387:7:49", - "nodeType": "VariableDeclaration", - "scope": 14695, - "src": "380:14:49", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 14666, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "380:6:49", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14669, - "mutability": "mutable", - "name": "price", - "nameLocation": "411:5:49", - "nodeType": "VariableDeclaration", - "scope": 14695, - "src": "404:12:49", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 14668, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "404:6:49", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14671, - "mutability": "mutable", - "name": "updatedAt", - "nameLocation": "434:9:49", - "nodeType": "VariableDeclaration", - "scope": 14695, - "src": "426:17:49", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14670, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "426:7:49", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14673, - "mutability": "mutable", - "name": "answeredInRound", - "nameLocation": "460:15:49", - "nodeType": "VariableDeclaration", - "scope": 14695, - "src": "453:22:49", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 14672, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "453:6:49", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "370:111:49" - }, - "returnParameters": { - "id": 14675, - "nodeType": "ParameterList", - "parameters": [], - "src": "496:0:49" - }, - "scope": 14696, - "src": "349:335:49", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 14697, - "src": "289:397:49", - "usedErrors": [12851, 12854, 12857] - } - ], - "src": "128:559:49" - }, - "id": 49 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol", - "exportedSymbols": { - "ACLTrait": [2057], - "Address": [18720], - "AddressIsNotContractException": [12542], - "AggregatorV3Interface": [1782], - "DECIMALS_SHIFT": [14730], - "ERC20": [17827], - "IPriceFeedType": [12836], - "IPriceOracleV2": [12942], - "IncorrectPriceFeedException": [12548], - "IncorrectTokenContractException": [12545], - "PriceFeedChecker": [14696], - "PriceFeedConfig": [14722], - "PriceOracle": [15267], - "SKIP_PRICE_CHECK_FLAG": [14727], - "ZeroAddressException": [12534] - }, - "id": 15268, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 14698, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "128:24:50" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol", - "id": 14700, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 1783, - "src": "154:147:50", - "symbolAliases": [ - { - "foreign": { - "id": 14699, - "name": "AggregatorV3Interface", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1782, - "src": "163:21:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "id": 14702, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 17828, - "src": "302:110:50", - "symbolAliases": [ - { - "foreign": { - "id": 14701, - "name": "ERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17827, - "src": "311:5:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "id": 14704, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 18721, - "src": "413:108:50", - "symbolAliases": [ - { - "foreign": { - "id": 14703, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "422:7:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol", - "file": "../interfaces/IPriceFeedType.sol", - "id": 14706, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 12837, - "src": "523:66:50", - "symbolAliases": [ - { - "foreign": { - "id": 14705, - "name": "IPriceFeedType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12836, - "src": "532:14:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol", - "file": "./PriceFeedChecker.sol", - "id": 14708, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 14697, - "src": "590:58:50", - "symbolAliases": [ - { - "foreign": { - "id": 14707, - "name": "PriceFeedChecker", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14696, - "src": "599:16:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol", - "file": "../interfaces/IPriceOracle.sol", - "id": 14710, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 12954, - "src": "649:64:50", - "symbolAliases": [ - { - "foreign": { - "id": 14709, - "name": "IPriceOracleV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12942, - "src": "658:14:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol", - "file": "../core/ACLTrait.sol", - "id": 14712, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 2058, - "src": "714:48:50", - "symbolAliases": [ - { - "foreign": { - "id": 14711, - "name": "ACLTrait", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2057, - "src": "723:8:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol", - "file": "../interfaces/IErrors.sol", - "id": 14717, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 15268, - "sourceUnit": 12561, - "src": "792:158:50", - "symbolAliases": [ - { - "foreign": { - "id": 14713, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "801:20:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 14714, - "name": "AddressIsNotContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12542, - "src": "823:29:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 14715, - "name": "IncorrectPriceFeedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12548, - "src": "854:27:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 14716, - "name": "IncorrectTokenContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12545, - "src": "883:31:50", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "PriceFeedConfig", - "id": 14722, - "members": [ - { - "constant": false, - "id": 14719, - "mutability": "mutable", - "name": "token", - "nameLocation": "989:5:50", - "nodeType": "VariableDeclaration", - "scope": 14722, - "src": "981:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14718, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "981:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14721, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "1008:9:50", - "nodeType": "VariableDeclaration", - "scope": 14722, - "src": "1000:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1000:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "name": "PriceFeedConfig", - "nameLocation": "959:15:50", - "nodeType": "StructDefinition", - "scope": 15268, - "src": "952:68:50", - "visibility": "public" - }, - { - "constant": true, - "id": 14727, - "mutability": "constant", - "name": "SKIP_PRICE_CHECK_FLAG", - "nameLocation": "1039:21:50", - "nodeType": "VariableDeclaration", - "scope": 15268, - "src": "1022:49:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14723, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1022:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "commonType": { - "typeIdentifier": "t_rational_2923003274661805836407369665432566039311865085952_by_1", - "typeString": "int_const 2923...(41 digits omitted)...5952" - }, - "id": 14726, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "31", - "id": 14724, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1063:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "hexValue": "313631", - "id": 14725, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1068:3:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_161_by_1", - "typeString": "int_const 161" - }, - "value": "161" - }, - "src": "1063:8:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_2923003274661805836407369665432566039311865085952_by_1", - "typeString": "int_const 2923...(41 digits omitted)...5952" - } - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 14730, - "mutability": "constant", - "name": "DECIMALS_SHIFT", - "nameLocation": "1090:14:50", - "nodeType": "VariableDeclaration", - "scope": 15268, - "src": "1073:37:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14728, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1073:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "313632", - "id": 14729, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1107:3:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_162_by_1", - "typeString": "int_const 162" - }, - "value": "162" - }, - "visibility": "internal" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 14732, - "name": "ACLTrait", - "nameLocations": ["1271:8:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "1271:8:50" - }, - "id": 14733, - "nodeType": "InheritanceSpecifier", - "src": "1271:8:50" - }, - { - "baseName": { - "id": 14734, - "name": "IPriceOracleV2", - "nameLocations": ["1281:14:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 12942, - "src": "1281:14:50" - }, - "id": 14735, - "nodeType": "InheritanceSpecifier", - "src": "1281:14:50" - }, - { - "baseName": { - "id": 14736, - "name": "PriceFeedChecker", - "nameLocations": ["1297:16:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14696, - "src": "1297:16:50" - }, - "id": 14737, - "nodeType": "InheritanceSpecifier", - "src": "1297:16:50" - } - ], - "canonicalName": "PriceOracle", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 14731, - "nodeType": "StructuredDocumentation", - "src": "1113:134:50", - "text": "@title Price Oracle based on Chainlink's price feeds\n @notice Works as router and provide cross rates using converting via USD" - }, - "fullyImplemented": true, - "id": 15267, - "linearizedBaseContracts": [ - 15267, 14696, 12942, 12963, 12858, 12848, 2057, 17186, 18742 - ], - "name": "PriceOracle", - "nameLocation": "1256:11:50", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 14740, - "libraryName": { - "id": 14738, - "name": "Address", - "nameLocations": ["1326:7:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "1326:7:50" - }, - "nodeType": "UsingForDirective", - "src": "1320:26:50", - "typeName": { - "id": 14739, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1338:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "constant": false, - "documentation": { - "id": 14741, - "nodeType": "StructuredDocumentation", - "src": "1352:125:50", - "text": "@dev Map of token addresses to corresponding price feeds and their parameters,\n encoded into a single uint256" - }, - "id": 14745, - "mutability": "mutable", - "name": "_priceFeeds", - "nameLocation": "1519:11:50", - "nodeType": "VariableDeclaration", - "scope": 15267, - "src": "1482:48:50", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 14744, - "keyType": { - "id": 14742, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1490:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1482:27:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 14743, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1501:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - }, - { - "baseFunctions": [12962], - "constant": true, - "functionSelector": "54fd4d50", - "id": 14748, - "mutability": "constant", - "name": "version", - "nameLocation": "1585:7:50", - "nodeType": "VariableDeclaration", - "scope": 15267, - "src": "1561:35:50", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14746, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1561:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "32", - "id": 14747, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1595:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "public" - }, - { - "body": { - "id": 14789, - "nodeType": "Block", - "src": "1713:238:50", - "statements": [ - { - "assignments": [14761], - "declarations": [ - { - "constant": false, - "id": 14761, - "mutability": "mutable", - "name": "len", - "nameLocation": "1731:3:50", - "nodeType": "VariableDeclaration", - "scope": 14789, - "src": "1723:11:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14760, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1723:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14764, - "initialValue": { - "expression": { - "id": 14762, - "name": "defaults", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14754, - "src": "1737:8:50", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 14763, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1746:6:50", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1737:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1723:29:50" - }, - { - "body": { - "id": 14787, - "nodeType": "Block", - "src": "1793:152:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 14773, - "name": "defaults", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14754, - "src": "1821:8:50", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 14775, - "indexExpression": { - "id": 14774, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14766, - "src": "1830:1:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1821:11:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 14776, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1833:5:50", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14719, - "src": "1821:17:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "baseExpression": { - "id": 14777, - "name": "defaults", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14754, - "src": "1840:8:50", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 14779, - "indexExpression": { - "id": 14778, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14766, - "src": "1849:1:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1840:11:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 14780, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1852:9:50", - "memberName": "priceFeed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14721, - "src": "1840:21:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14772, - "name": "_addPriceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14969, - "src": "1807:13:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 14781, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1807:55:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14782, - "nodeType": "ExpressionStatement", - "src": "1807:55:50" - }, - { - "id": 14786, - "nodeType": "UncheckedBlock", - "src": "1889:46:50", - "statements": [ - { - "expression": { - "id": 14784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "1917:3:50", - "subExpression": { - "id": 14783, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14766, - "src": "1919:1:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 14785, - "nodeType": "ExpressionStatement", - "src": "1917:3:50" - } - ] - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 14771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14769, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14766, - "src": "1782:1:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 14770, - "name": "len", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14761, - "src": "1786:3:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1782:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14788, - "initializationExpression": { - "assignments": [14766], - "declarations": [ - { - "constant": false, - "id": 14766, - "mutability": "mutable", - "name": "i", - "nameLocation": "1775:1:50", - "nodeType": "VariableDeclaration", - "scope": 14788, - "src": "1767:9:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14765, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1767:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 14768, - "initialValue": { - "hexValue": "30", - "id": 14767, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1779:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1767:13:50" - }, - "nodeType": "ForStatement", - "src": "1762:183:50" - } - ] - }, - "id": 14790, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 14757, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14750, - "src": "1692:15:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 14758, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 14756, - "name": "ACLTrait", - "nameLocations": ["1683:8:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2057, - "src": "1683:8:50" - }, - "nodeType": "ModifierInvocation", - "src": "1683:25:50" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14755, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14750, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "1623:15:50", - "nodeType": "VariableDeclaration", - "scope": 14790, - "src": "1615:23:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14749, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1615:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14754, - "mutability": "mutable", - "name": "defaults", - "nameLocation": "1665:8:50", - "nodeType": "VariableDeclaration", - "scope": 14790, - "src": "1640:33:50", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig[]" - }, - "typeName": { - "baseType": { - "id": 14752, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 14751, - "name": "PriceFeedConfig", - "nameLocations": ["1640:15:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14722, - "src": "1640:15:50" - }, - "referencedDeclaration": 14722, - "src": "1640:15:50", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_storage_ptr", - "typeString": "struct PriceFeedConfig" - } - }, - "id": 14753, - "nodeType": "ArrayTypeName", - "src": "1640:17:50", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_storage_$dyn_storage_ptr", - "typeString": "struct PriceFeedConfig[]" - } - }, - "visibility": "internal" - } - ], - "src": "1614:60:50" - }, - "returnParameters": { - "id": 14759, - "nodeType": "ParameterList", - "parameters": [], - "src": "1713:0:50" - }, - "scope": 15267, - "src": "1603:348:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 14805, - "nodeType": "Block", - "src": "2293:48:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 14801, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14793, - "src": "2317:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 14802, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14795, - "src": "2324:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14800, - "name": "_addPriceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14969, - "src": "2303:13:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 14803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2303:31:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14804, - "nodeType": "ExpressionStatement", - "src": "2303:31:50" - } - ] - }, - "documentation": { - "id": 14791, - "nodeType": "StructuredDocumentation", - "src": "1957:229:50", - "text": "@dev Sets a price feed if it doesn't exist, or updates an existing one\n @param token Address of the token to set the price feed for\n @param priceFeed Address of a USD price feed adhering to Chainlink's interface" - }, - "functionSelector": "e8a97a3e", - "id": 14806, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 14798, - "kind": "modifierInvocation", - "modifierName": { - "id": 14797, - "name": "configuratorOnly", - "nameLocations": ["2272:16:50"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2020, - "src": "2272:16:50" - }, - "nodeType": "ModifierInvocation", - "src": "2272:16:50" - } - ], - "name": "addPriceFeed", - "nameLocation": "2200:12:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14796, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14793, - "mutability": "mutable", - "name": "token", - "nameLocation": "2221:5:50", - "nodeType": "VariableDeclaration", - "scope": 14806, - "src": "2213:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14792, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2213:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14795, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "2236:9:50", - "nodeType": "VariableDeclaration", - "scope": 14806, - "src": "2228:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14794, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2228:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2212:34:50" - }, - "returnParameters": { - "id": 14799, - "nodeType": "ParameterList", - "parameters": [], - "src": "2293:0:50" - }, - "scope": 15267, - "src": "2191:150:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 14968, - "nodeType": "Block", - "src": "2610:1693:50", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 14826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 14819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14814, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "2624:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 14817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2641:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 14816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2633:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 14815, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2633:7:50", - "typeDescriptions": {} - } - }, - "id": 14818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2633:10:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2624:19:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 14825, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14820, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "2647:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 14823, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2668:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 14822, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2660:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 14821, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2660:7:50", - "typeDescriptions": {} - } - }, - "id": 14824, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2660:10:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2647:23:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "2624:46:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14830, - "nodeType": "IfStatement", - "src": "2620:93:50", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14827, - "name": "ZeroAddressException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12534, - "src": "2691:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2691:22:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14829, - "nodeType": "RevertStatement", - "src": "2684:29:50" - } - }, - { - "condition": { - "id": 14834, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2740:19:50", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 14831, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "2741:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 14832, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2747:10:50", - "memberName": "isContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 18408, - "src": "2741:16:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 14833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2741:18:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14839, - "nodeType": "IfStatement", - "src": "2736:68:50", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 14836, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "2798:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14835, - "name": "AddressIsNotContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12542, - "src": "2768:29:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 14837, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2768:36:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14838, - "nodeType": "RevertStatement", - "src": "2761:43:50" - } - }, - { - "condition": { - "id": 14843, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2831:23:50", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 14840, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "2832:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 14841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2842:10:50", - "memberName": "isContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 18408, - "src": "2832:20:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 14842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2832:22:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14848, - "nodeType": "IfStatement", - "src": "2827:88:50", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 14845, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "2905:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14844, - "name": "AddressIsNotContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12542, - "src": "2875:29:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 14846, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2875:40:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14847, - "nodeType": "RevertStatement", - "src": "2868:47:50" - } - }, - { - "clauses": [ - { - "block": { - "id": 14864, - "nodeType": "Block", - "src": "3034:93:50", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 14859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14857, - "name": "_decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14855, - "src": "3052:9:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "38", - "id": 14858, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3065:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "3052:14:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14863, - "nodeType": "IfStatement", - "src": "3048:56:50", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14860, - "name": "IncorrectPriceFeedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12548, - "src": "3075:27:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3075:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14862, - "nodeType": "RevertStatement", - "src": "3068:36:50" - } - } - ] - }, - "errorName": "", - "id": 14865, - "nodeType": "TryCatchClause", - "parameters": { - "id": 14856, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14855, - "mutability": "mutable", - "name": "_decimals", - "nameLocation": "3014:9:50", - "nodeType": "VariableDeclaration", - "scope": 14865, - "src": "3008:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14854, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3008:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "2994:39:50" - }, - "src": "2986:141:50" - }, - { - "block": { - "id": 14869, - "nodeType": "Block", - "src": "3134:73:50", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14866, - "name": "IncorrectPriceFeedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12548, - "src": "3155:27:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14867, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3155:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14868, - "nodeType": "RevertStatement", - "src": "3148:36:50" - } - ] - }, - "errorName": "", - "id": 14870, - "nodeType": "TryCatchClause", - "src": "3128:79:50" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 14850, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "2964:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14849, - "name": "AggregatorV3Interface", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1782, - "src": "2942:21:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AggregatorV3Interface_$1782_$", - "typeString": "type(contract AggregatorV3Interface)" - } - }, - "id": 14851, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2942:32:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AggregatorV3Interface_$1782", - "typeString": "contract AggregatorV3Interface" - } - }, - "id": 14852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2975:8:50", - "memberName": "decimals", - "nodeType": "MemberAccess", - "referencedDeclaration": 1743, - "src": "2942:41:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 14853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2942:43:50", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 14871, - "nodeType": "TryStatement", - "src": "2938:269:50" - }, - { - "assignments": [14873], - "declarations": [ - { - "constant": false, - "id": 14873, - "mutability": "mutable", - "name": "skipCheck", - "nameLocation": "3222:9:50", - "nodeType": "VariableDeclaration", - "scope": 14968, - "src": "3217:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14872, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3217:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 14874, - "nodeType": "VariableDeclarationStatement", - "src": "3217:14:50" - }, - { - "clauses": [ - { - "block": { - "id": 14887, - "nodeType": "Block", - "src": "3313:57:50", - "statements": [ - { - "expression": { - "id": 14885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14883, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14873, - "src": "3327:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 14884, - "name": "property", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14881, - "src": "3339:8:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3327:20:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14886, - "nodeType": "ExpressionStatement", - "src": "3327:20:50" - } - ] - }, - "errorName": "", - "id": 14888, - "nodeType": "TryCatchClause", - "parameters": { - "id": 14882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14881, - "mutability": "mutable", - "name": "property", - "nameLocation": "3303:8:50", - "nodeType": "VariableDeclaration", - "scope": 14888, - "src": "3298:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14880, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3298:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3297:15:50" - }, - "src": "3289:81:50" - }, - { - "block": { - "id": 14889, - "nodeType": "Block", - "src": "3377:2:50", - "statements": [] - }, - "errorName": "", - "id": 14890, - "nodeType": "TryCatchClause", - "src": "3371:8:50" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 14876, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "3261:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14875, - "name": "IPriceFeedType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12836, - "src": "3246:14:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPriceFeedType_$12836_$", - "typeString": "type(contract IPriceFeedType)" - } - }, - "id": 14877, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3246:25:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPriceFeedType_$12836", - "typeString": "contract IPriceFeedType" - } - }, - "id": 14878, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3272:14:50", - "memberName": "skipPriceCheck", - "nodeType": "MemberAccess", - "referencedDeclaration": 12835, - "src": "3246:40:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", - "typeString": "function () view external returns (bool)" - } - }, - "id": 14879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3246:42:50", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14891, - "nodeType": "TryStatement", - "src": "3242:137:50" - }, - { - "assignments": [14893], - "declarations": [ - { - "constant": false, - "id": 14893, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "3395:8:50", - "nodeType": "VariableDeclaration", - "scope": 14968, - "src": "3389:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14892, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3389:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "id": 14894, - "nodeType": "VariableDeclarationStatement", - "src": "3389:14:50" - }, - { - "clauses": [ - { - "block": { - "id": 14914, - "nodeType": "Block", - "src": "3467:144:50", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 14905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 14903, - "name": "_decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14901, - "src": "3485:9:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "3138", - "id": 14904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3497:2:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "src": "3485:14:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14909, - "nodeType": "IfStatement", - "src": "3481:60:50", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14906, - "name": "IncorrectTokenContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12545, - "src": "3508:31:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3508:33:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14908, - "nodeType": "RevertStatement", - "src": "3501:40:50" - } - }, - { - "expression": { - "id": 14912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 14910, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14893, - "src": "3568:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 14911, - "name": "_decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14901, - "src": "3579:9:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "3568:20:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 14913, - "nodeType": "ExpressionStatement", - "src": "3568:20:50" - } - ] - }, - "errorName": "", - "id": 14915, - "nodeType": "TryCatchClause", - "parameters": { - "id": 14902, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14901, - "mutability": "mutable", - "name": "_decimals", - "nameLocation": "3456:9:50", - "nodeType": "VariableDeclaration", - "scope": 14915, - "src": "3450:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 14900, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3450:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "3449:17:50" - }, - "src": "3441:170:50" - }, - { - "block": { - "id": 14919, - "nodeType": "Block", - "src": "3618:77:50", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14916, - "name": "IncorrectTokenContractException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12545, - "src": "3639:31:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14917, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3639:33:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14918, - "nodeType": "RevertStatement", - "src": "3632:40:50" - } - ] - }, - "errorName": "", - "id": 14920, - "nodeType": "TryCatchClause", - "src": "3612:83:50" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 14896, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "3423:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14895, - "name": "ERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17827, - "src": "3417:5:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$17827_$", - "typeString": "type(contract ERC20)" - } - }, - "id": 14897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3417:12:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$17827", - "typeString": "contract ERC20" - } - }, - "id": 14898, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3430:8:50", - "memberName": "decimals", - "nodeType": "MemberAccess", - "referencedDeclaration": 17315, - "src": "3417:21:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", - "typeString": "function () view external returns (uint8)" - } - }, - "id": 14899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3417:23:50", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 14921, - "nodeType": "TryStatement", - "src": "3413:282:50" - }, - { - "clauses": [ - { - "block": { - "id": 14948, - "nodeType": "Block", - "src": "3921:166:50", - "statements": [ - { - "condition": { - "id": 14939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3992:10:50", - "subExpression": { - "id": 14938, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14873, - "src": "3993:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 14947, - "nodeType": "IfStatement", - "src": "3988:88:50", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 14941, - "name": "roundID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14928, - "src": "4033:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - { - "id": 14942, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14930, - "src": "4042:5:50", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - { - "id": 14943, - "name": "updatedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14934, - "src": "4049:9:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 14944, - "name": "answeredInRound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14936, - "src": "4060:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - ], - "id": 14940, - "name": "_checkAnswer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14695, - "src": "4020:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint80_$_t_int256_$_t_uint256_$_t_uint80_$returns$__$", - "typeString": "function (uint80,int256,uint256,uint80) pure" - } - }, - "id": 14945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4020:56:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14946, - "nodeType": "ExpressionStatement", - "src": "4020:56:50" - } - } - ] - }, - "errorName": "", - "id": 14949, - "nodeType": "TryCatchClause", - "parameters": { - "id": 14937, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14928, - "mutability": "mutable", - "name": "roundID", - "nameLocation": "3789:7:50", - "nodeType": "VariableDeclaration", - "scope": 14949, - "src": "3782:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 14927, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "3782:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14930, - "mutability": "mutable", - "name": "price", - "nameLocation": "3817:5:50", - "nodeType": "VariableDeclaration", - "scope": 14949, - "src": "3810:12:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 14929, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "3810:6:50", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14932, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 14949, - "src": "3836:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14931, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3836:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14934, - "mutability": "mutable", - "name": "updatedAt", - "nameLocation": "3865:9:50", - "nodeType": "VariableDeclaration", - "scope": 14949, - "src": "3857:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14933, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3857:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14936, - "mutability": "mutable", - "name": "answeredInRound", - "nameLocation": "3895:15:50", - "nodeType": "VariableDeclaration", - "scope": 14949, - "src": "3888:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 14935, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "3888:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "3768:152:50" - }, - "src": "3760:327:50" - }, - { - "block": { - "id": 14953, - "nodeType": "Block", - "src": "4094:73:50", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 14950, - "name": "IncorrectPriceFeedException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12548, - "src": "4115:27:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 14951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4115:29:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14952, - "nodeType": "RevertStatement", - "src": "4108:36:50" - } - ] - }, - "errorName": "", - "id": 14954, - "nodeType": "TryCatchClause", - "src": "4088:79:50" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 14923, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "3731:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14922, - "name": "AggregatorV3Interface", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1782, - "src": "3709:21:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AggregatorV3Interface_$1782_$", - "typeString": "type(contract AggregatorV3Interface)" - } - }, - "id": 14924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3709:32:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AggregatorV3Interface_$1782", - "typeString": "contract AggregatorV3Interface" - } - }, - "id": 14925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3742:15:50", - "memberName": "latestRoundData", - "nodeType": "MemberAccess", - "referencedDeclaration": 1781, - "src": "3709:48:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$", - "typeString": "function () view external returns (uint80,int256,uint256,uint256,uint80)" - } - }, - "id": 14926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3709:50:50", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$", - "typeString": "tuple(uint80,int256,uint256,uint256,uint80)" - } - }, - "id": 14955, - "nodeType": "TryStatement", - "src": "3705:462:50" - }, - { - "expression": { - "arguments": [ - { - "id": 14957, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "4200:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 14958, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "4207:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 14959, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14873, - "src": "4218:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 14960, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14893, - "src": "4229:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 14956, - "name": "_setPriceFeedWithFlags", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15266, - "src": "4177:22:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$_t_uint8_$returns$__$", - "typeString": "function (address,address,bool,uint8)" - } - }, - "id": 14961, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4177:61:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14962, - "nodeType": "ExpressionStatement", - "src": "4177:61:50" - }, - { - "eventCall": { - "arguments": [ - { - "id": 14964, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14809, - "src": "4267:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 14965, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14811, - "src": "4274:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14963, - "name": "NewPriceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12847, - "src": "4254:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 14966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4254:30:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14967, - "nodeType": "EmitStatement", - "src": "4249:35:50" - } - ] - }, - "documentation": { - "id": 14807, - "nodeType": "StructuredDocumentation", - "src": "2347:192:50", - "text": "@dev IMPLEMENTATION: addPriceFeed\n @param token Address of the token to set the price feed for\n @param priceFeed Address of a USD price feed adhering to Chainlink's interface" - }, - "id": 14969, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_addPriceFeed", - "nameLocation": "2553:13:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14809, - "mutability": "mutable", - "name": "token", - "nameLocation": "2575:5:50", - "nodeType": "VariableDeclaration", - "scope": 14969, - "src": "2567:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2567:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14811, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "2590:9:50", - "nodeType": "VariableDeclaration", - "scope": 14969, - "src": "2582:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14810, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2582:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2566:34:50" - }, - "returnParameters": { - "id": 14813, - "nodeType": "ParameterList", - "parameters": [], - "src": "2610:0:50" - }, - "scope": 15267, - "src": "2544:1759:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12921], - "body": { - "id": 14985, - "nodeType": "Block", - "src": "4534:45:50", - "statements": [ - { - "expression": { - "id": 14983, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 14978, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14976, - "src": "4545:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - null - ], - "id": 14979, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "4544:9:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$__$", - "typeString": "tuple(uint256,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 14981, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14972, - "src": "4566:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 14980, - "name": "_getPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15044, - "src": "4556:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256)" - } - }, - "id": 14982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4556:16:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "src": "4544:28:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 14984, - "nodeType": "ExpressionStatement", - "src": "4544:28:50" - } - ] - }, - "documentation": { - "id": 14970, - "nodeType": "StructuredDocumentation", - "src": "4309:106:50", - "text": "@dev Returns token's price in USD (8 decimals)\n @param token The token to compute the price for" - }, - "functionSelector": "41976e09", - "id": 14986, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPrice", - "nameLocation": "4429:8:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 14974, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4489:8:50" - }, - "parameters": { - "id": 14973, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14972, - "mutability": "mutable", - "name": "token", - "nameLocation": "4446:5:50", - "nodeType": "VariableDeclaration", - "scope": 14986, - "src": "4438:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14971, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4438:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4437:15:50" - }, - "returnParameters": { - "id": 14977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14976, - "mutability": "mutable", - "name": "price", - "nameLocation": "4523:5:50", - "nodeType": "VariableDeclaration", - "scope": 14986, - "src": "4515:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14975, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4515:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4514:15:50" - }, - "scope": 15267, - "src": "4420:159:50", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 15043, - "nodeType": "Block", - "src": "4741:564:50", - "statements": [ - { - "assignments": [14997], - "declarations": [ - { - "constant": false, - "id": 14997, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "4759:9:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4751:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14996, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4751:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 14998, - "nodeType": "VariableDeclarationStatement", - "src": "4751:17:50" - }, - { - "assignments": [15000], - "declarations": [ - { - "constant": false, - "id": 15000, - "mutability": "mutable", - "name": "skipCheck", - "nameLocation": "4783:9:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4778:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 14999, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4778:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 15001, - "nodeType": "VariableDeclarationStatement", - "src": "4778:14:50" - }, - { - "expression": { - "id": 15009, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 15002, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14997, - "src": "4803:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15003, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15000, - "src": "4814:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 15004, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14994, - "src": "4825:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15005, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "4802:32:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_bool_$_t_uint256_$", - "typeString": "tuple(address,bool,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15007, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14989, - "src": "4857:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15006, - "name": "priceFeedsWithFlags", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15226, - "src": "4837:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_bool_$_t_uint256_$", - "typeString": "function (address) view returns (address,bool,uint256)" - } - }, - "id": 15008, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4837:26:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_bool_$_t_uint256_$", - "typeString": "tuple(address,bool,uint256)" - } - }, - "src": "4802:61:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15010, - "nodeType": "ExpressionStatement", - "src": "4802:61:50" - }, - { - "assignments": [15012, 15014, null, 15016, 15018], - "declarations": [ - { - "constant": false, - "id": 15012, - "mutability": "mutable", - "name": "roundID", - "nameLocation": "4898:7:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4891:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 15011, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "4891:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15014, - "mutability": "mutable", - "name": "_price", - "nameLocation": "4926:6:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4919:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 15013, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "4919:6:50", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - null, - { - "constant": false, - "id": 15016, - "mutability": "mutable", - "name": "updatedAt", - "nameLocation": "4968:9:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4960:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4960:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15018, - "mutability": "mutable", - "name": "answeredInRound", - "nameLocation": "4998:15:50", - "nodeType": "VariableDeclaration", - "scope": 15043, - "src": "4991:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 15017, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "4991:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "id": 15024, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 15020, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14997, - "src": "5048:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15019, - "name": "AggregatorV3Interface", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1782, - "src": "5026:21:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_AggregatorV3Interface_$1782_$", - "typeString": "type(contract AggregatorV3Interface)" - } - }, - "id": 15021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5026:32:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AggregatorV3Interface_$1782", - "typeString": "contract AggregatorV3Interface" - } - }, - "id": 15022, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5059:15:50", - "memberName": "latestRoundData", - "nodeType": "MemberAccess", - "referencedDeclaration": 1781, - "src": "5026:48:50", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$", - "typeString": "function () view external returns (uint80,int256,uint256,uint256,uint80)" - } - }, - "id": 15023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5026:50:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$", - "typeString": "tuple(uint80,int256,uint256,uint256,uint80)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4877:199:50" - }, - { - "condition": { - "id": 15026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "5157:10:50", - "subExpression": { - "id": 15025, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15000, - "src": "5158:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15034, - "nodeType": "IfStatement", - "src": "5153:85:50", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 15028, - "name": "roundID", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15012, - "src": "5194:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - { - "id": 15029, - "name": "_price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15014, - "src": "5203:6:50", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - { - "id": 15030, - "name": "updatedAt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15016, - "src": "5211:9:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15031, - "name": "answeredInRound", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15018, - "src": "5222:15:50", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - ], - "id": 15027, - "name": "_checkAnswer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14695, - "src": "5181:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint80_$_t_int256_$_t_uint256_$_t_uint80_$returns$__$", - "typeString": "function (uint80,int256,uint256,uint80) pure" - } - }, - "id": 15032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5181:57:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15033, - "nodeType": "ExpressionStatement", - "src": "5181:57:50" - } - }, - { - "expression": { - "id": 15041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15035, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14992, - "src": "5261:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "components": [ - { - "arguments": [ - { - "id": 15038, - "name": "_price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15014, - "src": "5278:6:50", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 15037, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5270:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 15036, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5270:7:50", - "typeDescriptions": {} - } - }, - "id": 15039, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5270:15:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15040, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5269:17:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5261:25:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15042, - "nodeType": "ExpressionStatement", - "src": "5261:25:50" - } - ] - }, - "documentation": { - "id": 14987, - "nodeType": "StructuredDocumentation", - "src": "4585:33:50", - "text": "@dev IMPLEMENTATION: getPrice" - }, - "id": 15044, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getPrice", - "nameLocation": "4632:9:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 14990, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14989, - "mutability": "mutable", - "name": "token", - "nameLocation": "4650:5:50", - "nodeType": "VariableDeclaration", - "scope": 15044, - "src": "4642:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 14988, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4642:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4641:15:50" - }, - "returnParameters": { - "id": 14995, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 14992, - "mutability": "mutable", - "name": "price", - "nameLocation": "4712:5:50", - "nodeType": "VariableDeclaration", - "scope": 15044, - "src": "4704:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14991, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4704:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 14994, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "4727:8:50", - "nodeType": "VariableDeclaration", - "scope": 15044, - "src": "4719:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 14993, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4719:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4703:33:50" - }, - "scope": 15267, - "src": "4623:682:50", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [12875], - "body": { - "id": 15073, - "nodeType": "Block", - "src": "5605:131:50", - "statements": [ - { - "assignments": [15056, 15058], - "declarations": [ - { - "constant": false, - "id": 15056, - "mutability": "mutable", - "name": "price", - "nameLocation": "5624:5:50", - "nodeType": "VariableDeclaration", - "scope": 15073, - "src": "5616:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15055, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5616:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15058, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "5639:8:50", - "nodeType": "VariableDeclaration", - "scope": 15073, - "src": "5631:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15057, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5631:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 15062, - "initialValue": { - "arguments": [ - { - "id": 15060, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15049, - "src": "5661:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15059, - "name": "_getPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15044, - "src": "5651:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256)" - } - }, - "id": 15061, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5651:16:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5615:52:50" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15063, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15047, - "src": "5685:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 15064, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15056, - "src": "5694:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5685:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15066, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5684:16:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 15067, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5704:2:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "id": 15068, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15058, - "src": "5708:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5704:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15070, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "5703:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5684:33:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 15054, - "id": 15072, - "nodeType": "Return", - "src": "5677:40:50" - } - ] - }, - "documentation": { - "id": 15045, - "nodeType": "StructuredDocumentation", - "src": "5311:161:50", - "text": "@dev Converts a quantity of an asset to USD (decimals = 8).\n @param amount Amount to convert\n @param token Address of the token to be converted" - }, - "functionSelector": "f9a65030", - "id": 15074, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "convertToUSD", - "nameLocation": "5486:12:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15051, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5566:8:50" - }, - "parameters": { - "id": 15050, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15047, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5507:6:50", - "nodeType": "VariableDeclaration", - "scope": 15074, - "src": "5499:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15046, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5499:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15049, - "mutability": "mutable", - "name": "token", - "nameLocation": "5523:5:50", - "nodeType": "VariableDeclaration", - "scope": 15074, - "src": "5515:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15048, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5515:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5498:31:50" - }, - "returnParameters": { - "id": 15054, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15053, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15074, - "src": "5592:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15052, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5592:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5591:9:50" - }, - "scope": 15267, - "src": "5477:259:50", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12885], - "body": { - "id": 15103, - "nodeType": "Block", - "src": "6058:131:50", - "statements": [ - { - "assignments": [15086, 15088], - "declarations": [ - { - "constant": false, - "id": 15086, - "mutability": "mutable", - "name": "price", - "nameLocation": "6077:5:50", - "nodeType": "VariableDeclaration", - "scope": 15103, - "src": "6069:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15085, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6069:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15088, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "6092:8:50", - "nodeType": "VariableDeclaration", - "scope": 15103, - "src": "6084:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15087, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6084:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 15092, - "initialValue": { - "arguments": [ - { - "id": 15090, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15079, - "src": "6114:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15089, - "name": "_getPrice", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15044, - "src": "6104:9:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address) view returns (uint256,uint256)" - } - }, - "id": 15091, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6104:16:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6068:52:50" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15098, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15093, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15077, - "src": "6138:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 15094, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6148:2:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "id": 15095, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15088, - "src": "6152:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6148:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15097, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6147:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6138:23:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15099, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "6137:25:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 15100, - "name": "price", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15086, - "src": "6165:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6137:33:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 15084, - "id": 15102, - "nodeType": "Return", - "src": "6130:40:50" - } - ] - }, - "documentation": { - "id": 15075, - "nodeType": "StructuredDocumentation", - "src": "5742:181:50", - "text": "@dev Converts a quantity of USD (decimals = 8) to an equivalent amount of an asset\n @param amount Amount to convert\n @param token Address of the token converted to" - }, - "functionSelector": "7afb0104", - "id": 15104, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "convertFromUSD", - "nameLocation": "5937:14:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15081, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6019:8:50" - }, - "parameters": { - "id": 15080, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15077, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5960:6:50", - "nodeType": "VariableDeclaration", - "scope": 15104, - "src": "5952:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15076, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5952:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15079, - "mutability": "mutable", - "name": "token", - "nameLocation": "5976:5:50", - "nodeType": "VariableDeclaration", - "scope": 15104, - "src": "5968:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15078, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5968:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5951:31:50" - }, - "returnParameters": { - "id": 15084, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15083, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15104, - "src": "6045:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15082, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6045:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6044:9:50" - }, - "scope": 15267, - "src": "5928:261:50", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12897], - "body": { - "id": 15125, - "nodeType": "Block", - "src": "6546:92:50", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 15119, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15107, - "src": "6591:6:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15120, - "name": "tokenFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15109, - "src": "6599:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15118, - "name": "convertToUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15074, - "src": "6578:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view returns (uint256)" - } - }, - "id": 15121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6578:31:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15122, - "name": "tokenTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15111, - "src": "6611:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15117, - "name": "convertFromUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15104, - "src": "6563:14:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view returns (uint256)" - } - }, - "id": 15123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6563:56:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 15116, - "id": 15124, - "nodeType": "Return", - "src": "6556:63:50" - } - ] - }, - "documentation": { - "id": 15105, - "nodeType": "StructuredDocumentation", - "src": "6195:208:50", - "text": "@dev Converts one asset into another\n @param amount Amount to convert\n @param tokenFrom Address of the token to convert from\n @param tokenTo Address of the token to convert to" - }, - "functionSelector": "b66102df", - "id": 15126, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "convert", - "nameLocation": "6417:7:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15113, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6519:8:50" - }, - "parameters": { - "id": 15112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15107, - "mutability": "mutable", - "name": "amount", - "nameLocation": "6442:6:50", - "nodeType": "VariableDeclaration", - "scope": 15126, - "src": "6434:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15106, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6434:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15109, - "mutability": "mutable", - "name": "tokenFrom", - "nameLocation": "6466:9:50", - "nodeType": "VariableDeclaration", - "scope": 15126, - "src": "6458:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15108, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6458:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15111, - "mutability": "mutable", - "name": "tokenTo", - "nameLocation": "6493:7:50", - "nodeType": "VariableDeclaration", - "scope": 15126, - "src": "6485:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15110, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6485:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6424:82:50" - }, - "returnParameters": { - "id": 15116, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15115, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15126, - "src": "6537:7:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15114, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6537:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6536:9:50" - }, - "scope": 15267, - "src": "6408:230:50", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [12913], - "body": { - "id": 15157, - "nodeType": "Block", - "src": "7327:149:50", - "statements": [ - { - "expression": { - "id": 15148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15143, - "name": "collateralFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15139, - "src": "7337:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15145, - "name": "amountFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15129, - "src": "7367:10:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15146, - "name": "tokenFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15131, - "src": "7379:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15144, - "name": "convertToUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15074, - "src": "7354:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view returns (uint256)" - } - }, - "id": 15147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7354:35:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7337:52:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15149, - "nodeType": "ExpressionStatement", - "src": "7337:52:50" - }, - { - "expression": { - "id": 15155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15150, - "name": "collateralTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15141, - "src": "7411:12:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15152, - "name": "amountTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15133, - "src": "7439:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15153, - "name": "tokenTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15135, - "src": "7449:7:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15151, - "name": "convertToUSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15074, - "src": "7426:12:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$", - "typeString": "function (uint256,address) view returns (uint256)" - } - }, - "id": 15154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7426:31:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7411:46:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15156, - "nodeType": "ExpressionStatement", - "src": "7411:46:50" - } - ] - }, - "documentation": { - "id": 15127, - "nodeType": "StructuredDocumentation", - "src": "6644:433:50", - "text": "@dev Returns collateral values for two tokens, required for a fast check\n @param amountFrom Amount of the outbound token\n @param tokenFrom Address of the outbound token\n @param amountTo Amount of the inbound token\n @param tokenTo Address of the inbound token\n @return collateralFrom Value of the outbound token amount in USD\n @return collateralTo Value of the inbound token amount in USD" - }, - "functionSelector": "5cecbd0e", - "id": 15158, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "fastCheck", - "nameLocation": "7091:9:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15137, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "7251:8:50" - }, - "parameters": { - "id": 15136, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15129, - "mutability": "mutable", - "name": "amountFrom", - "nameLocation": "7118:10:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7110:18:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15128, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7110:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15131, - "mutability": "mutable", - "name": "tokenFrom", - "nameLocation": "7146:9:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7138:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15130, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7138:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15133, - "mutability": "mutable", - "name": "amountTo", - "nameLocation": "7173:8:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7165:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15132, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7165:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15135, - "mutability": "mutable", - "name": "tokenTo", - "nameLocation": "7199:7:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7191:15:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15134, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7191:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7100:112:50" - }, - "returnParameters": { - "id": 15142, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15139, - "mutability": "mutable", - "name": "collateralFrom", - "nameLocation": "7285:14:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7277:22:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15138, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7277:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15141, - "mutability": "mutable", - "name": "collateralTo", - "nameLocation": "7309:12:50", - "nodeType": "VariableDeclaration", - "scope": 15158, - "src": "7301:20:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15140, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7301:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7276:46:50" - }, - "scope": 15267, - "src": "7082:394:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12929], - "body": { - "id": 15174, - "nodeType": "Block", - "src": "7722:73:50", - "statements": [ - { - "expression": { - "id": 15172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 15167, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15165, - "src": "7733:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - null, - null - ], - "id": 15168, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "7732:15:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$__$__$", - "typeString": "tuple(address,,)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15170, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15161, - "src": "7770:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15169, - "name": "priceFeedsWithFlags", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15226, - "src": "7750:19:50", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_address_$_t_bool_$_t_uint256_$", - "typeString": "function (address) view returns (address,bool,uint256)" - } - }, - "id": 15171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7750:26:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_bool_$_t_uint256_$", - "typeString": "tuple(address,bool,uint256)" - } - }, - "src": "7732:44:50", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15173, - "nodeType": "ExpressionStatement", - "src": "7732:44:50" - } - ] - }, - "documentation": { - "id": 15159, - "nodeType": "StructuredDocumentation", - "src": "7482:113:50", - "text": "@dev Returns the price feed address for the passed token\n @param token Token to get the price feed for" - }, - "functionSelector": "9dcb511a", - "id": 15175, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "priceFeeds", - "nameLocation": "7609:10:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15163, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "7673:8:50" - }, - "parameters": { - "id": 15162, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15161, - "mutability": "mutable", - "name": "token", - "nameLocation": "7628:5:50", - "nodeType": "VariableDeclaration", - "scope": 15175, - "src": "7620:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15160, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7620:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7619:15:50" - }, - "returnParameters": { - "id": 15166, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15165, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "7707:9:50", - "nodeType": "VariableDeclaration", - "scope": 15175, - "src": "7699:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15164, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7699:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7698:19:50" - }, - "scope": 15267, - "src": "7600:195:50", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "baseFunctions": [12941], - "body": { - "id": 15225, - "nodeType": "Block", - "src": "8161:283:50", - "statements": [ - { - "assignments": [15189], - "declarations": [ - { - "constant": false, - "id": 15189, - "mutability": "mutable", - "name": "pf", - "nameLocation": "8179:2:50", - "nodeType": "VariableDeclaration", - "scope": 15225, - "src": "8171:10:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15188, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8171:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 15193, - "initialValue": { - "baseExpression": { - "id": 15190, - "name": "_priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14745, - "src": "8184:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 15192, - "indexExpression": { - "id": 15191, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15178, - "src": "8196:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8184:18:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8171:31:50" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15194, - "name": "pf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15189, - "src": "8228:2:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 15195, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8234:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8228:7:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15200, - "nodeType": "IfStatement", - "src": "8224:51:50", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 15197, - "name": "PriceOracleNotExistsException", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12857, - "src": "8244:29:50", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8244:31:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15199, - "nodeType": "RevertStatement", - "src": "8237:38:50" - } - }, - { - "expression": { - "id": 15209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15201, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15182, - "src": "8286:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 15206, - "name": "pf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15189, - "src": "8314:2:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 15205, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8306:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 15204, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "8306:7:50", - "typeDescriptions": {} - } - }, - "id": 15207, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8306:11:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 15203, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8298:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15202, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8298:7:50", - "typeDescriptions": {} - } - }, - "id": 15208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8298:20:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8286:32:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 15210, - "nodeType": "ExpressionStatement", - "src": "8286:32:50" - }, - { - "expression": { - "id": 15217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15211, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15184, - "src": "8341:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15216, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15212, - "name": "pf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15189, - "src": "8353:2:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "id": 15213, - "name": "SKIP_PRICE_CHECK_FLAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14727, - "src": "8358:21:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8353:26:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 15215, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8383:1:50", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8353:31:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "8341:43:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15218, - "nodeType": "ExpressionStatement", - "src": "8341:43:50" - }, - { - "expression": { - "id": 15223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15219, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15186, - "src": "8406:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15220, - "name": "pf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15189, - "src": "8417:2:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "id": 15221, - "name": "DECIMALS_SHIFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14730, - "src": "8423:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8417:20:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8406:31:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15224, - "nodeType": "ExpressionStatement", - "src": "8406:31:50" - } - ] - }, - "documentation": { - "id": 15176, - "nodeType": "StructuredDocumentation", - "src": "7801:146:50", - "text": "@dev Returns the price feed for the passed token,\n with additional parameters\n @param token Token to get the price feed for" - }, - "functionSelector": "f190e5fa", - "id": 15226, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "priceFeedsWithFlags", - "nameLocation": "7961:19:50", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 15180, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "8032:8:50" - }, - "parameters": { - "id": 15179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15178, - "mutability": "mutable", - "name": "token", - "nameLocation": "7989:5:50", - "nodeType": "VariableDeclaration", - "scope": 15226, - "src": "7981:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15177, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7981:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7980:15:50" - }, - "returnParameters": { - "id": 15187, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15182, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "8079:9:50", - "nodeType": "VariableDeclaration", - "scope": 15226, - "src": "8071:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15181, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8071:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15184, - "mutability": "mutable", - "name": "skipCheck", - "nameLocation": "8107:9:50", - "nodeType": "VariableDeclaration", - "scope": 15226, - "src": "8102:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15183, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8102:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15186, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "8138:8:50", - "nodeType": "VariableDeclaration", - "scope": 15226, - "src": "8130:16:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15185, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8130:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8057:99:50" - }, - "scope": 15267, - "src": "7952:492:50", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 15265, - "nodeType": "Block", - "src": "8971:219:50", - "statements": [ - { - "assignments": [15239], - "declarations": [ - { - "constant": false, - "id": 15239, - "mutability": "mutable", - "name": "value", - "nameLocation": "8989:5:50", - "nodeType": "VariableDeclaration", - "scope": 15265, - "src": "8981:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15238, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8981:7:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 15244, - "initialValue": { - "arguments": [ - { - "id": 15242, - "name": "priceFeed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15231, - "src": "9005:9:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15241, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8997:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 15240, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "8997:7:50", - "typeDescriptions": {} - } - }, - "id": 15243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8997:18:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8981:34:50" - }, - { - "condition": { - "id": 15245, - "name": "skipCheck", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15233, - "src": "9041:9:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15250, - "nodeType": "IfStatement", - "src": "9037:45:50", - "trueBody": { - "expression": { - "id": 15248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15246, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15239, - "src": "9052:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "|=", - "rightHandSide": { - "id": 15247, - "name": "SKIP_PRICE_CHECK_FLAG", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14727, - "src": "9061:21:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9052:30:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15249, - "nodeType": "ExpressionStatement", - "src": "9052:30:50" - } - }, - { - "expression": { - "id": 15263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 15251, - "name": "_priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14745, - "src": "9105:11:50", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 15253, - "indexExpression": { - "id": 15252, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15229, - "src": "9117:5:50", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9105:18:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15254, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15239, - "src": "9126:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 15257, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15235, - "src": "9143:8:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 15256, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9135:7:50", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 15255, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9135:7:50", - "typeDescriptions": {} - } - }, - "id": 15258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9135:17:50", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "id": 15259, - "name": "DECIMALS_SHIFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14730, - "src": "9156:14:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9135:35:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 15261, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9134:37:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9126:45:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9105:66:50", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 15264, - "nodeType": "ExpressionStatement", - "src": "9105:66:50" - } - ] - }, - "documentation": { - "id": 15227, - "nodeType": "StructuredDocumentation", - "src": "8450:371:50", - "text": "@dev Encodes the price feed address with parameters into a uint256,\n and saves it into a map\n @param token Address of the token to add the price feed for\n @param priceFeed Address of the price feed\n @param skipCheck Whether price feed result sanity checks should be skipped\n @param decimals Decimals for the price feed's result" - }, - "id": 15266, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setPriceFeedWithFlags", - "nameLocation": "8835:22:50", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15236, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15229, - "mutability": "mutable", - "name": "token", - "nameLocation": "8875:5:50", - "nodeType": "VariableDeclaration", - "scope": 15266, - "src": "8867:13:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15228, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8867:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15231, - "mutability": "mutable", - "name": "priceFeed", - "nameLocation": "8898:9:50", - "nodeType": "VariableDeclaration", - "scope": 15266, - "src": "8890:17:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15230, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8890:7:50", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15233, - "mutability": "mutable", - "name": "skipCheck", - "nameLocation": "8922:9:50", - "nodeType": "VariableDeclaration", - "scope": 15266, - "src": "8917:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15232, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8917:4:50", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15235, - "mutability": "mutable", - "name": "decimals", - "nameLocation": "8947:8:50", - "nodeType": "VariableDeclaration", - "scope": 15266, - "src": "8941:14:50", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 15234, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "8941:5:50", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "8857:104:50" - }, - "returnParameters": { - "id": 15237, - "nodeType": "ParameterList", - "parameters": [], - "src": "8971:0:50" - }, - "scope": 15267, - "src": "8826:364:50", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 15268, - "src": "1247:7945:50", - "usedErrors": [ - 12534, 12542, 12545, 12548, 12551, 12557, 12560, 12851, 12854, - 12857 - ] - } - ], - "src": "128:9065:50" - }, - "id": 50 - }, - "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol", - "exportedSymbols": { - "GearToken": [16548] - }, - "id": 16549, - "license": "BSD-3-Clause", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 15269, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "41:24:51" - }, - { - "id": 15270, - "literals": ["experimental", "ABIEncoderV2"], - "nodeType": "PragmaDirective", - "src": "66:33:51" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "GearToken", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 15271, - "nodeType": "StructuredDocumentation", - "src": "101:115:51", - "text": "@dev Governance Gearbox token\n based on https://github.com/Uniswap/governance/blob/master/contracts/Uni.sol" - }, - "fullyImplemented": true, - "id": 16548, - "linearizedBaseContracts": [16548], - "name": "GearToken", - "nameLocation": "225:9:51", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "documentation": { - "id": 15272, - "nodeType": "StructuredDocumentation", - "src": "241:44:51", - "text": "@notice EIP-20 token name for this token" - }, - "functionSelector": "06fdde03", - "id": 15275, - "mutability": "constant", - "name": "name", - "nameLocation": "313:4:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "290:39:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 15273, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "290:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "47656172626f78", - "id": 15274, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "320:9:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd46", - "typeString": "literal_string \"Gearbox\"" - }, - "value": "Gearbox" - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15276, - "nodeType": "StructuredDocumentation", - "src": "336:46:51", - "text": "@notice EIP-20 token symbol for this token" - }, - "functionSelector": "95d89b41", - "id": 15279, - "mutability": "constant", - "name": "symbol", - "nameLocation": "410:6:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "387:38:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 15277, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "387:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": { - "hexValue": "47454152", - "id": 15278, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "419:6:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c40a5b31ec162360dac1c6f16ddea9e97e74e787694f9b680e183684c5d401d9", - "typeString": "literal_string \"GEAR\"" - }, - "value": "GEAR" - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15280, - "nodeType": "StructuredDocumentation", - "src": "432:48:51", - "text": "@notice EIP-20 token decimals for this token" - }, - "functionSelector": "313ce567", - "id": 15283, - "mutability": "constant", - "name": "decimals", - "nameLocation": "507:8:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "485:35:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 15281, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "485:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3138", - "id": 15282, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "518:2:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15284, - "nodeType": "StructuredDocumentation", - "src": "527:49:51", - "text": "@notice Total number of tokens in circulation" - }, - "functionSelector": "18160ddd", - "id": 15287, - "mutability": "constant", - "name": "totalSupply", - "nameLocation": "605:11:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "581:55:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "581:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31305f3030305f3030305f303030653138", - "id": 15286, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "619:17:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000000000000000000000_by_1", - "typeString": "int_const 10000000000000000000000000000" - }, - "value": "10_000_000_000e18" - }, - "visibility": "public" - }, - { - "constant": false, - "id": 15293, - "mutability": "mutable", - "name": "allowances", - "nameLocation": "763:10:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "707:66:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - }, - "typeName": { - "id": 15292, - "keyType": { - "id": 15288, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "715:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "707:46:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - }, - "valueType": { - "id": 15291, - "keyType": { - "id": 15289, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "734:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "726:26:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - }, - "valueType": { - "id": 15290, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "745:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15297, - "mutability": "mutable", - "name": "balances", - "nameLocation": "874:8:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "838:44:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - }, - "typeName": { - "id": 15296, - "keyType": { - "id": 15294, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "846:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "838:26:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - }, - "valueType": { - "id": 15295, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "857:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - }, - "visibility": "internal" - }, - { - "constant": false, - "documentation": { - "id": 15298, - "nodeType": "StructuredDocumentation", - "src": "889:46:51", - "text": "@notice A record of each accounts delegate" - }, - "functionSelector": "587cde1e", - "id": 15302, - "mutability": "mutable", - "name": "delegates", - "nameLocation": "975:9:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "940:44:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "typeName": { - "id": 15301, - "keyType": { - "id": 15299, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "948:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "940:27:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - }, - "valueType": { - "id": 15300, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "959:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - "visibility": "public" - }, - { - "canonicalName": "GearToken.Checkpoint", - "id": 15307, - "members": [ - { - "constant": false, - "id": 15304, - "mutability": "mutable", - "name": "fromBlock", - "nameLocation": "1102:9:51", - "nodeType": "VariableDeclaration", - "scope": 15307, - "src": "1095:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 15303, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1095:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15306, - "mutability": "mutable", - "name": "votes", - "nameLocation": "1128:5:51", - "nodeType": "VariableDeclaration", - "scope": 15307, - "src": "1121:12:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15305, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "1121:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "name": "Checkpoint", - "nameLocation": "1074:10:51", - "nodeType": "StructDefinition", - "scope": 16548, - "src": "1067:73:51", - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 15308, - "nodeType": "StructuredDocumentation", - "src": "1146:68:51", - "text": "@notice A record of votes checkpoints for each account, by index" - }, - "functionSelector": "f1127ed8", - "id": 15315, - "mutability": "mutable", - "name": "checkpoints", - "nameLocation": "1276:11:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "1219:68:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint))" - }, - "typeName": { - "id": 15314, - "keyType": { - "id": 15309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1227:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1219:49:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint))" - }, - "valueType": { - "id": 15313, - "keyType": { - "id": 15310, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1246:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Mapping", - "src": "1238:29:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint)" - }, - "valueType": { - "id": 15312, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 15311, - "name": "Checkpoint", - "nameLocations": ["1256:10:51"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15307, - "src": "1256:10:51" - }, - "referencedDeclaration": 15307, - "src": "1256:10:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage_ptr", - "typeString": "struct GearToken.Checkpoint" - } - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 15316, - "nodeType": "StructuredDocumentation", - "src": "1294:54:51", - "text": "@notice The number of checkpoints for each account" - }, - "functionSelector": "6fcfff45", - "id": 15320, - "mutability": "mutable", - "name": "numCheckpoints", - "nameLocation": "1387:14:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "1353:48:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - }, - "typeName": { - "id": 15319, - "keyType": { - "id": 15317, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1361:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1353:26:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - }, - "valueType": { - "id": 15318, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1372:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15321, - "nodeType": "StructuredDocumentation", - "src": "1408:58:51", - "text": "@notice The EIP-712 typehash for the contract's domain" - }, - "functionSelector": "20606b70", - "id": 15326, - "mutability": "constant", - "name": "DOMAIN_TYPEHASH", - "nameLocation": "1495:15:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "1471:152:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15322, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1471:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", - "id": 15324, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1544:69:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866", - "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"" - }, - "value": "EIP712Domain(string name,uint256 chainId,address verifyingContract)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866", - "typeString": "literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"" - } - ], - "id": 15323, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "1521:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15325, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1521:102:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15327, - "nodeType": "StructuredDocumentation", - "src": "1630:79:51", - "text": "@notice The EIP-712 typehash for the delegation struct used by the contract" - }, - "functionSelector": "e7a324dc", - "id": 15332, - "mutability": "constant", - "name": "DELEGATION_TYPEHASH", - "nameLocation": "1738:19:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "1714:125:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15328, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1714:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "44656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929", - "id": 15330, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1778:60:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf", - "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\"" - }, - "value": "Delegation(address delegatee,uint256 nonce,uint256 expiry)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_e48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf", - "typeString": "literal_string \"Delegation(address delegatee,uint256 nonce,uint256 expiry)\"" - } - ], - "id": 15329, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "1768:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15331, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1768:71:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "constant": true, - "documentation": { - "id": 15333, - "nodeType": "StructuredDocumentation", - "src": "1846:75:51", - "text": "@notice The EIP-712 typehash for the permit struct used by the contract" - }, - "functionSelector": "30adf81f", - "id": 15338, - "mutability": "constant", - "name": "PERMIT_TYPEHASH", - "nameLocation": "1950:15:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "1926:167:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15334, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1926:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529", - "id": 15336, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1999:84:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9", - "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"" - }, - "value": "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9", - "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"" - } - ], - "id": 15335, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "1976:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1976:117:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "7ecebe00", - "id": 15342, - "mutability": "mutable", - "name": "nonces", - "nameLocation": "2197:6:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "2162:41:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 15341, - "keyType": { - "id": 15339, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2170:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "2162:27:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 15340, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2181:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 15343, - "nodeType": "StructuredDocumentation", - "src": "2210:45:51", - "text": "@notice Flag which allows token transfers" - }, - "functionSelector": "b0660c3d", - "id": 15345, - "mutability": "mutable", - "name": "transfersAllowed", - "nameLocation": "2272:16:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "2260:28:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15344, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2260:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 15346, - "nodeType": "StructuredDocumentation", - "src": "2295:58:51", - "text": "@notice Contract owner which can allow token transfers" - }, - "functionSelector": "481c6a75", - "id": 15348, - "mutability": "mutable", - "name": "manager", - "nameLocation": "2373:7:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "2358:22:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15347, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2358:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "constant": false, - "documentation": { - "id": 15349, - "nodeType": "StructuredDocumentation", - "src": "2387:69:51", - "text": "@notice Miner address which can send tokens during account mining" - }, - "functionSelector": "349dc329", - "id": 15351, - "mutability": "mutable", - "name": "miner", - "nameLocation": "2476:5:51", - "nodeType": "VariableDeclaration", - "scope": 16548, - "src": "2461:20:51", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2461:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "anonymous": false, - "documentation": { - "id": 15352, - "nodeType": "StructuredDocumentation", - "src": "2488:71:51", - "text": "@notice An event thats emitted when an account changes its delegate" - }, - "eventSelector": "3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f", - "id": 15360, - "name": "DelegateChanged", - "nameLocation": "2570:15:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15359, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15354, - "indexed": true, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "2611:9:51", - "nodeType": "VariableDeclaration", - "scope": 15360, - "src": "2595:25:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15353, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2595:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15356, - "indexed": true, - "mutability": "mutable", - "name": "fromDelegate", - "nameLocation": "2646:12:51", - "nodeType": "VariableDeclaration", - "scope": 15360, - "src": "2630:28:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15355, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2630:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15358, - "indexed": true, - "mutability": "mutable", - "name": "toDelegate", - "nameLocation": "2684:10:51", - "nodeType": "VariableDeclaration", - "scope": 15360, - "src": "2668:26:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15357, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2668:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2585:115:51" - }, - "src": "2564:137:51" - }, - { - "anonymous": false, - "documentation": { - "id": 15361, - "nodeType": "StructuredDocumentation", - "src": "2707:81:51", - "text": "@notice An event thats emitted when a delegate account's vote balance changes" - }, - "eventSelector": "dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", - "id": 15369, - "name": "DelegateVotesChanged", - "nameLocation": "2799:20:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15368, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15363, - "indexed": true, - "mutability": "mutable", - "name": "delegate", - "nameLocation": "2845:8:51", - "nodeType": "VariableDeclaration", - "scope": 15369, - "src": "2829:24:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15362, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2829:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15365, - "indexed": false, - "mutability": "mutable", - "name": "previousBalance", - "nameLocation": "2871:15:51", - "nodeType": "VariableDeclaration", - "scope": 15369, - "src": "2863:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15364, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2863:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15367, - "indexed": false, - "mutability": "mutable", - "name": "newBalance", - "nameLocation": "2904:10:51", - "nodeType": "VariableDeclaration", - "scope": 15369, - "src": "2896:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15366, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2896:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2819:101:51" - }, - "src": "2793:128:51" - }, - { - "anonymous": false, - "documentation": { - "id": 15370, - "nodeType": "StructuredDocumentation", - "src": "2927:46:51", - "text": "@notice The standard EIP-20 transfer event" - }, - "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "id": 15378, - "name": "Transfer", - "nameLocation": "2984:8:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15377, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15372, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "3009:4:51", - "nodeType": "VariableDeclaration", - "scope": 15378, - "src": "2993:20:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15371, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2993:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15374, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "3031:2:51", - "nodeType": "VariableDeclaration", - "scope": 15378, - "src": "3015:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15373, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3015:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15376, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3043:6:51", - "nodeType": "VariableDeclaration", - "scope": 15378, - "src": "3035:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15375, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3035:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2992:58:51" - }, - "src": "2978:73:51" - }, - { - "anonymous": false, - "documentation": { - "id": 15379, - "nodeType": "StructuredDocumentation", - "src": "3057:46:51", - "text": "@notice The standard EIP-20 approval event" - }, - "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "id": 15387, - "name": "Approval", - "nameLocation": "3114:8:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15381, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3148:5:51", - "nodeType": "VariableDeclaration", - "scope": 15387, - "src": "3132:21:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15380, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3132:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15383, - "indexed": true, - "mutability": "mutable", - "name": "spender", - "nameLocation": "3179:7:51", - "nodeType": "VariableDeclaration", - "scope": 15387, - "src": "3163:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15382, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3163:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15385, - "indexed": false, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3204:6:51", - "nodeType": "VariableDeclaration", - "scope": 15387, - "src": "3196:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3196:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3122:94:51" - }, - "src": "3108:109:51" - }, - { - "anonymous": false, - "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "id": 15393, - "name": "OwnershipTransferred", - "nameLocation": "3229:20:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15392, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15389, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3266:5:51", - "nodeType": "VariableDeclaration", - "scope": 15393, - "src": "3250:21:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15388, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3250:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15391, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "3289:8:51", - "nodeType": "VariableDeclaration", - "scope": 15393, - "src": "3273:24:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15390, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3273:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3249:49:51" - }, - "src": "3223:76:51" - }, - { - "anonymous": false, - "eventSelector": "2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a", - "id": 15397, - "name": "MinerSet", - "nameLocation": "3311:8:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15395, - "indexed": true, - "mutability": "mutable", - "name": "miner", - "nameLocation": "3336:5:51", - "nodeType": "VariableDeclaration", - "scope": 15397, - "src": "3320:21:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15394, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3320:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3319:23:51" - }, - "src": "3305:38:51" - }, - { - "anonymous": false, - "eventSelector": "795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d007", - "id": 15399, - "name": "TransferAllowed", - "nameLocation": "3355:15:51", - "nodeType": "EventDefinition", - "parameters": { - "id": 15398, - "nodeType": "ParameterList", - "parameters": [], - "src": "3370:2:51" - }, - "src": "3349:24:51" - }, - { - "body": { - "id": 15410, - "nodeType": "Block", - "src": "3402:93:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 15402, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3420:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3424:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3420:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 15404, - "name": "manager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15348, - "src": "3434:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3420:21:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a63616c6c6572206973206e6f7420746865206d616e61676572", - "id": 15406, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3443:33:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d74c1ef06ea0a7e264e9b25959a74b52d468ce51f50f999f16ea6c993d319922", - "typeString": "literal_string \"Gear::caller is not the manager\"" - }, - "value": "Gear::caller is not the manager" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d74c1ef06ea0a7e264e9b25959a74b52d468ce51f50f999f16ea6c993d319922", - "typeString": "literal_string \"Gear::caller is not the manager\"" - } - ], - "id": 15401, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3412:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15407, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3412:65:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15408, - "nodeType": "ExpressionStatement", - "src": "3412:65:51" - }, - { - "id": 15409, - "nodeType": "PlaceholderStatement", - "src": "3487:1:51" - } - ] - }, - "id": 15411, - "name": "managerOnly", - "nameLocation": "3388:11:51", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 15400, - "nodeType": "ParameterList", - "parameters": [], - "src": "3399:2:51" - }, - "src": "3379:116:51", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 15454, - "nodeType": "Block", - "src": "3654:248:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15418, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15414, - "src": "3672:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 15421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3691:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3683:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15419, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3683:7:51", - "typeDescriptions": {} - } - }, - "id": 15422, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3683:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3672:21:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5a65726f2061646472657373206973206e6f7420616c6c6f776564", - "id": 15424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3695:29:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - }, - "value": "Zero address is not allowed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - } - ], - "id": 15417, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3664:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3664:61:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15426, - "nodeType": "ExpressionStatement", - "src": "3664:61:51" - }, - { - "expression": { - "id": 15434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 15427, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "3735:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15429, - "indexExpression": { - "id": 15428, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15414, - "src": "3744:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3735:17:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15432, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15287, - "src": "3762:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 15431, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3755:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 15430, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "3755:6:51", - "typeDescriptions": {} - } - }, - "id": 15433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3755:19:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "3735:39:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15435, - "nodeType": "ExpressionStatement", - "src": "3735:39:51" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 15439, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3806:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15438, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3798:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15437, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3798:7:51", - "typeDescriptions": {} - } - }, - "id": 15440, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3798:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15441, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15414, - "src": "3810:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15442, - "name": "totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15287, - "src": "3819:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 15436, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15378, - "src": "3789:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 15443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3789:42:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15444, - "nodeType": "EmitStatement", - "src": "3784:47:51" - }, - { - "expression": { - "id": 15448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15445, - "name": "manager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15348, - "src": "3841:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "id": 15446, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3851:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3855:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3851:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3841:20:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 15449, - "nodeType": "ExpressionStatement", - "src": "3841:20:51" - }, - { - "expression": { - "id": 15452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15450, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15345, - "src": "3871:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 15451, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3890:5:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "3871:24:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15453, - "nodeType": "ExpressionStatement", - "src": "3871:24:51" - } - ] - }, - "documentation": { - "id": 15412, - "nodeType": "StructuredDocumentation", - "src": "3501:119:51", - "text": " @notice Construct a new Gear token\n @param account The initial account to grant all the tokens" - }, - "id": 15455, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15415, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15414, - "mutability": "mutable", - "name": "account", - "nameLocation": "3645:7:51", - "nodeType": "VariableDeclaration", - "scope": 15455, - "src": "3637:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15413, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3637:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3636:17:51" - }, - "returnParameters": { - "id": 15416, - "nodeType": "ParameterList", - "parameters": [], - "src": "3654:0:51" - }, - "scope": 16548, - "src": "3625:277:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 15481, - "nodeType": "Block", - "src": "4008:203:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15463, - "name": "newManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15457, - "src": "4026:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 15466, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4048:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15465, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4040:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15464, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4040:7:51", - "typeDescriptions": {} - } - }, - "id": 15467, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4040:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4026:24:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5a65726f2061646472657373206973206e6f7420616c6c6f776564", - "id": 15469, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4052:29:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - }, - "value": "Zero address is not allowed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - } - ], - "id": 15462, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "4018:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15470, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4018:64:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15471, - "nodeType": "ExpressionStatement", - "src": "4018:64:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 15473, - "name": "manager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15348, - "src": "4130:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15474, - "name": "newManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15457, - "src": "4139:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15472, - "name": "OwnershipTransferred", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15393, - "src": "4109:20:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 15475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4109:41:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15476, - "nodeType": "EmitStatement", - "src": "4104:46:51" - }, - { - "expression": { - "id": 15479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15477, - "name": "manager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15348, - "src": "4172:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 15478, - "name": "newManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15457, - "src": "4182:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4172:20:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 15480, - "nodeType": "ExpressionStatement", - "src": "4172:20:51" - } - ] - }, - "functionSelector": "f2fde38b", - "id": 15482, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 15460, - "kind": "modifierInvocation", - "modifierName": { - "id": 15459, - "name": "managerOnly", - "nameLocations": ["3980:11:51"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15411, - "src": "3980:11:51" - }, - "nodeType": "ModifierInvocation", - "src": "3980:11:51" - } - ], - "name": "transferOwnership", - "nameLocation": "3917:17:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15458, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15457, - "mutability": "mutable", - "name": "newManager", - "nameLocation": "3943:10:51", - "nodeType": "VariableDeclaration", - "scope": 15482, - "src": "3935:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15456, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3935:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3934:20:51" - }, - "returnParameters": { - "id": 15461, - "nodeType": "ParameterList", - "parameters": [], - "src": "4008:0:51" - }, - "scope": 16548, - "src": "3908:303:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15507, - "nodeType": "Block", - "src": "4304:155:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15490, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15484, - "src": "4322:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 15493, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4340:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15492, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4332:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15491, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4332:7:51", - "typeDescriptions": {} - } - }, - "id": 15494, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4332:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4322:20:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5a65726f2061646472657373206973206e6f7420616c6c6f776564", - "id": 15496, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4344:29:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - }, - "value": "Zero address is not allowed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_21a421be875b78c8a40127d0336ac84e0feb6c9df479befa8ea17b15727c988c", - "typeString": "literal_string \"Zero address is not allowed\"" - } - ], - "id": 15489, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "4314:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4314:60:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15498, - "nodeType": "ExpressionStatement", - "src": "4314:60:51" - }, - { - "expression": { - "id": 15501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15499, - "name": "miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15351, - "src": "4384:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 15500, - "name": "_miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15484, - "src": "4392:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4384:14:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 15502, - "nodeType": "ExpressionStatement", - "src": "4384:14:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 15504, - "name": "miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15351, - "src": "4434:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15503, - "name": "MinerSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15397, - "src": "4425:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 15505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4425:15:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15506, - "nodeType": "EmitStatement", - "src": "4420:20:51" - } - ] - }, - "functionSelector": "9742ca46", - "id": 15508, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 15487, - "kind": "modifierInvocation", - "modifierName": { - "id": 15486, - "name": "managerOnly", - "nameLocations": ["4276:11:51"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15411, - "src": "4276:11:51" - }, - "nodeType": "ModifierInvocation", - "src": "4276:11:51" - } - ], - "name": "setMiner", - "nameLocation": "4226:8:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15484, - "mutability": "mutable", - "name": "_miner", - "nameLocation": "4243:6:51", - "nodeType": "VariableDeclaration", - "scope": 15508, - "src": "4235:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15483, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4235:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4234:16:51" - }, - "returnParameters": { - "id": 15488, - "nodeType": "ParameterList", - "parameters": [], - "src": "4304:0:51" - }, - "scope": 16548, - "src": "4217:242:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15520, - "nodeType": "Block", - "src": "4544:84:51", - "statements": [ - { - "expression": { - "id": 15515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15513, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15345, - "src": "4554:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 15514, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4573:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "4554:23:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15516, - "nodeType": "ExpressionStatement", - "src": "4554:23:51" - }, - { - "eventCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 15517, - "name": "TransferAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15399, - "src": "4604:15:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 15518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4604:17:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15519, - "nodeType": "EmitStatement", - "src": "4599:22:51" - } - ] - }, - "functionSelector": "2185810b", - "id": 15521, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 15511, - "kind": "modifierInvocation", - "modifierName": { - "id": 15510, - "name": "managerOnly", - "nameLocations": ["4516:11:51"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15411, - "src": "4516:11:51" - }, - "nodeType": "ModifierInvocation", - "src": "4516:11:51" - } - ], - "name": "allowTransfers", - "nameLocation": "4474:14:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15509, - "nodeType": "ParameterList", - "parameters": [], - "src": "4488:2:51" - }, - "returnParameters": { - "id": 15512, - "nodeType": "ParameterList", - "parameters": [], - "src": "4544:0:51" - }, - "scope": 16548, - "src": "4465:163:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15537, - "nodeType": "Block", - "src": "5037:52:51", - "statements": [ - { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 15531, - "name": "allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15293, - "src": "5054:10:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - } - }, - "id": 15533, - "indexExpression": { - "id": 15532, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15524, - "src": "5065:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5054:19:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15535, - "indexExpression": { - "id": 15534, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15526, - "src": "5074:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5054:28:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 15530, - "id": 15536, - "nodeType": "Return", - "src": "5047:35:51" - } - ] - }, - "documentation": { - "id": 15522, - "nodeType": "StructuredDocumentation", - "src": "4634:285:51", - "text": " @notice Get the number of tokens `spender` is approved to spend on behalf of `account`\n @param account The address of the account holding the funds\n @param spender The address of the account spending the funds\n @return The number of tokens approved" - }, - "functionSelector": "dd62ed3e", - "id": 15538, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "4933:9:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15527, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15524, - "mutability": "mutable", - "name": "account", - "nameLocation": "4951:7:51", - "nodeType": "VariableDeclaration", - "scope": 15538, - "src": "4943:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15523, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4943:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15526, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4968:7:51", - "nodeType": "VariableDeclaration", - "scope": 15538, - "src": "4960:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15525, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4960:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4942:34:51" - }, - "returnParameters": { - "id": 15530, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15529, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15538, - "src": "5024:7:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15528, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5024:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5023:9:51" - }, - "scope": 16548, - "src": "4924:165:51", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15594, - "nodeType": "Block", - "src": "5654:348:51", - "statements": [ - { - "assignments": [15549], - "declarations": [ - { - "constant": false, - "id": 15549, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5671:6:51", - "nodeType": "VariableDeclaration", - "scope": 15594, - "src": "5664:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15548, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "5664:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15550, - "nodeType": "VariableDeclarationStatement", - "src": "5664:13:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15557, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15551, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15543, - "src": "5691:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 15554, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5709:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 15553, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5709:7:51", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 15552, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5704:4:51", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15555, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5704:13:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 15556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5718:3:51", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5704:17:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5691:30:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 15574, - "nodeType": "Block", - "src": "5779:92:51", - "statements": [ - { - "expression": { - "id": 15572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15567, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15549, - "src": "5793:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15569, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15543, - "src": "5809:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473", - "id": 15570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5820:39:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0f77e7e8583b43694e1fac930615e99b52c632fe6bf9ecbfd92dd93fbe54b5ad", - "typeString": "literal_string \"Gear::approve: amount exceeds 96 bits\"" - }, - "value": "Gear::approve: amount exceeds 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_0f77e7e8583b43694e1fac930615e99b52c632fe6bf9ecbfd92dd93fbe54b5ad", - "typeString": "literal_string \"Gear::approve: amount exceeds 96 bits\"" - } - ], - "id": 15568, - "name": "safe96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16485, - "src": "5802:6:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint256,string memory) pure returns (uint96)" - } - }, - "id": 15571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5802:58:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "5793:67:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15573, - "nodeType": "ExpressionStatement", - "src": "5793:67:51" - } - ] - }, - "id": 15575, - "nodeType": "IfStatement", - "src": "5687:184:51", - "trueBody": { - "id": 15566, - "nodeType": "Block", - "src": "5723:50:51", - "statements": [ - { - "expression": { - "id": 15564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15558, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15549, - "src": "5737:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "arguments": [ - { - "id": 15561, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5751:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 15560, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "5751:6:51", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - } - ], - "id": 15559, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5746:4:51", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15562, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5746:12:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint96", - "typeString": "type(uint96)" - } - }, - "id": 15563, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5759:3:51", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5746:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "5737:25:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15565, - "nodeType": "ExpressionStatement", - "src": "5737:25:51" - } - ] - } - }, - { - "expression": { - "id": 15583, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 15576, - "name": "allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15293, - "src": "5881:10:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - } - }, - "id": 15580, - "indexExpression": { - "expression": { - "id": 15577, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5892:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5896:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5892:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "5881:22:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15581, - "indexExpression": { - "id": 15579, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15541, - "src": "5904:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5881:31:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 15582, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15549, - "src": "5915:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "5881:40:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15584, - "nodeType": "ExpressionStatement", - "src": "5881:40:51" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 15586, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5946:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15587, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5950:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5946:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15588, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15541, - "src": "5958:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15589, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15549, - "src": "5967:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 15585, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15387, - "src": "5937:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 15590, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5937:37:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15591, - "nodeType": "EmitStatement", - "src": "5932:42:51" - }, - { - "expression": { - "hexValue": "74727565", - "id": 15592, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5991:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 15547, - "id": 15593, - "nodeType": "Return", - "src": "5984:11:51" - } - ] - }, - "documentation": { - "id": 15539, - "nodeType": "StructuredDocumentation", - "src": "5095:457:51", - "text": " @notice Approve `spender` to transfer up to `amount` from `src`\n @dev This will overwrite the approval amount for `spender`\n and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)\n @param spender The address of the account which may transfer tokens\n @param rawAmount The number of tokens that are approved (2^256-1 means infinite)\n @return Whether or not the approval succeeded" - }, - "functionSelector": "095ea7b3", - "id": 15595, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "5566:7:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15544, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15541, - "mutability": "mutable", - "name": "spender", - "nameLocation": "5582:7:51", - "nodeType": "VariableDeclaration", - "scope": 15595, - "src": "5574:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5574:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15543, - "mutability": "mutable", - "name": "rawAmount", - "nameLocation": "5599:9:51", - "nodeType": "VariableDeclaration", - "scope": 15595, - "src": "5591:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15542, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5591:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5573:36:51" - }, - "returnParameters": { - "id": 15547, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15546, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15595, - "src": "5644:4:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15545, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5644:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5643:6:51" - }, - "scope": 16548, - "src": "5557:445:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15738, - "nodeType": "Block", - "src": "6667:1197:51", - "statements": [ - { - "assignments": [15614], - "declarations": [ - { - "constant": false, - "id": 15614, - "mutability": "mutable", - "name": "amount", - "nameLocation": "6684:6:51", - "nodeType": "VariableDeclaration", - "scope": 15738, - "src": "6677:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15613, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "6677:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15615, - "nodeType": "VariableDeclarationStatement", - "src": "6677:13:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15616, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15602, - "src": "6704:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 15619, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6722:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 15618, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6722:7:51", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 15617, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6717:4:51", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15620, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6717:13:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 15621, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6731:3:51", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6717:17:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6704:30:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 15639, - "nodeType": "Block", - "src": "6792:91:51", - "statements": [ - { - "expression": { - "id": 15637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15632, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15614, - "src": "6806:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 15634, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15602, - "src": "6822:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473", - "id": 15635, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6833:38:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_54a86a82b780e190dab4b5321958d8f4331b369971cd76afa54b61047e9f2af2", - "typeString": "literal_string \"Gear::permit: amount exceeds 96 bits\"" - }, - "value": "Gear::permit: amount exceeds 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_54a86a82b780e190dab4b5321958d8f4331b369971cd76afa54b61047e9f2af2", - "typeString": "literal_string \"Gear::permit: amount exceeds 96 bits\"" - } - ], - "id": 15633, - "name": "safe96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16485, - "src": "6815:6:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint256,string memory) pure returns (uint96)" - } - }, - "id": 15636, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6815:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "6806:66:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15638, - "nodeType": "ExpressionStatement", - "src": "6806:66:51" - } - ] - }, - "id": 15640, - "nodeType": "IfStatement", - "src": "6700:183:51", - "trueBody": { - "id": 15631, - "nodeType": "Block", - "src": "6736:50:51", - "statements": [ - { - "expression": { - "id": 15629, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 15623, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15614, - "src": "6750:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "arguments": [ - { - "id": 15626, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6764:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 15625, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "6764:6:51", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - } - ], - "id": 15624, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6759:4:51", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15627, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6759:12:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint96", - "typeString": "type(uint96)" - } - }, - "id": 15628, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6772:3:51", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6759:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "6750:25:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15630, - "nodeType": "ExpressionStatement", - "src": "6750:25:51" - } - ] - } - }, - { - "assignments": [15642], - "declarations": [ - { - "constant": false, - "id": 15642, - "mutability": "mutable", - "name": "domainSeparator", - "nameLocation": "6901:15:51", - "nodeType": "VariableDeclaration", - "scope": 15738, - "src": "6893:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15641, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6893:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15661, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 15646, - "name": "DOMAIN_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15326, - "src": "6970:15:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "id": 15650, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15275, - "src": "7019:4:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 15649, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7013:5:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 15648, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7013:5:51", - "typeDescriptions": {} - } - }, - "id": 15651, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7013:11:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15647, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "7003:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15652, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7003:22:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 15653, - "name": "getChainId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16547, - "src": "7043:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 15654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7043:12:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 15657, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "7081:4:51", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - ], - "id": 15656, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7073:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15655, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7073:7:51", - "typeDescriptions": {} - } - }, - "id": 15658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7073:13:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 15644, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "6942:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15645, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6946:6:51", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "6942:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6942:158:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15643, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "6919:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6919:191:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6893:217:51" - }, - { - "assignments": [15663], - "declarations": [ - { - "constant": false, - "id": 15663, - "mutability": "mutable", - "name": "structHash", - "nameLocation": "7128:10:51", - "nodeType": "VariableDeclaration", - "scope": 15738, - "src": "7120:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15662, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7120:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15678, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 15667, - "name": "PERMIT_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15338, - "src": "7192:15:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15668, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15598, - "src": "7225:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15669, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15600, - "src": "7248:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15670, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15602, - "src": "7273:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15674, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "7300:15:51", - "subExpression": { - "baseExpression": { - "id": 15671, - "name": "nonces", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15342, - "src": "7300:6:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 15673, - "indexExpression": { - "id": 15672, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15598, - "src": "7307:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7300:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15675, - "name": "deadline", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15604, - "src": "7333:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 15665, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "7164:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7168:6:51", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "7164:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15676, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7164:191:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15664, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "7141:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7141:224:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7120:245:51" - }, - { - "assignments": [15680], - "declarations": [ - { - "constant": false, - "id": 15680, - "mutability": "mutable", - "name": "digest", - "nameLocation": "7383:6:51", - "nodeType": "VariableDeclaration", - "scope": 15738, - "src": "7375:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15679, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7375:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15689, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "1901", - "id": 15684, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7432:10:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - "value": "\u0019\u0001" - }, - { - "id": 15685, - "name": "domainSeparator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15642, - "src": "7444:15:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15686, - "name": "structHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15663, - "src": "7461:10:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 15682, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "7415:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15683, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7419:12:51", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "7415:16:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7415:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15681, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "7392:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7392:90:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7375:107:51" - }, - { - "assignments": [15691], - "declarations": [ - { - "constant": false, - "id": 15691, - "mutability": "mutable", - "name": "signatory", - "nameLocation": "7500:9:51", - "nodeType": "VariableDeclaration", - "scope": 15738, - "src": "7492:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15690, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7492:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 15698, - "initialValue": { - "arguments": [ - { - "id": 15693, - "name": "digest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15680, - "src": "7522:6:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15694, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15606, - "src": "7530:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 15695, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15608, - "src": "7533:1:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15696, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15610, - "src": "7536:1:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 15692, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967290, - "src": "7512:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 15697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7512:26:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7492:46:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15700, - "name": "signatory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15691, - "src": "7556:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 15703, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7577:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15702, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7569:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15701, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7569:7:51", - "typeDescriptions": {} - } - }, - "id": 15704, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7569:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7556:23:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a7065726d69743a20696e76616c6964207369676e6174757265", - "id": 15706, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7581:33:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f587d9a37ed8922d716d80cb9cad0322d0e6e71f4986476043d6fab938949413", - "typeString": "literal_string \"Gear::permit: invalid signature\"" - }, - "value": "Gear::permit: invalid signature" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_f587d9a37ed8922d716d80cb9cad0322d0e6e71f4986476043d6fab938949413", - "typeString": "literal_string \"Gear::permit: invalid signature\"" - } - ], - "id": 15699, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7548:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7548:67:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15708, - "nodeType": "ExpressionStatement", - "src": "7548:67:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15710, - "name": "signatory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15691, - "src": "7633:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 15711, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15598, - "src": "7646:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7633:18:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a7065726d69743a20756e617574686f72697a6564", - "id": 15713, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7653:28:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7e336673c720811df85da9c52b52403c96414373a4ba8852da36d1bf3171c7f8", - "typeString": "literal_string \"Gear::permit: unauthorized\"" - }, - "value": "Gear::permit: unauthorized" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7e336673c720811df85da9c52b52403c96414373a4ba8852da36d1bf3171c7f8", - "typeString": "literal_string \"Gear::permit: unauthorized\"" - } - ], - "id": 15709, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7625:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7625:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15715, - "nodeType": "ExpressionStatement", - "src": "7625:57:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 15717, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "7700:5:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 15718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7706:9:51", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "7700:15:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 15719, - "name": "deadline", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15604, - "src": "7719:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7700:27:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a7065726d69743a207369676e61747572652065787069726564", - "id": 15721, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7729:33:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b517fdda34a2dd69686733c0179311ae997f4c63f00f6525c2e71068609f788e", - "typeString": "literal_string \"Gear::permit: signature expired\"" - }, - "value": "Gear::permit: signature expired" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b517fdda34a2dd69686733c0179311ae997f4c63f00f6525c2e71068609f788e", - "typeString": "literal_string \"Gear::permit: signature expired\"" - } - ], - "id": 15716, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7692:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7692:71:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15723, - "nodeType": "ExpressionStatement", - "src": "7692:71:51" - }, - { - "expression": { - "id": 15730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 15724, - "name": "allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15293, - "src": "7774:10:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - } - }, - "id": 15727, - "indexExpression": { - "id": 15725, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15598, - "src": "7785:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7774:17:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15728, - "indexExpression": { - "id": 15726, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15600, - "src": "7792:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7774:26:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 15729, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15614, - "src": "7803:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "7774:35:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15731, - "nodeType": "ExpressionStatement", - "src": "7774:35:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 15733, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15598, - "src": "7834:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15734, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15600, - "src": "7841:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15735, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15614, - "src": "7850:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 15732, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15387, - "src": "7825:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 15736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7825:32:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15737, - "nodeType": "EmitStatement", - "src": "7820:37:51" - } - ] - }, - "documentation": { - "id": 15596, - "nodeType": "StructuredDocumentation", - "src": "6008:467:51", - "text": " @notice Triggers an approval from owner to spends\n @param owner The address to approve from\n @param spender The address to be approved\n @param rawAmount The number of tokens that are approved (2^256-1 means infinite)\n @param deadline The time at which to expire the signature\n @param v The recovery byte of the signature\n @param r Half of the ECDSA signature pair\n @param s Half of the ECDSA signature pair" - }, - "functionSelector": "d505accf", - "id": 15739, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "permit", - "nameLocation": "6489:6:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15611, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15598, - "mutability": "mutable", - "name": "owner", - "nameLocation": "6513:5:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6505:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15597, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6505:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15600, - "mutability": "mutable", - "name": "spender", - "nameLocation": "6536:7:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6528:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15599, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6528:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15602, - "mutability": "mutable", - "name": "rawAmount", - "nameLocation": "6561:9:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6553:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15601, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6553:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15604, - "mutability": "mutable", - "name": "deadline", - "nameLocation": "6588:8:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6580:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15603, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6580:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15606, - "mutability": "mutable", - "name": "v", - "nameLocation": "6612:1:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6606:7:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 15605, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6606:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15608, - "mutability": "mutable", - "name": "r", - "nameLocation": "6631:1:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6623:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15607, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6623:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15610, - "mutability": "mutable", - "name": "s", - "nameLocation": "6650:1:51", - "nodeType": "VariableDeclaration", - "scope": 15739, - "src": "6642:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15609, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6642:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6495:162:51" - }, - "returnParameters": { - "id": 15612, - "nodeType": "ParameterList", - "parameters": [], - "src": "6667:0:51" - }, - "scope": 16548, - "src": "6480:1384:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15751, - "nodeType": "Block", - "src": "8128:41:51", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 15747, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "8145:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15749, - "indexExpression": { - "id": 15748, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15742, - "src": "8154:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "8145:17:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 15746, - "id": 15750, - "nodeType": "Return", - "src": "8138:24:51" - } - ] - }, - "documentation": { - "id": 15740, - "nodeType": "StructuredDocumentation", - "src": "7870:185:51", - "text": " @notice Get the number of tokens held by the `account`\n @param account The address of the account to get the balance of\n @return The number of tokens held" - }, - "functionSelector": "70a08231", - "id": 15752, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "8069:9:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15743, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15742, - "mutability": "mutable", - "name": "account", - "nameLocation": "8087:7:51", - "nodeType": "VariableDeclaration", - "scope": 15752, - "src": "8079:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15741, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8079:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8078:17:51" - }, - "returnParameters": { - "id": 15746, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15745, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15752, - "src": "8119:7:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15744, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8119:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8118:9:51" - }, - "scope": 16548, - "src": "8060:109:51", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15778, - "nodeType": "Block", - "src": "8499:197:51", - "statements": [ - { - "assignments": [15763], - "declarations": [ - { - "constant": false, - "id": 15763, - "mutability": "mutable", - "name": "amount", - "nameLocation": "8516:6:51", - "nodeType": "VariableDeclaration", - "scope": 15778, - "src": "8509:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15762, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "8509:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15768, - "initialValue": { - "arguments": [ - { - "id": 15765, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15757, - "src": "8545:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473", - "id": 15766, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8568:40:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_31472674ed5e9319476adb846ccb3d5b8e736a1c255ba0d4079b91ed0172182d", - "typeString": "literal_string \"Gear::transfer: amount exceeds 96 bits\"" - }, - "value": "Gear::transfer: amount exceeds 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_31472674ed5e9319476adb846ccb3d5b8e736a1c255ba0d4079b91ed0172182d", - "typeString": "literal_string \"Gear::transfer: amount exceeds 96 bits\"" - } - ], - "id": 15764, - "name": "safe96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16485, - "src": "8525:6:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint256,string memory) pure returns (uint96)" - } - }, - "id": 15767, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8525:93:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "8509:109:51" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 15770, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "8644:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8648:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "8644:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15772, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15755, - "src": "8656:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15773, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15763, - "src": "8661:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 15769, - "name": "_transferTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16255, - "src": "8628:15:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint96_$returns$__$", - "typeString": "function (address,address,uint96)" - } - }, - "id": 15774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8628:40:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15775, - "nodeType": "ExpressionStatement", - "src": "8628:40:51" - }, - { - "expression": { - "hexValue": "74727565", - "id": 15776, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8685:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 15761, - "id": 15777, - "nodeType": "Return", - "src": "8678:11:51" - } - ] - }, - "documentation": { - "id": 15753, - "nodeType": "StructuredDocumentation", - "src": "8175:245:51", - "text": " @notice Transfer `amount` tokens from `msg.sender` to `dst`\n @param dst The address of the destination account\n @param rawAmount The number of tokens to transfer\n @return Whether or not the transfer succeeded" - }, - "functionSelector": "a9059cbb", - "id": 15779, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "8434:8:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15758, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15755, - "mutability": "mutable", - "name": "dst", - "nameLocation": "8451:3:51", - "nodeType": "VariableDeclaration", - "scope": 15779, - "src": "8443:11:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15754, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8443:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15757, - "mutability": "mutable", - "name": "rawAmount", - "nameLocation": "8464:9:51", - "nodeType": "VariableDeclaration", - "scope": 15779, - "src": "8456:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15756, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8456:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8442:32:51" - }, - "returnParameters": { - "id": 15761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15760, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15779, - "src": "8493:4:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15759, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8493:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8492:6:51" - }, - "scope": 16548, - "src": "8425:271:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15854, - "nodeType": "Block", - "src": "9118:672:51", - "statements": [ - { - "assignments": [15792], - "declarations": [ - { - "constant": false, - "id": 15792, - "mutability": "mutable", - "name": "spender", - "nameLocation": "9136:7:51", - "nodeType": "VariableDeclaration", - "scope": 15854, - "src": "9128:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15791, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9128:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 15795, - "initialValue": { - "expression": { - "id": 15793, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "9146:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15794, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9150:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "9146:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9128:28:51" - }, - { - "assignments": [15797], - "declarations": [ - { - "constant": false, - "id": 15797, - "mutability": "mutable", - "name": "spenderAllowance", - "nameLocation": "9173:16:51", - "nodeType": "VariableDeclaration", - "scope": 15854, - "src": "9166:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15796, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "9166:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15803, - "initialValue": { - "baseExpression": { - "baseExpression": { - "id": 15798, - "name": "allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15293, - "src": "9192:10:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - } - }, - "id": 15800, - "indexExpression": { - "id": 15799, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15782, - "src": "9203:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9192:15:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15802, - "indexExpression": { - "id": 15801, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15792, - "src": "9208:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9192:24:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9166:50:51" - }, - { - "assignments": [15805], - "declarations": [ - { - "constant": false, - "id": 15805, - "mutability": "mutable", - "name": "amount", - "nameLocation": "9233:6:51", - "nodeType": "VariableDeclaration", - "scope": 15854, - "src": "9226:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15804, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "9226:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15810, - "initialValue": { - "arguments": [ - { - "id": 15807, - "name": "rawAmount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15786, - "src": "9262:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473", - "id": 15808, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9285:39:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0f77e7e8583b43694e1fac930615e99b52c632fe6bf9ecbfd92dd93fbe54b5ad", - "typeString": "literal_string \"Gear::approve: amount exceeds 96 bits\"" - }, - "value": "Gear::approve: amount exceeds 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_0f77e7e8583b43694e1fac930615e99b52c632fe6bf9ecbfd92dd93fbe54b5ad", - "typeString": "literal_string \"Gear::approve: amount exceeds 96 bits\"" - } - ], - "id": 15806, - "name": "safe96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16485, - "src": "9242:6:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint256,string memory) pure returns (uint96)" - } - }, - "id": 15809, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9242:92:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9226:108:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 15821, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15813, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15811, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15792, - "src": "9349:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 15812, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15782, - "src": "9360:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9349:14:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 15820, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15814, - "name": "spenderAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15797, - "src": "9367:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 15817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9392:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 15816, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "9392:6:51", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - } - ], - "id": 15815, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "9387:4:51", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 15818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9387:12:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint96", - "typeString": "type(uint96)" - } - }, - "id": 15819, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9400:3:51", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "9387:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "9367:36:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9349:54:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 15845, - "nodeType": "IfStatement", - "src": "9345:374:51", - "trueBody": { - "id": 15844, - "nodeType": "Block", - "src": "9405:314:51", - "statements": [ - { - "assignments": [15823], - "declarations": [ - { - "constant": false, - "id": 15823, - "mutability": "mutable", - "name": "newAllowance", - "nameLocation": "9426:12:51", - "nodeType": "VariableDeclaration", - "scope": 15844, - "src": "9419:19:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15822, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "9419:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 15829, - "initialValue": { - "arguments": [ - { - "id": 15825, - "name": "spenderAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15797, - "src": "9464:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 15826, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15805, - "src": "9498:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "hexValue": "476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365", - "id": 15827, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9522:63:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9cd3617f9b9deb528b9ab81e9d60acff0a7e290eb5d37f4361faad4ce30b7743", - "typeString": "literal_string \"Gear::transferFrom: transfer amount exceeds spender allowance\"" - }, - "value": "Gear::transferFrom: transfer amount exceeds spender allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_stringliteral_9cd3617f9b9deb528b9ab81e9d60acff0a7e290eb5d37f4361faad4ce30b7743", - "typeString": "literal_string \"Gear::transferFrom: transfer amount exceeds spender allowance\"" - } - ], - "id": 15824, - "name": "sub96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16535, - "src": "9441:5:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint96_$_t_uint96_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint96,uint96,string memory) pure returns (uint96)" - } - }, - "id": 15828, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9441:158:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9419:180:51" - }, - { - "expression": { - "id": 15836, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 15830, - "name": "allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15293, - "src": "9613:10:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint96_$_$", - "typeString": "mapping(address => mapping(address => uint96))" - } - }, - "id": 15833, - "indexExpression": { - "id": 15831, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15782, - "src": "9624:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9613:15:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 15834, - "indexExpression": { - "id": 15832, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15792, - "src": "9629:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9613:24:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 15835, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15823, - "src": "9640:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "9613:39:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 15837, - "nodeType": "ExpressionStatement", - "src": "9613:39:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 15839, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15782, - "src": "9681:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15840, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15792, - "src": "9686:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15841, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15823, - "src": "9695:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 15838, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15387, - "src": "9672:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 15842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9672:36:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15843, - "nodeType": "EmitStatement", - "src": "9667:41:51" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 15847, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15782, - "src": "9745:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15848, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15784, - "src": "9750:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15849, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15805, - "src": "9755:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 15846, - "name": "_transferTokens", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16255, - "src": "9729:15:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint96_$returns$__$", - "typeString": "function (address,address,uint96)" - } - }, - "id": 15850, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9729:33:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15851, - "nodeType": "ExpressionStatement", - "src": "9729:33:51" - }, - { - "expression": { - "hexValue": "74727565", - "id": 15852, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9779:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 15790, - "id": 15853, - "nodeType": "Return", - "src": "9772:11:51" - } - ] - }, - "documentation": { - "id": 15780, - "nodeType": "StructuredDocumentation", - "src": "8702:290:51", - "text": " @notice Transfer `amount` tokens from `src` to `dst`\n @param src The address of the source account\n @param dst The address of the destination account\n @param rawAmount The number of tokens to transfer\n @return Whether or not the transfer succeeded" - }, - "functionSelector": "23b872dd", - "id": 15855, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "9006:12:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15782, - "mutability": "mutable", - "name": "src", - "nameLocation": "9036:3:51", - "nodeType": "VariableDeclaration", - "scope": 15855, - "src": "9028:11:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15781, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9028:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15784, - "mutability": "mutable", - "name": "dst", - "nameLocation": "9057:3:51", - "nodeType": "VariableDeclaration", - "scope": 15855, - "src": "9049:11:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9049:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15786, - "mutability": "mutable", - "name": "rawAmount", - "nameLocation": "9078:9:51", - "nodeType": "VariableDeclaration", - "scope": 15855, - "src": "9070:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15785, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9070:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9018:75:51" - }, - "returnParameters": { - "id": 15790, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15789, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 15855, - "src": "9112:4:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 15788, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9112:4:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9111:6:51" - }, - "scope": 16548, - "src": "8997:793:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15867, - "nodeType": "Block", - "src": "9978:56:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 15862, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "10005:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 15863, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10009:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "10005:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15864, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15858, - "src": "10017:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15861, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16170, - "src": "9995:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 15865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9995:32:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "functionReturnParameters": 15860, - "id": 15866, - "nodeType": "Return", - "src": "9988:39:51" - } - ] - }, - "documentation": { - "id": 15856, - "nodeType": "StructuredDocumentation", - "src": "9796:131:51", - "text": " @notice Delegate votes from `msg.sender` to `delegatee`\n @param delegatee The address to delegate votes to" - }, - "functionSelector": "5c19a95c", - "id": 15868, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "delegate", - "nameLocation": "9941:8:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15858, - "mutability": "mutable", - "name": "delegatee", - "nameLocation": "9958:9:51", - "nodeType": "VariableDeclaration", - "scope": 15868, - "src": "9950:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15857, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9950:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9949:19:51" - }, - "returnParameters": { - "id": 15860, - "nodeType": "ParameterList", - "parameters": [], - "src": "9978:0:51" - }, - "scope": 16548, - "src": "9932:102:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15970, - "nodeType": "Block", - "src": "10624:933:51", - "statements": [ - { - "assignments": [15885], - "declarations": [ - { - "constant": false, - "id": 15885, - "mutability": "mutable", - "name": "domainSeparator", - "nameLocation": "10642:15:51", - "nodeType": "VariableDeclaration", - "scope": 15970, - "src": "10634:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15884, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10634:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15904, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 15889, - "name": "DOMAIN_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15326, - "src": "10711:15:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "id": 15893, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15275, - "src": "10760:4:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 15892, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10754:5:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 15891, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "10754:5:51", - "typeDescriptions": {} - } - }, - "id": 15894, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10754:11:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15890, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "10744:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15895, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10744:22:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 15896, - "name": "getChainId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16547, - "src": "10784:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", - "typeString": "function () view returns (uint256)" - } - }, - "id": 15897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10784:12:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [ - { - "id": 15900, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "10822:4:51", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - ], - "id": 15899, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10814:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15898, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10814:7:51", - "typeDescriptions": {} - } - }, - "id": 15901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10814:13:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 15887, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "10683:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15888, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10687:6:51", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "10683:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15902, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10683:158:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15886, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "10660:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10660:191:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10634:217:51" - }, - { - "assignments": [15906], - "declarations": [ - { - "constant": false, - "id": 15906, - "mutability": "mutable", - "name": "structHash", - "nameLocation": "10869:10:51", - "nodeType": "VariableDeclaration", - "scope": 15970, - "src": "10861:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15905, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10861:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15916, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 15910, - "name": "DELEGATION_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15332, - "src": "10916:19:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15911, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15871, - "src": "10937:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15912, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15873, - "src": "10948:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 15913, - "name": "expiry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15875, - "src": "10955:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 15908, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "10905:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15909, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10909:6:51", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "10905:10:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10905:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15907, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "10882:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15915, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10882:90:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10861:111:51" - }, - { - "assignments": [15918], - "declarations": [ - { - "constant": false, - "id": 15918, - "mutability": "mutable", - "name": "digest", - "nameLocation": "10990:6:51", - "nodeType": "VariableDeclaration", - "scope": 15970, - "src": "10982:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15917, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10982:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 15927, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "1901", - "id": 15922, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11039:10:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - "value": "\u0019\u0001" - }, - { - "id": 15923, - "name": "domainSeparator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15885, - "src": "11051:15:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15924, - "name": "structHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15906, - "src": "11068:10:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", - "typeString": "literal_string hex\"1901\"" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 15920, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "11022:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 15921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11026:12:51", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "11022:16:51", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 15925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11022:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 15919, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "10999:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 15926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10999:90:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10982:107:51" - }, - { - "assignments": [15929], - "declarations": [ - { - "constant": false, - "id": 15929, - "mutability": "mutable", - "name": "signatory", - "nameLocation": "11107:9:51", - "nodeType": "VariableDeclaration", - "scope": 15970, - "src": "11099:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15928, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11099:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 15936, - "initialValue": { - "arguments": [ - { - "id": 15931, - "name": "digest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15918, - "src": "11129:6:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15932, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15877, - "src": "11137:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 15933, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15879, - "src": "11140:1:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 15934, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15881, - "src": "11143:1:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 15930, - "name": "ecrecover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967290, - "src": "11119:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", - "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" - } - }, - "id": 15935, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11119:26:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11099:46:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 15943, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15938, - "name": "signatory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15929, - "src": "11176:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 15941, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11197:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 15940, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11189:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 15939, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11189:7:51", - "typeDescriptions": {} - } - }, - "id": 15942, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11189:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "11176:23:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265", - "id": 15944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11213:40:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b8b4a42056547026e1b58e728ababc580aa48d9ac6259c9e9cd033858f855814", - "typeString": "literal_string \"Gear::delegateBySig: invalid signature\"" - }, - "value": "Gear::delegateBySig: invalid signature" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b8b4a42056547026e1b58e728ababc580aa48d9ac6259c9e9cd033858f855814", - "typeString": "literal_string \"Gear::delegateBySig: invalid signature\"" - } - ], - "id": 15937, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "11155:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11155:108:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15946, - "nodeType": "ExpressionStatement", - "src": "11155:108:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15948, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15873, - "src": "11294:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 15952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "11303:19:51", - "subExpression": { - "baseExpression": { - "id": 15949, - "name": "nonces", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15342, - "src": "11303:6:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 15951, - "indexExpression": { - "id": 15950, - "name": "signatory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15929, - "src": "11310:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "11303:17:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11294:28:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365", - "id": 15954, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11336:36:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_bf94a3001b8e16b22aa05162cbe4c8cfa5c543ee5848b0072b699357ed0c9f7d", - "typeString": "literal_string \"Gear::delegateBySig: invalid nonce\"" - }, - "value": "Gear::delegateBySig: invalid nonce" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_bf94a3001b8e16b22aa05162cbe4c8cfa5c543ee5848b0072b699357ed0c9f7d", - "typeString": "literal_string \"Gear::delegateBySig: invalid nonce\"" - } - ], - "id": 15947, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "11273:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15955, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11273:109:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15956, - "nodeType": "ExpressionStatement", - "src": "11273:109:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 15961, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 15958, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "11413:5:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 15959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11419:9:51", - "memberName": "timestamp", - "nodeType": "MemberAccess", - "src": "11413:15:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 15960, - "name": "expiry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15875, - "src": "11432:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11413:25:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a64656c656761746542795369673a207369676e61747572652065787069726564", - "id": 15962, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11452:40:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_da3eae76455fd15ac20ba7788ce129f574e737988df4b38e3ca9b86509cae508", - "typeString": "literal_string \"Gear::delegateBySig: signature expired\"" - }, - "value": "Gear::delegateBySig: signature expired" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_da3eae76455fd15ac20ba7788ce129f574e737988df4b38e3ca9b86509cae508", - "typeString": "literal_string \"Gear::delegateBySig: signature expired\"" - } - ], - "id": 15957, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "11392:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 15963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11392:110:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 15964, - "nodeType": "ExpressionStatement", - "src": "11392:110:51" - }, - { - "expression": { - "arguments": [ - { - "id": 15966, - "name": "signatory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15929, - "src": "11529:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 15967, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15871, - "src": "11540:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 15965, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16170, - "src": "11519:9:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 15968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11519:31:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "functionReturnParameters": 15883, - "id": 15969, - "nodeType": "Return", - "src": "11512:38:51" - } - ] - }, - "documentation": { - "id": 15869, - "nodeType": "StructuredDocumentation", - "src": "10040:412:51", - "text": " @notice Delegates votes from signatory to `delegatee`\n @param delegatee The address to delegate votes to\n @param nonce The contract state required to match the signature\n @param expiry The time at which to expire the signature\n @param v The recovery byte of the signature\n @param r Half of the ECDSA signature pair\n @param s Half of the ECDSA signature pair" - }, - "functionSelector": "c3cda520", - "id": 15971, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "delegateBySig", - "nameLocation": "10466:13:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15871, - "mutability": "mutable", - "name": "delegatee", - "nameLocation": "10497:9:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10489:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15870, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10489:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15873, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "10524:5:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10516:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15872, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10516:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15875, - "mutability": "mutable", - "name": "expiry", - "nameLocation": "10547:6:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10539:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 15874, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10539:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15877, - "mutability": "mutable", - "name": "v", - "nameLocation": "10569:1:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10563:7:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 15876, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "10563:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15879, - "mutability": "mutable", - "name": "r", - "nameLocation": "10588:1:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10580:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15878, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10580:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15881, - "mutability": "mutable", - "name": "s", - "nameLocation": "10607:1:51", - "nodeType": "VariableDeclaration", - "scope": 15971, - "src": "10599:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 15880, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10599:7:51", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "10479:135:51" - }, - "returnParameters": { - "id": 15883, - "nodeType": "ParameterList", - "parameters": [], - "src": "10624:0:51" - }, - "scope": 16548, - "src": "10457:1100:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 15999, - "nodeType": "Block", - "src": "11824:158:51", - "statements": [ - { - "assignments": [15980], - "declarations": [ - { - "constant": false, - "id": 15980, - "mutability": "mutable", - "name": "nCheckpoints", - "nameLocation": "11841:12:51", - "nodeType": "VariableDeclaration", - "scope": 15999, - "src": "11834:19:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 15979, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "11834:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 15984, - "initialValue": { - "baseExpression": { - "id": 15981, - "name": "numCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15320, - "src": "11856:14:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - } - }, - "id": 15983, - "indexExpression": { - "id": 15982, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15974, - "src": "11871:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11856:23:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11834:45:51" - }, - { - "expression": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 15987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15985, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15980, - "src": "11908:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 15986, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11923:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11908:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 15996, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11974:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 15997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11908:67:51", - "trueExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 15988, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "11927:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 15990, - "indexExpression": { - "id": 15989, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15974, - "src": "11939:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11927:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 15994, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 15993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 15991, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15980, - "src": "11948:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 15992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11963:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "11948:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11927:38:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 15995, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11966:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "11927:44:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 15978, - "id": 15998, - "nodeType": "Return", - "src": "11889:86:51" - } - ] - }, - "documentation": { - "id": 15972, - "nodeType": "StructuredDocumentation", - "src": "11563:183:51", - "text": " @notice Gets the current votes balance for `account`\n @param account The address to get votes balance\n @return The number of current votes for `account`" - }, - "functionSelector": "b4b5ea57", - "id": 16000, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getCurrentVotes", - "nameLocation": "11760:15:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 15975, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15974, - "mutability": "mutable", - "name": "account", - "nameLocation": "11784:7:51", - "nodeType": "VariableDeclaration", - "scope": 16000, - "src": "11776:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 15973, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11776:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "11775:17:51" - }, - "returnParameters": { - "id": 15978, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 15977, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16000, - "src": "11816:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 15976, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "11816:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "11815:8:51" - }, - "scope": 16548, - "src": "11751:231:51", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 16131, - "nodeType": "Block", - "src": "12524:1129:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16014, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16011, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16005, - "src": "12555:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 16012, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "12569:5:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 16013, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12575:6:51", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "12569:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12555:26:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564", - "id": 16015, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12595:41:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e98f86b871810b5dbb9ec3ddc0350faf722d94c4fa1198266b40db49b68c2c2e", - "typeString": "literal_string \"Gear::getPriorVotes: not yet determined\"" - }, - "value": "Gear::getPriorVotes: not yet determined" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_e98f86b871810b5dbb9ec3ddc0350faf722d94c4fa1198266b40db49b68c2c2e", - "typeString": "literal_string \"Gear::getPriorVotes: not yet determined\"" - } - ], - "id": 16010, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "12534:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12534:112:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16017, - "nodeType": "ExpressionStatement", - "src": "12534:112:51" - }, - { - "assignments": [16019], - "declarations": [ - { - "constant": false, - "id": 16019, - "mutability": "mutable", - "name": "nCheckpoints", - "nameLocation": "12664:12:51", - "nodeType": "VariableDeclaration", - "scope": 16131, - "src": "12657:19:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16018, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "12657:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16023, - "initialValue": { - "baseExpression": { - "id": 16020, - "name": "numCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15320, - "src": "12679:14:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - } - }, - "id": 16022, - "indexExpression": { - "id": 16021, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "12694:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12679:23:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12657:45:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16024, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16019, - "src": "12716:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 16025, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12732:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12716:17:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16030, - "nodeType": "IfStatement", - "src": "12712:56:51", - "trueBody": { - "id": 16029, - "nodeType": "Block", - "src": "12735:33:51", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 16027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12756:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 16009, - "id": 16028, - "nodeType": "Return", - "src": "12749:8:51" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16040, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16031, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "12825:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16033, - "indexExpression": { - "id": 16032, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "12837:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12825:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16037, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16034, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16019, - "src": "12846:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16035, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12861:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "12846:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12825:38:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16038, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12864:9:51", - "memberName": "fromBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 15304, - "src": "12825:48:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 16039, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16005, - "src": "12877:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "12825:63:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16051, - "nodeType": "IfStatement", - "src": "12821:145:51", - "trueBody": { - "id": 16050, - "nodeType": "Block", - "src": "12890:76:51", - "statements": [ - { - "expression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16041, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "12911:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16043, - "indexExpression": { - "id": 16042, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "12923:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12911:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16047, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16044, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16019, - "src": "12932:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16045, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12947:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "12932:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12911:38:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16048, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12950:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "12911:44:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16009, - "id": 16049, - "nodeType": "Return", - "src": "12904:51:51" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16052, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "13024:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16054, - "indexExpression": { - "id": 16053, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "13036:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13024:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16056, - "indexExpression": { - "hexValue": "30", - "id": 16055, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13045:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13024:23:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16057, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13048:9:51", - "memberName": "fromBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 15304, - "src": "13024:33:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 16058, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16005, - "src": "13060:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13024:47:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16063, - "nodeType": "IfStatement", - "src": "13020:86:51", - "trueBody": { - "id": 16062, - "nodeType": "Block", - "src": "13073:33:51", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 16060, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13094:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 16009, - "id": 16061, - "nodeType": "Return", - "src": "13087:8:51" - } - ] - } - }, - { - "assignments": [16065], - "declarations": [ - { - "constant": false, - "id": 16065, - "mutability": "mutable", - "name": "lower", - "nameLocation": "13123:5:51", - "nodeType": "VariableDeclaration", - "scope": 16131, - "src": "13116:12:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16064, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "13116:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16066, - "nodeType": "VariableDeclarationStatement", - "src": "13116:12:51" - }, - { - "assignments": [16068], - "declarations": [ - { - "constant": false, - "id": 16068, - "mutability": "mutable", - "name": "upper", - "nameLocation": "13145:5:51", - "nodeType": "VariableDeclaration", - "scope": 16131, - "src": "13138:12:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16067, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "13138:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16072, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16069, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16019, - "src": "13153:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16070, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13168:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "13153:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13138:31:51" - }, - { - "body": { - "id": 16122, - "nodeType": "Block", - "src": "13201:396:51", - "statements": [ - { - "assignments": [16077], - "declarations": [ - { - "constant": false, - "id": 16077, - "mutability": "mutable", - "name": "center", - "nameLocation": "13222:6:51", - "nodeType": "VariableDeclaration", - "scope": 16122, - "src": "13215:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16076, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "13215:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16086, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16078, - "name": "upper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16068, - "src": "13231:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16079, - "name": "upper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16068, - "src": "13240:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 16080, - "name": "lower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16065, - "src": "13248:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "13240:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "id": 16082, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "13239:15:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "hexValue": "32", - "id": 16083, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13257:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "13239:19:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "13231:27:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13215:43:51" - }, - { - "assignments": [16089], - "declarations": [ - { - "constant": false, - "id": 16089, - "mutability": "mutable", - "name": "cp", - "nameLocation": "13317:2:51", - "nodeType": "VariableDeclaration", - "scope": 16122, - "src": "13299:20:51", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_memory_ptr", - "typeString": "struct GearToken.Checkpoint" - }, - "typeName": { - "id": 16088, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 16087, - "name": "Checkpoint", - "nameLocations": ["13299:10:51"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15307, - "src": "13299:10:51" - }, - "referencedDeclaration": 15307, - "src": "13299:10:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage_ptr", - "typeString": "struct GearToken.Checkpoint" - } - }, - "visibility": "internal" - } - ], - "id": 16095, - "initialValue": { - "baseExpression": { - "baseExpression": { - "id": 16090, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "13322:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16092, - "indexExpression": { - "id": 16091, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "13334:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13322:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16094, - "indexExpression": { - "id": 16093, - "name": "center", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16077, - "src": "13343:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13322:28:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13299:51:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 16096, - "name": "cp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16089, - "src": "13368:2:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_memory_ptr", - "typeString": "struct GearToken.Checkpoint memory" - } - }, - "id": 16097, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13371:9:51", - "memberName": "fromBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 15304, - "src": "13368:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 16098, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16005, - "src": "13384:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13368:27:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16107, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 16104, - "name": "cp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16089, - "src": "13455:2:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_memory_ptr", - "typeString": "struct GearToken.Checkpoint memory" - } - }, - "id": 16105, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13458:9:51", - "memberName": "fromBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 15304, - "src": "13455:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 16106, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16005, - "src": "13470:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "13455:26:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 16119, - "nodeType": "Block", - "src": "13536:51:51", - "statements": [ - { - "expression": { - "id": 16117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16113, - "name": "upper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16068, - "src": "13554:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16116, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16114, - "name": "center", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16077, - "src": "13562:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13571:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "13562:10:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "13554:18:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 16118, - "nodeType": "ExpressionStatement", - "src": "13554:18:51" - } - ] - }, - "id": 16120, - "nodeType": "IfStatement", - "src": "13451:136:51", - "trueBody": { - "id": 16112, - "nodeType": "Block", - "src": "13483:47:51", - "statements": [ - { - "expression": { - "id": 16110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16108, - "name": "lower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16065, - "src": "13501:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 16109, - "name": "center", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16077, - "src": "13509:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "13501:14:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 16111, - "nodeType": "ExpressionStatement", - "src": "13501:14:51" - } - ] - } - }, - "id": 16121, - "nodeType": "IfStatement", - "src": "13364:223:51", - "trueBody": { - "id": 16103, - "nodeType": "Block", - "src": "13397:48:51", - "statements": [ - { - "expression": { - "expression": { - "id": 16100, - "name": "cp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16089, - "src": "13422:2:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_memory_ptr", - "typeString": "struct GearToken.Checkpoint memory" - } - }, - "id": 16101, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13425:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "13422:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16009, - "id": 16102, - "nodeType": "Return", - "src": "13415:15:51" - } - ] - } - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16075, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16073, - "name": "upper", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16068, - "src": "13186:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 16074, - "name": "lower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16065, - "src": "13194:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "13186:13:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16123, - "nodeType": "WhileStatement", - "src": "13179:418:51" - }, - { - "expression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16124, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "13613:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16126, - "indexExpression": { - "id": 16125, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16003, - "src": "13625:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13613:20:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16128, - "indexExpression": { - "id": 16127, - "name": "lower", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16065, - "src": "13634:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13613:27:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16129, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13641:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "13613:33:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16009, - "id": 16130, - "nodeType": "Return", - "src": "13606:40:51" - } - ] - }, - "documentation": { - "id": 16001, - "nodeType": "StructuredDocumentation", - "src": "11988:411:51", - "text": " @notice Determine the prior number of votes for an account as of a block number\n @dev Block number must be a finalized block or else this function will revert to prevent misinformation.\n @param account The address of the account to check\n @param blockNumber The block number to get the vote balance at\n @return The number of votes the account had as of the given block" - }, - "functionSelector": "782d6fe1", - "id": 16132, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getPriorVotes", - "nameLocation": "12413:13:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16006, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16003, - "mutability": "mutable", - "name": "account", - "nameLocation": "12435:7:51", - "nodeType": "VariableDeclaration", - "scope": 16132, - "src": "12427:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16002, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12427:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16005, - "mutability": "mutable", - "name": "blockNumber", - "nameLocation": "12452:11:51", - "nodeType": "VariableDeclaration", - "scope": 16132, - "src": "12444:19:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16004, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12444:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12426:38:51" - }, - "returnParameters": { - "id": 16009, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16008, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16132, - "src": "12512:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16007, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "12512:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "12511:8:51" - }, - "scope": 16548, - "src": "12404:1249:51", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 16169, - "nodeType": "Block", - "src": "13725:301:51", - "statements": [ - { - "assignments": [16140], - "declarations": [ - { - "constant": false, - "id": 16140, - "mutability": "mutable", - "name": "currentDelegate", - "nameLocation": "13743:15:51", - "nodeType": "VariableDeclaration", - "scope": 16169, - "src": "13735:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13735:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 16144, - "initialValue": { - "baseExpression": { - "id": 16141, - "name": "delegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15302, - "src": "13761:9:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 16143, - "indexExpression": { - "id": 16142, - "name": "delegator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16134, - "src": "13771:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13761:20:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13735:46:51" - }, - { - "assignments": [16146], - "declarations": [ - { - "constant": false, - "id": 16146, - "mutability": "mutable", - "name": "delegatorBalance", - "nameLocation": "13798:16:51", - "nodeType": "VariableDeclaration", - "scope": 16169, - "src": "13791:23:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16145, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "13791:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16150, - "initialValue": { - "baseExpression": { - "id": 16147, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "13817:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 16149, - "indexExpression": { - "id": 16148, - "name": "delegator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16134, - "src": "13826:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "13817:19:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13791:45:51" - }, - { - "expression": { - "id": 16155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 16151, - "name": "delegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15302, - "src": "13846:9:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 16153, - "indexExpression": { - "id": 16152, - "name": "delegator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16134, - "src": "13856:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "13846:20:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 16154, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16136, - "src": "13869:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "13846:32:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 16156, - "nodeType": "ExpressionStatement", - "src": "13846:32:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 16158, - "name": "delegator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16134, - "src": "13910:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16159, - "name": "currentDelegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16140, - "src": "13921:15:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16160, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16136, - "src": "13938:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16157, - "name": "DelegateChanged", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15360, - "src": "13894:15:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address,address)" - } - }, - "id": 16161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13894:54:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16162, - "nodeType": "EmitStatement", - "src": "13889:59:51" - }, - { - "expression": { - "arguments": [ - { - "id": 16164, - "name": "currentDelegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16140, - "src": "13974:15:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16165, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16136, - "src": "13991:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16166, - "name": "delegatorBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16146, - "src": "14002:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16163, - "name": "_moveDelegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16364, - "src": "13959:14:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint96_$returns$__$", - "typeString": "function (address,address,uint96)" - } - }, - "id": 16167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13959:60:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16168, - "nodeType": "ExpressionStatement", - "src": "13959:60:51" - } - ] - }, - "id": 16170, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_delegate", - "nameLocation": "13668:9:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16134, - "mutability": "mutable", - "name": "delegator", - "nameLocation": "13686:9:51", - "nodeType": "VariableDeclaration", - "scope": 16170, - "src": "13678:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16133, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13678:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16136, - "mutability": "mutable", - "name": "delegatee", - "nameLocation": "13705:9:51", - "nodeType": "VariableDeclaration", - "scope": 16170, - "src": "13697:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16135, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13697:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "13677:38:51" - }, - "returnParameters": { - "id": 16138, - "nodeType": "ParameterList", - "parameters": [], - "src": "13725:0:51" - }, - "scope": 16548, - "src": "13659:367:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16254, - "nodeType": "Block", - "src": "14137:840:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16190, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16180, - "name": "transfersAllowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15345, - "src": "14168:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16184, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 16181, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "14188:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 16182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14192:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "14188:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 16183, - "name": "manager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15348, - "src": "14202:7:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14188:21:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "14168:41:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 16186, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "14213:3:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 16187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14217:6:51", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "14213:10:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 16188, - "name": "miner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15351, - "src": "14227:5:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14213:19:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "14168:64:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a7472616e73666572732061726520666f7262696464656e", - "id": 16191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14246:31:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ba929f1322cab880e8700d473326d4d9f4297476e1b7d45089bcdaaa3b34159c", - "typeString": "literal_string \"Gear::transfers are forbidden\"" - }, - "value": "Gear::transfers are forbidden" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ba929f1322cab880e8700d473326d4d9f4297476e1b7d45089bcdaaa3b34159c", - "typeString": "literal_string \"Gear::transfers are forbidden\"" - } - ], - "id": 16179, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "14147:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14147:140:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16193, - "nodeType": "ExpressionStatement", - "src": "14147:140:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16200, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16195, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16172, - "src": "14318:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16198, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14333:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16197, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14325:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16196, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14325:7:51", - "typeDescriptions": {} - } - }, - "id": 16199, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14325:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14318:17:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f2061646472657373", - "id": 16201, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14349:62:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_891c056eab609741c5d40497e7a7fb0cfae7b5b1e4c8c4b4338ad772f82bd07f", - "typeString": "literal_string \"Gear::_transferTokens: cannot transfer from the zero address\"" - }, - "value": "Gear::_transferTokens: cannot transfer from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_891c056eab609741c5d40497e7a7fb0cfae7b5b1e4c8c4b4338ad772f82bd07f", - "typeString": "literal_string \"Gear::_transferTokens: cannot transfer from the zero address\"" - } - ], - "id": 16194, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "14297:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14297:124:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16203, - "nodeType": "ExpressionStatement", - "src": "14297:124:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16205, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16174, - "src": "14452:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16208, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14467:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16207, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14459:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16206, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14459:7:51", - "typeDescriptions": {} - } - }, - "id": 16209, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14459:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "14452:17:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373", - "id": 16211, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14483:60:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9f0c73d30d1a2c7d32b78533d64a5ea0aa93418df228d52ab0e80c9e698b1203", - "typeString": "literal_string \"Gear::_transferTokens: cannot transfer to the zero address\"" - }, - "value": "Gear::_transferTokens: cannot transfer to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9f0c73d30d1a2c7d32b78533d64a5ea0aa93418df228d52ab0e80c9e698b1203", - "typeString": "literal_string \"Gear::_transferTokens: cannot transfer to the zero address\"" - } - ], - "id": 16204, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "14431:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16212, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14431:122:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16213, - "nodeType": "ExpressionStatement", - "src": "14431:122:51" - }, - { - "expression": { - "id": 16224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 16214, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "14564:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 16216, - "indexExpression": { - "id": 16215, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16172, - "src": "14573:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "14564:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 16218, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "14599:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 16220, - "indexExpression": { - "id": 16219, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16172, - "src": "14608:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "14599:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16221, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16176, - "src": "14626:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365", - "id": 16222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14646:56:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f947f073d1d687dfab5476663f6ddab25ec32ea6b457e433339578c71e28a6aa", - "typeString": "literal_string \"Gear::_transferTokens: transfer amount exceeds balance\"" - }, - "value": "Gear::_transferTokens: transfer amount exceeds balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_stringliteral_f947f073d1d687dfab5476663f6ddab25ec32ea6b457e433339578c71e28a6aa", - "typeString": "literal_string \"Gear::_transferTokens: transfer amount exceeds balance\"" - } - ], - "id": 16217, - "name": "sub96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16535, - "src": "14580:5:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint96_$_t_uint96_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint96,uint96,string memory) pure returns (uint96)" - } - }, - "id": 16223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14580:132:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "14564:148:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 16225, - "nodeType": "ExpressionStatement", - "src": "14564:148:51" - }, - { - "expression": { - "id": 16236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 16226, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "14722:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 16228, - "indexExpression": { - "id": 16227, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16174, - "src": "14731:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "14722:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "baseExpression": { - "id": 16230, - "name": "balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15297, - "src": "14757:8:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint96_$", - "typeString": "mapping(address => uint96)" - } - }, - "id": 16232, - "indexExpression": { - "id": 16231, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16174, - "src": "14766:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "14757:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16233, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16176, - "src": "14784:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "hexValue": "476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773", - "id": 16234, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14804:50:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2e8a72b36f6a1842e13ef920d26c178159605fce1de7e57180c62f694263d987", - "typeString": "literal_string \"Gear::_transferTokens: transfer amount overflows\"" - }, - "value": "Gear::_transferTokens: transfer amount overflows" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_stringliteral_2e8a72b36f6a1842e13ef920d26c178159605fce1de7e57180c62f694263d987", - "typeString": "literal_string \"Gear::_transferTokens: transfer amount overflows\"" - } - ], - "id": 16229, - "name": "add96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16512, - "src": "14738:5:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint96_$_t_uint96_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint96,uint96,string memory) pure returns (uint96)" - } - }, - "id": 16235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14738:126:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "14722:142:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 16237, - "nodeType": "ExpressionStatement", - "src": "14722:142:51" - }, - { - "eventCall": { - "arguments": [ - { - "id": 16239, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16172, - "src": "14888:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16240, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16174, - "src": "14893:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16241, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16176, - "src": "14898:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16238, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15378, - "src": "14879:8:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 16242, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14879:26:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16243, - "nodeType": "EmitStatement", - "src": "14874:31:51" - }, - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 16245, - "name": "delegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15302, - "src": "14931:9:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 16247, - "indexExpression": { - "id": 16246, - "name": "src", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16172, - "src": "14941:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "14931:14:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "baseExpression": { - "id": 16248, - "name": "delegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15302, - "src": "14947:9:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_address_$", - "typeString": "mapping(address => address)" - } - }, - "id": 16250, - "indexExpression": { - "id": 16249, - "name": "dst", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16174, - "src": "14957:3:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "14947:14:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16251, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16176, - "src": "14963:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16244, - "name": "_moveDelegates", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16364, - "src": "14916:14:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint96_$returns$__$", - "typeString": "function (address,address,uint96)" - } - }, - "id": 16252, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14916:54:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16253, - "nodeType": "ExpressionStatement", - "src": "14916:54:51" - } - ] - }, - "id": 16255, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferTokens", - "nameLocation": "14041:15:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16172, - "mutability": "mutable", - "name": "src", - "nameLocation": "14074:3:51", - "nodeType": "VariableDeclaration", - "scope": 16255, - "src": "14066:11:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16171, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14066:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16174, - "mutability": "mutable", - "name": "dst", - "nameLocation": "14095:3:51", - "nodeType": "VariableDeclaration", - "scope": 16255, - "src": "14087:11:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16173, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "14087:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16176, - "mutability": "mutable", - "name": "amount", - "nameLocation": "14115:6:51", - "nodeType": "VariableDeclaration", - "scope": 16255, - "src": "14108:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16175, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "14108:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "14056:71:51" - }, - "returnParameters": { - "id": 16178, - "nodeType": "ParameterList", - "parameters": [], - "src": "14137:0:51" - }, - "scope": 16548, - "src": "14032:945:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16363, - "nodeType": "Block", - "src": "15093:1079:51", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16270, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16266, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16264, - "name": "srcRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16257, - "src": "15107:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 16265, - "name": "dstRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16259, - "src": "15117:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "15107:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 16269, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16267, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16261, - "src": "15127:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 16268, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15136:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "15127:10:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "15107:30:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16362, - "nodeType": "IfStatement", - "src": "15103:1063:51", - "trueBody": { - "id": 16361, - "nodeType": "Block", - "src": "15139:1027:51", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16271, - "name": "srcRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16257, - "src": "15157:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16274, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15175:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16273, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15167:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16272, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15167:7:51", - "typeDescriptions": {} - } - }, - "id": 16275, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15167:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "15157:20:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16315, - "nodeType": "IfStatement", - "src": "15153:495:51", - "trueBody": { - "id": 16314, - "nodeType": "Block", - "src": "15179:469:51", - "statements": [ - { - "assignments": [16278], - "declarations": [ - { - "constant": false, - "id": 16278, - "mutability": "mutable", - "name": "srcRepNum", - "nameLocation": "15204:9:51", - "nodeType": "VariableDeclaration", - "scope": 16314, - "src": "15197:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16277, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15197:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16282, - "initialValue": { - "baseExpression": { - "id": 16279, - "name": "numCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15320, - "src": "15216:14:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - } - }, - "id": 16281, - "indexExpression": { - "id": 16280, - "name": "srcRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16257, - "src": "15231:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15216:22:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15197:41:51" - }, - { - "assignments": [16284], - "declarations": [ - { - "constant": false, - "id": 16284, - "mutability": "mutable", - "name": "srcRepOld", - "nameLocation": "15263:9:51", - "nodeType": "VariableDeclaration", - "scope": 16314, - "src": "15256:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16283, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "15256:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16298, - "initialValue": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16287, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16285, - "name": "srcRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16278, - "src": "15275:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 16286, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15287:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "15275:13:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 16296, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15374:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 16297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "15275:100:51", - "trueExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16288, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "15311:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16290, - "indexExpression": { - "id": 16289, - "name": "srcRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16257, - "src": "15323:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15311:19:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16294, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16291, - "name": "srcRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16278, - "src": "15331:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16292, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15343:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15331:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15311:34:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16295, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15346:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "15311:40:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15256:119:51" - }, - { - "assignments": [16300], - "declarations": [ - { - "constant": false, - "id": 16300, - "mutability": "mutable", - "name": "srcRepNew", - "nameLocation": "15400:9:51", - "nodeType": "VariableDeclaration", - "scope": 16314, - "src": "15393:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16299, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "15393:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16306, - "initialValue": { - "arguments": [ - { - "id": 16302, - "name": "srcRepOld", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16284, - "src": "15439:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16303, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16261, - "src": "15470:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "hexValue": "476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773", - "id": 16304, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15498:42:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4274600816830f9c297ed29c331297c5c8b1ef1ec62f71495069fc6ac141c231", - "typeString": "literal_string \"Gear::_moveVotes: vote amount underflows\"" - }, - "value": "Gear::_moveVotes: vote amount underflows" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_stringliteral_4274600816830f9c297ed29c331297c5c8b1ef1ec62f71495069fc6ac141c231", - "typeString": "literal_string \"Gear::_moveVotes: vote amount underflows\"" - } - ], - "id": 16301, - "name": "sub96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16535, - "src": "15412:5:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint96_$_t_uint96_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint96,uint96,string memory) pure returns (uint96)" - } - }, - "id": 16305, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15412:146:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15393:165:51" - }, - { - "expression": { - "arguments": [ - { - "id": 16308, - "name": "srcRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16257, - "src": "15593:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16309, - "name": "srcRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16278, - "src": "15601:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 16310, - "name": "srcRepOld", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16284, - "src": "15612:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16311, - "name": "srcRepNew", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16300, - "src": "15623:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16307, - "name": "_writeCheckpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16437, - "src": "15576:16:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint32_$_t_uint96_$_t_uint96_$returns$__$", - "typeString": "function (address,uint32,uint96,uint96)" - } - }, - "id": 16312, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15576:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16313, - "nodeType": "ExpressionStatement", - "src": "15576:57:51" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16316, - "name": "dstRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16259, - "src": "15666:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16319, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15684:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16318, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15676:7:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16317, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15676:7:51", - "typeDescriptions": {} - } - }, - "id": 16320, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15676:10:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "15666:20:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16360, - "nodeType": "IfStatement", - "src": "15662:494:51", - "trueBody": { - "id": 16359, - "nodeType": "Block", - "src": "15688:468:51", - "statements": [ - { - "assignments": [16323], - "declarations": [ - { - "constant": false, - "id": 16323, - "mutability": "mutable", - "name": "dstRepNum", - "nameLocation": "15713:9:51", - "nodeType": "VariableDeclaration", - "scope": 16359, - "src": "15706:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16322, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15706:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16327, - "initialValue": { - "baseExpression": { - "id": 16324, - "name": "numCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15320, - "src": "15725:14:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - } - }, - "id": 16326, - "indexExpression": { - "id": 16325, - "name": "dstRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16259, - "src": "15740:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15725:22:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15706:41:51" - }, - { - "assignments": [16329], - "declarations": [ - { - "constant": false, - "id": 16329, - "mutability": "mutable", - "name": "dstRepOld", - "nameLocation": "15772:9:51", - "nodeType": "VariableDeclaration", - "scope": 16359, - "src": "15765:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16328, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "15765:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16343, - "initialValue": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16330, - "name": "dstRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16323, - "src": "15784:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 16331, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15796:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "15784:13:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "hexValue": "30", - "id": 16341, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15883:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "id": 16342, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "15784:100:51", - "trueExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16333, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "15820:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16335, - "indexExpression": { - "id": 16334, - "name": "dstRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16259, - "src": "15832:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15820:19:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16339, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16336, - "name": "dstRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16323, - "src": "15840:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16337, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15852:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "15840:13:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "15820:34:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16340, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "15855:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "15820:40:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15765:119:51" - }, - { - "assignments": [16345], - "declarations": [ - { - "constant": false, - "id": 16345, - "mutability": "mutable", - "name": "dstRepNew", - "nameLocation": "15909:9:51", - "nodeType": "VariableDeclaration", - "scope": 16359, - "src": "15902:16:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16344, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "15902:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16351, - "initialValue": { - "arguments": [ - { - "id": 16347, - "name": "dstRepOld", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16329, - "src": "15948:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16348, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16261, - "src": "15979:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "hexValue": "476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773", - "id": 16349, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16007:41:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_525b1bf2b1e7aef9ee6ac1209ffcda0d9d7bd58f1a12f160f86848af70e05f53", - "typeString": "literal_string \"Gear::_moveVotes: vote amount overflows\"" - }, - "value": "Gear::_moveVotes: vote amount overflows" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_stringliteral_525b1bf2b1e7aef9ee6ac1209ffcda0d9d7bd58f1a12f160f86848af70e05f53", - "typeString": "literal_string \"Gear::_moveVotes: vote amount overflows\"" - } - ], - "id": 16346, - "name": "add96", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16512, - "src": "15921:5:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint96_$_t_uint96_$_t_string_memory_ptr_$returns$_t_uint96_$", - "typeString": "function (uint96,uint96,string memory) pure returns (uint96)" - } - }, - "id": 16350, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15921:145:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "15902:164:51" - }, - { - "expression": { - "arguments": [ - { - "id": 16353, - "name": "dstRep", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16259, - "src": "16101:6:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16354, - "name": "dstRepNum", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16323, - "src": "16109:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 16355, - "name": "dstRepOld", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16329, - "src": "16120:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16356, - "name": "dstRepNew", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16345, - "src": "16131:9:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16352, - "name": "_writeCheckpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16437, - "src": "16084:16:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint32_$_t_uint96_$_t_uint96_$returns$__$", - "typeString": "function (address,uint32,uint96,uint96)" - } - }, - "id": 16357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16084:57:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16358, - "nodeType": "ExpressionStatement", - "src": "16084:57:51" - } - ] - } - } - ] - } - } - ] - }, - "id": 16364, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_moveDelegates", - "nameLocation": "14992:14:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16262, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16257, - "mutability": "mutable", - "name": "srcRep", - "nameLocation": "15024:6:51", - "nodeType": "VariableDeclaration", - "scope": 16364, - "src": "15016:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16256, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15016:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16259, - "mutability": "mutable", - "name": "dstRep", - "nameLocation": "15048:6:51", - "nodeType": "VariableDeclaration", - "scope": 16364, - "src": "15040:14:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16258, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15040:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16261, - "mutability": "mutable", - "name": "amount", - "nameLocation": "15071:6:51", - "nodeType": "VariableDeclaration", - "scope": 16364, - "src": "15064:13:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16260, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "15064:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "15006:77:51" - }, - "returnParameters": { - "id": 16263, - "nodeType": "ParameterList", - "parameters": [], - "src": "15093:0:51" - }, - "scope": 16548, - "src": "14983:1189:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16436, - "nodeType": "Block", - "src": "16325:639:51", - "statements": [ - { - "assignments": [16376], - "declarations": [ - { - "constant": false, - "id": 16376, - "mutability": "mutable", - "name": "blockNumber", - "nameLocation": "16342:11:51", - "nodeType": "VariableDeclaration", - "scope": 16436, - "src": "16335:18:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16375, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "16335:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "id": 16382, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 16378, - "name": "block", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967292, - "src": "16376:5:51", - "typeDescriptions": { - "typeIdentifier": "t_magic_block", - "typeString": "block" - } - }, - "id": 16379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16382:6:51", - "memberName": "number", - "nodeType": "MemberAccess", - "src": "16376:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473", - "id": 16380, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16402:54:51", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9113d2edcf67bad2c2c2f5dcf60f051949a423d55697eedb1017f0015393ebe7", - "typeString": "literal_string \"Gear::_writeCheckpoint: block number exceeds 32 bits\"" - }, - "value": "Gear::_writeCheckpoint: block number exceeds 32 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_9113d2edcf67bad2c2c2f5dcf60f051949a423d55697eedb1017f0015393ebe7", - "typeString": "literal_string \"Gear::_writeCheckpoint: block number exceeds 32 bits\"" - } - ], - "id": 16377, - "name": "safe32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16461, - "src": "16356:6:51", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint32_$", - "typeString": "function (uint256,string memory) pure returns (uint32)" - } - }, - "id": 16381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16356:110:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "16335:131:51" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16383, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16368, - "src": "16494:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 16384, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16509:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "16494:16:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16395, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16386, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "16526:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16388, - "indexExpression": { - "id": 16387, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16366, - "src": "16538:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16526:22:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16392, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16391, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16389, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16368, - "src": "16549:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16390, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16564:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "16549:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16526:40:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16393, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "16567:9:51", - "memberName": "fromBlock", - "nodeType": "MemberAccess", - "referencedDeclaration": 15304, - "src": "16526:50:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 16394, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16376, - "src": "16580:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "16526:65:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "16494:97:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 16428, - "nodeType": "Block", - "src": "16690:201:51", - "statements": [ - { - "expression": { - "id": 16418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 16409, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "16704:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16412, - "indexExpression": { - "id": 16410, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16366, - "src": "16716:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16704:22:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16413, - "indexExpression": { - "id": 16411, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16368, - "src": "16727:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "16704:36:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 16415, - "name": "blockNumber", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16376, - "src": "16771:11:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 16416, - "name": "newVotes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16372, - "src": "16800:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16414, - "name": "Checkpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15307, - "src": "16743:10:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Checkpoint_$15307_storage_ptr_$", - "typeString": "type(struct GearToken.Checkpoint storage pointer)" - } - }, - "id": 16417, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16743:79:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_memory_ptr", - "typeString": "struct GearToken.Checkpoint memory" - } - }, - "src": "16704:118:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16419, - "nodeType": "ExpressionStatement", - "src": "16704:118:51" - }, - { - "expression": { - "id": 16426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 16420, - "name": "numCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15320, - "src": "16836:14:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint32_$", - "typeString": "mapping(address => uint32)" - } - }, - "id": 16422, - "indexExpression": { - "id": 16421, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16366, - "src": "16851:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "16836:25:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16423, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16368, - "src": "16864:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 16424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16879:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "16864:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "16836:44:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 16427, - "nodeType": "ExpressionStatement", - "src": "16836:44:51" - } - ] - }, - "id": 16429, - "nodeType": "IfStatement", - "src": "16477:414:51", - "trueBody": { - "id": 16408, - "nodeType": "Block", - "src": "16602:82:51", - "statements": [ - { - "expression": { - "id": 16406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 16397, - "name": "checkpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15315, - "src": "16616:11:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$_$", - "typeString": "mapping(address => mapping(uint32 => struct GearToken.Checkpoint storage ref))" - } - }, - "id": 16402, - "indexExpression": { - "id": 16398, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16366, - "src": "16628:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16616:22:51", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_struct$_Checkpoint_$15307_storage_$", - "typeString": "mapping(uint32 => struct GearToken.Checkpoint storage ref)" - } - }, - "id": 16403, - "indexExpression": { - "commonType": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "id": 16401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16399, - "name": "nCheckpoints", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16368, - "src": "16639:12:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 16400, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16654:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "16639:16:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16616:40:51", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Checkpoint_$15307_storage", - "typeString": "struct GearToken.Checkpoint storage ref" - } - }, - "id": 16404, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "16657:5:51", - "memberName": "votes", - "nodeType": "MemberAccess", - "referencedDeclaration": 15306, - "src": "16616:46:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 16405, - "name": "newVotes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16372, - "src": "16665:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "16616:57:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "id": 16407, - "nodeType": "ExpressionStatement", - "src": "16616:57:51" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 16431, - "name": "delegatee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16366, - "src": "16927:9:51", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16432, - "name": "oldVotes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16370, - "src": "16938:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - { - "id": 16433, - "name": "newVotes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16372, - "src": "16948:8:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - ], - "id": 16430, - "name": "DelegateVotesChanged", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15369, - "src": "16906:20:51", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256)" - } - }, - "id": 16434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16906:51:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16435, - "nodeType": "EmitStatement", - "src": "16901:56:51" - } - ] - }, - "id": 16437, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_writeCheckpoint", - "nameLocation": "16187:16:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16373, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16366, - "mutability": "mutable", - "name": "delegatee", - "nameLocation": "16221:9:51", - "nodeType": "VariableDeclaration", - "scope": 16437, - "src": "16213:17:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16365, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "16213:7:51", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16368, - "mutability": "mutable", - "name": "nCheckpoints", - "nameLocation": "16247:12:51", - "nodeType": "VariableDeclaration", - "scope": 16437, - "src": "16240:19:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16367, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "16240:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16370, - "mutability": "mutable", - "name": "oldVotes", - "nameLocation": "16276:8:51", - "nodeType": "VariableDeclaration", - "scope": 16437, - "src": "16269:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16369, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "16269:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16372, - "mutability": "mutable", - "name": "newVotes", - "nameLocation": "16301:8:51", - "nodeType": "VariableDeclaration", - "scope": 16437, - "src": "16294:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16371, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "16294:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "16203:112:51" - }, - "returnParameters": { - "id": 16374, - "nodeType": "ParameterList", - "parameters": [], - "src": "16325:0:51" - }, - "scope": 16548, - "src": "16178:786:51", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16460, - "nodeType": "Block", - "src": "17084:75:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16451, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16447, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16439, - "src": "17102:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_4294967296_by_1", - "typeString": "int_const 4294967296" - }, - "id": 16450, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 16448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17106:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3332", - "id": 16449, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17109:2:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "17106:5:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_4294967296_by_1", - "typeString": "int_const 4294967296" - } - }, - "src": "17102:9:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 16452, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16441, - "src": "17113:12:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 16446, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17094:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17094:32:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16454, - "nodeType": "ExpressionStatement", - "src": "17094:32:51" - }, - { - "expression": { - "arguments": [ - { - "id": 16457, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16439, - "src": "17150:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 16456, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17143:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 16455, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "17143:6:51", - "typeDescriptions": {} - } - }, - "id": 16458, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17143:9:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 16445, - "id": 16459, - "nodeType": "Return", - "src": "17136:16:51" - } - ] - }, - "id": 16461, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safe32", - "nameLocation": "16979:6:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16442, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16439, - "mutability": "mutable", - "name": "n", - "nameLocation": "16994:1:51", - "nodeType": "VariableDeclaration", - "scope": 16461, - "src": "16986:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16438, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16986:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16441, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "17011:12:51", - "nodeType": "VariableDeclaration", - "scope": 16461, - "src": "16997:26:51", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 16440, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "16997:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "16985:39:51" - }, - "returnParameters": { - "id": 16445, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16444, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16461, - "src": "17072:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 16443, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "17072:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "17071:8:51" - }, - "scope": 16548, - "src": "16970:189:51", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16484, - "nodeType": "Block", - "src": "17279:75:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 16475, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16471, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16463, - "src": "17297:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_rational_79228162514264337593543950336_by_1", - "typeString": "int_const 79228162514264337593543950336" - }, - "id": 16474, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "leftExpression": { - "hexValue": "32", - "id": 16472, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17301:1:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "hexValue": "3936", - "id": 16473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17304:2:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_96_by_1", - "typeString": "int_const 96" - }, - "value": "96" - }, - "src": "17301:5:51", - "typeDescriptions": { - "typeIdentifier": "t_rational_79228162514264337593543950336_by_1", - "typeString": "int_const 79228162514264337593543950336" - } - }, - "src": "17297:9:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 16476, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16465, - "src": "17308:12:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 16470, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17289:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17289:32:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16478, - "nodeType": "ExpressionStatement", - "src": "17289:32:51" - }, - { - "expression": { - "arguments": [ - { - "id": 16481, - "name": "n", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16463, - "src": "17345:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 16480, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17338:6:51", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 16479, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17338:6:51", - "typeDescriptions": {} - } - }, - "id": 16482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17338:9:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16469, - "id": 16483, - "nodeType": "Return", - "src": "17331:16:51" - } - ] - }, - "id": 16485, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safe96", - "nameLocation": "17174:6:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16466, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16463, - "mutability": "mutable", - "name": "n", - "nameLocation": "17189:1:51", - "nodeType": "VariableDeclaration", - "scope": 16485, - "src": "17181:9:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16462, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17181:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16465, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "17206:12:51", - "nodeType": "VariableDeclaration", - "scope": 16485, - "src": "17192:26:51", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 16464, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "17192:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "17180:39:51" - }, - "returnParameters": { - "id": 16469, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16468, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16485, - "src": "17267:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16467, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17267:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "17266:8:51" - }, - "scope": 16548, - "src": "17165:189:51", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16511, - "nodeType": "Block", - "src": "17484:90:51", - "statements": [ - { - "assignments": [16497], - "declarations": [ - { - "constant": false, - "id": 16497, - "mutability": "mutable", - "name": "c", - "nameLocation": "17501:1:51", - "nodeType": "VariableDeclaration", - "scope": 16511, - "src": "17494:8:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16496, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17494:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "id": 16501, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 16500, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16498, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16487, - "src": "17505:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 16499, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16489, - "src": "17509:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "17505:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "17494:16:51" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 16505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16503, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16497, - "src": "17528:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 16504, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16487, - "src": "17533:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "17528:6:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 16506, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16491, - "src": "17536:12:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 16502, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17520:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17520:29:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16508, - "nodeType": "ExpressionStatement", - "src": "17520:29:51" - }, - { - "expression": { - "id": 16509, - "name": "c", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16497, - "src": "17566:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16495, - "id": 16510, - "nodeType": "Return", - "src": "17559:8:51" - } - ] - }, - "id": 16512, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add96", - "nameLocation": "17369:5:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16492, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16487, - "mutability": "mutable", - "name": "a", - "nameLocation": "17391:1:51", - "nodeType": "VariableDeclaration", - "scope": 16512, - "src": "17384:8:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16486, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17384:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16489, - "mutability": "mutable", - "name": "b", - "nameLocation": "17409:1:51", - "nodeType": "VariableDeclaration", - "scope": 16512, - "src": "17402:8:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16488, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17402:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16491, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "17434:12:51", - "nodeType": "VariableDeclaration", - "scope": 16512, - "src": "17420:26:51", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 16490, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "17420:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "17374:78:51" - }, - "returnParameters": { - "id": 16495, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16494, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16512, - "src": "17476:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16493, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17476:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "17475:8:51" - }, - "scope": 16548, - "src": "17360:214:51", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16534, - "nodeType": "Block", - "src": "17704:68:51", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 16526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16524, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16516, - "src": "17722:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "id": 16525, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16514, - "src": "17727:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "17722:6:51", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 16527, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16518, - "src": "17730:12:51", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 16523, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17714:7:51", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17714:29:51", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16529, - "nodeType": "ExpressionStatement", - "src": "17714:29:51" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "id": 16532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16530, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16514, - "src": "17760:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 16531, - "name": "b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16516, - "src": "17764:1:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "17760:5:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 16522, - "id": 16533, - "nodeType": "Return", - "src": "17753:12:51" - } - ] - }, - "id": 16535, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sub96", - "nameLocation": "17589:5:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16519, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16514, - "mutability": "mutable", - "name": "a", - "nameLocation": "17611:1:51", - "nodeType": "VariableDeclaration", - "scope": 16535, - "src": "17604:8:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16513, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17604:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16516, - "mutability": "mutable", - "name": "b", - "nameLocation": "17629:1:51", - "nodeType": "VariableDeclaration", - "scope": 16535, - "src": "17622:8:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16515, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17622:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16518, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "17654:12:51", - "nodeType": "VariableDeclaration", - "scope": 16535, - "src": "17640:26:51", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 16517, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "17640:6:51", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "17594:78:51" - }, - "returnParameters": { - "id": 16522, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16521, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16535, - "src": "17696:6:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 16520, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "17696:6:51", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "17695:8:51" - }, - "scope": 16548, - "src": "17580:192:51", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16546, - "nodeType": "Block", - "src": "17832:118:51", - "statements": [ - { - "assignments": [16541], - "declarations": [ - { - "constant": false, - "id": 16541, - "mutability": "mutable", - "name": "chainId", - "nameLocation": "17850:7:51", - "nodeType": "VariableDeclaration", - "scope": 16546, - "src": "17842:15:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16540, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17842:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 16542, - "nodeType": "VariableDeclarationStatement", - "src": "17842:15:51" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "17876:44:51", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "17890:20:51", - "value": { - "arguments": [], - "functionName": { - "name": "chainid", - "nodeType": "YulIdentifier", - "src": "17901:7:51" - }, - "nodeType": "YulFunctionCall", - "src": "17901:9:51" - }, - "variableNames": [ - { - "name": "chainId", - "nodeType": "YulIdentifier", - "src": "17890:7:51" - } - ] - } - ] - }, - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 16541, - "isOffset": false, - "isSlot": false, - "src": "17890:7:51", - "valueSize": 1 - } - ], - "id": 16543, - "nodeType": "InlineAssembly", - "src": "17867:53:51" - }, - { - "expression": { - "id": 16544, - "name": "chainId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16541, - "src": "17936:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 16539, - "id": 16545, - "nodeType": "Return", - "src": "17929:14:51" - } - ] - }, - "id": 16547, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getChainId", - "nameLocation": "17787:10:51", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16536, - "nodeType": "ParameterList", - "parameters": [], - "src": "17797:2:51" - }, - "returnParameters": { - "id": 16539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16538, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16547, - "src": "17823:7:51", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17823:7:51", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17822:9:51" - }, - "scope": 16548, - "src": "17778:172:51", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 16549, - "src": "216:17736:51", - "usedErrors": [] - } - ], - "src": "41:17912:51" - }, - "id": 51 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "exportedSymbols": { - "Context": [18742], - "Ownable": [16661] - }, - "id": 16662, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 16550, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "102:23:52" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol", - "file": "../utils/Context.sol", - "id": 16551, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 16662, - "sourceUnit": 18743, - "src": "127:30:52", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 16553, - "name": "Context", - "nameLocations": ["683:7:52"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18742, - "src": "683:7:52" - }, - "id": 16554, - "nodeType": "InheritanceSpecifier", - "src": "683:7:52" - } - ], - "canonicalName": "Ownable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 16552, - "nodeType": "StructuredDocumentation", - "src": "159:494:52", - "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner." - }, - "fullyImplemented": true, - "id": 16661, - "linearizedBaseContracts": [16661, 18742], - "name": "Ownable", - "nameLocation": "672:7:52", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 16556, - "mutability": "mutable", - "name": "_owner", - "nameLocation": "713:6:52", - "nodeType": "VariableDeclaration", - "scope": 16661, - "src": "697:22:52", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "697:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "private" - }, - { - "anonymous": false, - "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "id": 16562, - "name": "OwnershipTransferred", - "nameLocation": "732:20:52", - "nodeType": "EventDefinition", - "parameters": { - "id": 16561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16558, - "indexed": true, - "mutability": "mutable", - "name": "previousOwner", - "nameLocation": "769:13:52", - "nodeType": "VariableDeclaration", - "scope": 16562, - "src": "753:29:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16557, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "753:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16560, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "800:8:52", - "nodeType": "VariableDeclaration", - "scope": 16562, - "src": "784:24:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16559, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "784:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "752:57:52" - }, - "src": "726:84:52" - }, - { - "body": { - "id": 16571, - "nodeType": "Block", - "src": "926:49:52", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 16567, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "955:10:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 16568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "955:12:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16566, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16660, - "src": "936:18:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 16569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "936:32:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16570, - "nodeType": "ExpressionStatement", - "src": "936:32:52" - } - ] - }, - "documentation": { - "id": 16563, - "nodeType": "StructuredDocumentation", - "src": "816:91:52", - "text": " @dev Initializes the contract setting the deployer as the initial owner." - }, - "id": 16572, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16564, - "nodeType": "ParameterList", - "parameters": [], - "src": "923:2:52" - }, - "returnParameters": { - "id": 16565, - "nodeType": "ParameterList", - "parameters": [], - "src": "926:0:52" - }, - "scope": 16661, - "src": "912:63:52", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16579, - "nodeType": "Block", - "src": "1084:41:52", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 16575, - "name": "_checkOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16603, - "src": "1094:11:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 16576, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1094:13:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16577, - "nodeType": "ExpressionStatement", - "src": "1094:13:52" - }, - { - "id": 16578, - "nodeType": "PlaceholderStatement", - "src": "1117:1:52" - } - ] - }, - "documentation": { - "id": 16573, - "nodeType": "StructuredDocumentation", - "src": "981:77:52", - "text": " @dev Throws if called by any account other than the owner." - }, - "id": 16580, - "name": "onlyOwner", - "nameLocation": "1072:9:52", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 16574, - "nodeType": "ParameterList", - "parameters": [], - "src": "1081:2:52" - }, - "src": "1063:62:52", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16588, - "nodeType": "Block", - "src": "1256:30:52", - "statements": [ - { - "expression": { - "id": 16586, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16556, - "src": "1273:6:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 16585, - "id": 16587, - "nodeType": "Return", - "src": "1266:13:52" - } - ] - }, - "documentation": { - "id": 16581, - "nodeType": "StructuredDocumentation", - "src": "1131:65:52", - "text": " @dev Returns the address of the current owner." - }, - "functionSelector": "8da5cb5b", - "id": 16589, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "owner", - "nameLocation": "1210:5:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16582, - "nodeType": "ParameterList", - "parameters": [], - "src": "1215:2:52" - }, - "returnParameters": { - "id": 16585, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16584, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 16589, - "src": "1247:7:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16583, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1247:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1246:9:52" - }, - "scope": 16661, - "src": "1201:85:52", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 16602, - "nodeType": "Block", - "src": "1404:85:52", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 16594, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16589, - "src": "1422:5:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 16595, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1422:7:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 16596, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "1433:10:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 16597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1433:12:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1422:23:52", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "id": 16599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1447:34:52", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe", - "typeString": "literal_string \"Ownable: caller is not the owner\"" - }, - "value": "Ownable: caller is not the owner" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe", - "typeString": "literal_string \"Ownable: caller is not the owner\"" - } - ], - "id": 16593, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1414:7:52", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1414:68:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16601, - "nodeType": "ExpressionStatement", - "src": "1414:68:52" - } - ] - }, - "documentation": { - "id": 16590, - "nodeType": "StructuredDocumentation", - "src": "1292:62:52", - "text": " @dev Throws if the sender is not the owner." - }, - "id": 16603, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkOwner", - "nameLocation": "1368:11:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16591, - "nodeType": "ParameterList", - "parameters": [], - "src": "1379:2:52" - }, - "returnParameters": { - "id": 16592, - "nodeType": "ParameterList", - "parameters": [], - "src": "1404:0:52" - }, - "scope": 16661, - "src": "1359:130:52", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 16616, - "nodeType": "Block", - "src": "1885:47:52", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 16612, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1922:1:52", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16611, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1914:7:52", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16610, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1914:7:52", - "typeDescriptions": {} - } - }, - "id": 16613, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1914:10:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16609, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16660, - "src": "1895:18:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 16614, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1895:30:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16615, - "nodeType": "ExpressionStatement", - "src": "1895:30:52" - } - ] - }, - "documentation": { - "id": 16604, - "nodeType": "StructuredDocumentation", - "src": "1495:331:52", - "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner." - }, - "functionSelector": "715018a6", - "id": 16617, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 16607, - "kind": "modifierInvocation", - "modifierName": { - "id": 16606, - "name": "onlyOwner", - "nameLocations": ["1875:9:52"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "1875:9:52" - }, - "nodeType": "ModifierInvocation", - "src": "1875:9:52" - } - ], - "name": "renounceOwnership", - "nameLocation": "1840:17:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16605, - "nodeType": "ParameterList", - "parameters": [], - "src": "1857:2:52" - }, - "returnParameters": { - "id": 16608, - "nodeType": "ParameterList", - "parameters": [], - "src": "1885:0:52" - }, - "scope": 16661, - "src": "1831:101:52", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 16639, - "nodeType": "Block", - "src": "2151:128:52", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16631, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16626, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16620, - "src": "2169:8:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2189:1:52", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16628, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2181:7:52", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16627, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2181:7:52", - "typeDescriptions": {} - } - }, - "id": 16630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2181:10:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2169:22:52", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373", - "id": 16632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2193:40:52", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe", - "typeString": "literal_string \"Ownable: new owner is the zero address\"" - }, - "value": "Ownable: new owner is the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe", - "typeString": "literal_string \"Ownable: new owner is the zero address\"" - } - ], - "id": 16625, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2161:7:52", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2161:73:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16634, - "nodeType": "ExpressionStatement", - "src": "2161:73:52" - }, - { - "expression": { - "arguments": [ - { - "id": 16636, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16620, - "src": "2263:8:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16635, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16660, - "src": "2244:18:52", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 16637, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2244:28:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16638, - "nodeType": "ExpressionStatement", - "src": "2244:28:52" - } - ] - }, - "documentation": { - "id": 16618, - "nodeType": "StructuredDocumentation", - "src": "1938:138:52", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner." - }, - "functionSelector": "f2fde38b", - "id": 16640, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 16623, - "kind": "modifierInvocation", - "modifierName": { - "id": 16622, - "name": "onlyOwner", - "nameLocations": ["2141:9:52"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "2141:9:52" - }, - "nodeType": "ModifierInvocation", - "src": "2141:9:52" - } - ], - "name": "transferOwnership", - "nameLocation": "2090:17:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16621, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16620, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "2116:8:52", - "nodeType": "VariableDeclaration", - "scope": 16640, - "src": "2108:16:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16619, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2108:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2107:18:52" - }, - "returnParameters": { - "id": 16624, - "nodeType": "ParameterList", - "parameters": [], - "src": "2151:0:52" - }, - "scope": 16661, - "src": "2081:198:52", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 16659, - "nodeType": "Block", - "src": "2496:124:52", - "statements": [ - { - "assignments": [16647], - "declarations": [ - { - "constant": false, - "id": 16647, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "2514:8:52", - "nodeType": "VariableDeclaration", - "scope": 16659, - "src": "2506:16:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2506:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 16649, - "initialValue": { - "id": 16648, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16556, - "src": "2525:6:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2506:25:52" - }, - { - "expression": { - "id": 16652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16650, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16556, - "src": "2541:6:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 16651, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16643, - "src": "2550:8:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2541:17:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 16653, - "nodeType": "ExpressionStatement", - "src": "2541:17:52" - }, - { - "eventCall": { - "arguments": [ - { - "id": 16655, - "name": "oldOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16647, - "src": "2594:8:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16656, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16643, - "src": "2604:8:52", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16654, - "name": "OwnershipTransferred", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16562, - "src": "2573:20:52", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 16657, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2573:40:52", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16658, - "nodeType": "EmitStatement", - "src": "2568:45:52" - } - ] - }, - "documentation": { - "id": 16641, - "nodeType": "StructuredDocumentation", - "src": "2285:143:52", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction." - }, - "id": 16660, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferOwnership", - "nameLocation": "2442:18:52", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16644, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16643, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "2469:8:52", - "nodeType": "VariableDeclaration", - "scope": 16660, - "src": "2461:16:52", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16642, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2461:7:52", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2460:18:52" - }, - "returnParameters": { - "id": 16645, - "nodeType": "ParameterList", - "parameters": [], - "src": "2496:0:52" - }, - "scope": 16661, - "src": "2433:187:52", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 16662, - "src": "654:1968:52", - "usedErrors": [] - } - ], - "src": "102:2521:52" - }, - "id": 52 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol", - "exportedSymbols": { - "IERC20": [17905], - "IERC20Metadata": [17930], - "IERC4626": [16829] - }, - "id": 16830, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 16663, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "107:23:53" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../token/ERC20/IERC20.sol", - "id": 16664, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 16830, - "sourceUnit": 17906, - "src": "132:35:53", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "file": "../token/ERC20/extensions/IERC20Metadata.sol", - "id": 16665, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 16830, - "sourceUnit": 17931, - "src": "168:54:53", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 16667, - "name": "IERC20", - "nameLocations": ["413:6:53"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "413:6:53" - }, - "id": 16668, - "nodeType": "InheritanceSpecifier", - "src": "413:6:53" - }, - { - "baseName": { - "id": 16669, - "name": "IERC20Metadata", - "nameLocations": ["421:14:53"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17930, - "src": "421:14:53" - }, - "id": 16670, - "nodeType": "InheritanceSpecifier", - "src": "421:14:53" - } - ], - "canonicalName": "IERC4626", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 16666, - "nodeType": "StructuredDocumentation", - "src": "224:166:53", - "text": " @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n _Available since v4.7._" - }, - "fullyImplemented": false, - "id": 16829, - "linearizedBaseContracts": [16829, 17930, 17905], - "name": "IERC4626", - "nameLocation": "401:8:53", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "eventSelector": "dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7", - "id": 16680, - "name": "Deposit", - "nameLocation": "448:7:53", - "nodeType": "EventDefinition", - "parameters": { - "id": 16679, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16672, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "472:6:53", - "nodeType": "VariableDeclaration", - "scope": 16680, - "src": "456:22:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16671, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "456:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16674, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "496:5:53", - "nodeType": "VariableDeclaration", - "scope": 16680, - "src": "480:21:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16673, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "480:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16676, - "indexed": false, - "mutability": "mutable", - "name": "assets", - "nameLocation": "511:6:53", - "nodeType": "VariableDeclaration", - "scope": 16680, - "src": "503:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16675, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "503:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16678, - "indexed": false, - "mutability": "mutable", - "name": "shares", - "nameLocation": "527:6:53", - "nodeType": "VariableDeclaration", - "scope": 16680, - "src": "519:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16677, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "519:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "455:79:53" - }, - "src": "442:93:53" - }, - { - "anonymous": false, - "eventSelector": "fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db", - "id": 16692, - "name": "Withdraw", - "nameLocation": "547:8:53", - "nodeType": "EventDefinition", - "parameters": { - "id": 16691, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16682, - "indexed": true, - "mutability": "mutable", - "name": "sender", - "nameLocation": "581:6:53", - "nodeType": "VariableDeclaration", - "scope": 16692, - "src": "565:22:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "565:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16684, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "613:8:53", - "nodeType": "VariableDeclaration", - "scope": 16692, - "src": "597:24:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16683, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "597:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16686, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "647:5:53", - "nodeType": "VariableDeclaration", - "scope": 16692, - "src": "631:21:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16685, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "631:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16688, - "indexed": false, - "mutability": "mutable", - "name": "assets", - "nameLocation": "670:6:53", - "nodeType": "VariableDeclaration", - "scope": 16692, - "src": "662:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16687, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "662:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16690, - "indexed": false, - "mutability": "mutable", - "name": "shares", - "nameLocation": "694:6:53", - "nodeType": "VariableDeclaration", - "scope": 16692, - "src": "686:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16689, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "686:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "555:151:53" - }, - "src": "541:166:53" - }, - { - "documentation": { - "id": 16693, - "nodeType": "StructuredDocumentation", - "src": "713:207:53", - "text": " @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert." - }, - "functionSelector": "38d52e0f", - "id": 16698, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "asset", - "nameLocation": "934:5:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16694, - "nodeType": "ParameterList", - "parameters": [], - "src": "939:2:53" - }, - "returnParameters": { - "id": 16697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16696, - "mutability": "mutable", - "name": "assetTokenAddress", - "nameLocation": "973:17:53", - "nodeType": "VariableDeclaration", - "scope": 16698, - "src": "965:25:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16695, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "965:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "964:27:53" - }, - "scope": 16829, - "src": "925:67:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16699, - "nodeType": "StructuredDocumentation", - "src": "998:286:53", - "text": " @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert." - }, - "functionSelector": "01e1d114", - "id": 16704, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalAssets", - "nameLocation": "1298:11:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16700, - "nodeType": "ParameterList", - "parameters": [], - "src": "1309:2:53" - }, - "returnParameters": { - "id": 16703, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16702, - "mutability": "mutable", - "name": "totalManagedAssets", - "nameLocation": "1343:18:53", - "nodeType": "VariableDeclaration", - "scope": 16704, - "src": "1335:26:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16701, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1335:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1334:28:53" - }, - "scope": 16829, - "src": "1289:74:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16705, - "nodeType": "StructuredDocumentation", - "src": "1369:720:53", - "text": " @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from." - }, - "functionSelector": "c6e6f592", - "id": 16712, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "convertToShares", - "nameLocation": "2103:15:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16707, - "mutability": "mutable", - "name": "assets", - "nameLocation": "2127:6:53", - "nodeType": "VariableDeclaration", - "scope": 16712, - "src": "2119:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16706, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2119:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2118:16:53" - }, - "returnParameters": { - "id": 16711, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16710, - "mutability": "mutable", - "name": "shares", - "nameLocation": "2166:6:53", - "nodeType": "VariableDeclaration", - "scope": 16712, - "src": "2158:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16709, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2158:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2157:16:53" - }, - "scope": 16829, - "src": "2094:80:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16713, - "nodeType": "StructuredDocumentation", - "src": "2180:720:53", - "text": " @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from." - }, - "functionSelector": "07a2d13a", - "id": 16720, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "convertToAssets", - "nameLocation": "2914:15:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16716, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16715, - "mutability": "mutable", - "name": "shares", - "nameLocation": "2938:6:53", - "nodeType": "VariableDeclaration", - "scope": 16720, - "src": "2930:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16714, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2930:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2929:16:53" - }, - "returnParameters": { - "id": 16719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16718, - "mutability": "mutable", - "name": "assets", - "nameLocation": "2977:6:53", - "nodeType": "VariableDeclaration", - "scope": 16720, - "src": "2969:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16717, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2969:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2968:16:53" - }, - "scope": 16829, - "src": "2905:80:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16721, - "nodeType": "StructuredDocumentation", - "src": "2991:386:53", - "text": " @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert." - }, - "functionSelector": "402d267d", - "id": 16728, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxDeposit", - "nameLocation": "3391:10:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16723, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3410:8:53", - "nodeType": "VariableDeclaration", - "scope": 16728, - "src": "3402:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16722, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3402:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3401:18:53" - }, - "returnParameters": { - "id": 16727, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16726, - "mutability": "mutable", - "name": "maxAssets", - "nameLocation": "3451:9:53", - "nodeType": "VariableDeclaration", - "scope": 16728, - "src": "3443:17:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16725, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3443:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3442:19:53" - }, - "scope": 16829, - "src": "3382:80:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16729, - "nodeType": "StructuredDocumentation", - "src": "3468:1012:53", - "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "functionSelector": "ef8b30f7", - "id": 16736, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "previewDeposit", - "nameLocation": "4494:14:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16731, - "mutability": "mutable", - "name": "assets", - "nameLocation": "4517:6:53", - "nodeType": "VariableDeclaration", - "scope": 16736, - "src": "4509:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16730, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4509:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4508:16:53" - }, - "returnParameters": { - "id": 16735, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16734, - "mutability": "mutable", - "name": "shares", - "nameLocation": "4556:6:53", - "nodeType": "VariableDeclaration", - "scope": 16736, - "src": "4548:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16733, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4548:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4547:16:53" - }, - "scope": 16829, - "src": "4485:79:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16737, - "nodeType": "StructuredDocumentation", - "src": "4570:651:53", - "text": " @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "functionSelector": "6e553f65", - "id": 16746, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "deposit", - "nameLocation": "5235:7:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16739, - "mutability": "mutable", - "name": "assets", - "nameLocation": "5251:6:53", - "nodeType": "VariableDeclaration", - "scope": 16746, - "src": "5243:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16738, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5243:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16741, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "5267:8:53", - "nodeType": "VariableDeclaration", - "scope": 16746, - "src": "5259:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16740, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5259:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5242:34:53" - }, - "returnParameters": { - "id": 16745, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16744, - "mutability": "mutable", - "name": "shares", - "nameLocation": "5303:6:53", - "nodeType": "VariableDeclaration", - "scope": 16746, - "src": "5295:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16743, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5295:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5294:16:53" - }, - "scope": 16829, - "src": "5226:85:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16747, - "nodeType": "StructuredDocumentation", - "src": "5317:341:53", - "text": " @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert." - }, - "functionSelector": "c63d75b6", - "id": 16754, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxMint", - "nameLocation": "5672:7:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16750, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16749, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "5688:8:53", - "nodeType": "VariableDeclaration", - "scope": 16754, - "src": "5680:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16748, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5680:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5679:18:53" - }, - "returnParameters": { - "id": 16753, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16752, - "mutability": "mutable", - "name": "maxShares", - "nameLocation": "5729:9:53", - "nodeType": "VariableDeclaration", - "scope": 16754, - "src": "5721:17:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16751, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5721:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5720:19:53" - }, - "scope": 16829, - "src": "5663:77:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16755, - "nodeType": "StructuredDocumentation", - "src": "5746:984:53", - "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting." - }, - "functionSelector": "b3d7f6b9", - "id": 16762, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "previewMint", - "nameLocation": "6744:11:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16758, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16757, - "mutability": "mutable", - "name": "shares", - "nameLocation": "6764:6:53", - "nodeType": "VariableDeclaration", - "scope": 16762, - "src": "6756:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16756, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6756:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6755:16:53" - }, - "returnParameters": { - "id": 16761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16760, - "mutability": "mutable", - "name": "assets", - "nameLocation": "6803:6:53", - "nodeType": "VariableDeclaration", - "scope": 16762, - "src": "6795:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16759, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6795:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6794:16:53" - }, - "scope": 16829, - "src": "6735:76:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16763, - "nodeType": "StructuredDocumentation", - "src": "6817:642:53", - "text": " @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token." - }, - "functionSelector": "94bf804d", - "id": 16772, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "7473:4:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16768, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16765, - "mutability": "mutable", - "name": "shares", - "nameLocation": "7486:6:53", - "nodeType": "VariableDeclaration", - "scope": 16772, - "src": "7478:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16764, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7478:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16767, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "7502:8:53", - "nodeType": "VariableDeclaration", - "scope": 16772, - "src": "7494:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16766, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7494:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7477:34:53" - }, - "returnParameters": { - "id": 16771, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16770, - "mutability": "mutable", - "name": "assets", - "nameLocation": "7538:6:53", - "nodeType": "VariableDeclaration", - "scope": 16772, - "src": "7530:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16769, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7530:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7529:16:53" - }, - "scope": 16829, - "src": "7464:82:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16773, - "nodeType": "StructuredDocumentation", - "src": "7552:293:53", - "text": " @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert." - }, - "functionSelector": "ce96cb77", - "id": 16780, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxWithdraw", - "nameLocation": "7859:11:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16776, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16775, - "mutability": "mutable", - "name": "owner", - "nameLocation": "7879:5:53", - "nodeType": "VariableDeclaration", - "scope": 16780, - "src": "7871:13:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16774, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7871:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "7870:15:53" - }, - "returnParameters": { - "id": 16779, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16778, - "mutability": "mutable", - "name": "maxAssets", - "nameLocation": "7917:9:53", - "nodeType": "VariableDeclaration", - "scope": 16780, - "src": "7909:17:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16777, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7909:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7908:19:53" - }, - "scope": 16829, - "src": "7850:78:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16781, - "nodeType": "StructuredDocumentation", - "src": "7934:1034:53", - "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing." - }, - "functionSelector": "0a28a477", - "id": 16788, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "previewWithdraw", - "nameLocation": "8982:15:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16784, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16783, - "mutability": "mutable", - "name": "assets", - "nameLocation": "9006:6:53", - "nodeType": "VariableDeclaration", - "scope": 16788, - "src": "8998:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16782, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8998:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8997:16:53" - }, - "returnParameters": { - "id": 16787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16786, - "mutability": "mutable", - "name": "shares", - "nameLocation": "9045:6:53", - "nodeType": "VariableDeclaration", - "scope": 16788, - "src": "9037:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16785, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9037:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9036:16:53" - }, - "scope": 16829, - "src": "8973:80:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16789, - "nodeType": "StructuredDocumentation", - "src": "9059:670:53", - "text": " @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately." - }, - "functionSelector": "b460af94", - "id": 16800, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdraw", - "nameLocation": "9743:8:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16796, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16791, - "mutability": "mutable", - "name": "assets", - "nameLocation": "9769:6:53", - "nodeType": "VariableDeclaration", - "scope": 16800, - "src": "9761:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16790, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9761:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16793, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "9793:8:53", - "nodeType": "VariableDeclaration", - "scope": 16800, - "src": "9785:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16792, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9785:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16795, - "mutability": "mutable", - "name": "owner", - "nameLocation": "9819:5:53", - "nodeType": "VariableDeclaration", - "scope": 16800, - "src": "9811:13:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16794, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9811:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9751:79:53" - }, - "returnParameters": { - "id": 16799, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16798, - "mutability": "mutable", - "name": "shares", - "nameLocation": "9857:6:53", - "nodeType": "VariableDeclaration", - "scope": 16800, - "src": "9849:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16797, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9849:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9848:16:53" - }, - "scope": 16829, - "src": "9734:131:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16801, - "nodeType": "StructuredDocumentation", - "src": "9871:381:53", - "text": " @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert." - }, - "functionSelector": "d905777e", - "id": 16808, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "maxRedeem", - "nameLocation": "10266:9:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16804, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16803, - "mutability": "mutable", - "name": "owner", - "nameLocation": "10284:5:53", - "nodeType": "VariableDeclaration", - "scope": 16808, - "src": "10276:13:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16802, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10276:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "10275:15:53" - }, - "returnParameters": { - "id": 16807, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16806, - "mutability": "mutable", - "name": "maxShares", - "nameLocation": "10322:9:53", - "nodeType": "VariableDeclaration", - "scope": 16808, - "src": "10314:17:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16805, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10314:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10313:19:53" - }, - "scope": 16829, - "src": "10257:76:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16809, - "nodeType": "StructuredDocumentation", - "src": "10339:1010:53", - "text": " @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming." - }, - "functionSelector": "4cdad506", - "id": 16816, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "previewRedeem", - "nameLocation": "11363:13:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16811, - "mutability": "mutable", - "name": "shares", - "nameLocation": "11385:6:53", - "nodeType": "VariableDeclaration", - "scope": 16816, - "src": "11377:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16810, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11377:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11376:16:53" - }, - "returnParameters": { - "id": 16815, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16814, - "mutability": "mutable", - "name": "assets", - "nameLocation": "11424:6:53", - "nodeType": "VariableDeclaration", - "scope": 16816, - "src": "11416:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16813, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11416:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11415:16:53" - }, - "scope": 16829, - "src": "11354:78:53", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 16817, - "nodeType": "StructuredDocumentation", - "src": "11438:661:53", - "text": " @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately." - }, - "functionSelector": "ba087652", - "id": 16828, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "redeem", - "nameLocation": "12113:6:53", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16824, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16819, - "mutability": "mutable", - "name": "shares", - "nameLocation": "12137:6:53", - "nodeType": "VariableDeclaration", - "scope": 16828, - "src": "12129:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16818, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12129:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16821, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "12161:8:53", - "nodeType": "VariableDeclaration", - "scope": 16828, - "src": "12153:16:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16820, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12153:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16823, - "mutability": "mutable", - "name": "owner", - "nameLocation": "12187:5:53", - "nodeType": "VariableDeclaration", - "scope": 16828, - "src": "12179:13:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16822, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12179:7:53", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "12119:79:53" - }, - "returnParameters": { - "id": 16827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16826, - "mutability": "mutable", - "name": "assets", - "nameLocation": "12225:6:53", - "nodeType": "VariableDeclaration", - "scope": 16828, - "src": "12217:14:53", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 16825, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12217:7:53", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12216:16:53" - }, - "scope": 16829, - "src": "12104:129:53", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 16830, - "src": "391:11844:53", - "usedErrors": [] - } - ], - "src": "107:12129:53" - }, - "id": 53 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol", - "exportedSymbols": { - "Clones": [16909] - }, - "id": 16910, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 16831, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "100:23:54" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Clones", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 16832, - "nodeType": "StructuredDocumentation", - "src": "125:629:54", - "text": " @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n deploying minimal proxy contracts, also known as \"clones\".\n > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n deterministic method.\n _Available since v3.4._" - }, - "fullyImplemented": true, - "id": 16909, - "linearizedBaseContracts": [16909], - "name": "Clones", - "nameLocation": "763:6:54", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 16851, - "nodeType": "Block", - "src": "1048:684:54", - "statements": [ - { - "AST": { - "nodeType": "YulBlock", - "src": "1110:549:54", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1315:4:54", - "type": "", - "value": "0x00" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1328:4:54", - "type": "", - "value": "0xe8" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1338:4:54", - "type": "", - "value": "0x60" - }, - { - "name": "implementation", - "nodeType": "YulIdentifier", - "src": "1344:14:54" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1334:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "1334:25:54" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "1324:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "1324:36:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1362:48:54", - "type": "", - "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1321:2:54" - }, - "nodeType": "YulFunctionCall", - "src": "1321:90:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1308:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "1308:104:54" - }, - "nodeType": "YulExpressionStatement", - "src": "1308:104:54" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1533:4:54", - "type": "", - "value": "0x20" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1546:4:54", - "type": "", - "value": "0x78" - }, - { - "name": "implementation", - "nodeType": "YulIdentifier", - "src": "1552:14:54" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1542:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "1542:25:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1569:32:54", - "type": "", - "value": "0x5af43d82803e903d91602b57fd5bf3" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1539:2:54" - }, - "nodeType": "YulFunctionCall", - "src": "1539:63:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1526:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "1526:77:54" - }, - "nodeType": "YulExpressionStatement", - "src": "1526:77:54" - }, - { - "nodeType": "YulAssignment", - "src": "1616:33:54", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1635:1:54", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1638:4:54", - "type": "", - "value": "0x09" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1644:4:54", - "type": "", - "value": "0x37" - } - ], - "functionName": { - "name": "create", - "nodeType": "YulIdentifier", - "src": "1628:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "1628:21:54" - }, - "variableNames": [ - { - "name": "instance", - "nodeType": "YulIdentifier", - "src": "1616:8:54" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 16835, - "isOffset": false, - "isSlot": false, - "src": "1344:14:54", - "valueSize": 1 - }, - { - "declaration": 16835, - "isOffset": false, - "isSlot": false, - "src": "1552:14:54", - "valueSize": 1 - }, - { - "declaration": 16838, - "isOffset": false, - "isSlot": false, - "src": "1616:8:54", - "valueSize": 1 - } - ], - "id": 16840, - "nodeType": "InlineAssembly", - "src": "1101:558:54" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16842, - "name": "instance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16838, - "src": "1676:8:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16845, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1696:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16844, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1688:7:54", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16843, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1688:7:54", - "typeDescriptions": {} - } - }, - "id": 16846, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1688:10:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1676:22:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "455243313136373a20637265617465206661696c6564", - "id": 16848, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1700:24:54", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335", - "typeString": "literal_string \"ERC1167: create failed\"" - }, - "value": "ERC1167: create failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_68ca40b61460257f14e69f48b1a4dbc812e9afc6932f127ef8084544457b3335", - "typeString": "literal_string \"ERC1167: create failed\"" - } - ], - "id": 16841, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1668:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1668:57:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16850, - "nodeType": "ExpressionStatement", - "src": "1668:57:54" - } - ] - }, - "documentation": { - "id": 16833, - "nodeType": "StructuredDocumentation", - "src": "776:192:54", - "text": " @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n This function uses the create opcode, which should never revert." - }, - "id": 16852, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "clone", - "nameLocation": "982:5:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16835, - "mutability": "mutable", - "name": "implementation", - "nameLocation": "996:14:54", - "nodeType": "VariableDeclaration", - "scope": 16852, - "src": "988:22:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16834, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "988:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "987:24:54" - }, - "returnParameters": { - "id": 16839, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16838, - "mutability": "mutable", - "name": "instance", - "nameLocation": "1038:8:54", - "nodeType": "VariableDeclaration", - "scope": 16852, - "src": "1030:16:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16837, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1030:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1029:18:54" - }, - "scope": 16909, - "src": "973:759:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16873, - "nodeType": "Block", - "src": "2209:692:54", - "statements": [ - { - "AST": { - "nodeType": "YulBlock", - "src": "2271:556:54", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2476:4:54", - "type": "", - "value": "0x00" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2489:4:54", - "type": "", - "value": "0xe8" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2499:4:54", - "type": "", - "value": "0x60" - }, - { - "name": "implementation", - "nodeType": "YulIdentifier", - "src": "2505:14:54" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2495:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "2495:25:54" - } - ], - "functionName": { - "name": "shr", - "nodeType": "YulIdentifier", - "src": "2485:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "2485:36:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2523:48:54", - "type": "", - "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2482:2:54" - }, - "nodeType": "YulFunctionCall", - "src": "2482:90:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2469:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "2469:104:54" - }, - "nodeType": "YulExpressionStatement", - "src": "2469:104:54" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2694:4:54", - "type": "", - "value": "0x20" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2707:4:54", - "type": "", - "value": "0x78" - }, - { - "name": "implementation", - "nodeType": "YulIdentifier", - "src": "2713:14:54" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2703:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "2703:25:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2730:32:54", - "type": "", - "value": "0x5af43d82803e903d91602b57fd5bf3" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2700:2:54" - }, - "nodeType": "YulFunctionCall", - "src": "2700:63:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2687:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "2687:77:54" - }, - "nodeType": "YulExpressionStatement", - "src": "2687:77:54" - }, - { - "nodeType": "YulAssignment", - "src": "2777:40:54", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2797:1:54", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2800:4:54", - "type": "", - "value": "0x09" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2806:4:54", - "type": "", - "value": "0x37" - }, - { - "name": "salt", - "nodeType": "YulIdentifier", - "src": "2812:4:54" - } - ], - "functionName": { - "name": "create2", - "nodeType": "YulIdentifier", - "src": "2789:7:54" - }, - "nodeType": "YulFunctionCall", - "src": "2789:28:54" - }, - "variableNames": [ - { - "name": "instance", - "nodeType": "YulIdentifier", - "src": "2777:8:54" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 16855, - "isOffset": false, - "isSlot": false, - "src": "2505:14:54", - "valueSize": 1 - }, - { - "declaration": 16855, - "isOffset": false, - "isSlot": false, - "src": "2713:14:54", - "valueSize": 1 - }, - { - "declaration": 16860, - "isOffset": false, - "isSlot": false, - "src": "2777:8:54", - "valueSize": 1 - }, - { - "declaration": 16857, - "isOffset": false, - "isSlot": false, - "src": "2812:4:54", - "valueSize": 1 - } - ], - "id": 16862, - "nodeType": "InlineAssembly", - "src": "2262:565:54" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 16869, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16864, - "name": "instance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16860, - "src": "2844:8:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 16867, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2864:1:54", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 16866, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2856:7:54", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16865, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2856:7:54", - "typeDescriptions": {} - } - }, - "id": 16868, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2856:10:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2844:22:54", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "455243313136373a2063726561746532206661696c6564", - "id": 16870, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2868:25:54", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4ec050e530ce66e7658278ab7a4e4a2f19225159c48fc52eb249bd268e755d73", - "typeString": "literal_string \"ERC1167: create2 failed\"" - }, - "value": "ERC1167: create2 failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_4ec050e530ce66e7658278ab7a4e4a2f19225159c48fc52eb249bd268e755d73", - "typeString": "literal_string \"ERC1167: create2 failed\"" - } - ], - "id": 16863, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2836:7:54", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16871, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2836:58:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16872, - "nodeType": "ExpressionStatement", - "src": "2836:58:54" - } - ] - }, - "documentation": { - "id": 16853, - "nodeType": "StructuredDocumentation", - "src": "1738:364:54", - "text": " @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n This function uses the create2 opcode and a `salt` to deterministically deploy\n the clone. Using the same `implementation` and `salt` multiple time will revert, since\n the clones cannot be deployed twice at the same address." - }, - "id": 16874, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "cloneDeterministic", - "nameLocation": "2116:18:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16858, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16855, - "mutability": "mutable", - "name": "implementation", - "nameLocation": "2143:14:54", - "nodeType": "VariableDeclaration", - "scope": 16874, - "src": "2135:22:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16854, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2135:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16857, - "mutability": "mutable", - "name": "salt", - "nameLocation": "2167:4:54", - "nodeType": "VariableDeclaration", - "scope": 16874, - "src": "2159:12:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 16856, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2159:7:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2134:38:54" - }, - "returnParameters": { - "id": 16861, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16860, - "mutability": "mutable", - "name": "instance", - "nameLocation": "2199:8:54", - "nodeType": "VariableDeclaration", - "scope": 16874, - "src": "2191:16:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16859, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2191:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2190:18:54" - }, - "scope": 16909, - "src": "2107:794:54", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16887, - "nodeType": "Block", - "src": "3176:515:54", - "statements": [ - { - "AST": { - "nodeType": "YulBlock", - "src": "3238:447:54", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3252:22:54", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3269:4:54", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3263:5:54" - }, - "nodeType": "YulFunctionCall", - "src": "3263:11:54" - }, - "variables": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "3256:3:54", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3298:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3303:4:54", - "type": "", - "value": "0x38" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3294:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3294:14:54" - }, - { - "name": "deployer", - "nodeType": "YulIdentifier", - "src": "3310:8:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3287:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3287:32:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3287:32:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3343:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3348:4:54", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3339:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3339:14:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3355:34:54", - "type": "", - "value": "0x5af43d82803e903d91602b57fd5bf3ff" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3332:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3332:58:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3332:58:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3414:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3419:4:54", - "type": "", - "value": "0x14" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3410:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3410:14:54" - }, - { - "name": "implementation", - "nodeType": "YulIdentifier", - "src": "3426:14:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3403:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3403:38:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3403:38:54" - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3461:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3466:42:54", - "type": "", - "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3454:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3454:55:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3454:55:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3533:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3538:4:54", - "type": "", - "value": "0x58" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3529:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3529:14:54" - }, - { - "name": "salt", - "nodeType": "YulIdentifier", - "src": "3545:4:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3522:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3522:28:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3522:28:54" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3574:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3579:4:54", - "type": "", - "value": "0x78" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3570:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3570:14:54" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3600:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3605:4:54", - "type": "", - "value": "0x0c" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3596:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3596:14:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3612:4:54", - "type": "", - "value": "0x37" - } - ], - "functionName": { - "name": "keccak256", - "nodeType": "YulIdentifier", - "src": "3586:9:54" - }, - "nodeType": "YulFunctionCall", - "src": "3586:31:54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3563:6:54" - }, - "nodeType": "YulFunctionCall", - "src": "3563:55:54" - }, - "nodeType": "YulExpressionStatement", - "src": "3563:55:54" - }, - { - "nodeType": "YulAssignment", - "src": "3631:44:54", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "3658:3:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3663:4:54", - "type": "", - "value": "0x43" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3654:3:54" - }, - "nodeType": "YulFunctionCall", - "src": "3654:14:54" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3670:4:54", - "type": "", - "value": "0x55" - } - ], - "functionName": { - "name": "keccak256", - "nodeType": "YulIdentifier", - "src": "3644:9:54" - }, - "nodeType": "YulFunctionCall", - "src": "3644:31:54" - }, - "variableNames": [ - { - "name": "predicted", - "nodeType": "YulIdentifier", - "src": "3631:9:54" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 16881, - "isOffset": false, - "isSlot": false, - "src": "3310:8:54", - "valueSize": 1 - }, - { - "declaration": 16877, - "isOffset": false, - "isSlot": false, - "src": "3426:14:54", - "valueSize": 1 - }, - { - "declaration": 16884, - "isOffset": false, - "isSlot": false, - "src": "3631:9:54", - "valueSize": 1 - }, - { - "declaration": 16879, - "isOffset": false, - "isSlot": false, - "src": "3545:4:54", - "valueSize": 1 - } - ], - "id": 16886, - "nodeType": "InlineAssembly", - "src": "3229:456:54" - } - ] - }, - "documentation": { - "id": 16875, - "nodeType": "StructuredDocumentation", - "src": "2907:99:54", - "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}." - }, - "id": 16888, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "predictDeterministicAddress", - "nameLocation": "3020:27:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16877, - "mutability": "mutable", - "name": "implementation", - "nameLocation": "3065:14:54", - "nodeType": "VariableDeclaration", - "scope": 16888, - "src": "3057:22:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16876, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3057:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16879, - "mutability": "mutable", - "name": "salt", - "nameLocation": "3097:4:54", - "nodeType": "VariableDeclaration", - "scope": 16888, - "src": "3089:12:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 16878, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3089:7:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16881, - "mutability": "mutable", - "name": "deployer", - "nameLocation": "3119:8:54", - "nodeType": "VariableDeclaration", - "scope": 16888, - "src": "3111:16:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16880, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3111:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3047:86:54" - }, - "returnParameters": { - "id": 16885, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16884, - "mutability": "mutable", - "name": "predicted", - "nameLocation": "3165:9:54", - "nodeType": "VariableDeclaration", - "scope": 16888, - "src": "3157:17:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16883, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3157:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3156:19:54" - }, - "scope": 16909, - "src": "3011:680:54", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 16907, - "nodeType": "Block", - "src": "3946:88:54", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 16899, - "name": "implementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16891, - "src": "3991:14:54", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 16900, - "name": "salt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16893, - "src": "4007:4:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "id": 16903, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "4021:4:54", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Clones_$16909", - "typeString": "library Clones" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Clones_$16909", - "typeString": "library Clones" - } - ], - "id": 16902, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4013:7:54", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16901, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4013:7:54", - "typeDescriptions": {} - } - }, - "id": 16904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4013:13:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 16898, - "name": "predictDeterministicAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [16888, 16908], - "referencedDeclaration": 16888, - "src": "3963:27:54", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$_t_bytes32_$_t_address_$returns$_t_address_$", - "typeString": "function (address,bytes32,address) pure returns (address)" - } - }, - "id": 16905, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3963:64:54", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 16897, - "id": 16906, - "nodeType": "Return", - "src": "3956:71:54" - } - ] - }, - "documentation": { - "id": 16889, - "nodeType": "StructuredDocumentation", - "src": "3697:99:54", - "text": " @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}." - }, - "id": 16908, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "predictDeterministicAddress", - "nameLocation": "3810:27:54", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 16894, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16891, - "mutability": "mutable", - "name": "implementation", - "nameLocation": "3846:14:54", - "nodeType": "VariableDeclaration", - "scope": 16908, - "src": "3838:22:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16890, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3838:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 16893, - "mutability": "mutable", - "name": "salt", - "nameLocation": "3870:4:54", - "nodeType": "VariableDeclaration", - "scope": 16908, - "src": "3862:12:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 16892, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3862:7:54", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3837:38:54" - }, - "returnParameters": { - "id": 16897, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16896, - "mutability": "mutable", - "name": "predicted", - "nameLocation": "3931:9:54", - "nodeType": "VariableDeclaration", - "scope": 16908, - "src": "3923:17:54", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 16895, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3923:7:54", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3922:19:54" - }, - "scope": 16909, - "src": "3801:233:54", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 16910, - "src": "755:3281:54", - "usedErrors": [] - } - ], - "src": "100:3937:54" - }, - "id": 54 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol", - "exportedSymbols": { - "Address": [18720], - "Initializable": [17078] - }, - "id": 17079, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 16911, - "literals": ["solidity", "^", "0.8", ".2"], - "nodeType": "PragmaDirective", - "src": "113:23:55" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "../../utils/Address.sol", - "id": 16912, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17079, - "sourceUnit": 18721, - "src": "138:33:55", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "Initializable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 16913, - "nodeType": "StructuredDocumentation", - "src": "173:2198:55", - "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```\n contract MyToken is ERC20Upgradeable {\n function initialize() initializer public {\n __ERC20_init(\"MyToken\", \"MTK\");\n }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n function initializeV2() reinitializer(2) public {\n __ERC20Permit_init(\"MyToken\");\n }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n ```\n ====" - }, - "fullyImplemented": true, - "id": 17078, - "linearizedBaseContracts": [17078], - "name": "Initializable", - "nameLocation": "2390:13:55", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "documentation": { - "id": 16914, - "nodeType": "StructuredDocumentation", - "src": "2410:109:55", - "text": " @dev Indicates that the contract has been initialized.\n @custom:oz-retyped-from bool" - }, - "id": 16916, - "mutability": "mutable", - "name": "_initialized", - "nameLocation": "2538:12:55", - "nodeType": "VariableDeclaration", - "scope": 17078, - "src": "2524:26:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 16915, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2524:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "private" - }, - { - "constant": false, - "documentation": { - "id": 16917, - "nodeType": "StructuredDocumentation", - "src": "2557:91:55", - "text": " @dev Indicates that the contract is in the process of being initialized." - }, - "id": 16919, - "mutability": "mutable", - "name": "_initializing", - "nameLocation": "2666:13:55", - "nodeType": "VariableDeclaration", - "scope": 17078, - "src": "2653:26:55", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 16918, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2653:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "private" - }, - { - "anonymous": false, - "documentation": { - "id": 16920, - "nodeType": "StructuredDocumentation", - "src": "2686:90:55", - "text": " @dev Triggered when the contract has been initialized or reinitialized." - }, - "eventSelector": "7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498", - "id": 16924, - "name": "Initialized", - "nameLocation": "2787:11:55", - "nodeType": "EventDefinition", - "parameters": { - "id": 16923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16922, - "indexed": false, - "mutability": "mutable", - "name": "version", - "nameLocation": "2805:7:55", - "nodeType": "VariableDeclaration", - "scope": 16924, - "src": "2799:13:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 16921, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2799:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "2798:15:55" - }, - "src": "2781:33:55" - }, - { - "body": { - "id": 16979, - "nodeType": "Block", - "src": "3247:472:55", - "statements": [ - { - "assignments": [16928], - "declarations": [ - { - "constant": false, - "id": 16928, - "mutability": "mutable", - "name": "isTopLevelCall", - "nameLocation": "3262:14:55", - "nodeType": "VariableDeclaration", - "scope": 16979, - "src": "3257:19:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 16927, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3257:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 16931, - "initialValue": { - "id": 16930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3279:14:55", - "subExpression": { - "id": 16929, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "3280:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3257:36:55" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16937, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16933, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16928, - "src": "3325:14:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 16936, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16934, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "3343:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "hexValue": "31", - "id": 16935, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3358:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3343:16:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3325:34:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 16938, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3324:36:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "3365:34:55", - "subExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 16943, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "3393:4:55", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Initializable_$17078", - "typeString": "contract Initializable" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Initializable_$17078", - "typeString": "contract Initializable" - } - ], - "id": 16942, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3385:7:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 16941, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3385:7:55", - "typeDescriptions": {} - } - }, - "id": 16944, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3385:13:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 16939, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18720, - "src": "3366:7:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Address_$18720_$", - "typeString": "type(library Address)" - } - }, - "id": 16940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3374:10:55", - "memberName": "isContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 18408, - "src": "3366:18:55", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 16945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3366:33:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 16949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16947, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "3403:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 16948, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3419:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3403:17:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3365:55:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 16951, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3364:57:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "3324:97:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564", - "id": 16953, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3435:48:55", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", - "typeString": "literal_string \"Initializable: contract is already initialized\"" - }, - "value": "Initializable: contract is already initialized" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", - "typeString": "literal_string \"Initializable: contract is already initialized\"" - } - ], - "id": 16932, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3303:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3303:190:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16955, - "nodeType": "ExpressionStatement", - "src": "3303:190:55" - }, - { - "expression": { - "id": 16958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16956, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "3503:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "31", - "id": 16957, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3518:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3503:16:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 16959, - "nodeType": "ExpressionStatement", - "src": "3503:16:55" - }, - { - "condition": { - "id": 16960, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16928, - "src": "3533:14:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16966, - "nodeType": "IfStatement", - "src": "3529:65:55", - "trueBody": { - "id": 16965, - "nodeType": "Block", - "src": "3549:45:55", - "statements": [ - { - "expression": { - "id": 16963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16961, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "3563:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 16962, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3579:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "3563:20:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16964, - "nodeType": "ExpressionStatement", - "src": "3563:20:55" - } - ] - } - }, - { - "id": 16967, - "nodeType": "PlaceholderStatement", - "src": "3603:1:55" - }, - { - "condition": { - "id": 16968, - "name": "isTopLevelCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16928, - "src": "3618:14:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16978, - "nodeType": "IfStatement", - "src": "3614:99:55", - "trueBody": { - "id": 16977, - "nodeType": "Block", - "src": "3634:79:55", - "statements": [ - { - "expression": { - "id": 16971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16969, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "3648:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 16970, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3664:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "3648:21:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 16972, - "nodeType": "ExpressionStatement", - "src": "3648:21:55" - }, - { - "eventCall": { - "arguments": [ - { - "hexValue": "31", - "id": 16974, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3700:1:55", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - } - ], - "id": 16973, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16924, - "src": "3688:11:55", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$", - "typeString": "function (uint8)" - } - }, - "id": 16975, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3688:14:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16976, - "nodeType": "EmitStatement", - "src": "3683:19:55" - } - ] - } - } - ] - }, - "documentation": { - "id": 16925, - "nodeType": "StructuredDocumentation", - "src": "2820:399:55", - "text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n constructor.\n Emits an {Initialized} event." - }, - "id": 16980, - "name": "initializer", - "nameLocation": "3233:11:55", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 16926, - "nodeType": "ParameterList", - "parameters": [], - "src": "3244:2:55" - }, - "src": "3224:495:55", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17012, - "nodeType": "Block", - "src": "4830:255:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 16991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4848:14:55", - "subExpression": { - "id": 16986, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "4849:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 16990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 16988, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "4866:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 16989, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16983, - "src": "4881:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "4866:22:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4848:40:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564", - "id": 16992, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4890:48:55", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", - "typeString": "literal_string \"Initializable: contract is already initialized\"" - }, - "value": "Initializable: contract is already initialized" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759", - "typeString": "literal_string \"Initializable: contract is already initialized\"" - } - ], - "id": 16985, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "4840:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 16993, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4840:99:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 16994, - "nodeType": "ExpressionStatement", - "src": "4840:99:55" - }, - { - "expression": { - "id": 16997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16995, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "4949:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 16996, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16983, - "src": "4964:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "4949:22:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 16998, - "nodeType": "ExpressionStatement", - "src": "4949:22:55" - }, - { - "expression": { - "id": 17001, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 16999, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "4981:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 17000, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4997:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "4981:20:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17002, - "nodeType": "ExpressionStatement", - "src": "4981:20:55" - }, - { - "id": 17003, - "nodeType": "PlaceholderStatement", - "src": "5011:1:55" - }, - { - "expression": { - "id": 17006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17004, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "5022:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 17005, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5038:5:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "5022:21:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17007, - "nodeType": "ExpressionStatement", - "src": "5022:21:55" - }, - { - "eventCall": { - "arguments": [ - { - "id": 17009, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16983, - "src": "5070:7:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 17008, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16924, - "src": "5058:11:55", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$", - "typeString": "function (uint8)" - } - }, - "id": 17010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5058:20:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17011, - "nodeType": "EmitStatement", - "src": "5053:25:55" - } - ] - }, - "documentation": { - "id": 16981, - "nodeType": "StructuredDocumentation", - "src": "3725:1062:55", - "text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: setting the version to 255 will prevent any future reinitialization.\n Emits an {Initialized} event." - }, - "id": 17013, - "name": "reinitializer", - "nameLocation": "4801:13:55", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 16984, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 16983, - "mutability": "mutable", - "name": "version", - "nameLocation": "4821:7:55", - "nodeType": "VariableDeclaration", - "scope": 17013, - "src": "4815:13:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 16982, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4815:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "4814:15:55" - }, - "src": "4792:293:55", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17022, - "nodeType": "Block", - "src": "5323:97:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17017, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "5341:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696e697469616c697a696e67", - "id": 17018, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5356:45:55", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b", - "typeString": "literal_string \"Initializable: contract is not initializing\"" - }, - "value": "Initializable: contract is not initializing" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b", - "typeString": "literal_string \"Initializable: contract is not initializing\"" - } - ], - "id": 17016, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "5333:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5333:69:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17020, - "nodeType": "ExpressionStatement", - "src": "5333:69:55" - }, - { - "id": 17021, - "nodeType": "PlaceholderStatement", - "src": "5412:1:55" - } - ] - }, - "documentation": { - "id": 17014, - "nodeType": "StructuredDocumentation", - "src": "5091:199:55", - "text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly." - }, - "id": 17023, - "name": "onlyInitializing", - "nameLocation": "5304:16:55", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17015, - "nodeType": "ParameterList", - "parameters": [], - "src": "5320:2:55" - }, - "src": "5295:125:55", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17058, - "nodeType": "Block", - "src": "5955:230:55", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "5973:14:55", - "subExpression": { - "id": 17028, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "5974:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320696e697469616c697a696e67", - "id": 17030, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5989:41:55", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a", - "typeString": "literal_string \"Initializable: contract is initializing\"" - }, - "value": "Initializable: contract is initializing" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a", - "typeString": "literal_string \"Initializable: contract is initializing\"" - } - ], - "id": 17027, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "5965:7:55", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5965:66:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17032, - "nodeType": "ExpressionStatement", - "src": "5965:66:55" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 17039, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17033, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "6045:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 17036, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6065:5:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 17035, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6065:5:55", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - } - ], - "id": 17034, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6060:4:55", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 17037, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6060:11:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint8", - "typeString": "type(uint8)" - } - }, - "id": 17038, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6072:3:55", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6060:15:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "6045:30:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17057, - "nodeType": "IfStatement", - "src": "6041:138:55", - "trueBody": { - "id": 17056, - "nodeType": "Block", - "src": "6077:102:55", - "statements": [ - { - "expression": { - "id": 17046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17040, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "6091:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "arguments": [ - { - "id": 17043, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6111:5:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 17042, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6111:5:55", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - } - ], - "id": 17041, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6106:4:55", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 17044, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6106:11:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint8", - "typeString": "type(uint8)" - } - }, - "id": 17045, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6118:3:55", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6106:15:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "6091:30:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 17047, - "nodeType": "ExpressionStatement", - "src": "6091:30:55" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 17051, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6157:5:55", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 17050, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6157:5:55", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - } - ], - "id": 17049, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6152:4:55", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 17052, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6152:11:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint8", - "typeString": "type(uint8)" - } - }, - "id": 17053, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6164:3:55", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6152:15:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - ], - "id": 17048, - "name": "Initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16924, - "src": "6140:11:55", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$returns$__$", - "typeString": "function (uint8)" - } - }, - "id": 17054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6140:28:55", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17055, - "nodeType": "EmitStatement", - "src": "6135:33:55" - } - ] - } - } - ] - }, - "documentation": { - "id": 17024, - "nodeType": "StructuredDocumentation", - "src": "5426:475:55", - "text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed." - }, - "id": 17059, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_disableInitializers", - "nameLocation": "5915:20:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17025, - "nodeType": "ParameterList", - "parameters": [], - "src": "5935:2:55" - }, - "returnParameters": { - "id": 17026, - "nodeType": "ParameterList", - "parameters": [], - "src": "5955:0:55" - }, - "scope": 17078, - "src": "5906:279:55", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17067, - "nodeType": "Block", - "src": "6359:36:55", - "statements": [ - { - "expression": { - "id": 17065, - "name": "_initialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16916, - "src": "6376:12:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 17064, - "id": 17066, - "nodeType": "Return", - "src": "6369:19:55" - } - ] - }, - "documentation": { - "id": 17060, - "nodeType": "StructuredDocumentation", - "src": "6191:99:55", - "text": " @dev Returns the highest version that has been initialized. See {reinitializer}." - }, - "id": 17068, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getInitializedVersion", - "nameLocation": "6304:22:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17061, - "nodeType": "ParameterList", - "parameters": [], - "src": "6326:2:55" - }, - "returnParameters": { - "id": 17064, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17063, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17068, - "src": "6352:5:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 17062, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "6352:5:55", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "6351:7:55" - }, - "scope": 17078, - "src": "6295:100:55", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17076, - "nodeType": "Block", - "src": "6567:37:55", - "statements": [ - { - "expression": { - "id": 17074, - "name": "_initializing", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16919, - "src": "6584:13:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 17073, - "id": 17075, - "nodeType": "Return", - "src": "6577:20:55" - } - ] - }, - "documentation": { - "id": 17069, - "nodeType": "StructuredDocumentation", - "src": "6401:105:55", - "text": " @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}." - }, - "id": 17077, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_isInitializing", - "nameLocation": "6520:15:55", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17070, - "nodeType": "ParameterList", - "parameters": [], - "src": "6535:2:55" - }, - "returnParameters": { - "id": 17073, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17072, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17077, - "src": "6561:4:55", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17071, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6561:4:55", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6560:6:55" - }, - "scope": 17078, - "src": "6511:93:55", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 17079, - "src": "2372:4234:55", - "usedErrors": [] - } - ], - "src": "113:6494:55" - }, - "id": 55 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol", - "exportedSymbols": { - "Context": [18742], - "Pausable": [17186] - }, - "id": 17187, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17080, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "105:23:56" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol", - "file": "../utils/Context.sol", - "id": 17081, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17187, - "sourceUnit": 18743, - "src": "130:30:56", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 17083, - "name": "Context", - "nameLocations": ["632:7:56"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18742, - "src": "632:7:56" - }, - "id": 17084, - "nodeType": "InheritanceSpecifier", - "src": "632:7:56" - } - ], - "canonicalName": "Pausable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 17082, - "nodeType": "StructuredDocumentation", - "src": "162:439:56", - "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place." - }, - "fullyImplemented": true, - "id": 17186, - "linearizedBaseContracts": [17186, 18742], - "name": "Pausable", - "nameLocation": "620:8:56", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 17085, - "nodeType": "StructuredDocumentation", - "src": "646:73:56", - "text": " @dev Emitted when the pause is triggered by `account`." - }, - "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258", - "id": 17089, - "name": "Paused", - "nameLocation": "730:6:56", - "nodeType": "EventDefinition", - "parameters": { - "id": 17088, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17087, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "745:7:56", - "nodeType": "VariableDeclaration", - "scope": 17089, - "src": "737:15:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17086, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "737:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "736:17:56" - }, - "src": "724:30:56" - }, - { - "anonymous": false, - "documentation": { - "id": 17090, - "nodeType": "StructuredDocumentation", - "src": "760:70:56", - "text": " @dev Emitted when the pause is lifted by `account`." - }, - "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa", - "id": 17094, - "name": "Unpaused", - "nameLocation": "841:8:56", - "nodeType": "EventDefinition", - "parameters": { - "id": 17093, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17092, - "indexed": false, - "mutability": "mutable", - "name": "account", - "nameLocation": "858:7:56", - "nodeType": "VariableDeclaration", - "scope": 17094, - "src": "850:15:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17091, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "850:7:56", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "849:17:56" - }, - "src": "835:32:56" - }, - { - "constant": false, - "id": 17096, - "mutability": "mutable", - "name": "_paused", - "nameLocation": "886:7:56", - "nodeType": "VariableDeclaration", - "scope": 17186, - "src": "873:20:56", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17095, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "873:4:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "private" - }, - { - "body": { - "id": 17104, - "nodeType": "Block", - "src": "986:32:56", - "statements": [ - { - "expression": { - "id": 17102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17100, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17096, - "src": "996:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 17101, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1006:5:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "996:15:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17103, - "nodeType": "ExpressionStatement", - "src": "996:15:56" - } - ] - }, - "documentation": { - "id": 17097, - "nodeType": "StructuredDocumentation", - "src": "900:67:56", - "text": " @dev Initializes the contract in unpaused state." - }, - "id": 17105, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17098, - "nodeType": "ParameterList", - "parameters": [], - "src": "983:2:56" - }, - "returnParameters": { - "id": 17099, - "nodeType": "ParameterList", - "parameters": [], - "src": "986:0:56" - }, - "scope": 17186, - "src": "972:46:56", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17112, - "nodeType": "Block", - "src": "1229:47:56", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17108, - "name": "_requireNotPaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17142, - "src": "1239:17:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 17109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1239:19:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17110, - "nodeType": "ExpressionStatement", - "src": "1239:19:56" - }, - { - "id": 17111, - "nodeType": "PlaceholderStatement", - "src": "1268:1:56" - } - ] - }, - "documentation": { - "id": 17106, - "nodeType": "StructuredDocumentation", - "src": "1024:175:56", - "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused." - }, - "id": 17113, - "name": "whenNotPaused", - "nameLocation": "1213:13:56", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17107, - "nodeType": "ParameterList", - "parameters": [], - "src": "1226:2:56" - }, - "src": "1204:72:56", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17120, - "nodeType": "Block", - "src": "1476:44:56", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17116, - "name": "_requirePaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17153, - "src": "1486:14:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 17117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1486:16:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17118, - "nodeType": "ExpressionStatement", - "src": "1486:16:56" - }, - { - "id": 17119, - "nodeType": "PlaceholderStatement", - "src": "1512:1:56" - } - ] - }, - "documentation": { - "id": 17114, - "nodeType": "StructuredDocumentation", - "src": "1282:167:56", - "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused." - }, - "id": 17121, - "name": "whenPaused", - "nameLocation": "1463:10:56", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17115, - "nodeType": "ParameterList", - "parameters": [], - "src": "1473:2:56" - }, - "src": "1454:66:56", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17129, - "nodeType": "Block", - "src": "1668:31:56", - "statements": [ - { - "expression": { - "id": 17127, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17096, - "src": "1685:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 17126, - "id": 17128, - "nodeType": "Return", - "src": "1678:14:56" - } - ] - }, - "documentation": { - "id": 17122, - "nodeType": "StructuredDocumentation", - "src": "1526:84:56", - "text": " @dev Returns true if the contract is paused, and false otherwise." - }, - "functionSelector": "5c975abb", - "id": 17130, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "paused", - "nameLocation": "1624:6:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17123, - "nodeType": "ParameterList", - "parameters": [], - "src": "1630:2:56" - }, - "returnParameters": { - "id": 17126, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17125, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17130, - "src": "1662:4:56", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17124, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1662:4:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1661:6:56" - }, - "scope": 17186, - "src": "1615:84:56", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 17141, - "nodeType": "Block", - "src": "1818:55:56", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17137, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1836:9:56", - "subExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17135, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17130, - "src": "1837:6:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 17136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1837:8:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5061757361626c653a20706175736564", - "id": 17138, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1847:18:56", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - }, - "value": "Pausable: paused" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a", - "typeString": "literal_string \"Pausable: paused\"" - } - ], - "id": 17134, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1828:7:56", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1828:38:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17140, - "nodeType": "ExpressionStatement", - "src": "1828:38:56" - } - ] - }, - "documentation": { - "id": 17131, - "nodeType": "StructuredDocumentation", - "src": "1705:57:56", - "text": " @dev Throws if the contract is paused." - }, - "id": 17142, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_requireNotPaused", - "nameLocation": "1776:17:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17132, - "nodeType": "ParameterList", - "parameters": [], - "src": "1793:2:56" - }, - "returnParameters": { - "id": 17133, - "nodeType": "ParameterList", - "parameters": [], - "src": "1818:0:56" - }, - "scope": 17186, - "src": "1767:106:56", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17152, - "nodeType": "Block", - "src": "1993:58:56", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17147, - "name": "paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17130, - "src": "2011:6:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", - "typeString": "function () view returns (bool)" - } - }, - "id": 17148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2011:8:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5061757361626c653a206e6f7420706175736564", - "id": 17149, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2021:22:56", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a", - "typeString": "literal_string \"Pausable: not paused\"" - }, - "value": "Pausable: not paused" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a", - "typeString": "literal_string \"Pausable: not paused\"" - } - ], - "id": 17146, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2003:7:56", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2003:41:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17151, - "nodeType": "ExpressionStatement", - "src": "2003:41:56" - } - ] - }, - "documentation": { - "id": 17143, - "nodeType": "StructuredDocumentation", - "src": "1879:61:56", - "text": " @dev Throws if the contract is not paused." - }, - "id": 17153, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_requirePaused", - "nameLocation": "1954:14:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17144, - "nodeType": "ParameterList", - "parameters": [], - "src": "1968:2:56" - }, - "returnParameters": { - "id": 17145, - "nodeType": "ParameterList", - "parameters": [], - "src": "1993:0:56" - }, - "scope": 17186, - "src": "1945:106:56", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17168, - "nodeType": "Block", - "src": "2235:66:56", - "statements": [ - { - "expression": { - "id": 17161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17159, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17096, - "src": "2245:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "74727565", - "id": 17160, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2255:4:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "src": "2245:14:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17162, - "nodeType": "ExpressionStatement", - "src": "2245:14:56" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17164, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "2281:10:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2281:12:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 17163, - "name": "Paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17089, - "src": "2274:6:56", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 17166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2274:20:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17167, - "nodeType": "EmitStatement", - "src": "2269:25:56" - } - ] - }, - "documentation": { - "id": 17154, - "nodeType": "StructuredDocumentation", - "src": "2057:124:56", - "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused." - }, - "id": 17169, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 17157, - "kind": "modifierInvocation", - "modifierName": { - "id": 17156, - "name": "whenNotPaused", - "nameLocations": ["2221:13:56"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17113, - "src": "2221:13:56" - }, - "nodeType": "ModifierInvocation", - "src": "2221:13:56" - } - ], - "name": "_pause", - "nameLocation": "2195:6:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17155, - "nodeType": "ParameterList", - "parameters": [], - "src": "2201:2:56" - }, - "returnParameters": { - "id": 17158, - "nodeType": "ParameterList", - "parameters": [], - "src": "2235:0:56" - }, - "scope": 17186, - "src": "2186:115:56", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17184, - "nodeType": "Block", - "src": "2481:69:56", - "statements": [ - { - "expression": { - "id": 17177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17175, - "name": "_paused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17096, - "src": "2491:7:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "hexValue": "66616c7365", - "id": 17176, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2501:5:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "src": "2491:15:56", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17178, - "nodeType": "ExpressionStatement", - "src": "2491:15:56" - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17180, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "2530:10:56", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2530:12:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 17179, - "name": "Unpaused", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17094, - "src": "2521:8:56", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 17182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2521:22:56", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17183, - "nodeType": "EmitStatement", - "src": "2516:27:56" - } - ] - }, - "documentation": { - "id": 17170, - "nodeType": "StructuredDocumentation", - "src": "2307:121:56", - "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused." - }, - "id": 17185, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 17173, - "kind": "modifierInvocation", - "modifierName": { - "id": 17172, - "name": "whenPaused", - "nameLocations": ["2470:10:56"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17121, - "src": "2470:10:56" - }, - "nodeType": "ModifierInvocation", - "src": "2470:10:56" - } - ], - "name": "_unpause", - "nameLocation": "2442:8:56", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17171, - "nodeType": "ParameterList", - "parameters": [], - "src": "2450:2:56" - }, - "returnParameters": { - "id": 17174, - "nodeType": "ParameterList", - "parameters": [], - "src": "2481:0:56" - }, - "scope": 17186, - "src": "2433:117:56", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 17187, - "src": "602:1950:56", - "usedErrors": [] - } - ], - "src": "105:2448:56" - }, - "id": 56 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol", - "exportedSymbols": { - "ReentrancyGuard": [17240] - }, - "id": 17241, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17188, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "112:23:57" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "ReentrancyGuard", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 17189, - "nodeType": "StructuredDocumentation", - "src": "137:750:57", - "text": " @dev Contract module that helps prevent reentrant calls to a function.\n Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n available, which can be applied to functions to make sure there are no nested\n (reentrant) calls to them.\n Note that because there is a single `nonReentrant` guard, functions marked as\n `nonReentrant` may not call one another. This can be worked around by making\n those functions `private`, and then adding `external` `nonReentrant` entry\n points to them.\n TIP: If you would like to learn more about reentrancy and alternative ways\n to protect against it, check out our blog post\n https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]." - }, - "fullyImplemented": true, - "id": 17240, - "linearizedBaseContracts": [17240], - "name": "ReentrancyGuard", - "nameLocation": "906:15:57", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 17192, - "mutability": "constant", - "name": "_NOT_ENTERED", - "nameLocation": "1701:12:57", - "nodeType": "VariableDeclaration", - "scope": 17240, - "src": "1676:41:57", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17190, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1676:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 17191, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1716:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 17195, - "mutability": "constant", - "name": "_ENTERED", - "nameLocation": "1748:8:57", - "nodeType": "VariableDeclaration", - "scope": 17240, - "src": "1723:37:57", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17193, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1723:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "32", - "id": 17194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1759:1:57", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "private" - }, - { - "constant": false, - "id": 17197, - "mutability": "mutable", - "name": "_status", - "nameLocation": "1783:7:57", - "nodeType": "VariableDeclaration", - "scope": 17240, - "src": "1767:23:57", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17196, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1767:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "body": { - "id": 17204, - "nodeType": "Block", - "src": "1811:39:57", - "statements": [ - { - "expression": { - "id": 17202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17200, - "name": "_status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17197, - "src": "1821:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17201, - "name": "_NOT_ENTERED", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17192, - "src": "1831:12:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1821:22:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17203, - "nodeType": "ExpressionStatement", - "src": "1821:22:57" - } - ] - }, - "id": 17205, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17198, - "nodeType": "ParameterList", - "parameters": [], - "src": "1808:2:57" - }, - "returnParameters": { - "id": 17199, - "nodeType": "ParameterList", - "parameters": [], - "src": "1811:0:57" - }, - "scope": 17240, - "src": "1797:53:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17215, - "nodeType": "Block", - "src": "2251:79:57", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17208, - "name": "_nonReentrantBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17231, - "src": "2261:19:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 17209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2261:21:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17210, - "nodeType": "ExpressionStatement", - "src": "2261:21:57" - }, - { - "id": 17211, - "nodeType": "PlaceholderStatement", - "src": "2292:1:57" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17212, - "name": "_nonReentrantAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17239, - "src": "2303:18:57", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 17213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2303:20:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17214, - "nodeType": "ExpressionStatement", - "src": "2303:20:57" - } - ] - }, - "documentation": { - "id": 17206, - "nodeType": "StructuredDocumentation", - "src": "1856:366:57", - "text": " @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work." - }, - "id": 17216, - "name": "nonReentrant", - "nameLocation": "2236:12:57", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 17207, - "nodeType": "ParameterList", - "parameters": [], - "src": "2248:2:57" - }, - "src": "2227:103:57", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 17230, - "nodeType": "Block", - "src": "2375:248:57", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17220, - "name": "_status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17197, - "src": "2468:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 17221, - "name": "_ENTERED", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17195, - "src": "2479:8:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2468:19:57", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c", - "id": 17223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2489:33:57", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619", - "typeString": "literal_string \"ReentrancyGuard: reentrant call\"" - }, - "value": "ReentrancyGuard: reentrant call" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619", - "typeString": "literal_string \"ReentrancyGuard: reentrant call\"" - } - ], - "id": 17219, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2460:7:57", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2460:63:57", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17225, - "nodeType": "ExpressionStatement", - "src": "2460:63:57" - }, - { - "expression": { - "id": 17228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17226, - "name": "_status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17197, - "src": "2598:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17227, - "name": "_ENTERED", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17195, - "src": "2608:8:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2598:18:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17229, - "nodeType": "ExpressionStatement", - "src": "2598:18:57" - } - ] - }, - "id": 17231, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_nonReentrantBefore", - "nameLocation": "2345:19:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17217, - "nodeType": "ParameterList", - "parameters": [], - "src": "2364:2:57" - }, - "returnParameters": { - "id": 17218, - "nodeType": "ParameterList", - "parameters": [], - "src": "2375:0:57" - }, - "scope": 17240, - "src": "2336:287:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 17238, - "nodeType": "Block", - "src": "2667:171:57", - "statements": [ - { - "expression": { - "id": 17236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17234, - "name": "_status", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17197, - "src": "2809:7:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17235, - "name": "_NOT_ENTERED", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17192, - "src": "2819:12:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2809:22:57", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17237, - "nodeType": "ExpressionStatement", - "src": "2809:22:57" - } - ] - }, - "id": 17239, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_nonReentrantAfter", - "nameLocation": "2638:18:57", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17232, - "nodeType": "ParameterList", - "parameters": [], - "src": "2656:2:57" - }, - "returnParameters": { - "id": 17233, - "nodeType": "ParameterList", - "parameters": [], - "src": "2667:0:57" - }, - "scope": 17240, - "src": "2629:209:57", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - } - ], - "scope": 17241, - "src": "888:1952:57", - "usedErrors": [] - } - ], - "src": "112:2729:57" - }, - "id": 57 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "exportedSymbols": { - "Context": [18742], - "ERC20": [17827], - "IERC20": [17905], - "IERC20Metadata": [17930] - }, - "id": 17828, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17242, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "105:23:58" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 17243, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17828, - "sourceUnit": 17906, - "src": "130:22:58", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "file": "./extensions/IERC20Metadata.sol", - "id": 17244, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17828, - "sourceUnit": 17931, - "src": "153:41:58", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol", - "file": "../../utils/Context.sol", - "id": 17245, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17828, - "sourceUnit": 18743, - "src": "195:33:58", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 17247, - "name": "Context", - "nameLocations": ["1419:7:58"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18742, - "src": "1419:7:58" - }, - "id": 17248, - "nodeType": "InheritanceSpecifier", - "src": "1419:7:58" - }, - { - "baseName": { - "id": 17249, - "name": "IERC20", - "nameLocations": ["1428:6:58"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "1428:6:58" - }, - "id": 17250, - "nodeType": "InheritanceSpecifier", - "src": "1428:6:58" - }, - { - "baseName": { - "id": 17251, - "name": "IERC20Metadata", - "nameLocations": ["1436:14:58"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17930, - "src": "1436:14:58" - }, - "id": 17252, - "nodeType": "InheritanceSpecifier", - "src": "1436:14:58" - } - ], - "canonicalName": "ERC20", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 17246, - "nodeType": "StructuredDocumentation", - "src": "230:1170:58", - "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}." - }, - "fullyImplemented": true, - "id": 17827, - "linearizedBaseContracts": [17827, 17930, 17905, 18742], - "name": "ERC20", - "nameLocation": "1410:5:58", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 17256, - "mutability": "mutable", - "name": "_balances", - "nameLocation": "1493:9:58", - "nodeType": "VariableDeclaration", - "scope": 17827, - "src": "1457:45:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 17255, - "keyType": { - "id": 17253, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1465:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1457:27:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 17254, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1476:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 17262, - "mutability": "mutable", - "name": "_allowances", - "nameLocation": "1565:11:58", - "nodeType": "VariableDeclaration", - "scope": 17827, - "src": "1509:67:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 17261, - "keyType": { - "id": 17257, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1517:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1509:47:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueType": { - "id": 17260, - "keyType": { - "id": 17258, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1536:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1528:27:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueType": { - "id": 17259, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1547:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 17264, - "mutability": "mutable", - "name": "_totalSupply", - "nameLocation": "1599:12:58", - "nodeType": "VariableDeclaration", - "scope": 17827, - "src": "1583:28:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17263, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1583:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 17266, - "mutability": "mutable", - "name": "_name", - "nameLocation": "1633:5:58", - "nodeType": "VariableDeclaration", - "scope": 17827, - "src": "1618:20:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 17265, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1618:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 17268, - "mutability": "mutable", - "name": "_symbol", - "nameLocation": "1659:7:58", - "nodeType": "VariableDeclaration", - "scope": 17827, - "src": "1644:22:58", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 17267, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1644:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "private" - }, - { - "body": { - "id": 17284, - "nodeType": "Block", - "src": "2032:57:58", - "statements": [ - { - "expression": { - "id": 17278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17276, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17266, - "src": "2042:5:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17277, - "name": "name_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17271, - "src": "2050:5:58", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "2042:13:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 17279, - "nodeType": "ExpressionStatement", - "src": "2042:13:58" - }, - { - "expression": { - "id": 17282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17280, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17268, - "src": "2065:7:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17281, - "name": "symbol_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17273, - "src": "2075:7:58", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "2065:17:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 17283, - "nodeType": "ExpressionStatement", - "src": "2065:17:58" - } - ] - }, - "documentation": { - "id": 17269, - "nodeType": "StructuredDocumentation", - "src": "1673:298:58", - "text": " @dev Sets the values for {name} and {symbol}.\n The default value of {decimals} is 18. To select a different value for\n {decimals} you should overload it.\n All two of these values are immutable: they can only be set once during\n construction." - }, - "id": 17285, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17274, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17271, - "mutability": "mutable", - "name": "name_", - "nameLocation": "2002:5:58", - "nodeType": "VariableDeclaration", - "scope": 17285, - "src": "1988:19:58", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17270, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1988:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17273, - "mutability": "mutable", - "name": "symbol_", - "nameLocation": "2023:7:58", - "nodeType": "VariableDeclaration", - "scope": 17285, - "src": "2009:21:58", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17272, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2009:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1987:44:58" - }, - "returnParameters": { - "id": 17275, - "nodeType": "ParameterList", - "parameters": [], - "src": "2032:0:58" - }, - "scope": 17827, - "src": "1976:113:58", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [17917], - "body": { - "id": 17294, - "nodeType": "Block", - "src": "2223:29:58", - "statements": [ - { - "expression": { - "id": 17292, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17266, - "src": "2240:5:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 17291, - "id": 17293, - "nodeType": "Return", - "src": "2233:12:58" - } - ] - }, - "documentation": { - "id": 17286, - "nodeType": "StructuredDocumentation", - "src": "2095:54:58", - "text": " @dev Returns the name of the token." - }, - "functionSelector": "06fdde03", - "id": 17295, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "name", - "nameLocation": "2163:4:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17288, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2190:8:58" - }, - "parameters": { - "id": 17287, - "nodeType": "ParameterList", - "parameters": [], - "src": "2167:2:58" - }, - "returnParameters": { - "id": 17291, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17290, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17295, - "src": "2208:13:58", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17289, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2208:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2207:15:58" - }, - "scope": 17827, - "src": "2154:98:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17923], - "body": { - "id": 17304, - "nodeType": "Block", - "src": "2436:31:58", - "statements": [ - { - "expression": { - "id": 17302, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17268, - "src": "2453:7:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 17301, - "id": 17303, - "nodeType": "Return", - "src": "2446:14:58" - } - ] - }, - "documentation": { - "id": 17296, - "nodeType": "StructuredDocumentation", - "src": "2258:102:58", - "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name." - }, - "functionSelector": "95d89b41", - "id": 17305, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nameLocation": "2374:6:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17298, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2403:8:58" - }, - "parameters": { - "id": 17297, - "nodeType": "ParameterList", - "parameters": [], - "src": "2380:2:58" - }, - "returnParameters": { - "id": 17301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17300, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17305, - "src": "2421:13:58", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17299, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2421:6:58", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2420:15:58" - }, - "scope": 17827, - "src": "2365:102:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17929], - "body": { - "id": 17314, - "nodeType": "Block", - "src": "3156:26:58", - "statements": [ - { - "expression": { - "hexValue": "3138", - "id": 17312, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3173:2:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "functionReturnParameters": 17311, - "id": 17313, - "nodeType": "Return", - "src": "3166:9:58" - } - ] - }, - "documentation": { - "id": 17306, - "nodeType": "StructuredDocumentation", - "src": "2473:613:58", - "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}." - }, - "functionSelector": "313ce567", - "id": 17315, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "3100:8:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17308, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3131:8:58" - }, - "parameters": { - "id": 17307, - "nodeType": "ParameterList", - "parameters": [], - "src": "3108:2:58" - }, - "returnParameters": { - "id": 17311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17310, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17315, - "src": "3149:5:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 17309, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3149:5:58", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "3148:7:58" - }, - "scope": 17827, - "src": "3091:91:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17854], - "body": { - "id": 17324, - "nodeType": "Block", - "src": "3312:36:58", - "statements": [ - { - "expression": { - "id": 17322, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17264, - "src": "3329:12:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 17321, - "id": 17323, - "nodeType": "Return", - "src": "3322:19:58" - } - ] - }, - "documentation": { - "id": 17316, - "nodeType": "StructuredDocumentation", - "src": "3188:49:58", - "text": " @dev See {IERC20-totalSupply}." - }, - "functionSelector": "18160ddd", - "id": 17325, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "3251:11:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17318, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3285:8:58" - }, - "parameters": { - "id": 17317, - "nodeType": "ParameterList", - "parameters": [], - "src": "3262:2:58" - }, - "returnParameters": { - "id": 17321, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17320, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17325, - "src": "3303:7:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17319, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3303:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3302:9:58" - }, - "scope": 17827, - "src": "3242:106:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17862], - "body": { - "id": 17338, - "nodeType": "Block", - "src": "3489:42:58", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 17334, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "3506:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17336, - "indexExpression": { - "id": 17335, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17328, - "src": "3516:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3506:18:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 17333, - "id": 17337, - "nodeType": "Return", - "src": "3499:25:58" - } - ] - }, - "documentation": { - "id": 17326, - "nodeType": "StructuredDocumentation", - "src": "3354:47:58", - "text": " @dev See {IERC20-balanceOf}." - }, - "functionSelector": "70a08231", - "id": 17339, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "3415:9:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17330, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3462:8:58" - }, - "parameters": { - "id": 17329, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17328, - "mutability": "mutable", - "name": "account", - "nameLocation": "3433:7:58", - "nodeType": "VariableDeclaration", - "scope": 17339, - "src": "3425:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17327, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3425:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3424:17:58" - }, - "returnParameters": { - "id": 17333, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17332, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17339, - "src": "3480:7:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17331, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3480:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3479:9:58" - }, - "scope": 17827, - "src": "3406:125:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17872], - "body": { - "id": 17363, - "nodeType": "Block", - "src": "3812:104:58", - "statements": [ - { - "assignments": [17351], - "declarations": [ - { - "constant": false, - "id": 17351, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3830:5:58", - "nodeType": "VariableDeclaration", - "scope": 17363, - "src": "3822:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3822:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 17354, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17352, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "3838:10:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3838:12:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3822:28:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17356, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17351, - "src": "3870:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17357, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17342, - "src": "3877:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17358, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17344, - "src": "3881:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17355, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17587, - "src": "3860:9:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17359, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3860:28:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17360, - "nodeType": "ExpressionStatement", - "src": "3860:28:58" - }, - { - "expression": { - "hexValue": "74727565", - "id": 17361, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3905:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 17349, - "id": 17362, - "nodeType": "Return", - "src": "3898:11:58" - } - ] - }, - "documentation": { - "id": 17340, - "nodeType": "StructuredDocumentation", - "src": "3537:185:58", - "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`." - }, - "functionSelector": "a9059cbb", - "id": 17364, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "3736:8:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17346, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3788:8:58" - }, - "parameters": { - "id": 17345, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17342, - "mutability": "mutable", - "name": "to", - "nameLocation": "3753:2:58", - "nodeType": "VariableDeclaration", - "scope": 17364, - "src": "3745:10:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17341, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3745:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17344, - "mutability": "mutable", - "name": "amount", - "nameLocation": "3765:6:58", - "nodeType": "VariableDeclaration", - "scope": 17364, - "src": "3757:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17343, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3757:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3744:28:58" - }, - "returnParameters": { - "id": 17349, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17348, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17364, - "src": "3806:4:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17347, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3806:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3805:6:58" - }, - "scope": 17827, - "src": "3727:189:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17882], - "body": { - "id": 17381, - "nodeType": "Block", - "src": "4072:51:58", - "statements": [ - { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 17375, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17262, - "src": "4089:11:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 17377, - "indexExpression": { - "id": 17376, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17367, - "src": "4101:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4089:18:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17379, - "indexExpression": { - "id": 17378, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17369, - "src": "4108:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4089:27:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 17374, - "id": 17380, - "nodeType": "Return", - "src": "4082:34:58" - } - ] - }, - "documentation": { - "id": 17365, - "nodeType": "StructuredDocumentation", - "src": "3922:47:58", - "text": " @dev See {IERC20-allowance}." - }, - "functionSelector": "dd62ed3e", - "id": 17382, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "3983:9:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17371, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4045:8:58" - }, - "parameters": { - "id": 17370, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17367, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4001:5:58", - "nodeType": "VariableDeclaration", - "scope": 17382, - "src": "3993:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17366, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3993:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17369, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4016:7:58", - "nodeType": "VariableDeclaration", - "scope": 17382, - "src": "4008:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17368, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4008:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3992:32:58" - }, - "returnParameters": { - "id": 17374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17373, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17382, - "src": "4063:7:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17372, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4063:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4062:9:58" - }, - "scope": 17827, - "src": "3974:149:58", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17892], - "body": { - "id": 17406, - "nodeType": "Block", - "src": "4520:108:58", - "statements": [ - { - "assignments": [17394], - "declarations": [ - { - "constant": false, - "id": 17394, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4538:5:58", - "nodeType": "VariableDeclaration", - "scope": 17406, - "src": "4530:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17393, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4530:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 17397, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17395, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "4546:10:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4546:12:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4530:28:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17399, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17394, - "src": "4577:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17400, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17385, - "src": "4584:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17401, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17387, - "src": "4593:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17398, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17761, - "src": "4568:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4568:32:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17403, - "nodeType": "ExpressionStatement", - "src": "4568:32:58" - }, - { - "expression": { - "hexValue": "74727565", - "id": 17404, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4617:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 17392, - "id": 17405, - "nodeType": "Return", - "src": "4610:11:58" - } - ] - }, - "documentation": { - "id": 17383, - "nodeType": "StructuredDocumentation", - "src": "4129:297:58", - "text": " @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address." - }, - "functionSelector": "095ea7b3", - "id": 17407, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "4440:7:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17389, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4496:8:58" - }, - "parameters": { - "id": 17388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17385, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4456:7:58", - "nodeType": "VariableDeclaration", - "scope": 17407, - "src": "4448:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4448:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17387, - "mutability": "mutable", - "name": "amount", - "nameLocation": "4473:6:58", - "nodeType": "VariableDeclaration", - "scope": 17407, - "src": "4465:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4465:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4447:33:58" - }, - "returnParameters": { - "id": 17392, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17391, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17407, - "src": "4514:4:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17390, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4514:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4513:6:58" - }, - "scope": 17827, - "src": "4431:197:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [17904], - "body": { - "id": 17439, - "nodeType": "Block", - "src": "5323:153:58", - "statements": [ - { - "assignments": [17421], - "declarations": [ - { - "constant": false, - "id": 17421, - "mutability": "mutable", - "name": "spender", - "nameLocation": "5341:7:58", - "nodeType": "VariableDeclaration", - "scope": 17439, - "src": "5333:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17420, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5333:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 17424, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17422, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "5351:10:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5351:12:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5333:30:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17426, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17410, - "src": "5389:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17427, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17421, - "src": "5395:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17428, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17414, - "src": "5404:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17425, - "name": "_spendAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17804, - "src": "5373:15:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5373:38:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17430, - "nodeType": "ExpressionStatement", - "src": "5373:38:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17432, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17410, - "src": "5431:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17433, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17412, - "src": "5437:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17434, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17414, - "src": "5441:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17431, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17587, - "src": "5421:9:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5421:27:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17436, - "nodeType": "ExpressionStatement", - "src": "5421:27:58" - }, - { - "expression": { - "hexValue": "74727565", - "id": 17437, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5465:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 17419, - "id": 17438, - "nodeType": "Return", - "src": "5458:11:58" - } - ] - }, - "documentation": { - "id": 17408, - "nodeType": "StructuredDocumentation", - "src": "4634:551:58", - "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`.\n - the caller must have allowance for ``from``'s tokens of at least\n `amount`." - }, - "functionSelector": "23b872dd", - "id": 17440, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "5199:12:58", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 17416, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "5299:8:58" - }, - "parameters": { - "id": 17415, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17410, - "mutability": "mutable", - "name": "from", - "nameLocation": "5229:4:58", - "nodeType": "VariableDeclaration", - "scope": 17440, - "src": "5221:12:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17409, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5221:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17412, - "mutability": "mutable", - "name": "to", - "nameLocation": "5251:2:58", - "nodeType": "VariableDeclaration", - "scope": 17440, - "src": "5243:10:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17411, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5243:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17414, - "mutability": "mutable", - "name": "amount", - "nameLocation": "5271:6:58", - "nodeType": "VariableDeclaration", - "scope": 17440, - "src": "5263:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17413, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5263:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5211:72:58" - }, - "returnParameters": { - "id": 17419, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17418, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17440, - "src": "5317:4:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17417, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5317:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5316:6:58" - }, - "scope": 17827, - "src": "5190:286:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 17468, - "nodeType": "Block", - "src": "5965:140:58", - "statements": [ - { - "assignments": [17451], - "declarations": [ - { - "constant": false, - "id": 17451, - "mutability": "mutable", - "name": "owner", - "nameLocation": "5983:5:58", - "nodeType": "VariableDeclaration", - "scope": 17468, - "src": "5975:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17450, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5975:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 17454, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17452, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "5991:10:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17453, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5991:12:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5975:28:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17456, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17451, - "src": "6022:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17457, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17443, - "src": "6029:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 17459, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17451, - "src": "6048:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17460, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17443, - "src": "6055:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 17458, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17382, - "src": "6038:9:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view returns (uint256)" - } - }, - "id": 17461, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6038:25:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 17462, - "name": "addedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17445, - "src": "6066:10:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6038:38:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17455, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17761, - "src": "6013:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6013:64:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17465, - "nodeType": "ExpressionStatement", - "src": "6013:64:58" - }, - { - "expression": { - "hexValue": "74727565", - "id": 17466, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6094:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 17449, - "id": 17467, - "nodeType": "Return", - "src": "6087:11:58" - } - ] - }, - "documentation": { - "id": 17441, - "nodeType": "StructuredDocumentation", - "src": "5482:384:58", - "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address." - }, - "functionSelector": "39509351", - "id": 17469, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "increaseAllowance", - "nameLocation": "5880:17:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17446, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17443, - "mutability": "mutable", - "name": "spender", - "nameLocation": "5906:7:58", - "nodeType": "VariableDeclaration", - "scope": 17469, - "src": "5898:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17442, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5898:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17445, - "mutability": "mutable", - "name": "addedValue", - "nameLocation": "5923:10:58", - "nodeType": "VariableDeclaration", - "scope": 17469, - "src": "5915:18:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17444, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5915:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5897:37:58" - }, - "returnParameters": { - "id": 17449, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17448, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17469, - "src": "5959:4:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17447, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5959:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5958:6:58" - }, - "scope": 17827, - "src": "5871:234:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 17509, - "nodeType": "Block", - "src": "6691:328:58", - "statements": [ - { - "assignments": [17480], - "declarations": [ - { - "constant": false, - "id": 17480, - "mutability": "mutable", - "name": "owner", - "nameLocation": "6709:5:58", - "nodeType": "VariableDeclaration", - "scope": 17509, - "src": "6701:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17479, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6701:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 17483, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 17481, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18732, - "src": "6717:10:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 17482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6717:12:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6701:28:58" - }, - { - "assignments": [17485], - "declarations": [ - { - "constant": false, - "id": 17485, - "mutability": "mutable", - "name": "currentAllowance", - "nameLocation": "6747:16:58", - "nodeType": "VariableDeclaration", - "scope": 17509, - "src": "6739:24:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17484, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6739:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 17490, - "initialValue": { - "arguments": [ - { - "id": 17487, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17480, - "src": "6776:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17488, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17472, - "src": "6783:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 17486, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17382, - "src": "6766:9:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view returns (uint256)" - } - }, - "id": 17489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6766:25:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6739:52:58" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17494, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17492, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17485, - "src": "6809:16:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 17493, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17474, - "src": "6829:15:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6809:35:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f", - "id": 17495, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6846:39:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8", - "typeString": "literal_string \"ERC20: decreased allowance below zero\"" - }, - "value": "ERC20: decreased allowance below zero" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8", - "typeString": "literal_string \"ERC20: decreased allowance below zero\"" - } - ], - "id": 17491, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "6801:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6801:85:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17497, - "nodeType": "ExpressionStatement", - "src": "6801:85:58" - }, - { - "id": 17506, - "nodeType": "UncheckedBlock", - "src": "6896:95:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17499, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17480, - "src": "6929:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17500, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17472, - "src": "6936:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17503, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17501, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17485, - "src": "6945:16:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 17502, - "name": "subtractedValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17474, - "src": "6964:15:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6945:34:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17498, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17761, - "src": "6920:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6920:60:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17505, - "nodeType": "ExpressionStatement", - "src": "6920:60:58" - } - ] - }, - { - "expression": { - "hexValue": "74727565", - "id": 17507, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7008:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 17478, - "id": 17508, - "nodeType": "Return", - "src": "7001:11:58" - } - ] - }, - "documentation": { - "id": 17470, - "nodeType": "StructuredDocumentation", - "src": "6111:476:58", - "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`." - }, - "functionSelector": "a457c2d7", - "id": 17510, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decreaseAllowance", - "nameLocation": "6601:17:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17472, - "mutability": "mutable", - "name": "spender", - "nameLocation": "6627:7:58", - "nodeType": "VariableDeclaration", - "scope": 17510, - "src": "6619:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17471, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6619:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17474, - "mutability": "mutable", - "name": "subtractedValue", - "nameLocation": "6644:15:58", - "nodeType": "VariableDeclaration", - "scope": 17510, - "src": "6636:23:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17473, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6636:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6618:42:58" - }, - "returnParameters": { - "id": 17478, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17477, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17510, - "src": "6685:4:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17476, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6685:4:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6684:6:58" - }, - "scope": 17827, - "src": "6592:427:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 17586, - "nodeType": "Block", - "src": "7581:710:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17526, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17521, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "7599:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17524, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7615:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17523, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7607:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17522, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7607:7:58", - "typeDescriptions": {} - } - }, - "id": 17525, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7607:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7599:18:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373", - "id": 17527, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7619:39:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", - "typeString": "literal_string \"ERC20: transfer from the zero address\"" - }, - "value": "ERC20: transfer from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea", - "typeString": "literal_string \"ERC20: transfer from the zero address\"" - } - ], - "id": 17520, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7591:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7591:68:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17529, - "nodeType": "ExpressionStatement", - "src": "7591:68:58" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17531, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17515, - "src": "7677:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17534, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7691:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17533, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7683:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17532, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7683:7:58", - "typeDescriptions": {} - } - }, - "id": 17535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7683:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7677:16:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373", - "id": 17537, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7695:37:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", - "typeString": "literal_string \"ERC20: transfer to the zero address\"" - }, - "value": "ERC20: transfer to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f", - "typeString": "literal_string \"ERC20: transfer to the zero address\"" - } - ], - "id": 17530, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7669:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7669:64:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17539, - "nodeType": "ExpressionStatement", - "src": "7669:64:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17541, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "7765:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17542, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17515, - "src": "7771:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17543, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "7775:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17540, - "name": "_beforeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17815, - "src": "7744:20:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7744:38:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17545, - "nodeType": "ExpressionStatement", - "src": "7744:38:58" - }, - { - "assignments": [17547], - "declarations": [ - { - "constant": false, - "id": 17547, - "mutability": "mutable", - "name": "fromBalance", - "nameLocation": "7801:11:58", - "nodeType": "VariableDeclaration", - "scope": 17586, - "src": "7793:19:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17546, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7793:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 17551, - "initialValue": { - "baseExpression": { - "id": 17548, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "7815:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17550, - "indexExpression": { - "id": 17549, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "7825:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7815:15:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7793:37:58" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17555, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17553, - "name": "fromBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17547, - "src": "7848:11:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 17554, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "7863:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7848:21:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365", - "id": 17556, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7871:40:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", - "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" - }, - "value": "ERC20: transfer amount exceeds balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6", - "typeString": "literal_string \"ERC20: transfer amount exceeds balance\"" - } - ], - "id": 17552, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7840:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17557, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7840:72:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17558, - "nodeType": "ExpressionStatement", - "src": "7840:72:58" - }, - { - "id": 17573, - "nodeType": "UncheckedBlock", - "src": "7922:273:58", - "statements": [ - { - "expression": { - "id": 17565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 17559, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "7946:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17561, - "indexExpression": { - "id": 17560, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "7956:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7946:15:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17562, - "name": "fromBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17547, - "src": "7964:11:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 17563, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "7978:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7964:20:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7946:38:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17566, - "nodeType": "ExpressionStatement", - "src": "7946:38:58" - }, - { - "expression": { - "id": 17571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 17567, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "8161:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17569, - "indexExpression": { - "id": 17568, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17515, - "src": "8171:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "8161:13:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 17570, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "8178:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8161:23:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17572, - "nodeType": "ExpressionStatement", - "src": "8161:23:58" - } - ] - }, - { - "eventCall": { - "arguments": [ - { - "id": 17575, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "8219:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17576, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17515, - "src": "8225:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17577, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "8229:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17574, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17839, - "src": "8210:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8210:26:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17579, - "nodeType": "EmitStatement", - "src": "8205:31:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17581, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17513, - "src": "8267:4:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17582, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17515, - "src": "8273:2:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17583, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17517, - "src": "8277:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17580, - "name": "_afterTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17826, - "src": "8247:19:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17584, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8247:37:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17585, - "nodeType": "ExpressionStatement", - "src": "8247:37:58" - } - ] - }, - "documentation": { - "id": 17511, - "nodeType": "StructuredDocumentation", - "src": "7025:443:58", - "text": " @dev Moves `amount` of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`." - }, - "id": 17587, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transfer", - "nameLocation": "7482:9:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17518, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17513, - "mutability": "mutable", - "name": "from", - "nameLocation": "7509:4:58", - "nodeType": "VariableDeclaration", - "scope": 17587, - "src": "7501:12:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17512, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7501:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17515, - "mutability": "mutable", - "name": "to", - "nameLocation": "7531:2:58", - "nodeType": "VariableDeclaration", - "scope": 17587, - "src": "7523:10:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7523:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17517, - "mutability": "mutable", - "name": "amount", - "nameLocation": "7551:6:58", - "nodeType": "VariableDeclaration", - "scope": 17587, - "src": "7543:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17516, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7543:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7491:72:58" - }, - "returnParameters": { - "id": 17519, - "nodeType": "ParameterList", - "parameters": [], - "src": "7581:0:58" - }, - "scope": 17827, - "src": "7473:818:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17643, - "nodeType": "Block", - "src": "8632:470:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17601, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17596, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17590, - "src": "8650:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17599, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8669:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17598, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8661:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17597, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8661:7:58", - "typeDescriptions": {} - } - }, - "id": 17600, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8661:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8650:21:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373", - "id": 17602, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8673:33:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", - "typeString": "literal_string \"ERC20: mint to the zero address\"" - }, - "value": "ERC20: mint to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e", - "typeString": "literal_string \"ERC20: mint to the zero address\"" - } - ], - "id": 17595, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "8642:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8642:65:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17604, - "nodeType": "ExpressionStatement", - "src": "8642:65:58" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 17608, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8747:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17607, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8739:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17606, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8739:7:58", - "typeDescriptions": {} - } - }, - "id": 17609, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8739:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17610, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17590, - "src": "8751:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17611, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17592, - "src": "8760:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17605, - "name": "_beforeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17815, - "src": "8718:20:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8718:49:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17613, - "nodeType": "ExpressionStatement", - "src": "8718:49:58" - }, - { - "expression": { - "id": 17616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17614, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17264, - "src": "8778:12:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 17615, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17592, - "src": "8794:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8778:22:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17617, - "nodeType": "ExpressionStatement", - "src": "8778:22:58" - }, - { - "id": 17624, - "nodeType": "UncheckedBlock", - "src": "8810:175:58", - "statements": [ - { - "expression": { - "id": 17622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 17618, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "8946:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17620, - "indexExpression": { - "id": 17619, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17590, - "src": "8956:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "8946:18:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 17621, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17592, - "src": "8968:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "8946:28:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17623, - "nodeType": "ExpressionStatement", - "src": "8946:28:58" - } - ] - }, - { - "eventCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 17628, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9016:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17627, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9008:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17626, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9008:7:58", - "typeDescriptions": {} - } - }, - "id": 17629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9008:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17630, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17590, - "src": "9020:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17631, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17592, - "src": "9029:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17625, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17839, - "src": "8999:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8999:37:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17633, - "nodeType": "EmitStatement", - "src": "8994:42:58" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 17637, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9075:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9067:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9067:7:58", - "typeDescriptions": {} - } - }, - "id": 17638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9067:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17639, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17590, - "src": "9079:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17640, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17592, - "src": "9088:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17634, - "name": "_afterTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17826, - "src": "9047:19:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9047:48:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17642, - "nodeType": "ExpressionStatement", - "src": "9047:48:58" - } - ] - }, - "documentation": { - "id": 17588, - "nodeType": "StructuredDocumentation", - "src": "8297:265:58", - "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address." - }, - "id": 17644, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mint", - "nameLocation": "8576:5:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17593, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17590, - "mutability": "mutable", - "name": "account", - "nameLocation": "8590:7:58", - "nodeType": "VariableDeclaration", - "scope": 17644, - "src": "8582:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17589, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8582:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17592, - "mutability": "mutable", - "name": "amount", - "nameLocation": "8607:6:58", - "nodeType": "VariableDeclaration", - "scope": 17644, - "src": "8599:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17591, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8599:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8581:33:58" - }, - "returnParameters": { - "id": 17594, - "nodeType": "ParameterList", - "parameters": [], - "src": "8632:0:58" - }, - "scope": 17827, - "src": "8567:535:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17715, - "nodeType": "Block", - "src": "9487:594:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17653, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "9505:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17656, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9524:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17655, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9516:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17654, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9516:7:58", - "typeDescriptions": {} - } - }, - "id": 17657, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9516:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9505:21:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373", - "id": 17659, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9528:35:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", - "typeString": "literal_string \"ERC20: burn from the zero address\"" - }, - "value": "ERC20: burn from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f", - "typeString": "literal_string \"ERC20: burn from the zero address\"" - } - ], - "id": 17652, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "9497:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9497:67:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17661, - "nodeType": "ExpressionStatement", - "src": "9497:67:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17663, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "9596:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 17666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9613:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17665, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9605:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17664, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9605:7:58", - "typeDescriptions": {} - } - }, - "id": 17667, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9605:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17668, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "9617:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17662, - "name": "_beforeTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17815, - "src": "9575:20:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9575:49:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17670, - "nodeType": "ExpressionStatement", - "src": "9575:49:58" - }, - { - "assignments": [17672], - "declarations": [ - { - "constant": false, - "id": 17672, - "mutability": "mutable", - "name": "accountBalance", - "nameLocation": "9643:14:58", - "nodeType": "VariableDeclaration", - "scope": 17715, - "src": "9635:22:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17671, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9635:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 17676, - "initialValue": { - "baseExpression": { - "id": 17673, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "9660:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17675, - "indexExpression": { - "id": 17674, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "9670:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9660:18:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9635:43:58" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17678, - "name": "accountBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17672, - "src": "9696:14:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 17679, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "9714:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9696:24:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365", - "id": 17681, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9722:36:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", - "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" - }, - "value": "ERC20: burn amount exceeds balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd", - "typeString": "literal_string \"ERC20: burn amount exceeds balance\"" - } - ], - "id": 17677, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "9688:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17682, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9688:71:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17683, - "nodeType": "ExpressionStatement", - "src": "9688:71:58" - }, - { - "id": 17696, - "nodeType": "UncheckedBlock", - "src": "9769:194:58", - "statements": [ - { - "expression": { - "id": 17690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 17684, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17256, - "src": "9793:9:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17686, - "indexExpression": { - "id": 17685, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "9803:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "9793:18:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17689, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17687, - "name": "accountBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17672, - "src": "9814:14:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 17688, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "9831:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9814:23:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9793:44:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17691, - "nodeType": "ExpressionStatement", - "src": "9793:44:58" - }, - { - "expression": { - "id": 17694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 17692, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17264, - "src": "9930:12:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "id": 17693, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "9946:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9930:22:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17695, - "nodeType": "ExpressionStatement", - "src": "9930:22:58" - } - ] - }, - { - "eventCall": { - "arguments": [ - { - "id": 17698, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "9987:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 17701, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10004:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17700, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9996:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17699, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9996:7:58", - "typeDescriptions": {} - } - }, - "id": 17702, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9996:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17703, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "10008:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17697, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17839, - "src": "9978:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17704, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9978:37:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17705, - "nodeType": "EmitStatement", - "src": "9973:42:58" - }, - { - "expression": { - "arguments": [ - { - "id": 17707, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17647, - "src": "10046:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 17710, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10063:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17709, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10055:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17708, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10055:7:58", - "typeDescriptions": {} - } - }, - "id": 17711, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10055:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17712, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17649, - "src": "10067:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17706, - "name": "_afterTokenTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17826, - "src": "10026:19:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17713, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10026:48:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17714, - "nodeType": "ExpressionStatement", - "src": "10026:48:58" - } - ] - }, - "documentation": { - "id": 17645, - "nodeType": "StructuredDocumentation", - "src": "9108:309:58", - "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens." - }, - "id": 17716, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burn", - "nameLocation": "9431:5:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17650, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17647, - "mutability": "mutable", - "name": "account", - "nameLocation": "9445:7:58", - "nodeType": "VariableDeclaration", - "scope": 17716, - "src": "9437:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9437:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17649, - "mutability": "mutable", - "name": "amount", - "nameLocation": "9462:6:58", - "nodeType": "VariableDeclaration", - "scope": 17716, - "src": "9454:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17648, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9454:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9436:33:58" - }, - "returnParameters": { - "id": 17651, - "nodeType": "ParameterList", - "parameters": [], - "src": "9487:0:58" - }, - "scope": 17827, - "src": "9422:659:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17760, - "nodeType": "Block", - "src": "10617:257:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17727, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17719, - "src": "10635:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17730, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10652:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17729, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10644:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17728, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10644:7:58", - "typeDescriptions": {} - } - }, - "id": 17731, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10644:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10635:19:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373", - "id": 17733, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10656:38:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", - "typeString": "literal_string \"ERC20: approve from the zero address\"" - }, - "value": "ERC20: approve from the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208", - "typeString": "literal_string \"ERC20: approve from the zero address\"" - } - ], - "id": 17726, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "10627:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17734, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10627:68:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17735, - "nodeType": "ExpressionStatement", - "src": "10627:68:58" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 17742, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17737, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17721, - "src": "10713:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 17740, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10732:1:58", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 17739, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10724:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 17738, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10724:7:58", - "typeDescriptions": {} - } - }, - "id": 17741, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10724:10:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "10713:21:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373", - "id": 17743, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10736:36:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", - "typeString": "literal_string \"ERC20: approve to the zero address\"" - }, - "value": "ERC20: approve to the zero address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029", - "typeString": "literal_string \"ERC20: approve to the zero address\"" - } - ], - "id": 17736, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "10705:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17744, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10705:68:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17745, - "nodeType": "ExpressionStatement", - "src": "10705:68:58" - }, - { - "expression": { - "id": 17752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 17746, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17262, - "src": "10784:11:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 17749, - "indexExpression": { - "id": 17747, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17719, - "src": "10796:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10784:18:58", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 17750, - "indexExpression": { - "id": 17748, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17721, - "src": "10803:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10784:27:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 17751, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17723, - "src": "10814:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10784:36:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 17753, - "nodeType": "ExpressionStatement", - "src": "10784:36:58" - }, - { - "eventCall": { - "arguments": [ - { - "id": 17755, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17719, - "src": "10844:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17756, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17721, - "src": "10851:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17757, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17723, - "src": "10860:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17754, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17848, - "src": "10835:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17758, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10835:32:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17759, - "nodeType": "EmitStatement", - "src": "10830:37:58" - } - ] - }, - "documentation": { - "id": 17717, - "nodeType": "StructuredDocumentation", - "src": "10087:412:58", - "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address." - }, - "id": 17761, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nameLocation": "10513:8:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17719, - "mutability": "mutable", - "name": "owner", - "nameLocation": "10539:5:58", - "nodeType": "VariableDeclaration", - "scope": 17761, - "src": "10531:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17718, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10531:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17721, - "mutability": "mutable", - "name": "spender", - "nameLocation": "10562:7:58", - "nodeType": "VariableDeclaration", - "scope": 17761, - "src": "10554:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10554:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17723, - "mutability": "mutable", - "name": "amount", - "nameLocation": "10587:6:58", - "nodeType": "VariableDeclaration", - "scope": 17761, - "src": "10579:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17722, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10579:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10521:78:58" - }, - "returnParameters": { - "id": 17725, - "nodeType": "ParameterList", - "parameters": [], - "src": "10617:0:58" - }, - "scope": 17827, - "src": "10504:370:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17803, - "nodeType": "Block", - "src": "11275:321:58", - "statements": [ - { - "assignments": [17772], - "declarations": [ - { - "constant": false, - "id": 17772, - "mutability": "mutable", - "name": "currentAllowance", - "nameLocation": "11293:16:58", - "nodeType": "VariableDeclaration", - "scope": 17803, - "src": "11285:24:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17771, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11285:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 17777, - "initialValue": { - "arguments": [ - { - "id": 17774, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17764, - "src": "11322:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17775, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17766, - "src": "11329:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 17773, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17382, - "src": "11312:9:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view returns (uint256)" - } - }, - "id": 17776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11312:25:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11285:52:58" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17778, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17772, - "src": "11351:16:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 17781, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11376:7:58", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 17780, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11376:7:58", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 17779, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "11371:4:58", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 17782, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11371:13:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 17783, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11385:3:58", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "11371:17:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11351:37:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 17802, - "nodeType": "IfStatement", - "src": "11347:243:58", - "trueBody": { - "id": 17801, - "nodeType": "Block", - "src": "11390:200:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17788, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17786, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17772, - "src": "11412:16:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 17787, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17768, - "src": "11432:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11412:26:58", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "45524332303a20696e73756666696369656e7420616c6c6f77616e6365", - "id": 17789, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11440:31:58", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe", - "typeString": "literal_string \"ERC20: insufficient allowance\"" - }, - "value": "ERC20: insufficient allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe", - "typeString": "literal_string \"ERC20: insufficient allowance\"" - } - ], - "id": 17785, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "11404:7:58", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 17790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11404:68:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17791, - "nodeType": "ExpressionStatement", - "src": "11404:68:58" - }, - { - "id": 17800, - "nodeType": "UncheckedBlock", - "src": "11486:94:58", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17793, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17764, - "src": "11523:5:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17794, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17766, - "src": "11530:7:58", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 17797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 17795, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17772, - "src": "11539:16:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 17796, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17768, - "src": "11558:6:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "11539:25:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 17792, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17761, - "src": "11514:8:58", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 17798, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11514:51:58", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17799, - "nodeType": "ExpressionStatement", - "src": "11514:51:58" - } - ] - } - ] - } - } - ] - }, - "documentation": { - "id": 17762, - "nodeType": "StructuredDocumentation", - "src": "10880:270:58", - "text": " @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event." - }, - "id": 17804, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_spendAllowance", - "nameLocation": "11164:15:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17764, - "mutability": "mutable", - "name": "owner", - "nameLocation": "11197:5:58", - "nodeType": "VariableDeclaration", - "scope": 17804, - "src": "11189:13:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17763, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11189:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17766, - "mutability": "mutable", - "name": "spender", - "nameLocation": "11220:7:58", - "nodeType": "VariableDeclaration", - "scope": 17804, - "src": "11212:15:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17765, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "11212:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17768, - "mutability": "mutable", - "name": "amount", - "nameLocation": "11245:6:58", - "nodeType": "VariableDeclaration", - "scope": 17804, - "src": "11237:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17767, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11237:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11179:78:58" - }, - "returnParameters": { - "id": 17770, - "nodeType": "ParameterList", - "parameters": [], - "src": "11275:0:58" - }, - "scope": 17827, - "src": "11155:441:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17814, - "nodeType": "Block", - "src": "12299:2:58", - "statements": [] - }, - "documentation": { - "id": 17805, - "nodeType": "StructuredDocumentation", - "src": "11602:573:58", - "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]." - }, - "id": 17815, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_beforeTokenTransfer", - "nameLocation": "12189:20:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17807, - "mutability": "mutable", - "name": "from", - "nameLocation": "12227:4:58", - "nodeType": "VariableDeclaration", - "scope": 17815, - "src": "12219:12:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17806, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12219:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17809, - "mutability": "mutable", - "name": "to", - "nameLocation": "12249:2:58", - "nodeType": "VariableDeclaration", - "scope": 17815, - "src": "12241:10:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12241:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17811, - "mutability": "mutable", - "name": "amount", - "nameLocation": "12269:6:58", - "nodeType": "VariableDeclaration", - "scope": 17815, - "src": "12261:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17810, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12261:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12209:72:58" - }, - "returnParameters": { - "id": 17813, - "nodeType": "ParameterList", - "parameters": [], - "src": "12299:0:58" - }, - "scope": 17827, - "src": "12180:121:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 17825, - "nodeType": "Block", - "src": "13007:2:58", - "statements": [] - }, - "documentation": { - "id": 17816, - "nodeType": "StructuredDocumentation", - "src": "12307:577:58", - "text": " @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]." - }, - "id": 17826, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_afterTokenTransfer", - "nameLocation": "12898:19:58", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17823, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17818, - "mutability": "mutable", - "name": "from", - "nameLocation": "12935:4:58", - "nodeType": "VariableDeclaration", - "scope": 17826, - "src": "12927:12:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17817, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12927:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17820, - "mutability": "mutable", - "name": "to", - "nameLocation": "12957:2:58", - "nodeType": "VariableDeclaration", - "scope": 17826, - "src": "12949:10:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17819, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12949:7:58", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17822, - "mutability": "mutable", - "name": "amount", - "nameLocation": "12977:6:58", - "nodeType": "VariableDeclaration", - "scope": 17826, - "src": "12969:14:58", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17821, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12969:7:58", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12917:72:58" - }, - "returnParameters": { - "id": 17824, - "nodeType": "ParameterList", - "parameters": [], - "src": "13007:0:58" - }, - "scope": 17827, - "src": "12889:120:58", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 17828, - "src": "1401:11610:58", - "usedErrors": [] - } - ], - "src": "105:12907:58" - }, - "id": 58 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { - "IERC20": [17905] - }, - "id": 17906, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17829, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "106:23:59" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC20", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 17830, - "nodeType": "StructuredDocumentation", - "src": "131:70:59", - "text": " @dev Interface of the ERC20 standard as defined in the EIP." - }, - "fullyImplemented": false, - "id": 17905, - "linearizedBaseContracts": [17905], - "name": "IERC20", - "nameLocation": "212:6:59", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 17831, - "nodeType": "StructuredDocumentation", - "src": "225:158:59", - "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." - }, - "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "id": 17839, - "name": "Transfer", - "nameLocation": "394:8:59", - "nodeType": "EventDefinition", - "parameters": { - "id": 17838, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17833, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "419:4:59", - "nodeType": "VariableDeclaration", - "scope": 17839, - "src": "403:20:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17832, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "403:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17835, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "441:2:59", - "nodeType": "VariableDeclaration", - "scope": 17839, - "src": "425:18:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17834, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "425:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17837, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "453:5:59", - "nodeType": "VariableDeclaration", - "scope": 17839, - "src": "445:13:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17836, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "445:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "402:57:59" - }, - "src": "388:72:59" - }, - { - "anonymous": false, - "documentation": { - "id": 17840, - "nodeType": "StructuredDocumentation", - "src": "466:148:59", - "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." - }, - "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "id": 17848, - "name": "Approval", - "nameLocation": "625:8:59", - "nodeType": "EventDefinition", - "parameters": { - "id": 17847, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17842, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "650:5:59", - "nodeType": "VariableDeclaration", - "scope": 17848, - "src": "634:21:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17841, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "634:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17844, - "indexed": true, - "mutability": "mutable", - "name": "spender", - "nameLocation": "673:7:59", - "nodeType": "VariableDeclaration", - "scope": 17848, - "src": "657:23:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17843, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "657:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17846, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "690:5:59", - "nodeType": "VariableDeclaration", - "scope": 17848, - "src": "682:13:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17845, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "682:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "633:63:59" - }, - "src": "619:78:59" - }, - { - "documentation": { - "id": 17849, - "nodeType": "StructuredDocumentation", - "src": "703:66:59", - "text": " @dev Returns the amount of tokens in existence." - }, - "functionSelector": "18160ddd", - "id": 17854, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "783:11:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17850, - "nodeType": "ParameterList", - "parameters": [], - "src": "794:2:59" - }, - "returnParameters": { - "id": 17853, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17852, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17854, - "src": "820:7:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17851, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "820:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "819:9:59" - }, - "scope": 17905, - "src": "774:55:59", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17855, - "nodeType": "StructuredDocumentation", - "src": "835:72:59", - "text": " @dev Returns the amount of tokens owned by `account`." - }, - "functionSelector": "70a08231", - "id": 17862, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "921:9:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17858, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17857, - "mutability": "mutable", - "name": "account", - "nameLocation": "939:7:59", - "nodeType": "VariableDeclaration", - "scope": 17862, - "src": "931:15:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17856, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "931:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "930:17:59" - }, - "returnParameters": { - "id": 17861, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17860, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17862, - "src": "971:7:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17859, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "971:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "970:9:59" - }, - "scope": 17905, - "src": "912:68:59", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17863, - "nodeType": "StructuredDocumentation", - "src": "986:202:59", - "text": " @dev Moves `amount` tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "a9059cbb", - "id": 17872, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "1202:8:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17868, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17865, - "mutability": "mutable", - "name": "to", - "nameLocation": "1219:2:59", - "nodeType": "VariableDeclaration", - "scope": 17872, - "src": "1211:10:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17864, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1211:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17867, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1231:6:59", - "nodeType": "VariableDeclaration", - "scope": 17872, - "src": "1223:14:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17866, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1223:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1210:28:59" - }, - "returnParameters": { - "id": 17871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17870, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17872, - "src": "1257:4:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17869, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1257:4:59", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1256:6:59" - }, - "scope": 17905, - "src": "1193:70:59", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17873, - "nodeType": "StructuredDocumentation", - "src": "1269:264:59", - "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." - }, - "functionSelector": "dd62ed3e", - "id": 17882, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "1547:9:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17878, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17875, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1565:5:59", - "nodeType": "VariableDeclaration", - "scope": 17882, - "src": "1557:13:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17874, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1557:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17877, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1580:7:59", - "nodeType": "VariableDeclaration", - "scope": 17882, - "src": "1572:15:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17876, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1572:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1556:32:59" - }, - "returnParameters": { - "id": 17881, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17880, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17882, - "src": "1612:7:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17879, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1612:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1611:9:59" - }, - "scope": 17905, - "src": "1538:83:59", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17883, - "nodeType": "StructuredDocumentation", - "src": "1627:642:59", - "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." - }, - "functionSelector": "095ea7b3", - "id": 17892, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "2283:7:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17888, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17885, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2299:7:59", - "nodeType": "VariableDeclaration", - "scope": 17892, - "src": "2291:15:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17884, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2291:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17887, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2316:6:59", - "nodeType": "VariableDeclaration", - "scope": 17892, - "src": "2308:14:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17886, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2308:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2290:33:59" - }, - "returnParameters": { - "id": 17891, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17890, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17892, - "src": "2342:4:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17889, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2342:4:59", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2341:6:59" - }, - "scope": 17905, - "src": "2274:74:59", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17893, - "nodeType": "StructuredDocumentation", - "src": "2354:287:59", - "text": " @dev Moves `amount` tokens from `from` to `to` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "23b872dd", - "id": 17904, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "2655:12:59", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17900, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17895, - "mutability": "mutable", - "name": "from", - "nameLocation": "2685:4:59", - "nodeType": "VariableDeclaration", - "scope": 17904, - "src": "2677:12:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17894, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2677:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17897, - "mutability": "mutable", - "name": "to", - "nameLocation": "2707:2:59", - "nodeType": "VariableDeclaration", - "scope": 17904, - "src": "2699:10:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17896, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2699:7:59", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17899, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2727:6:59", - "nodeType": "VariableDeclaration", - "scope": 17904, - "src": "2719:14:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17898, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2719:7:59", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2667:72:59" - }, - "returnParameters": { - "id": 17903, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17902, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17904, - "src": "2758:4:59", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 17901, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2758:4:59", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2757:6:59" - }, - "scope": 17905, - "src": "2646:118:59", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 17906, - "src": "202:2564:59", - "usedErrors": [] - } - ], - "src": "106:2661:59" - }, - "id": 59 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "exportedSymbols": { - "IERC20": [17905], - "IERC20Metadata": [17930] - }, - "id": 17931, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17907, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "110:23:60" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../IERC20.sol", - "id": 17908, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 17931, - "sourceUnit": 17906, - "src": "135:23:60", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 17910, - "name": "IERC20", - "nameLocations": ["305:6:60"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "305:6:60" - }, - "id": 17911, - "nodeType": "InheritanceSpecifier", - "src": "305:6:60" - } - ], - "canonicalName": "IERC20Metadata", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 17909, - "nodeType": "StructuredDocumentation", - "src": "160:116:60", - "text": " @dev Interface for the optional metadata functions from the ERC20 standard.\n _Available since v4.1._" - }, - "fullyImplemented": false, - "id": 17930, - "linearizedBaseContracts": [17930, 17905], - "name": "IERC20Metadata", - "nameLocation": "287:14:60", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 17912, - "nodeType": "StructuredDocumentation", - "src": "318:54:60", - "text": " @dev Returns the name of the token." - }, - "functionSelector": "06fdde03", - "id": 17917, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nameLocation": "386:4:60", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17913, - "nodeType": "ParameterList", - "parameters": [], - "src": "390:2:60" - }, - "returnParameters": { - "id": 17916, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17915, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17917, - "src": "416:13:60", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17914, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "416:6:60", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "415:15:60" - }, - "scope": 17930, - "src": "377:54:60", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17918, - "nodeType": "StructuredDocumentation", - "src": "437:56:60", - "text": " @dev Returns the symbol of the token." - }, - "functionSelector": "95d89b41", - "id": 17923, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nameLocation": "507:6:60", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17919, - "nodeType": "ParameterList", - "parameters": [], - "src": "513:2:60" - }, - "returnParameters": { - "id": 17922, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17921, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17923, - "src": "539:13:60", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 17920, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "539:6:60", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "538:15:60" - }, - "scope": 17930, - "src": "498:56:60", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17924, - "nodeType": "StructuredDocumentation", - "src": "560:65:60", - "text": " @dev Returns the decimals places of the token." - }, - "functionSelector": "313ce567", - "id": 17929, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "639:8:60", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17925, - "nodeType": "ParameterList", - "parameters": [], - "src": "647:2:60" - }, - "returnParameters": { - "id": 17928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17927, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17929, - "src": "673:5:60", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 17926, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "673:5:60", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "672:7:60" - }, - "scope": 17930, - "src": "630:50:60", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 17931, - "src": "277:405:60", - "usedErrors": [] - } - ], - "src": "110:573:60" - }, - "id": 60 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", - "exportedSymbols": { - "IERC20Permit": [17966] - }, - "id": 17967, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17932, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "114:23:61" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC20Permit", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 17933, - "nodeType": "StructuredDocumentation", - "src": "139:480:61", - "text": " @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all." - }, - "fullyImplemented": false, - "id": 17966, - "linearizedBaseContracts": [17966], - "name": "IERC20Permit", - "nameLocation": "630:12:61", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 17934, - "nodeType": "StructuredDocumentation", - "src": "649:792:61", - "text": " @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section]." - }, - "functionSelector": "d505accf", - "id": 17951, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "permit", - "nameLocation": "1455:6:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17949, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17936, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1479:5:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1471:13:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17935, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1471:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17938, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1502:7:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1494:15:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17937, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1494:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17940, - "mutability": "mutable", - "name": "value", - "nameLocation": "1527:5:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1519:13:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17939, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1519:7:61", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17942, - "mutability": "mutable", - "name": "deadline", - "nameLocation": "1550:8:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1542:16:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17941, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1542:7:61", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17944, - "mutability": "mutable", - "name": "v", - "nameLocation": "1574:1:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1568:7:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 17943, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1568:5:61", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17946, - "mutability": "mutable", - "name": "r", - "nameLocation": "1593:1:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1585:9:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 17945, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1585:7:61", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17948, - "mutability": "mutable", - "name": "s", - "nameLocation": "1612:1:61", - "nodeType": "VariableDeclaration", - "scope": 17951, - "src": "1604:9:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 17947, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1604:7:61", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1461:158:61" - }, - "returnParameters": { - "id": 17950, - "nodeType": "ParameterList", - "parameters": [], - "src": "1628:0:61" - }, - "scope": 17966, - "src": "1446:183:61", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17952, - "nodeType": "StructuredDocumentation", - "src": "1635:294:61", - "text": " @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times." - }, - "functionSelector": "7ecebe00", - "id": 17959, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nonces", - "nameLocation": "1943:6:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17955, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17954, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1958:5:61", - "nodeType": "VariableDeclaration", - "scope": 17959, - "src": "1950:13:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17953, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1950:7:61", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1949:15:61" - }, - "returnParameters": { - "id": 17958, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17957, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17959, - "src": "1988:7:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17956, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1988:7:61", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1987:9:61" - }, - "scope": 17966, - "src": "1934:63:61", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 17960, - "nodeType": "StructuredDocumentation", - "src": "2003:128:61", - "text": " @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}." - }, - "functionSelector": "3644e515", - "id": 17965, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "DOMAIN_SEPARATOR", - "nameLocation": "2198:16:61", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17961, - "nodeType": "ParameterList", - "parameters": [], - "src": "2214:2:61" - }, - "returnParameters": { - "id": 17964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17963, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 17965, - "src": "2240:7:61", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 17962, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2240:7:61", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2239:9:61" - }, - "scope": 17966, - "src": "2189:60:61", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 17967, - "src": "620:1631:61", - "usedErrors": [] - } - ], - "src": "114:2138:61" - }, - "id": 61 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "exportedSymbols": { - "Address": [18720], - "IERC20": [17905], - "IERC20Permit": [17966], - "SafeERC20": [18247] - }, - "id": 18248, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 17968, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "115:23:62" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../IERC20.sol", - "id": 17969, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 18248, - "sourceUnit": 17906, - "src": "140:23:62", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", - "file": "../extensions/draft-IERC20Permit.sol", - "id": 17970, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 18248, - "sourceUnit": 17967, - "src": "164:46:62", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "file": "../../../utils/Address.sol", - "id": 17971, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 18248, - "sourceUnit": 18721, - "src": "211:36:62", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "SafeERC20", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 17972, - "nodeType": "StructuredDocumentation", - "src": "249:457:62", - "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc." - }, - "fullyImplemented": true, - "id": 18247, - "linearizedBaseContracts": [18247], - "name": "SafeERC20", - "nameLocation": "715:9:62", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 17975, - "libraryName": { - "id": 17973, - "name": "Address", - "nameLocations": ["737:7:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18720, - "src": "737:7:62" - }, - "nodeType": "UsingForDirective", - "src": "731:26:62", - "typeName": { - "id": 17974, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "749:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "body": { - "id": 17997, - "nodeType": "Block", - "src": "865:103:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 17986, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17978, - "src": "895:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 17989, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17978, - "src": "925:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 17990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "931:8:62", - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 17872, - "src": "925:14:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 17991, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "940:8:62", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "925:23:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 17992, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17980, - "src": "950:2:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 17993, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 17982, - "src": "954:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 17987, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "902:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 17988, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "906:18:62", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "902:22:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 17994, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "902:58:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 17985, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18246, - "src": "875:19:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 17995, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "875:86:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 17996, - "nodeType": "ExpressionStatement", - "src": "875:86:62" - } - ] - }, - "id": 17998, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nameLocation": "772:12:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 17983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 17978, - "mutability": "mutable", - "name": "token", - "nameLocation": "801:5:62", - "nodeType": "VariableDeclaration", - "scope": 17998, - "src": "794:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 17977, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 17976, - "name": "IERC20", - "nameLocations": ["794:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "794:6:62" - }, - "referencedDeclaration": 17905, - "src": "794:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17980, - "mutability": "mutable", - "name": "to", - "nameLocation": "824:2:62", - "nodeType": "VariableDeclaration", - "scope": 17998, - "src": "816:10:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17979, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "816:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17982, - "mutability": "mutable", - "name": "value", - "nameLocation": "844:5:62", - "nodeType": "VariableDeclaration", - "scope": 17998, - "src": "836:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 17981, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "836:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "784:71:62" - }, - "returnParameters": { - "id": 17984, - "nodeType": "ParameterList", - "parameters": [], - "src": "865:0:62" - }, - "scope": 18247, - "src": "763:205:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18023, - "nodeType": "Block", - "src": "1102:113:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18011, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18001, - "src": "1132:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 18014, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18001, - "src": "1162:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18015, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1168:12:62", - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 17904, - "src": "1162:18:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - "id": 18016, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1181:8:62", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "1162:27:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 18017, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18003, - "src": "1191:4:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18018, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18005, - "src": "1197:2:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18019, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18007, - "src": "1201:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 18012, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1139:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 18013, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1143:18:62", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "1139:22:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 18020, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1139:68:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 18010, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18246, - "src": "1112:19:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 18021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1112:96:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18022, - "nodeType": "ExpressionStatement", - "src": "1112:96:62" - } - ] - }, - "id": 18024, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nameLocation": "983:16:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18008, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18001, - "mutability": "mutable", - "name": "token", - "nameLocation": "1016:5:62", - "nodeType": "VariableDeclaration", - "scope": 18024, - "src": "1009:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 18000, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 17999, - "name": "IERC20", - "nameLocations": ["1009:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "1009:6:62" - }, - "referencedDeclaration": 17905, - "src": "1009:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18003, - "mutability": "mutable", - "name": "from", - "nameLocation": "1039:4:62", - "nodeType": "VariableDeclaration", - "scope": 18024, - "src": "1031:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18002, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1031:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18005, - "mutability": "mutable", - "name": "to", - "nameLocation": "1061:2:62", - "nodeType": "VariableDeclaration", - "scope": 18024, - "src": "1053:10:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18004, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1053:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18007, - "mutability": "mutable", - "name": "value", - "nameLocation": "1081:5:62", - "nodeType": "VariableDeclaration", - "scope": 18024, - "src": "1073:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18006, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1073:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "999:93:62" - }, - "returnParameters": { - "id": 18009, - "nodeType": "ParameterList", - "parameters": [], - "src": "1102:0:62" - }, - "scope": 18247, - "src": "974:241:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18067, - "nodeType": "Block", - "src": "1581:497:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 18051, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18038, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18036, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18032, - "src": "1830:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 18037, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1839:1:62", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1830:10:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 18039, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1829:12:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 18044, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "1870:4:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - ], - "id": 18043, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1862:7:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18042, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1862:7:62", - "typeDescriptions": {} - } - }, - "id": 18045, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1862:13:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18046, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18030, - "src": "1877:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 18040, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18028, - "src": "1846:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18041, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1852:9:62", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 17882, - "src": "1846:15:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 18047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1846:39:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 18048, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1889:1:62", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1846:44:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 18050, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1845:46:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1829:62:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365", - "id": 18052, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1905:56:62", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25", - "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\"" - }, - "value": "SafeERC20: approve from non-zero to non-zero allowance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25", - "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\"" - } - ], - "id": 18035, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1808:7:62", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1808:163:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18054, - "nodeType": "ExpressionStatement", - "src": "1808:163:62" - }, - { - "expression": { - "arguments": [ - { - "id": 18056, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18028, - "src": "2001:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 18059, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18028, - "src": "2031:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18060, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2037:7:62", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 17892, - "src": "2031:13:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 18061, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2045:8:62", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "2031:22:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 18062, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18030, - "src": "2055:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18063, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18032, - "src": "2064:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 18057, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "2008:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 18058, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2012:18:62", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "2008:22:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 18064, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2008:62:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 18055, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18246, - "src": "1981:19:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 18065, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1981:90:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18066, - "nodeType": "ExpressionStatement", - "src": "1981:90:62" - } - ] - }, - "documentation": { - "id": 18025, - "nodeType": "StructuredDocumentation", - "src": "1221:249:62", - "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead." - }, - "id": 18068, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeApprove", - "nameLocation": "1484:11:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18033, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18028, - "mutability": "mutable", - "name": "token", - "nameLocation": "1512:5:62", - "nodeType": "VariableDeclaration", - "scope": 18068, - "src": "1505:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 18027, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 18026, - "name": "IERC20", - "nameLocations": ["1505:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "1505:6:62" - }, - "referencedDeclaration": 17905, - "src": "1505:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18030, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1535:7:62", - "nodeType": "VariableDeclaration", - "scope": 18068, - "src": "1527:15:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18029, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1527:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18032, - "mutability": "mutable", - "name": "value", - "nameLocation": "1560:5:62", - "nodeType": "VariableDeclaration", - "scope": 18068, - "src": "1552:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18031, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1552:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1495:76:62" - }, - "returnParameters": { - "id": 18034, - "nodeType": "ParameterList", - "parameters": [], - "src": "1581:0:62" - }, - "scope": 18247, - "src": "1475:603:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18103, - "nodeType": "Block", - "src": "2200:194:62", - "statements": [ - { - "assignments": [18079], - "declarations": [ - { - "constant": false, - "id": 18079, - "mutability": "mutable", - "name": "newAllowance", - "nameLocation": "2218:12:62", - "nodeType": "VariableDeclaration", - "scope": 18103, - "src": "2210:20:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18078, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2210:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 18090, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "arguments": [ - { - "id": 18084, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2257:4:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - ], - "id": 18083, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2249:7:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18082, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2249:7:62", - "typeDescriptions": {} - } - }, - "id": 18085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2249:13:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18086, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18073, - "src": "2264:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 18080, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18071, - "src": "2233:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2239:9:62", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 17882, - "src": "2233:15:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 18087, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2233:39:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 18088, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18075, - "src": "2275:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2233:47:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2210:70:62" - }, - { - "expression": { - "arguments": [ - { - "id": 18092, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18071, - "src": "2310:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 18095, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18071, - "src": "2340:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2346:7:62", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 17892, - "src": "2340:13:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 18097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2354:8:62", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "2340:22:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 18098, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18073, - "src": "2364:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18099, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18079, - "src": "2373:12:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 18093, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "2317:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 18094, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2321:18:62", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "2317:22:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 18100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2317:69:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 18091, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18246, - "src": "2290:19:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 18101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2290:97:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18102, - "nodeType": "ExpressionStatement", - "src": "2290:97:62" - } - ] - }, - "id": 18104, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeIncreaseAllowance", - "nameLocation": "2093:21:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18076, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18071, - "mutability": "mutable", - "name": "token", - "nameLocation": "2131:5:62", - "nodeType": "VariableDeclaration", - "scope": 18104, - "src": "2124:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 18070, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 18069, - "name": "IERC20", - "nameLocations": ["2124:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "2124:6:62" - }, - "referencedDeclaration": 17905, - "src": "2124:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18073, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2154:7:62", - "nodeType": "VariableDeclaration", - "scope": 18104, - "src": "2146:15:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18072, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2146:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18075, - "mutability": "mutable", - "name": "value", - "nameLocation": "2179:5:62", - "nodeType": "VariableDeclaration", - "scope": 18104, - "src": "2171:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18074, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2171:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2114:76:62" - }, - "returnParameters": { - "id": 18077, - "nodeType": "ParameterList", - "parameters": [], - "src": "2200:0:62" - }, - "scope": 18247, - "src": "2084:310:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18151, - "nodeType": "Block", - "src": "2516:370:62", - "statements": [ - { - "id": 18150, - "nodeType": "UncheckedBlock", - "src": "2526:354:62", - "statements": [ - { - "assignments": [18115], - "declarations": [ - { - "constant": false, - "id": 18115, - "mutability": "mutable", - "name": "oldAllowance", - "nameLocation": "2558:12:62", - "nodeType": "VariableDeclaration", - "scope": 18150, - "src": "2550:20:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18114, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2550:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 18124, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 18120, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2597:4:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$18247", - "typeString": "library SafeERC20" - } - ], - "id": 18119, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2589:7:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2589:7:62", - "typeDescriptions": {} - } - }, - "id": 18121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2589:13:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18122, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18109, - "src": "2604:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 18116, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18107, - "src": "2573:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2579:9:62", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 17882, - "src": "2573:15:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 18123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2573:39:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2550:62:62" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18126, - "name": "oldAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18115, - "src": "2634:12:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 18127, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18111, - "src": "2650:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2634:21:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f", - "id": 18129, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2657:43:62", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a", - "typeString": "literal_string \"SafeERC20: decreased allowance below zero\"" - }, - "value": "SafeERC20: decreased allowance below zero" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a", - "typeString": "literal_string \"SafeERC20: decreased allowance below zero\"" - } - ], - "id": 18125, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "2626:7:62", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18130, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2626:75:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18131, - "nodeType": "ExpressionStatement", - "src": "2626:75:62" - }, - { - "assignments": [18133], - "declarations": [ - { - "constant": false, - "id": 18133, - "mutability": "mutable", - "name": "newAllowance", - "nameLocation": "2723:12:62", - "nodeType": "VariableDeclaration", - "scope": 18150, - "src": "2715:20:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18132, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2715:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 18137, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18136, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18134, - "name": "oldAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18115, - "src": "2738:12:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 18135, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18111, - "src": "2753:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2738:20:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2715:43:62" - }, - { - "expression": { - "arguments": [ - { - "id": 18139, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18107, - "src": "2792:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "expression": { - "id": 18142, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18107, - "src": "2822:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "id": 18143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2828:7:62", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 17892, - "src": "2822:13:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 18144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2836:8:62", - "memberName": "selector", - "nodeType": "MemberAccess", - "src": "2822:22:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "id": 18145, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18109, - "src": "2846:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18146, - "name": "newAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18133, - "src": "2855:12:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 18140, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "2799:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 18141, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2803:18:62", - "memberName": "encodeWithSelector", - "nodeType": "MemberAccess", - "src": "2799:22:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (bytes4) pure returns (bytes memory)" - } - }, - "id": 18147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2799:69:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 18138, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18246, - "src": "2772:19:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$17905_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 18148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2772:97:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18149, - "nodeType": "ExpressionStatement", - "src": "2772:97:62" - } - ] - } - ] - }, - "id": 18152, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeDecreaseAllowance", - "nameLocation": "2409:21:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18107, - "mutability": "mutable", - "name": "token", - "nameLocation": "2447:5:62", - "nodeType": "VariableDeclaration", - "scope": 18152, - "src": "2440:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 18106, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 18105, - "name": "IERC20", - "nameLocations": ["2440:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "2440:6:62" - }, - "referencedDeclaration": 17905, - "src": "2440:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18109, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2470:7:62", - "nodeType": "VariableDeclaration", - "scope": 18152, - "src": "2462:15:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18108, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2462:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18111, - "mutability": "mutable", - "name": "value", - "nameLocation": "2495:5:62", - "nodeType": "VariableDeclaration", - "scope": 18152, - "src": "2487:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18110, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2487:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2430:76:62" - }, - "returnParameters": { - "id": 18113, - "nodeType": "ParameterList", - "parameters": [], - "src": "2516:0:62" - }, - "scope": 18247, - "src": "2400:486:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18207, - "nodeType": "Block", - "src": "3107:257:62", - "statements": [ - { - "assignments": [18173], - "declarations": [ - { - "constant": false, - "id": 18173, - "mutability": "mutable", - "name": "nonceBefore", - "nameLocation": "3125:11:62", - "nodeType": "VariableDeclaration", - "scope": 18207, - "src": "3117:19:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18172, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3117:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 18178, - "initialValue": { - "arguments": [ - { - "id": 18176, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18157, - "src": "3152:5:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 18174, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18155, - "src": "3139:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20Permit_$17966", - "typeString": "contract IERC20Permit" - } - }, - "id": 18175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3145:6:62", - "memberName": "nonces", - "nodeType": "MemberAccess", - "referencedDeclaration": 17959, - "src": "3139:12:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 18177, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3139:19:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3117:41:62" - }, - { - "expression": { - "arguments": [ - { - "id": 18182, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18157, - "src": "3181:5:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18183, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18159, - "src": "3188:7:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18184, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18161, - "src": "3197:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 18185, - "name": "deadline", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18163, - "src": "3204:8:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 18186, - "name": "v", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18165, - "src": "3214:1:62", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 18187, - "name": "r", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18167, - "src": "3217:1:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 18188, - "name": "s", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18169, - "src": "3220:1:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 18179, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18155, - "src": "3168:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20Permit_$17966", - "typeString": "contract IERC20Permit" - } - }, - "id": 18181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3174:6:62", - "memberName": "permit", - "nodeType": "MemberAccess", - "referencedDeclaration": 17951, - "src": "3168:12:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$", - "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external" - } - }, - "id": 18189, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3168:54:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18190, - "nodeType": "ExpressionStatement", - "src": "3168:54:62" - }, - { - "assignments": [18192], - "declarations": [ - { - "constant": false, - "id": 18192, - "mutability": "mutable", - "name": "nonceAfter", - "nameLocation": "3240:10:62", - "nodeType": "VariableDeclaration", - "scope": 18207, - "src": "3232:18:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18191, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3232:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 18197, - "initialValue": { - "arguments": [ - { - "id": 18195, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18157, - "src": "3266:5:62", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 18193, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18155, - "src": "3253:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20Permit_$17966", - "typeString": "contract IERC20Permit" - } - }, - "id": 18194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3259:6:62", - "memberName": "nonces", - "nodeType": "MemberAccess", - "referencedDeclaration": 17959, - "src": "3253:12:62", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", - "typeString": "function (address) view external returns (uint256)" - } - }, - "id": 18196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3253:19:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3232:40:62" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18199, - "name": "nonceAfter", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18192, - "src": "3290:10:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18200, - "name": "nonceBefore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18173, - "src": "3304:11:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "hexValue": "31", - "id": 18201, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3318:1:62", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3304:15:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3290:29:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5361666545524332303a207065726d697420646964206e6f742073756363656564", - "id": 18204, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3321:35:62", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d", - "typeString": "literal_string \"SafeERC20: permit did not succeed\"" - }, - "value": "SafeERC20: permit did not succeed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d", - "typeString": "literal_string \"SafeERC20: permit did not succeed\"" - } - ], - "id": 18198, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3282:7:62", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3282:75:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18206, - "nodeType": "ExpressionStatement", - "src": "3282:75:62" - } - ] - }, - "id": 18208, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safePermit", - "nameLocation": "2901:10:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18170, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18155, - "mutability": "mutable", - "name": "token", - "nameLocation": "2934:5:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "2921:18:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20Permit_$17966", - "typeString": "contract IERC20Permit" - }, - "typeName": { - "id": 18154, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 18153, - "name": "IERC20Permit", - "nameLocations": ["2921:12:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17966, - "src": "2921:12:62" - }, - "referencedDeclaration": 17966, - "src": "2921:12:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20Permit_$17966", - "typeString": "contract IERC20Permit" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18157, - "mutability": "mutable", - "name": "owner", - "nameLocation": "2957:5:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "2949:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18156, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2949:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18159, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2980:7:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "2972:15:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18158, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2972:7:62", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18161, - "mutability": "mutable", - "name": "value", - "nameLocation": "3005:5:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "2997:13:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18160, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2997:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18163, - "mutability": "mutable", - "name": "deadline", - "nameLocation": "3028:8:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "3020:16:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18162, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3020:7:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18165, - "mutability": "mutable", - "name": "v", - "nameLocation": "3052:1:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "3046:7:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 18164, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3046:5:62", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18167, - "mutability": "mutable", - "name": "r", - "nameLocation": "3071:1:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "3063:9:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 18166, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3063:7:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18169, - "mutability": "mutable", - "name": "s", - "nameLocation": "3090:1:62", - "nodeType": "VariableDeclaration", - "scope": 18208, - "src": "3082:9:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 18168, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3082:7:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2911:186:62" - }, - "returnParameters": { - "id": 18171, - "nodeType": "ParameterList", - "parameters": [], - "src": "3107:0:62" - }, - "scope": 18247, - "src": "2892:472:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18245, - "nodeType": "Block", - "src": "3817:636:62", - "statements": [ - { - "assignments": [18218], - "declarations": [ - { - "constant": false, - "id": 18218, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "4179:10:62", - "nodeType": "VariableDeclaration", - "scope": 18245, - "src": "4166:23:62", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18217, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4166:5:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 18227, - "initialValue": { - "arguments": [ - { - "id": 18224, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18214, - "src": "4220:4:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564", - "id": 18225, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4226:34:62", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b", - "typeString": "literal_string \"SafeERC20: low-level call failed\"" - }, - "value": "SafeERC20: low-level call failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b", - "typeString": "literal_string \"SafeERC20: low-level call failed\"" - } - ], - "expression": { - "arguments": [ - { - "id": 18221, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18212, - "src": "4200:5:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - ], - "id": 18220, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4192:7:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18219, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4192:7:62", - "typeDescriptions": {} - } - }, - "id": 18222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4192:14:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4207:12:62", - "memberName": "functionCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 18480, - "src": "4192:27:62", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$", - "typeString": "function (address,bytes memory,string memory) returns (bytes memory)" - } - }, - "id": 18226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4192:69:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4166:95:62" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 18228, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18218, - "src": "4275:10:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 18229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4286:6:62", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4275:17:62", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 18230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4295:1:62", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4275:21:62", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 18244, - "nodeType": "IfStatement", - "src": "4271:176:62", - "trueBody": { - "id": 18243, - "nodeType": "Block", - "src": "4298:149:62", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 18235, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18218, - "src": "4370:10:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 18237, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4383:4:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": { - "id": 18236, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4383:4:62", - "typeDescriptions": {} - } - } - ], - "id": 18238, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4382:6:62", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - } - ], - "expression": { - "id": 18233, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "4359:3:62", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 18234, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4363:6:62", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "4359:10:62", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4359:30:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564", - "id": 18240, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4391:44:62", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd", - "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\"" - }, - "value": "SafeERC20: ERC20 operation did not succeed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd", - "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\"" - } - ], - "id": 18232, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "4351:7:62", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4351:85:62", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18242, - "nodeType": "ExpressionStatement", - "src": "4351:85:62" - } - ] - } - } - ] - }, - "documentation": { - "id": 18209, - "nodeType": "StructuredDocumentation", - "src": "3370:372:62", - "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)." - }, - "id": 18246, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_callOptionalReturn", - "nameLocation": "3756:19:62", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18215, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18212, - "mutability": "mutable", - "name": "token", - "nameLocation": "3783:5:62", - "nodeType": "VariableDeclaration", - "scope": 18246, - "src": "3776:12:62", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 18211, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 18210, - "name": "IERC20", - "nameLocations": ["3776:6:62"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 17905, - "src": "3776:6:62" - }, - "referencedDeclaration": 17905, - "src": "3776:6:62", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$17905", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18214, - "mutability": "mutable", - "name": "data", - "nameLocation": "3803:4:62", - "nodeType": "VariableDeclaration", - "scope": 18246, - "src": "3790:17:62", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18213, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3790:5:62", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3775:33:62" - }, - "returnParameters": { - "id": 18216, - "nodeType": "ParameterList", - "parameters": [], - "src": "3817:0:62" - }, - "scope": 18247, - "src": "3747:706:62", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - } - ], - "scope": 18248, - "src": "707:3748:62", - "usedErrors": [] - } - ], - "src": "115:4341:62" - }, - "id": 62 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol", - "exportedSymbols": { - "IERC165": [18754], - "IERC721": [18363] - }, - "id": 18364, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18249, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "108:23:63" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "file": "../../utils/introspection/IERC165.sol", - "id": 18250, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 18364, - "sourceUnit": 18755, - "src": "133:47:63", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 18252, - "name": "IERC165", - "nameLocations": ["271:7:63"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18754, - "src": "271:7:63" - }, - "id": 18253, - "nodeType": "InheritanceSpecifier", - "src": "271:7:63" - } - ], - "canonicalName": "IERC721", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 18251, - "nodeType": "StructuredDocumentation", - "src": "182:67:63", - "text": " @dev Required interface of an ERC721 compliant contract." - }, - "fullyImplemented": false, - "id": 18363, - "linearizedBaseContracts": [18363, 18754], - "name": "IERC721", - "nameLocation": "260:7:63", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 18254, - "nodeType": "StructuredDocumentation", - "src": "285:88:63", - "text": " @dev Emitted when `tokenId` token is transferred from `from` to `to`." - }, - "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "id": 18262, - "name": "Transfer", - "nameLocation": "384:8:63", - "nodeType": "EventDefinition", - "parameters": { - "id": 18261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18256, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "409:4:63", - "nodeType": "VariableDeclaration", - "scope": 18262, - "src": "393:20:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18255, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "393:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18258, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "431:2:63", - "nodeType": "VariableDeclaration", - "scope": 18262, - "src": "415:18:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18257, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "415:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18260, - "indexed": true, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "451:7:63", - "nodeType": "VariableDeclaration", - "scope": 18262, - "src": "435:23:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18259, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "435:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "392:67:63" - }, - "src": "378:82:63" - }, - { - "anonymous": false, - "documentation": { - "id": 18263, - "nodeType": "StructuredDocumentation", - "src": "466:94:63", - "text": " @dev Emitted when `owner` enables `approved` to manage the `tokenId` token." - }, - "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "id": 18271, - "name": "Approval", - "nameLocation": "571:8:63", - "nodeType": "EventDefinition", - "parameters": { - "id": 18270, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18265, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "596:5:63", - "nodeType": "VariableDeclaration", - "scope": 18271, - "src": "580:21:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18264, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "580:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18267, - "indexed": true, - "mutability": "mutable", - "name": "approved", - "nameLocation": "619:8:63", - "nodeType": "VariableDeclaration", - "scope": 18271, - "src": "603:24:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18266, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "603:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18269, - "indexed": true, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "645:7:63", - "nodeType": "VariableDeclaration", - "scope": 18271, - "src": "629:23:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18268, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "629:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "579:74:63" - }, - "src": "565:89:63" - }, - { - "anonymous": false, - "documentation": { - "id": 18272, - "nodeType": "StructuredDocumentation", - "src": "660:117:63", - "text": " @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets." - }, - "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", - "id": 18280, - "name": "ApprovalForAll", - "nameLocation": "788:14:63", - "nodeType": "EventDefinition", - "parameters": { - "id": 18279, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18274, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "819:5:63", - "nodeType": "VariableDeclaration", - "scope": 18280, - "src": "803:21:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18273, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "803:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18276, - "indexed": true, - "mutability": "mutable", - "name": "operator", - "nameLocation": "842:8:63", - "nodeType": "VariableDeclaration", - "scope": 18280, - "src": "826:24:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18275, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "826:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18278, - "indexed": false, - "mutability": "mutable", - "name": "approved", - "nameLocation": "857:8:63", - "nodeType": "VariableDeclaration", - "scope": 18280, - "src": "852:13:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18277, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "852:4:63", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "802:64:63" - }, - "src": "782:85:63" - }, - { - "documentation": { - "id": 18281, - "nodeType": "StructuredDocumentation", - "src": "873:76:63", - "text": " @dev Returns the number of tokens in ``owner``'s account." - }, - "functionSelector": "70a08231", - "id": 18288, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "963:9:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18284, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18283, - "mutability": "mutable", - "name": "owner", - "nameLocation": "981:5:63", - "nodeType": "VariableDeclaration", - "scope": 18288, - "src": "973:13:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18282, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "973:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "972:15:63" - }, - "returnParameters": { - "id": 18287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18286, - "mutability": "mutable", - "name": "balance", - "nameLocation": "1019:7:63", - "nodeType": "VariableDeclaration", - "scope": 18288, - "src": "1011:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1011:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1010:17:63" - }, - "scope": 18363, - "src": "954:74:63", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18289, - "nodeType": "StructuredDocumentation", - "src": "1034:131:63", - "text": " @dev Returns the owner of the `tokenId` token.\n Requirements:\n - `tokenId` must exist." - }, - "functionSelector": "6352211e", - "id": 18296, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "ownerOf", - "nameLocation": "1179:7:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18292, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18291, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "1195:7:63", - "nodeType": "VariableDeclaration", - "scope": 18296, - "src": "1187:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18290, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1187:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1186:17:63" - }, - "returnParameters": { - "id": 18295, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18294, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1235:5:63", - "nodeType": "VariableDeclaration", - "scope": 18296, - "src": "1227:13:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18293, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1227:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1226:15:63" - }, - "scope": 18363, - "src": "1170:72:63", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18297, - "nodeType": "StructuredDocumentation", - "src": "1248:556:63", - "text": " @dev Safely transfers `tokenId` token from `from` to `to`.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event." - }, - "functionSelector": "b88d4fde", - "id": 18308, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nameLocation": "1818:16:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18306, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18299, - "mutability": "mutable", - "name": "from", - "nameLocation": "1852:4:63", - "nodeType": "VariableDeclaration", - "scope": 18308, - "src": "1844:12:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18298, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1844:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18301, - "mutability": "mutable", - "name": "to", - "nameLocation": "1874:2:63", - "nodeType": "VariableDeclaration", - "scope": 18308, - "src": "1866:10:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18300, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1866:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18303, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "1894:7:63", - "nodeType": "VariableDeclaration", - "scope": 18308, - "src": "1886:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18302, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1886:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18305, - "mutability": "mutable", - "name": "data", - "nameLocation": "1926:4:63", - "nodeType": "VariableDeclaration", - "scope": 18308, - "src": "1911:19:63", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18304, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1911:5:63", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1834:102:63" - }, - "returnParameters": { - "id": 18307, - "nodeType": "ParameterList", - "parameters": [], - "src": "1945:0:63" - }, - "scope": 18363, - "src": "1809:137:63", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18309, - "nodeType": "StructuredDocumentation", - "src": "1952:687:63", - "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event." - }, - "functionSelector": "42842e0e", - "id": 18318, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nameLocation": "2653:16:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18311, - "mutability": "mutable", - "name": "from", - "nameLocation": "2687:4:63", - "nodeType": "VariableDeclaration", - "scope": 18318, - "src": "2679:12:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18310, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2679:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18313, - "mutability": "mutable", - "name": "to", - "nameLocation": "2709:2:63", - "nodeType": "VariableDeclaration", - "scope": 18318, - "src": "2701:10:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18312, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2701:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18315, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "2729:7:63", - "nodeType": "VariableDeclaration", - "scope": 18318, - "src": "2721:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18314, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2721:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2669:73:63" - }, - "returnParameters": { - "id": 18317, - "nodeType": "ParameterList", - "parameters": [], - "src": "2751:0:63" - }, - "scope": 18363, - "src": "2644:108:63", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18319, - "nodeType": "StructuredDocumentation", - "src": "2758:732:63", - "text": " @dev Transfers `tokenId` token from `from` to `to`.\n WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n understand this adds an external call which potentially creates a reentrancy vulnerability.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n Emits a {Transfer} event." - }, - "functionSelector": "23b872dd", - "id": 18328, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "3504:12:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18326, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18321, - "mutability": "mutable", - "name": "from", - "nameLocation": "3534:4:63", - "nodeType": "VariableDeclaration", - "scope": 18328, - "src": "3526:12:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18320, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3526:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18323, - "mutability": "mutable", - "name": "to", - "nameLocation": "3556:2:63", - "nodeType": "VariableDeclaration", - "scope": 18328, - "src": "3548:10:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18322, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3548:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18325, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "3576:7:63", - "nodeType": "VariableDeclaration", - "scope": 18328, - "src": "3568:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18324, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3568:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3516:73:63" - }, - "returnParameters": { - "id": 18327, - "nodeType": "ParameterList", - "parameters": [], - "src": "3598:0:63" - }, - "scope": 18363, - "src": "3495:104:63", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18329, - "nodeType": "StructuredDocumentation", - "src": "3605:452:63", - "text": " @dev Gives permission to `to` to transfer `tokenId` token to another account.\n The approval is cleared when the token is transferred.\n Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n Requirements:\n - The caller must own the token or be an approved operator.\n - `tokenId` must exist.\n Emits an {Approval} event." - }, - "functionSelector": "095ea7b3", - "id": 18336, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "4071:7:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18334, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18331, - "mutability": "mutable", - "name": "to", - "nameLocation": "4087:2:63", - "nodeType": "VariableDeclaration", - "scope": 18336, - "src": "4079:10:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18330, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4079:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18333, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "4099:7:63", - "nodeType": "VariableDeclaration", - "scope": 18336, - "src": "4091:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18332, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4091:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4078:29:63" - }, - "returnParameters": { - "id": 18335, - "nodeType": "ParameterList", - "parameters": [], - "src": "4116:0:63" - }, - "scope": 18363, - "src": "4062:55:63", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18337, - "nodeType": "StructuredDocumentation", - "src": "4123:309:63", - "text": " @dev Approve or remove `operator` as an operator for the caller.\n Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n Requirements:\n - The `operator` cannot be the caller.\n Emits an {ApprovalForAll} event." - }, - "functionSelector": "a22cb465", - "id": 18344, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setApprovalForAll", - "nameLocation": "4446:17:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18342, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18339, - "mutability": "mutable", - "name": "operator", - "nameLocation": "4472:8:63", - "nodeType": "VariableDeclaration", - "scope": 18344, - "src": "4464:16:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18338, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4464:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18341, - "mutability": "mutable", - "name": "_approved", - "nameLocation": "4487:9:63", - "nodeType": "VariableDeclaration", - "scope": 18344, - "src": "4482:14:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18340, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4482:4:63", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4463:34:63" - }, - "returnParameters": { - "id": 18343, - "nodeType": "ParameterList", - "parameters": [], - "src": "4506:0:63" - }, - "scope": 18363, - "src": "4437:70:63", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18345, - "nodeType": "StructuredDocumentation", - "src": "4513:139:63", - "text": " @dev Returns the account approved for `tokenId` token.\n Requirements:\n - `tokenId` must exist." - }, - "functionSelector": "081812fc", - "id": 18352, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getApproved", - "nameLocation": "4666:11:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18348, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18347, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "4686:7:63", - "nodeType": "VariableDeclaration", - "scope": 18352, - "src": "4678:15:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18346, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4678:7:63", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4677:17:63" - }, - "returnParameters": { - "id": 18351, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18350, - "mutability": "mutable", - "name": "operator", - "nameLocation": "4726:8:63", - "nodeType": "VariableDeclaration", - "scope": 18352, - "src": "4718:16:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18349, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4718:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4717:18:63" - }, - "scope": 18363, - "src": "4657:79:63", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18353, - "nodeType": "StructuredDocumentation", - "src": "4742:138:63", - "text": " @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n See {setApprovalForAll}" - }, - "functionSelector": "e985e9c5", - "id": 18362, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isApprovedForAll", - "nameLocation": "4894:16:63", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18358, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18355, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4919:5:63", - "nodeType": "VariableDeclaration", - "scope": 18362, - "src": "4911:13:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4911:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18357, - "mutability": "mutable", - "name": "operator", - "nameLocation": "4934:8:63", - "nodeType": "VariableDeclaration", - "scope": 18362, - "src": "4926:16:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18356, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4926:7:63", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4910:33:63" - }, - "returnParameters": { - "id": 18361, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18360, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18362, - "src": "4967:4:63", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18359, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4967:4:63", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4966:6:63" - }, - "scope": 18363, - "src": "4885:88:63", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 18364, - "src": "250:4725:63", - "usedErrors": [] - } - ], - "src": "108:4868:63" - }, - "id": 63 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol", - "exportedSymbols": { - "IERC165": [18754], - "IERC721": [18363], - "IERC721Metadata": [18390] - }, - "id": 18391, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18365, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "112:23:64" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol", - "file": "../IERC721.sol", - "id": 18366, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 18391, - "sourceUnit": 18364, - "src": "137:24:64", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 18368, - "name": "IERC721", - "nameLocations": ["326:7:64"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 18363, - "src": "326:7:64" - }, - "id": 18369, - "nodeType": "InheritanceSpecifier", - "src": "326:7:64" - } - ], - "canonicalName": "IERC721Metadata", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 18367, - "nodeType": "StructuredDocumentation", - "src": "163:133:64", - "text": " @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n @dev See https://eips.ethereum.org/EIPS/eip-721" - }, - "fullyImplemented": false, - "id": 18390, - "linearizedBaseContracts": [18390, 18363, 18754], - "name": "IERC721Metadata", - "nameLocation": "307:15:64", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 18370, - "nodeType": "StructuredDocumentation", - "src": "340:58:64", - "text": " @dev Returns the token collection name." - }, - "functionSelector": "06fdde03", - "id": 18375, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nameLocation": "412:4:64", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18371, - "nodeType": "ParameterList", - "parameters": [], - "src": "416:2:64" - }, - "returnParameters": { - "id": 18374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18373, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18375, - "src": "442:13:64", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18372, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "442:6:64", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "441:15:64" - }, - "scope": 18390, - "src": "403:54:64", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18376, - "nodeType": "StructuredDocumentation", - "src": "463:60:64", - "text": " @dev Returns the token collection symbol." - }, - "functionSelector": "95d89b41", - "id": 18381, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nameLocation": "537:6:64", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18377, - "nodeType": "ParameterList", - "parameters": [], - "src": "543:2:64" - }, - "returnParameters": { - "id": 18380, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18379, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18381, - "src": "569:13:64", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18378, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "569:6:64", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "568:15:64" - }, - "scope": 18390, - "src": "528:56:64", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 18382, - "nodeType": "StructuredDocumentation", - "src": "590:90:64", - "text": " @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token." - }, - "functionSelector": "c87b56dd", - "id": 18389, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "tokenURI", - "nameLocation": "694:8:64", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18385, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18384, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "711:7:64", - "nodeType": "VariableDeclaration", - "scope": 18389, - "src": "703:15:64", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18383, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "703:7:64", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "702:17:64" - }, - "returnParameters": { - "id": 18388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18387, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18389, - "src": "743:13:64", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18386, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "743:6:64", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "742:15:64" - }, - "scope": 18390, - "src": "685:73:64", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 18391, - "src": "297:463:64", - "usedErrors": [] - } - ], - "src": "112:649:64" - }, - "id": 64 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol", - "exportedSymbols": { - "Address": [18720] - }, - "id": 18721, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18392, - "literals": ["solidity", "^", "0.8", ".1"], - "nodeType": "PragmaDirective", - "src": "101:23:65" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Address", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 18393, - "nodeType": "StructuredDocumentation", - "src": "126:67:65", - "text": " @dev Collection of functions related to the address type" - }, - "fullyImplemented": true, - "id": 18720, - "linearizedBaseContracts": [18720], - "name": "Address", - "nameLocation": "202:7:65", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 18407, - "nodeType": "Block", - "src": "1241:254:65", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 18401, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18396, - "src": "1465:7:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1473:4:65", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "1465:12:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 18403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1478:6:65", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1465:19:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 18404, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1487:1:65", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "1465:23:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 18400, - "id": 18406, - "nodeType": "Return", - "src": "1458:30:65" - } - ] - }, - "documentation": { - "id": 18394, - "nodeType": "StructuredDocumentation", - "src": "216:954:65", - "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ====" - }, - "id": 18408, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isContract", - "nameLocation": "1184:10:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18397, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18396, - "mutability": "mutable", - "name": "account", - "nameLocation": "1203:7:65", - "nodeType": "VariableDeclaration", - "scope": 18408, - "src": "1195:15:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18395, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1195:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1194:17:65" - }, - "returnParameters": { - "id": 18400, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18399, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18408, - "src": "1235:4:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18398, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1235:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1234:6:65" - }, - "scope": 18720, - "src": "1175:320:65", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18441, - "nodeType": "Block", - "src": "2483:241:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18423, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 18419, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2509:4:65", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$18720", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$18720", - "typeString": "library Address" - } - ], - "id": 18418, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2501:7:65", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18417, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2501:7:65", - "typeDescriptions": {} - } - }, - "id": 18420, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2501:13:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18421, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2515:7:65", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "2501:21:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 18422, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18413, - "src": "2526:6:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2501:31:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365", - "id": 18424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2534:31:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9", - "typeString": "literal_string \"Address: insufficient balance\"" - }, - "value": "Address: insufficient balance" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9", - "typeString": "literal_string \"Address: insufficient balance\"" - } - ], - "id": 18416, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2493:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2493:73:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18426, - "nodeType": "ExpressionStatement", - "src": "2493:73:65" - }, - { - "assignments": [18428, null], - "declarations": [ - { - "constant": false, - "id": 18428, - "mutability": "mutable", - "name": "success", - "nameLocation": "2583:7:65", - "nodeType": "VariableDeclaration", - "scope": 18441, - "src": "2578:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18427, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2578:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - null - ], - "id": 18435, - "initialValue": { - "arguments": [ - { - "hexValue": "", - "id": 18433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2626:2:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "id": 18429, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18411, - "src": "2596:9:65", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 18430, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2606:4:65", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "2596:14:65", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 18432, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 18431, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18413, - "src": "2618:6:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "2596:29:65", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 18434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2596:33:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2577:52:65" - }, - { - "expression": { - "arguments": [ - { - "id": 18437, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18428, - "src": "2647:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564", - "id": 18438, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2656:60:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae", - "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\"" - }, - "value": "Address: unable to send value, recipient may have reverted" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae", - "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\"" - } - ], - "id": 18436, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2639:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18439, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2639:78:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18440, - "nodeType": "ExpressionStatement", - "src": "2639:78:65" - } - ] - }, - "documentation": { - "id": 18409, - "nodeType": "StructuredDocumentation", - "src": "1501:906:65", - "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]." - }, - "id": 18442, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sendValue", - "nameLocation": "2421:9:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18411, - "mutability": "mutable", - "name": "recipient", - "nameLocation": "2447:9:65", - "nodeType": "VariableDeclaration", - "scope": 18442, - "src": "2431:25:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 18410, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2431:15:65", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18413, - "mutability": "mutable", - "name": "amount", - "nameLocation": "2466:6:65", - "nodeType": "VariableDeclaration", - "scope": 18442, - "src": "2458:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18412, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2458:7:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2430:43:65" - }, - "returnParameters": { - "id": 18415, - "nodeType": "ParameterList", - "parameters": [], - "src": "2483:0:65" - }, - "scope": 18720, - "src": "2412:312:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18459, - "nodeType": "Block", - "src": "3555:96:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18453, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18445, - "src": "3594:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18454, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18447, - "src": "3602:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "30", - "id": 18455, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3608:1:65", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564", - "id": 18456, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3611:32:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df", - "typeString": "literal_string \"Address: low-level call failed\"" - }, - "value": "Address: low-level call failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df", - "typeString": "literal_string \"Address: low-level call failed\"" - } - ], - "id": 18452, - "name": "functionCallWithValue", - "nodeType": "Identifier", - "overloadedDeclarations": [18500, 18544], - "referencedDeclaration": 18544, - "src": "3572:21:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)" - } - }, - "id": 18457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3572:72:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18451, - "id": 18458, - "nodeType": "Return", - "src": "3565:79:65" - } - ] - }, - "documentation": { - "id": 18443, - "nodeType": "StructuredDocumentation", - "src": "2730:731:65", - "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._" - }, - "id": 18460, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCall", - "nameLocation": "3475:12:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18448, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18445, - "mutability": "mutable", - "name": "target", - "nameLocation": "3496:6:65", - "nodeType": "VariableDeclaration", - "scope": 18460, - "src": "3488:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18444, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3488:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18447, - "mutability": "mutable", - "name": "data", - "nameLocation": "3517:4:65", - "nodeType": "VariableDeclaration", - "scope": 18460, - "src": "3504:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18446, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3504:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3487:35:65" - }, - "returnParameters": { - "id": 18451, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18450, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18460, - "src": "3541:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18449, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3541:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3540:14:65" - }, - "scope": 18720, - "src": "3466:185:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18479, - "nodeType": "Block", - "src": "4020:76:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18473, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18463, - "src": "4059:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18474, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18465, - "src": "4067:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "30", - "id": 18475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4073:1:65", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 18476, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18467, - "src": "4076:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18472, - "name": "functionCallWithValue", - "nodeType": "Identifier", - "overloadedDeclarations": [18500, 18544], - "referencedDeclaration": 18544, - "src": "4037:21:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)" - } - }, - "id": 18477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4037:52:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18471, - "id": 18478, - "nodeType": "Return", - "src": "4030:59:65" - } - ] - }, - "documentation": { - "id": 18461, - "nodeType": "StructuredDocumentation", - "src": "3657:211:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._" - }, - "id": 18480, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCall", - "nameLocation": "3882:12:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18468, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18463, - "mutability": "mutable", - "name": "target", - "nameLocation": "3912:6:65", - "nodeType": "VariableDeclaration", - "scope": 18480, - "src": "3904:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18462, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3904:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18465, - "mutability": "mutable", - "name": "data", - "nameLocation": "3941:4:65", - "nodeType": "VariableDeclaration", - "scope": 18480, - "src": "3928:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18464, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3928:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18467, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "3969:12:65", - "nodeType": "VariableDeclaration", - "scope": 18480, - "src": "3955:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18466, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "3955:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "3894:93:65" - }, - "returnParameters": { - "id": 18471, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18470, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18480, - "src": "4006:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18469, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4006:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4005:14:65" - }, - "scope": 18720, - "src": "3873:223:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18499, - "nodeType": "Block", - "src": "4601:111:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18493, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18483, - "src": "4640:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18494, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18485, - "src": "4648:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18495, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18487, - "src": "4654:5:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564", - "id": 18496, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4661:43:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc", - "typeString": "literal_string \"Address: low-level call with value failed\"" - }, - "value": "Address: low-level call with value failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc", - "typeString": "literal_string \"Address: low-level call with value failed\"" - } - ], - "id": 18492, - "name": "functionCallWithValue", - "nodeType": "Identifier", - "overloadedDeclarations": [18500, 18544], - "referencedDeclaration": 18544, - "src": "4618:21:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)" - } - }, - "id": 18497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4618:87:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18491, - "id": 18498, - "nodeType": "Return", - "src": "4611:94:65" - } - ] - }, - "documentation": { - "id": 18481, - "nodeType": "StructuredDocumentation", - "src": "4102:351:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._" - }, - "id": 18500, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCallWithValue", - "nameLocation": "4467:21:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18488, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18483, - "mutability": "mutable", - "name": "target", - "nameLocation": "4506:6:65", - "nodeType": "VariableDeclaration", - "scope": 18500, - "src": "4498:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18482, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4498:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18485, - "mutability": "mutable", - "name": "data", - "nameLocation": "4535:4:65", - "nodeType": "VariableDeclaration", - "scope": 18500, - "src": "4522:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18484, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4522:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18487, - "mutability": "mutable", - "name": "value", - "nameLocation": "4557:5:65", - "nodeType": "VariableDeclaration", - "scope": 18500, - "src": "4549:13:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18486, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4549:7:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4488:80:65" - }, - "returnParameters": { - "id": 18491, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18490, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18500, - "src": "4587:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18489, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4587:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4586:14:65" - }, - "scope": 18720, - "src": "4458:254:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18543, - "nodeType": "Block", - "src": "5139:267:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 18517, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "5165:4:65", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$18720", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$18720", - "typeString": "library Address" - } - ], - "id": 18516, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5157:7:65", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 18515, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5157:7:65", - "typeDescriptions": {} - } - }, - "id": 18518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5157:13:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5171:7:65", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "5157:21:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "id": 18520, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18507, - "src": "5182:5:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "5157:30:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c", - "id": 18522, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5189:40:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c", - "typeString": "literal_string \"Address: insufficient balance for call\"" - }, - "value": "Address: insufficient balance for call" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c", - "typeString": "literal_string \"Address: insufficient balance for call\"" - } - ], - "id": 18514, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "5149:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18523, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5149:81:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18524, - "nodeType": "ExpressionStatement", - "src": "5149:81:65" - }, - { - "assignments": [18526, 18528], - "declarations": [ - { - "constant": false, - "id": 18526, - "mutability": "mutable", - "name": "success", - "nameLocation": "5246:7:65", - "nodeType": "VariableDeclaration", - "scope": 18543, - "src": "5241:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18525, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5241:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18528, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "5268:10:65", - "nodeType": "VariableDeclaration", - "scope": 18543, - "src": "5255:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18527, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5255:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 18535, - "initialValue": { - "arguments": [ - { - "id": 18533, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18505, - "src": "5308:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 18529, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18503, - "src": "5282:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18530, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5289:4:65", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "5282:11:65", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 18532, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 18531, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18507, - "src": "5301:5:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "5282:25:65", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 18534, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5282:31:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5240:73:65" - }, - { - "expression": { - "arguments": [ - { - "id": 18537, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18503, - "src": "5357:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18538, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18526, - "src": "5365:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 18539, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18528, - "src": "5374:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18540, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18509, - "src": "5386:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18536, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18675, - "src": "5330:26:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)" - } - }, - "id": 18541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5330:69:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18513, - "id": 18542, - "nodeType": "Return", - "src": "5323:76:65" - } - ] - }, - "documentation": { - "id": 18501, - "nodeType": "StructuredDocumentation", - "src": "4718:237:65", - "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._" - }, - "id": 18544, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCallWithValue", - "nameLocation": "4969:21:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18510, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18503, - "mutability": "mutable", - "name": "target", - "nameLocation": "5008:6:65", - "nodeType": "VariableDeclaration", - "scope": 18544, - "src": "5000:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18502, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5000:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18505, - "mutability": "mutable", - "name": "data", - "nameLocation": "5037:4:65", - "nodeType": "VariableDeclaration", - "scope": 18544, - "src": "5024:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18504, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5024:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18507, - "mutability": "mutable", - "name": "value", - "nameLocation": "5059:5:65", - "nodeType": "VariableDeclaration", - "scope": 18544, - "src": "5051:13:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18506, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5051:7:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18509, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "5088:12:65", - "nodeType": "VariableDeclaration", - "scope": 18544, - "src": "5074:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18508, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "5074:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "4990:116:65" - }, - "returnParameters": { - "id": 18513, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18512, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18544, - "src": "5125:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18511, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5125:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5124:14:65" - }, - "scope": 18720, - "src": "4960:446:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18560, - "nodeType": "Block", - "src": "5683:97:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18555, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18547, - "src": "5719:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18556, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18549, - "src": "5727:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564", - "id": 18557, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5733:39:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0", - "typeString": "literal_string \"Address: low-level static call failed\"" - }, - "value": "Address: low-level static call failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0", - "typeString": "literal_string \"Address: low-level static call failed\"" - } - ], - "id": 18554, - "name": "functionStaticCall", - "nodeType": "Identifier", - "overloadedDeclarations": [18561, 18590], - "referencedDeclaration": 18590, - "src": "5700:18:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)" - } - }, - "id": 18558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5700:73:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18553, - "id": 18559, - "nodeType": "Return", - "src": "5693:80:65" - } - ] - }, - "documentation": { - "id": 18545, - "nodeType": "StructuredDocumentation", - "src": "5412:166:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._" - }, - "id": 18561, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionStaticCall", - "nameLocation": "5592:18:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18547, - "mutability": "mutable", - "name": "target", - "nameLocation": "5619:6:65", - "nodeType": "VariableDeclaration", - "scope": 18561, - "src": "5611:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18546, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5611:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18549, - "mutability": "mutable", - "name": "data", - "nameLocation": "5640:4:65", - "nodeType": "VariableDeclaration", - "scope": 18561, - "src": "5627:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18548, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5627:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5610:35:65" - }, - "returnParameters": { - "id": 18553, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18552, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18561, - "src": "5669:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18551, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5669:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5668:14:65" - }, - "scope": 18720, - "src": "5583:197:65", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18589, - "nodeType": "Block", - "src": "6122:168:65", - "statements": [ - { - "assignments": [18574, 18576], - "declarations": [ - { - "constant": false, - "id": 18574, - "mutability": "mutable", - "name": "success", - "nameLocation": "6138:7:65", - "nodeType": "VariableDeclaration", - "scope": 18589, - "src": "6133:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18573, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6133:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18576, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "6160:10:65", - "nodeType": "VariableDeclaration", - "scope": 18589, - "src": "6147:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18575, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6147:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 18581, - "initialValue": { - "arguments": [ - { - "id": 18579, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18566, - "src": "6192:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 18577, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18564, - "src": "6174:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6181:10:65", - "memberName": "staticcall", - "nodeType": "MemberAccess", - "src": "6174:17:65", - "typeDescriptions": { - "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) view returns (bool,bytes memory)" - } - }, - "id": 18580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6174:23:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6132:65:65" - }, - { - "expression": { - "arguments": [ - { - "id": 18583, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18564, - "src": "6241:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18584, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18574, - "src": "6249:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 18585, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18576, - "src": "6258:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18586, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18568, - "src": "6270:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18582, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18675, - "src": "6214:26:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)" - } - }, - "id": 18587, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6214:69:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18572, - "id": 18588, - "nodeType": "Return", - "src": "6207:76:65" - } - ] - }, - "documentation": { - "id": 18562, - "nodeType": "StructuredDocumentation", - "src": "5786:173:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._" - }, - "id": 18590, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionStaticCall", - "nameLocation": "5973:18:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18569, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18564, - "mutability": "mutable", - "name": "target", - "nameLocation": "6009:6:65", - "nodeType": "VariableDeclaration", - "scope": 18590, - "src": "6001:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18563, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6001:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18566, - "mutability": "mutable", - "name": "data", - "nameLocation": "6038:4:65", - "nodeType": "VariableDeclaration", - "scope": 18590, - "src": "6025:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18565, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6025:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18568, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "6066:12:65", - "nodeType": "VariableDeclaration", - "scope": 18590, - "src": "6052:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18567, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6052:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "5991:93:65" - }, - "returnParameters": { - "id": 18572, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18571, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18590, - "src": "6108:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18570, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6108:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6107:14:65" - }, - "scope": 18720, - "src": "5964:326:65", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18606, - "nodeType": "Block", - "src": "6566:101:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18601, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18593, - "src": "6604:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18602, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18595, - "src": "6612:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "id": 18603, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6618:41:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398", - "typeString": "literal_string \"Address: low-level delegate call failed\"" - }, - "value": "Address: low-level delegate call failed" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398", - "typeString": "literal_string \"Address: low-level delegate call failed\"" - } - ], - "id": 18600, - "name": "functionDelegateCall", - "nodeType": "Identifier", - "overloadedDeclarations": [18607, 18636], - "referencedDeclaration": 18636, - "src": "6583:20:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,string memory) returns (bytes memory)" - } - }, - "id": 18604, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6583:77:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18599, - "id": 18605, - "nodeType": "Return", - "src": "6576:84:65" - } - ] - }, - "documentation": { - "id": 18591, - "nodeType": "StructuredDocumentation", - "src": "6296:168:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._" - }, - "id": 18607, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionDelegateCall", - "nameLocation": "6478:20:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18593, - "mutability": "mutable", - "name": "target", - "nameLocation": "6507:6:65", - "nodeType": "VariableDeclaration", - "scope": 18607, - "src": "6499:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18592, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6499:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18595, - "mutability": "mutable", - "name": "data", - "nameLocation": "6528:4:65", - "nodeType": "VariableDeclaration", - "scope": 18607, - "src": "6515:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18594, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6515:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6498:35:65" - }, - "returnParameters": { - "id": 18599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18598, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18607, - "src": "6552:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18597, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6552:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6551:14:65" - }, - "scope": 18720, - "src": "6469:198:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18635, - "nodeType": "Block", - "src": "7008:170:65", - "statements": [ - { - "assignments": [18620, 18622], - "declarations": [ - { - "constant": false, - "id": 18620, - "mutability": "mutable", - "name": "success", - "nameLocation": "7024:7:65", - "nodeType": "VariableDeclaration", - "scope": 18635, - "src": "7019:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18619, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7019:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18622, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "7046:10:65", - "nodeType": "VariableDeclaration", - "scope": 18635, - "src": "7033:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18621, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7033:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 18627, - "initialValue": { - "arguments": [ - { - "id": 18625, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18612, - "src": "7080:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 18623, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18610, - "src": "7060:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 18624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7067:12:65", - "memberName": "delegatecall", - "nodeType": "MemberAccess", - "src": "7060:19:65", - "typeDescriptions": { - "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) returns (bool,bytes memory)" - } - }, - "id": 18626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7060:25:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7018:67:65" - }, - { - "expression": { - "arguments": [ - { - "id": 18629, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18610, - "src": "7129:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 18630, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18620, - "src": "7137:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 18631, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18622, - "src": "7146:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18632, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18614, - "src": "7158:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18628, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18675, - "src": "7102:26:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory,string memory) view returns (bytes memory)" - } - }, - "id": 18633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7102:69:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18618, - "id": 18634, - "nodeType": "Return", - "src": "7095:76:65" - } - ] - }, - "documentation": { - "id": 18608, - "nodeType": "StructuredDocumentation", - "src": "6673:175:65", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._" - }, - "id": 18636, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionDelegateCall", - "nameLocation": "6862:20:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18615, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18610, - "mutability": "mutable", - "name": "target", - "nameLocation": "6900:6:65", - "nodeType": "VariableDeclaration", - "scope": 18636, - "src": "6892:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18609, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6892:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18612, - "mutability": "mutable", - "name": "data", - "nameLocation": "6929:4:65", - "nodeType": "VariableDeclaration", - "scope": 18636, - "src": "6916:17:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18611, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6916:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18614, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "6957:12:65", - "nodeType": "VariableDeclaration", - "scope": 18636, - "src": "6943:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18613, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6943:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "6882:93:65" - }, - "returnParameters": { - "id": 18618, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18617, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18636, - "src": "6994:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18616, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6994:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6993:14:65" - }, - "scope": 18720, - "src": "6853:325:65", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18674, - "nodeType": "Block", - "src": "7660:434:65", - "statements": [ - { - "condition": { - "id": 18650, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18641, - "src": "7674:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 18672, - "nodeType": "Block", - "src": "8030:58:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18668, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18643, - "src": "8052:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18669, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18645, - "src": "8064:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18667, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18719, - "src": "8044:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bytes memory,string memory) pure" - } - }, - "id": 18670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8044:33:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18671, - "nodeType": "ExpressionStatement", - "src": "8044:33:65" - } - ] - }, - "id": 18673, - "nodeType": "IfStatement", - "src": "7670:418:65", - "trueBody": { - "id": 18666, - "nodeType": "Block", - "src": "7683:341:65", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 18651, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18643, - "src": "7701:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 18652, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7712:6:65", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "7701:17:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 18653, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7722:1:65", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7701:22:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 18663, - "nodeType": "IfStatement", - "src": "7697:286:65", - "trueBody": { - "id": 18662, - "nodeType": "Block", - "src": "7725:258:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 18657, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18639, - "src": "7927:6:65", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 18656, - "name": "isContract", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18408, - "src": "7916:10:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$", - "typeString": "function (address) view returns (bool)" - } - }, - "id": 18658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7916:18:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374", - "id": 18659, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7936:31:65", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad", - "typeString": "literal_string \"Address: call to non-contract\"" - }, - "value": "Address: call to non-contract" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad", - "typeString": "literal_string \"Address: call to non-contract\"" - } - ], - "id": 18655, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "7908:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18660, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7908:60:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18661, - "nodeType": "ExpressionStatement", - "src": "7908:60:65" - } - ] - } - }, - { - "expression": { - "id": 18664, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18643, - "src": "8003:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18649, - "id": 18665, - "nodeType": "Return", - "src": "7996:17:65" - } - ] - } - } - ] - }, - "documentation": { - "id": 18637, - "nodeType": "StructuredDocumentation", - "src": "7184:277:65", - "text": " @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._" - }, - "id": 18675, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResultFromTarget", - "nameLocation": "7475:26:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18646, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18639, - "mutability": "mutable", - "name": "target", - "nameLocation": "7519:6:65", - "nodeType": "VariableDeclaration", - "scope": 18675, - "src": "7511:14:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18638, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7511:7:65", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18641, - "mutability": "mutable", - "name": "success", - "nameLocation": "7540:7:65", - "nodeType": "VariableDeclaration", - "scope": 18675, - "src": "7535:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18640, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "7535:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18643, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "7570:10:65", - "nodeType": "VariableDeclaration", - "scope": 18675, - "src": "7557:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18642, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7557:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18645, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "7604:12:65", - "nodeType": "VariableDeclaration", - "scope": 18675, - "src": "7590:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18644, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "7590:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "7501:121:65" - }, - "returnParameters": { - "id": 18649, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18648, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18675, - "src": "7646:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18647, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7646:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "7645:14:65" - }, - "scope": 18720, - "src": "7466:628:65", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18698, - "nodeType": "Block", - "src": "8475:135:65", - "statements": [ - { - "condition": { - "id": 18687, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18678, - "src": "8489:7:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 18696, - "nodeType": "Block", - "src": "8546:58:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18692, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18680, - "src": "8568:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 18693, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18682, - "src": "8580:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18691, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18719, - "src": "8560:7:65", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bytes memory,string memory) pure" - } - }, - "id": 18694, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8560:33:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18695, - "nodeType": "ExpressionStatement", - "src": "8560:33:65" - } - ] - }, - "id": 18697, - "nodeType": "IfStatement", - "src": "8485:119:65", - "trueBody": { - "id": 18690, - "nodeType": "Block", - "src": "8498:42:65", - "statements": [ - { - "expression": { - "id": 18688, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18680, - "src": "8519:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 18686, - "id": 18689, - "nodeType": "Return", - "src": "8512:17:65" - } - ] - } - } - ] - }, - "documentation": { - "id": 18676, - "nodeType": "StructuredDocumentation", - "src": "8100:210:65", - "text": " @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._" - }, - "id": 18699, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResult", - "nameLocation": "8324:16:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18678, - "mutability": "mutable", - "name": "success", - "nameLocation": "8355:7:65", - "nodeType": "VariableDeclaration", - "scope": 18699, - "src": "8350:12:65", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18677, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8350:4:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18680, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "8385:10:65", - "nodeType": "VariableDeclaration", - "scope": 18699, - "src": "8372:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18679, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8372:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18682, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "8419:12:65", - "nodeType": "VariableDeclaration", - "scope": 18699, - "src": "8405:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18681, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "8405:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "8340:97:65" - }, - "returnParameters": { - "id": 18686, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18685, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18699, - "src": "8461:12:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18684, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8461:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8460:14:65" - }, - "scope": 18720, - "src": "8315:295:65", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18718, - "nodeType": "Block", - "src": "8699:457:65", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 18706, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18701, - "src": "8775:10:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 18707, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8786:6:65", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "8775:17:65", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 18708, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8795:1:65", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8775:21:65", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 18716, - "nodeType": "Block", - "src": "9105:45:65", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 18713, - "name": "errorMessage", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18703, - "src": "9126:12:65", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 18712, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967277, 4294967277 - ], - "referencedDeclaration": 4294967277, - "src": "9119:6:65", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 18714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9119:20:65", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18715, - "nodeType": "ExpressionStatement", - "src": "9119:20:65" - } - ] - }, - "id": 18717, - "nodeType": "IfStatement", - "src": "8771:379:65", - "trueBody": { - "id": 18711, - "nodeType": "Block", - "src": "8798:301:65", - "statements": [ - { - "AST": { - "nodeType": "YulBlock", - "src": "8956:133:65", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8974:40:65", - "value": { - "arguments": [ - { - "name": "returndata", - "nodeType": "YulIdentifier", - "src": "9003:10:65" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8997:5:65" - }, - "nodeType": "YulFunctionCall", - "src": "8997:17:65" - }, - "variables": [ - { - "name": "returndata_size", - "nodeType": "YulTypedName", - "src": "8978:15:65", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9042:2:65", - "type": "", - "value": "32" - }, - { - "name": "returndata", - "nodeType": "YulIdentifier", - "src": "9046:10:65" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9038:3:65" - }, - "nodeType": "YulFunctionCall", - "src": "9038:19:65" - }, - { - "name": "returndata_size", - "nodeType": "YulIdentifier", - "src": "9059:15:65" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9031:6:65" - }, - "nodeType": "YulFunctionCall", - "src": "9031:44:65" - }, - "nodeType": "YulExpressionStatement", - "src": "9031:44:65" - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 18701, - "isOffset": false, - "isSlot": false, - "src": "9003:10:65", - "valueSize": 1 - }, - { - "declaration": 18701, - "isOffset": false, - "isSlot": false, - "src": "9046:10:65", - "valueSize": 1 - } - ], - "id": 18710, - "nodeType": "InlineAssembly", - "src": "8947:142:65" - } - ] - } - } - ] - }, - "id": 18719, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revert", - "nameLocation": "8625:7:65", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18704, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18701, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "8646:10:65", - "nodeType": "VariableDeclaration", - "scope": 18719, - "src": "8633:23:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18700, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "8633:5:65", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 18703, - "mutability": "mutable", - "name": "errorMessage", - "nameLocation": "8672:12:65", - "nodeType": "VariableDeclaration", - "scope": 18719, - "src": "8658:26:65", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 18702, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "8658:6:65", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "8632:53:65" - }, - "returnParameters": { - "id": 18705, - "nodeType": "ParameterList", - "parameters": [], - "src": "8699:0:65" - }, - "scope": 18720, - "src": "8616:540:65", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 18721, - "src": "194:8964:65", - "usedErrors": [] - } - ], - "src": "101:9058:65" - }, - "id": 65 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol", - "exportedSymbols": { - "Context": [18742] - }, - "id": 18743, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18722, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "86:23:66" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "Context", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 18723, - "nodeType": "StructuredDocumentation", - "src": "111:496:66", - "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." - }, - "fullyImplemented": true, - "id": 18742, - "linearizedBaseContracts": [18742], - "name": "Context", - "nameLocation": "626:7:66", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 18731, - "nodeType": "Block", - "src": "702:34:66", - "statements": [ - { - "expression": { - "expression": { - "id": 18728, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "719:3:66", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 18729, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "723:6:66", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "719:10:66", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 18727, - "id": 18730, - "nodeType": "Return", - "src": "712:17:66" - } - ] - }, - "id": 18732, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgSender", - "nameLocation": "649:10:66", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18724, - "nodeType": "ParameterList", - "parameters": [], - "src": "659:2:66" - }, - "returnParameters": { - "id": 18727, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18726, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18732, - "src": "693:7:66", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 18725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "693:7:66", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "692:9:66" - }, - "scope": 18742, - "src": "640:96:66", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 18740, - "nodeType": "Block", - "src": "809:32:66", - "statements": [ - { - "expression": { - "expression": { - "id": 18737, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "826:3:66", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 18738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "830:4:66", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "826:8:66", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 18736, - "id": 18739, - "nodeType": "Return", - "src": "819:15:66" - } - ] - }, - "id": 18741, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgData", - "nameLocation": "751:8:66", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18733, - "nodeType": "ParameterList", - "parameters": [], - "src": "759:2:66" - }, - "returnParameters": { - "id": 18736, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18735, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18741, - "src": "793:14:66", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 18734, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "793:5:66", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "792:16:66" - }, - "scope": 18742, - "src": "742:99:66", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 18743, - "src": "608:235:66", - "usedErrors": [] - } - ], - "src": "86:758:66" - }, - "id": 66 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "exportedSymbols": { - "IERC165": [18754] - }, - "id": 18755, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18744, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "100:23:67" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC165", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 18745, - "nodeType": "StructuredDocumentation", - "src": "125:279:67", - "text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}." - }, - "fullyImplemented": false, - "id": 18754, - "linearizedBaseContracts": [18754], - "name": "IERC165", - "nameLocation": "415:7:67", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 18746, - "nodeType": "StructuredDocumentation", - "src": "429:340:67", - "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas." - }, - "functionSelector": "01ffc9a7", - "id": 18753, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "supportsInterface", - "nameLocation": "783:17:67", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18749, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18748, - "mutability": "mutable", - "name": "interfaceId", - "nameLocation": "808:11:67", - "nodeType": "VariableDeclaration", - "scope": 18753, - "src": "801:18:67", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 18747, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "801:6:67", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - } - ], - "src": "800:20:67" - }, - "returnParameters": { - "id": 18752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18751, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18753, - "src": "844:4:67", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18750, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "844:4:67", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "843:6:67" - }, - "scope": 18754, - "src": "774:76:67", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 18755, - "src": "405:447:67", - "usedErrors": [] - } - ], - "src": "100:753:67" - }, - "id": 67 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "exportedSymbols": { - "SafeCast": [20295] - }, - "id": 20296, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 18756, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "192:23:68" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "SafeCast", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 18757, - "nodeType": "StructuredDocumentation", - "src": "217:709:68", - "text": " @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting." - }, - "fullyImplemented": true, - "id": 20295, - "linearizedBaseContracts": [20295], - "name": "SafeCast", - "nameLocation": "935:8:68", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 18781, - "nodeType": "Block", - "src": "1339:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18766, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18760, - "src": "1357:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18769, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1371:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint248_$", - "typeString": "type(uint248)" - }, - "typeName": { - "id": 18768, - "name": "uint248", - "nodeType": "ElementaryTypeName", - "src": "1371:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint248_$", - "typeString": "type(uint248)" - } - ], - "id": 18767, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "1366:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18770, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1366:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint248", - "typeString": "type(uint248)" - } - }, - "id": 18771, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1380:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "1366:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint248", - "typeString": "uint248" - } - }, - "src": "1357:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234382062697473", - "id": 18773, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1385:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593", - "typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\"" - }, - "value": "SafeCast: value doesn't fit in 248 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593", - "typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\"" - } - ], - "id": 18765, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1349:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18774, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1349:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18775, - "nodeType": "ExpressionStatement", - "src": "1349:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18778, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18760, - "src": "1452:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18777, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1444:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint248_$", - "typeString": "type(uint248)" - }, - "typeName": { - "id": 18776, - "name": "uint248", - "nodeType": "ElementaryTypeName", - "src": "1444:7:68", - "typeDescriptions": {} - } - }, - "id": 18779, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1444:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint248", - "typeString": "uint248" - } - }, - "functionReturnParameters": 18764, - "id": 18780, - "nodeType": "Return", - "src": "1437:21:68" - } - ] - }, - "documentation": { - "id": 18758, - "nodeType": "StructuredDocumentation", - "src": "950:318:68", - "text": " @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits\n _Available since v4.7._" - }, - "id": 18782, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint248", - "nameLocation": "1282:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18760, - "mutability": "mutable", - "name": "value", - "nameLocation": "1300:5:68", - "nodeType": "VariableDeclaration", - "scope": 18782, - "src": "1292:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18759, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1292:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1291:15:68" - }, - "returnParameters": { - "id": 18764, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18763, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18782, - "src": "1330:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint248", - "typeString": "uint248" - }, - "typeName": { - "id": 18762, - "name": "uint248", - "nodeType": "ElementaryTypeName", - "src": "1330:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint248", - "typeString": "uint248" - } - }, - "visibility": "internal" - } - ], - "src": "1329:9:68" - }, - "scope": 20295, - "src": "1273:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18806, - "nodeType": "Block", - "src": "1860:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18797, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18791, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18785, - "src": "1878:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18794, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1892:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint240_$", - "typeString": "type(uint240)" - }, - "typeName": { - "id": 18793, - "name": "uint240", - "nodeType": "ElementaryTypeName", - "src": "1892:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint240_$", - "typeString": "type(uint240)" - } - ], - "id": 18792, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "1887:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18795, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1887:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint240", - "typeString": "type(uint240)" - } - }, - "id": 18796, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1901:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "1887:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint240", - "typeString": "uint240" - } - }, - "src": "1878:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234302062697473", - "id": 18798, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1906:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87", - "typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\"" - }, - "value": "SafeCast: value doesn't fit in 240 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87", - "typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\"" - } - ], - "id": 18790, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "1870:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18799, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1870:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18800, - "nodeType": "ExpressionStatement", - "src": "1870:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18803, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18785, - "src": "1973:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1965:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint240_$", - "typeString": "type(uint240)" - }, - "typeName": { - "id": 18801, - "name": "uint240", - "nodeType": "ElementaryTypeName", - "src": "1965:7:68", - "typeDescriptions": {} - } - }, - "id": 18804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1965:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint240", - "typeString": "uint240" - } - }, - "functionReturnParameters": 18789, - "id": 18805, - "nodeType": "Return", - "src": "1958:21:68" - } - ] - }, - "documentation": { - "id": 18783, - "nodeType": "StructuredDocumentation", - "src": "1471:318:68", - "text": " @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits\n _Available since v4.7._" - }, - "id": 18807, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint240", - "nameLocation": "1803:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18786, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18785, - "mutability": "mutable", - "name": "value", - "nameLocation": "1821:5:68", - "nodeType": "VariableDeclaration", - "scope": 18807, - "src": "1813:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18784, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1813:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1812:15:68" - }, - "returnParameters": { - "id": 18789, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18788, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18807, - "src": "1851:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint240", - "typeString": "uint240" - }, - "typeName": { - "id": 18787, - "name": "uint240", - "nodeType": "ElementaryTypeName", - "src": "1851:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint240", - "typeString": "uint240" - } - }, - "visibility": "internal" - } - ], - "src": "1850:9:68" - }, - "scope": 20295, - "src": "1794:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18831, - "nodeType": "Block", - "src": "2381:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18816, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18810, - "src": "2399:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18819, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2413:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint232_$", - "typeString": "type(uint232)" - }, - "typeName": { - "id": 18818, - "name": "uint232", - "nodeType": "ElementaryTypeName", - "src": "2413:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint232_$", - "typeString": "type(uint232)" - } - ], - "id": 18817, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "2408:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18820, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2408:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint232", - "typeString": "type(uint232)" - } - }, - "id": 18821, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2422:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "2408:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint232", - "typeString": "uint232" - } - }, - "src": "2399:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203233322062697473", - "id": 18823, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2427:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957", - "typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\"" - }, - "value": "SafeCast: value doesn't fit in 232 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957", - "typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\"" - } - ], - "id": 18815, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2391:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2391:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18825, - "nodeType": "ExpressionStatement", - "src": "2391:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18828, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18810, - "src": "2494:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18827, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2486:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint232_$", - "typeString": "type(uint232)" - }, - "typeName": { - "id": 18826, - "name": "uint232", - "nodeType": "ElementaryTypeName", - "src": "2486:7:68", - "typeDescriptions": {} - } - }, - "id": 18829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2486:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint232", - "typeString": "uint232" - } - }, - "functionReturnParameters": 18814, - "id": 18830, - "nodeType": "Return", - "src": "2479:21:68" - } - ] - }, - "documentation": { - "id": 18808, - "nodeType": "StructuredDocumentation", - "src": "1992:318:68", - "text": " @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits\n _Available since v4.7._" - }, - "id": 18832, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint232", - "nameLocation": "2324:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18811, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18810, - "mutability": "mutable", - "name": "value", - "nameLocation": "2342:5:68", - "nodeType": "VariableDeclaration", - "scope": 18832, - "src": "2334:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18809, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2334:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2333:15:68" - }, - "returnParameters": { - "id": 18814, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18813, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18832, - "src": "2372:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint232", - "typeString": "uint232" - }, - "typeName": { - "id": 18812, - "name": "uint232", - "nodeType": "ElementaryTypeName", - "src": "2372:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint232", - "typeString": "uint232" - } - }, - "visibility": "internal" - } - ], - "src": "2371:9:68" - }, - "scope": 20295, - "src": "2315:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18856, - "nodeType": "Block", - "src": "2902:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18841, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18835, - "src": "2920:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18844, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2934:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint224_$", - "typeString": "type(uint224)" - }, - "typeName": { - "id": 18843, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "2934:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint224_$", - "typeString": "type(uint224)" - } - ], - "id": 18842, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "2929:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18845, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2929:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint224", - "typeString": "type(uint224)" - } - }, - "id": 18846, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "2943:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "2929:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "src": "2920:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473", - "id": 18848, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2948:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79", - "typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\"" - }, - "value": "SafeCast: value doesn't fit in 224 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79", - "typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\"" - } - ], - "id": 18840, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "2912:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2912:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18850, - "nodeType": "ExpressionStatement", - "src": "2912:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18853, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18835, - "src": "3015:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18852, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3007:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint224_$", - "typeString": "type(uint224)" - }, - "typeName": { - "id": 18851, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "3007:7:68", - "typeDescriptions": {} - } - }, - "id": 18854, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3007:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "functionReturnParameters": 18839, - "id": 18855, - "nodeType": "Return", - "src": "3000:21:68" - } - ] - }, - "documentation": { - "id": 18833, - "nodeType": "StructuredDocumentation", - "src": "2513:318:68", - "text": " @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits\n _Available since v4.2._" - }, - "id": 18857, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint224", - "nameLocation": "2845:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18835, - "mutability": "mutable", - "name": "value", - "nameLocation": "2863:5:68", - "nodeType": "VariableDeclaration", - "scope": 18857, - "src": "2855:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18834, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2855:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2854:15:68" - }, - "returnParameters": { - "id": 18839, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18838, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18857, - "src": "2893:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - }, - "typeName": { - "id": 18837, - "name": "uint224", - "nodeType": "ElementaryTypeName", - "src": "2893:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint224", - "typeString": "uint224" - } - }, - "visibility": "internal" - } - ], - "src": "2892:9:68" - }, - "scope": 20295, - "src": "2836:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18881, - "nodeType": "Block", - "src": "3423:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18866, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18860, - "src": "3441:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18869, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3455:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint216_$", - "typeString": "type(uint216)" - }, - "typeName": { - "id": 18868, - "name": "uint216", - "nodeType": "ElementaryTypeName", - "src": "3455:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint216_$", - "typeString": "type(uint216)" - } - ], - "id": 18867, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "3450:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18870, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3450:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint216", - "typeString": "type(uint216)" - } - }, - "id": 18871, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3464:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "3450:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint216", - "typeString": "uint216" - } - }, - "src": "3441:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203231362062697473", - "id": 18873, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3469:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\"" - }, - "value": "SafeCast: value doesn't fit in 216 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\"" - } - ], - "id": 18865, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3433:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3433:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18875, - "nodeType": "ExpressionStatement", - "src": "3433:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18878, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18860, - "src": "3536:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18877, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3528:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint216_$", - "typeString": "type(uint216)" - }, - "typeName": { - "id": 18876, - "name": "uint216", - "nodeType": "ElementaryTypeName", - "src": "3528:7:68", - "typeDescriptions": {} - } - }, - "id": 18879, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3528:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint216", - "typeString": "uint216" - } - }, - "functionReturnParameters": 18864, - "id": 18880, - "nodeType": "Return", - "src": "3521:21:68" - } - ] - }, - "documentation": { - "id": 18858, - "nodeType": "StructuredDocumentation", - "src": "3034:318:68", - "text": " @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits\n _Available since v4.7._" - }, - "id": 18882, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint216", - "nameLocation": "3366:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18861, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18860, - "mutability": "mutable", - "name": "value", - "nameLocation": "3384:5:68", - "nodeType": "VariableDeclaration", - "scope": 18882, - "src": "3376:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18859, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3376:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3375:15:68" - }, - "returnParameters": { - "id": 18864, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18863, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18882, - "src": "3414:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint216", - "typeString": "uint216" - }, - "typeName": { - "id": 18862, - "name": "uint216", - "nodeType": "ElementaryTypeName", - "src": "3414:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint216", - "typeString": "uint216" - } - }, - "visibility": "internal" - } - ], - "src": "3413:9:68" - }, - "scope": 20295, - "src": "3357:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18906, - "nodeType": "Block", - "src": "3944:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18891, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18885, - "src": "3962:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18894, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3976:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint208_$", - "typeString": "type(uint208)" - }, - "typeName": { - "id": 18893, - "name": "uint208", - "nodeType": "ElementaryTypeName", - "src": "3976:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint208_$", - "typeString": "type(uint208)" - } - ], - "id": 18892, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "3971:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18895, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3971:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint208", - "typeString": "type(uint208)" - } - }, - "id": 18896, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3985:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "3971:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint208", - "typeString": "uint208" - } - }, - "src": "3962:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230382062697473", - "id": 18898, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3990:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23", - "typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\"" - }, - "value": "SafeCast: value doesn't fit in 208 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23", - "typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\"" - } - ], - "id": 18890, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "3954:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18899, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3954:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18900, - "nodeType": "ExpressionStatement", - "src": "3954:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18903, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18885, - "src": "4057:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18902, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4049:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint208_$", - "typeString": "type(uint208)" - }, - "typeName": { - "id": 18901, - "name": "uint208", - "nodeType": "ElementaryTypeName", - "src": "4049:7:68", - "typeDescriptions": {} - } - }, - "id": 18904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4049:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint208", - "typeString": "uint208" - } - }, - "functionReturnParameters": 18889, - "id": 18905, - "nodeType": "Return", - "src": "4042:21:68" - } - ] - }, - "documentation": { - "id": 18883, - "nodeType": "StructuredDocumentation", - "src": "3555:318:68", - "text": " @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits\n _Available since v4.7._" - }, - "id": 18907, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint208", - "nameLocation": "3887:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18885, - "mutability": "mutable", - "name": "value", - "nameLocation": "3905:5:68", - "nodeType": "VariableDeclaration", - "scope": 18907, - "src": "3897:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3897:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3896:15:68" - }, - "returnParameters": { - "id": 18889, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18888, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18907, - "src": "3935:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint208", - "typeString": "uint208" - }, - "typeName": { - "id": 18887, - "name": "uint208", - "nodeType": "ElementaryTypeName", - "src": "3935:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint208", - "typeString": "uint208" - } - }, - "visibility": "internal" - } - ], - "src": "3934:9:68" - }, - "scope": 20295, - "src": "3878:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18931, - "nodeType": "Block", - "src": "4465:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18922, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18916, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18910, - "src": "4483:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18919, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4497:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint200_$", - "typeString": "type(uint200)" - }, - "typeName": { - "id": 18918, - "name": "uint200", - "nodeType": "ElementaryTypeName", - "src": "4497:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint200_$", - "typeString": "type(uint200)" - } - ], - "id": 18917, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "4492:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18920, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4492:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint200", - "typeString": "type(uint200)" - } - }, - "id": 18921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4506:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "4492:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint200", - "typeString": "uint200" - } - }, - "src": "4483:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230302062697473", - "id": 18923, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4511:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\"" - }, - "value": "SafeCast: value doesn't fit in 200 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\"" - } - ], - "id": 18915, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "4475:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4475:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18925, - "nodeType": "ExpressionStatement", - "src": "4475:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18928, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18910, - "src": "4578:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18927, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4570:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint200_$", - "typeString": "type(uint200)" - }, - "typeName": { - "id": 18926, - "name": "uint200", - "nodeType": "ElementaryTypeName", - "src": "4570:7:68", - "typeDescriptions": {} - } - }, - "id": 18929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4570:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint200", - "typeString": "uint200" - } - }, - "functionReturnParameters": 18914, - "id": 18930, - "nodeType": "Return", - "src": "4563:21:68" - } - ] - }, - "documentation": { - "id": 18908, - "nodeType": "StructuredDocumentation", - "src": "4076:318:68", - "text": " @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits\n _Available since v4.7._" - }, - "id": 18932, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint200", - "nameLocation": "4408:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18911, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18910, - "mutability": "mutable", - "name": "value", - "nameLocation": "4426:5:68", - "nodeType": "VariableDeclaration", - "scope": 18932, - "src": "4418:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18909, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4418:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4417:15:68" - }, - "returnParameters": { - "id": 18914, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18913, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18932, - "src": "4456:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint200", - "typeString": "uint200" - }, - "typeName": { - "id": 18912, - "name": "uint200", - "nodeType": "ElementaryTypeName", - "src": "4456:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint200", - "typeString": "uint200" - } - }, - "visibility": "internal" - } - ], - "src": "4455:9:68" - }, - "scope": 20295, - "src": "4399:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18956, - "nodeType": "Block", - "src": "4986:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18941, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18935, - "src": "5004:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5018:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint192_$", - "typeString": "type(uint192)" - }, - "typeName": { - "id": 18943, - "name": "uint192", - "nodeType": "ElementaryTypeName", - "src": "5018:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint192_$", - "typeString": "type(uint192)" - } - ], - "id": 18942, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5013:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18945, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5013:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint192", - "typeString": "type(uint192)" - } - }, - "id": 18946, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5027:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5013:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint192", - "typeString": "uint192" - } - }, - "src": "5004:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203139322062697473", - "id": 18948, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5032:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae", - "typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\"" - }, - "value": "SafeCast: value doesn't fit in 192 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae", - "typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\"" - } - ], - "id": 18940, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "4996:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4996:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18950, - "nodeType": "ExpressionStatement", - "src": "4996:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18953, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18935, - "src": "5099:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18952, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5091:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint192_$", - "typeString": "type(uint192)" - }, - "typeName": { - "id": 18951, - "name": "uint192", - "nodeType": "ElementaryTypeName", - "src": "5091:7:68", - "typeDescriptions": {} - } - }, - "id": 18954, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5091:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint192", - "typeString": "uint192" - } - }, - "functionReturnParameters": 18939, - "id": 18955, - "nodeType": "Return", - "src": "5084:21:68" - } - ] - }, - "documentation": { - "id": 18933, - "nodeType": "StructuredDocumentation", - "src": "4597:318:68", - "text": " @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits\n _Available since v4.7._" - }, - "id": 18957, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint192", - "nameLocation": "4929:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18936, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18935, - "mutability": "mutable", - "name": "value", - "nameLocation": "4947:5:68", - "nodeType": "VariableDeclaration", - "scope": 18957, - "src": "4939:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18934, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4939:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4938:15:68" - }, - "returnParameters": { - "id": 18939, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18938, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18957, - "src": "4977:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint192", - "typeString": "uint192" - }, - "typeName": { - "id": 18937, - "name": "uint192", - "nodeType": "ElementaryTypeName", - "src": "4977:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint192", - "typeString": "uint192" - } - }, - "visibility": "internal" - } - ], - "src": "4976:9:68" - }, - "scope": 20295, - "src": "4920:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 18981, - "nodeType": "Block", - "src": "5507:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18966, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18960, - "src": "5525:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18969, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5539:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint184_$", - "typeString": "type(uint184)" - }, - "typeName": { - "id": 18968, - "name": "uint184", - "nodeType": "ElementaryTypeName", - "src": "5539:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint184_$", - "typeString": "type(uint184)" - } - ], - "id": 18967, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5534:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18970, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5534:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint184", - "typeString": "type(uint184)" - } - }, - "id": 18971, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5548:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5534:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint184", - "typeString": "uint184" - } - }, - "src": "5525:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203138342062697473", - "id": 18973, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5553:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75", - "typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\"" - }, - "value": "SafeCast: value doesn't fit in 184 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75", - "typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\"" - } - ], - "id": 18965, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "5517:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18974, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5517:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 18975, - "nodeType": "ExpressionStatement", - "src": "5517:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 18978, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18960, - "src": "5620:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 18977, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5612:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint184_$", - "typeString": "type(uint184)" - }, - "typeName": { - "id": 18976, - "name": "uint184", - "nodeType": "ElementaryTypeName", - "src": "5612:7:68", - "typeDescriptions": {} - } - }, - "id": 18979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5612:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint184", - "typeString": "uint184" - } - }, - "functionReturnParameters": 18964, - "id": 18980, - "nodeType": "Return", - "src": "5605:21:68" - } - ] - }, - "documentation": { - "id": 18958, - "nodeType": "StructuredDocumentation", - "src": "5118:318:68", - "text": " @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits\n _Available since v4.7._" - }, - "id": 18982, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint184", - "nameLocation": "5450:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18961, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18960, - "mutability": "mutable", - "name": "value", - "nameLocation": "5468:5:68", - "nodeType": "VariableDeclaration", - "scope": 18982, - "src": "5460:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18959, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5460:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5459:15:68" - }, - "returnParameters": { - "id": 18964, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18963, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 18982, - "src": "5498:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint184", - "typeString": "uint184" - }, - "typeName": { - "id": 18962, - "name": "uint184", - "nodeType": "ElementaryTypeName", - "src": "5498:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint184", - "typeString": "uint184" - } - }, - "visibility": "internal" - } - ], - "src": "5497:9:68" - }, - "scope": 20295, - "src": "5441:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19006, - "nodeType": "Block", - "src": "6028:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 18997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 18991, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18985, - "src": "6046:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 18994, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6060:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint176_$", - "typeString": "type(uint176)" - }, - "typeName": { - "id": 18993, - "name": "uint176", - "nodeType": "ElementaryTypeName", - "src": "6060:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint176_$", - "typeString": "type(uint176)" - } - ], - "id": 18992, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6055:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 18995, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6055:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint176", - "typeString": "type(uint176)" - } - }, - "id": 18996, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6069:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6055:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint176", - "typeString": "uint176" - } - }, - "src": "6046:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203137362062697473", - "id": 18998, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6074:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30", - "typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\"" - }, - "value": "SafeCast: value doesn't fit in 176 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30", - "typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\"" - } - ], - "id": 18990, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "6038:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 18999, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6038:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19000, - "nodeType": "ExpressionStatement", - "src": "6038:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19003, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18985, - "src": "6141:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19002, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6133:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint176_$", - "typeString": "type(uint176)" - }, - "typeName": { - "id": 19001, - "name": "uint176", - "nodeType": "ElementaryTypeName", - "src": "6133:7:68", - "typeDescriptions": {} - } - }, - "id": 19004, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6133:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint176", - "typeString": "uint176" - } - }, - "functionReturnParameters": 18989, - "id": 19005, - "nodeType": "Return", - "src": "6126:21:68" - } - ] - }, - "documentation": { - "id": 18983, - "nodeType": "StructuredDocumentation", - "src": "5639:318:68", - "text": " @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits\n _Available since v4.7._" - }, - "id": 19007, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint176", - "nameLocation": "5971:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 18986, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18985, - "mutability": "mutable", - "name": "value", - "nameLocation": "5989:5:68", - "nodeType": "VariableDeclaration", - "scope": 19007, - "src": "5981:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 18984, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5981:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5980:15:68" - }, - "returnParameters": { - "id": 18989, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 18988, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19007, - "src": "6019:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint176", - "typeString": "uint176" - }, - "typeName": { - "id": 18987, - "name": "uint176", - "nodeType": "ElementaryTypeName", - "src": "6019:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint176", - "typeString": "uint176" - } - }, - "visibility": "internal" - } - ], - "src": "6018:9:68" - }, - "scope": 20295, - "src": "5962:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19031, - "nodeType": "Block", - "src": "6549:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19022, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19016, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19010, - "src": "6567:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19019, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6581:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint168_$", - "typeString": "type(uint168)" - }, - "typeName": { - "id": 19018, - "name": "uint168", - "nodeType": "ElementaryTypeName", - "src": "6581:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint168_$", - "typeString": "type(uint168)" - } - ], - "id": 19017, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "6576:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19020, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6576:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint168", - "typeString": "type(uint168)" - } - }, - "id": 19021, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6590:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "6576:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint168", - "typeString": "uint168" - } - }, - "src": "6567:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136382062697473", - "id": 19023, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6595:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\"" - }, - "value": "SafeCast: value doesn't fit in 168 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\"" - } - ], - "id": 19015, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "6559:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19024, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6559:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19025, - "nodeType": "ExpressionStatement", - "src": "6559:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19028, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19010, - "src": "6662:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6654:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint168_$", - "typeString": "type(uint168)" - }, - "typeName": { - "id": 19026, - "name": "uint168", - "nodeType": "ElementaryTypeName", - "src": "6654:7:68", - "typeDescriptions": {} - } - }, - "id": 19029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6654:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint168", - "typeString": "uint168" - } - }, - "functionReturnParameters": 19014, - "id": 19030, - "nodeType": "Return", - "src": "6647:21:68" - } - ] - }, - "documentation": { - "id": 19008, - "nodeType": "StructuredDocumentation", - "src": "6160:318:68", - "text": " @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits\n _Available since v4.7._" - }, - "id": 19032, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint168", - "nameLocation": "6492:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19011, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19010, - "mutability": "mutable", - "name": "value", - "nameLocation": "6510:5:68", - "nodeType": "VariableDeclaration", - "scope": 19032, - "src": "6502:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19009, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6502:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6501:15:68" - }, - "returnParameters": { - "id": 19014, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19013, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19032, - "src": "6540:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint168", - "typeString": "uint168" - }, - "typeName": { - "id": 19012, - "name": "uint168", - "nodeType": "ElementaryTypeName", - "src": "6540:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint168", - "typeString": "uint168" - } - }, - "visibility": "internal" - } - ], - "src": "6539:9:68" - }, - "scope": 20295, - "src": "6483:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19056, - "nodeType": "Block", - "src": "7070:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19041, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19035, - "src": "7088:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19044, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7102:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 19043, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "7102:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - } - ], - "id": 19042, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "7097:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19045, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7097:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint160", - "typeString": "type(uint160)" - } - }, - "id": 19046, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7111:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "7097:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - }, - "src": "7088:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136302062697473", - "id": 19048, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7116:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\"" - }, - "value": "SafeCast: value doesn't fit in 160 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\"" - } - ], - "id": 19040, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7080:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7080:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19050, - "nodeType": "ExpressionStatement", - "src": "7080:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19053, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19035, - "src": "7183:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19052, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7175:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 19051, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "7175:7:68", - "typeDescriptions": {} - } - }, - "id": 19054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7175:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - }, - "functionReturnParameters": 19039, - "id": 19055, - "nodeType": "Return", - "src": "7168:21:68" - } - ] - }, - "documentation": { - "id": 19033, - "nodeType": "StructuredDocumentation", - "src": "6681:318:68", - "text": " @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits\n _Available since v4.7._" - }, - "id": 19057, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint160", - "nameLocation": "7013:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19036, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19035, - "mutability": "mutable", - "name": "value", - "nameLocation": "7031:5:68", - "nodeType": "VariableDeclaration", - "scope": 19057, - "src": "7023:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19034, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7023:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7022:15:68" - }, - "returnParameters": { - "id": 19039, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19038, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19057, - "src": "7061:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - }, - "typeName": { - "id": 19037, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "7061:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - }, - "visibility": "internal" - } - ], - "src": "7060:9:68" - }, - "scope": 20295, - "src": "7004:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19081, - "nodeType": "Block", - "src": "7591:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19072, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19066, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19060, - "src": "7609:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19069, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7623:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint152_$", - "typeString": "type(uint152)" - }, - "typeName": { - "id": 19068, - "name": "uint152", - "nodeType": "ElementaryTypeName", - "src": "7623:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint152_$", - "typeString": "type(uint152)" - } - ], - "id": 19067, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "7618:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19070, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7618:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint152", - "typeString": "type(uint152)" - } - }, - "id": 19071, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7632:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "7618:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint152", - "typeString": "uint152" - } - }, - "src": "7609:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203135322062697473", - "id": 19073, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7637:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831", - "typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\"" - }, - "value": "SafeCast: value doesn't fit in 152 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831", - "typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\"" - } - ], - "id": 19065, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "7601:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19074, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7601:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19075, - "nodeType": "ExpressionStatement", - "src": "7601:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19078, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19060, - "src": "7704:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19077, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7696:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint152_$", - "typeString": "type(uint152)" - }, - "typeName": { - "id": 19076, - "name": "uint152", - "nodeType": "ElementaryTypeName", - "src": "7696:7:68", - "typeDescriptions": {} - } - }, - "id": 19079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7696:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint152", - "typeString": "uint152" - } - }, - "functionReturnParameters": 19064, - "id": 19080, - "nodeType": "Return", - "src": "7689:21:68" - } - ] - }, - "documentation": { - "id": 19058, - "nodeType": "StructuredDocumentation", - "src": "7202:318:68", - "text": " @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits\n _Available since v4.7._" - }, - "id": 19082, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint152", - "nameLocation": "7534:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19061, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19060, - "mutability": "mutable", - "name": "value", - "nameLocation": "7552:5:68", - "nodeType": "VariableDeclaration", - "scope": 19082, - "src": "7544:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19059, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7544:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7543:15:68" - }, - "returnParameters": { - "id": 19064, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19063, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19082, - "src": "7582:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint152", - "typeString": "uint152" - }, - "typeName": { - "id": 19062, - "name": "uint152", - "nodeType": "ElementaryTypeName", - "src": "7582:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint152", - "typeString": "uint152" - } - }, - "visibility": "internal" - } - ], - "src": "7581:9:68" - }, - "scope": 20295, - "src": "7525:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19106, - "nodeType": "Block", - "src": "8112:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19097, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19091, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19085, - "src": "8130:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19094, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8144:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint144_$", - "typeString": "type(uint144)" - }, - "typeName": { - "id": 19093, - "name": "uint144", - "nodeType": "ElementaryTypeName", - "src": "8144:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint144_$", - "typeString": "type(uint144)" - } - ], - "id": 19092, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "8139:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19095, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8139:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint144", - "typeString": "type(uint144)" - } - }, - "id": 19096, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8153:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "8139:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint144", - "typeString": "uint144" - } - }, - "src": "8130:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203134342062697473", - "id": 19098, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8158:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab", - "typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\"" - }, - "value": "SafeCast: value doesn't fit in 144 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab", - "typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\"" - } - ], - "id": 19090, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "8122:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8122:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19100, - "nodeType": "ExpressionStatement", - "src": "8122:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19103, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19085, - "src": "8225:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19102, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8217:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint144_$", - "typeString": "type(uint144)" - }, - "typeName": { - "id": 19101, - "name": "uint144", - "nodeType": "ElementaryTypeName", - "src": "8217:7:68", - "typeDescriptions": {} - } - }, - "id": 19104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8217:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint144", - "typeString": "uint144" - } - }, - "functionReturnParameters": 19089, - "id": 19105, - "nodeType": "Return", - "src": "8210:21:68" - } - ] - }, - "documentation": { - "id": 19083, - "nodeType": "StructuredDocumentation", - "src": "7723:318:68", - "text": " @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits\n _Available since v4.7._" - }, - "id": 19107, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint144", - "nameLocation": "8055:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19086, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19085, - "mutability": "mutable", - "name": "value", - "nameLocation": "8073:5:68", - "nodeType": "VariableDeclaration", - "scope": 19107, - "src": "8065:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19084, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8065:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8064:15:68" - }, - "returnParameters": { - "id": 19089, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19088, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19107, - "src": "8103:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint144", - "typeString": "uint144" - }, - "typeName": { - "id": 19087, - "name": "uint144", - "nodeType": "ElementaryTypeName", - "src": "8103:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint144", - "typeString": "uint144" - } - }, - "visibility": "internal" - } - ], - "src": "8102:9:68" - }, - "scope": 20295, - "src": "8046:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19131, - "nodeType": "Block", - "src": "8633:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19116, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19110, - "src": "8651:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19119, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8665:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint136_$", - "typeString": "type(uint136)" - }, - "typeName": { - "id": 19118, - "name": "uint136", - "nodeType": "ElementaryTypeName", - "src": "8665:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint136_$", - "typeString": "type(uint136)" - } - ], - "id": 19117, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "8660:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19120, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8660:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint136", - "typeString": "type(uint136)" - } - }, - "id": 19121, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "8674:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "8660:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint136", - "typeString": "uint136" - } - }, - "src": "8651:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203133362062697473", - "id": 19123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8679:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a", - "typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\"" - }, - "value": "SafeCast: value doesn't fit in 136 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a", - "typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\"" - } - ], - "id": 19115, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "8643:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8643:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19125, - "nodeType": "ExpressionStatement", - "src": "8643:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19128, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19110, - "src": "8746:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19127, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8738:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint136_$", - "typeString": "type(uint136)" - }, - "typeName": { - "id": 19126, - "name": "uint136", - "nodeType": "ElementaryTypeName", - "src": "8738:7:68", - "typeDescriptions": {} - } - }, - "id": 19129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8738:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint136", - "typeString": "uint136" - } - }, - "functionReturnParameters": 19114, - "id": 19130, - "nodeType": "Return", - "src": "8731:21:68" - } - ] - }, - "documentation": { - "id": 19108, - "nodeType": "StructuredDocumentation", - "src": "8244:318:68", - "text": " @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits\n _Available since v4.7._" - }, - "id": 19132, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint136", - "nameLocation": "8576:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19111, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19110, - "mutability": "mutable", - "name": "value", - "nameLocation": "8594:5:68", - "nodeType": "VariableDeclaration", - "scope": 19132, - "src": "8586:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19109, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8586:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8585:15:68" - }, - "returnParameters": { - "id": 19114, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19113, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19132, - "src": "8624:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint136", - "typeString": "uint136" - }, - "typeName": { - "id": 19112, - "name": "uint136", - "nodeType": "ElementaryTypeName", - "src": "8624:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint136", - "typeString": "uint136" - } - }, - "visibility": "internal" - } - ], - "src": "8623:9:68" - }, - "scope": 20295, - "src": "8567:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19156, - "nodeType": "Block", - "src": "9154:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19147, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19141, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19135, - "src": "9172:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19144, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9186:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 19143, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "9186:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - } - ], - "id": 19142, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "9181:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19145, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9181:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint128", - "typeString": "type(uint128)" - } - }, - "id": 19146, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9195:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "9181:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "src": "9172:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473", - "id": 19148, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9200:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\"" - }, - "value": "SafeCast: value doesn't fit in 128 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\"" - } - ], - "id": 19140, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "9164:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19149, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9164:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19150, - "nodeType": "ExpressionStatement", - "src": "9164:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19153, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19135, - "src": "9267:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19152, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9259:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint128_$", - "typeString": "type(uint128)" - }, - "typeName": { - "id": 19151, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "9259:7:68", - "typeDescriptions": {} - } - }, - "id": 19154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9259:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "functionReturnParameters": 19139, - "id": 19155, - "nodeType": "Return", - "src": "9252:21:68" - } - ] - }, - "documentation": { - "id": 19133, - "nodeType": "StructuredDocumentation", - "src": "8765:318:68", - "text": " @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v2.5._" - }, - "id": 19157, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint128", - "nameLocation": "9097:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19136, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19135, - "mutability": "mutable", - "name": "value", - "nameLocation": "9115:5:68", - "nodeType": "VariableDeclaration", - "scope": 19157, - "src": "9107:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19134, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9107:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9106:15:68" - }, - "returnParameters": { - "id": 19139, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19138, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19157, - "src": "9145:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - }, - "typeName": { - "id": 19137, - "name": "uint128", - "nodeType": "ElementaryTypeName", - "src": "9145:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint128", - "typeString": "uint128" - } - }, - "visibility": "internal" - } - ], - "src": "9144:9:68" - }, - "scope": 20295, - "src": "9088:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19181, - "nodeType": "Block", - "src": "9675:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19166, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19160, - "src": "9693:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19169, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9707:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint120_$", - "typeString": "type(uint120)" - }, - "typeName": { - "id": 19168, - "name": "uint120", - "nodeType": "ElementaryTypeName", - "src": "9707:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint120_$", - "typeString": "type(uint120)" - } - ], - "id": 19167, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "9702:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19170, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9702:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint120", - "typeString": "type(uint120)" - } - }, - "id": 19171, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9716:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "9702:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint120", - "typeString": "uint120" - } - }, - "src": "9693:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132302062697473", - "id": 19173, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9721:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09", - "typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\"" - }, - "value": "SafeCast: value doesn't fit in 120 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09", - "typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\"" - } - ], - "id": 19165, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "9685:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9685:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19175, - "nodeType": "ExpressionStatement", - "src": "9685:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19178, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19160, - "src": "9788:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19177, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9780:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint120_$", - "typeString": "type(uint120)" - }, - "typeName": { - "id": 19176, - "name": "uint120", - "nodeType": "ElementaryTypeName", - "src": "9780:7:68", - "typeDescriptions": {} - } - }, - "id": 19179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9780:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint120", - "typeString": "uint120" - } - }, - "functionReturnParameters": 19164, - "id": 19180, - "nodeType": "Return", - "src": "9773:21:68" - } - ] - }, - "documentation": { - "id": 19158, - "nodeType": "StructuredDocumentation", - "src": "9286:318:68", - "text": " @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits\n _Available since v4.7._" - }, - "id": 19182, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint120", - "nameLocation": "9618:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19161, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19160, - "mutability": "mutable", - "name": "value", - "nameLocation": "9636:5:68", - "nodeType": "VariableDeclaration", - "scope": 19182, - "src": "9628:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19159, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9628:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9627:15:68" - }, - "returnParameters": { - "id": 19164, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19163, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19182, - "src": "9666:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint120", - "typeString": "uint120" - }, - "typeName": { - "id": 19162, - "name": "uint120", - "nodeType": "ElementaryTypeName", - "src": "9666:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint120", - "typeString": "uint120" - } - }, - "visibility": "internal" - } - ], - "src": "9665:9:68" - }, - "scope": 20295, - "src": "9609:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19206, - "nodeType": "Block", - "src": "10196:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19191, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19185, - "src": "10214:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10228:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": { - "id": 19193, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "10228:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - } - ], - "id": 19192, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "10223:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19195, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10223:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint112", - "typeString": "type(uint112)" - } - }, - "id": 19196, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10237:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "10223:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "src": "10214:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203131322062697473", - "id": 19198, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10242:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd", - "typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\"" - }, - "value": "SafeCast: value doesn't fit in 112 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd", - "typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\"" - } - ], - "id": 19190, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "10206:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19199, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10206:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19200, - "nodeType": "ExpressionStatement", - "src": "10206:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19203, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19185, - "src": "10309:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19202, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10301:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint112_$", - "typeString": "type(uint112)" - }, - "typeName": { - "id": 19201, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "10301:7:68", - "typeDescriptions": {} - } - }, - "id": 19204, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10301:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "functionReturnParameters": 19189, - "id": 19205, - "nodeType": "Return", - "src": "10294:21:68" - } - ] - }, - "documentation": { - "id": 19183, - "nodeType": "StructuredDocumentation", - "src": "9807:318:68", - "text": " @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits\n _Available since v4.7._" - }, - "id": 19207, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint112", - "nameLocation": "10139:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19186, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19185, - "mutability": "mutable", - "name": "value", - "nameLocation": "10157:5:68", - "nodeType": "VariableDeclaration", - "scope": 19207, - "src": "10149:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19184, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10149:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10148:15:68" - }, - "returnParameters": { - "id": 19189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19188, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19207, - "src": "10187:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - }, - "typeName": { - "id": 19187, - "name": "uint112", - "nodeType": "ElementaryTypeName", - "src": "10187:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint112", - "typeString": "uint112" - } - }, - "visibility": "internal" - } - ], - "src": "10186:9:68" - }, - "scope": 20295, - "src": "10130:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19231, - "nodeType": "Block", - "src": "10717:126:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19222, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19216, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19210, - "src": "10735:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19219, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10749:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint104_$", - "typeString": "type(uint104)" - }, - "typeName": { - "id": 19218, - "name": "uint104", - "nodeType": "ElementaryTypeName", - "src": "10749:7:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint104_$", - "typeString": "type(uint104)" - } - ], - "id": 19217, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "10744:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19220, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10744:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint104", - "typeString": "type(uint104)" - } - }, - "id": 19221, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10758:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "10744:17:68", - "typeDescriptions": { - "typeIdentifier": "t_uint104", - "typeString": "uint104" - } - }, - "src": "10735:26:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203130342062697473", - "id": 19223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10763:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981", - "typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\"" - }, - "value": "SafeCast: value doesn't fit in 104 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981", - "typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\"" - } - ], - "id": 19215, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "10727:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10727:78:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19225, - "nodeType": "ExpressionStatement", - "src": "10727:78:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19228, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19210, - "src": "10830:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19227, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10822:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint104_$", - "typeString": "type(uint104)" - }, - "typeName": { - "id": 19226, - "name": "uint104", - "nodeType": "ElementaryTypeName", - "src": "10822:7:68", - "typeDescriptions": {} - } - }, - "id": 19229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10822:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint104", - "typeString": "uint104" - } - }, - "functionReturnParameters": 19214, - "id": 19230, - "nodeType": "Return", - "src": "10815:21:68" - } - ] - }, - "documentation": { - "id": 19208, - "nodeType": "StructuredDocumentation", - "src": "10328:318:68", - "text": " @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits\n _Available since v4.7._" - }, - "id": 19232, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint104", - "nameLocation": "10660:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19211, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19210, - "mutability": "mutable", - "name": "value", - "nameLocation": "10678:5:68", - "nodeType": "VariableDeclaration", - "scope": 19232, - "src": "10670:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19209, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10670:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10669:15:68" - }, - "returnParameters": { - "id": 19214, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19213, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19232, - "src": "10708:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint104", - "typeString": "uint104" - }, - "typeName": { - "id": 19212, - "name": "uint104", - "nodeType": "ElementaryTypeName", - "src": "10708:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint104", - "typeString": "uint104" - } - }, - "visibility": "internal" - } - ], - "src": "10707:9:68" - }, - "scope": 20295, - "src": "10651:192:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19256, - "nodeType": "Block", - "src": "11232:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19241, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19235, - "src": "11250:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19244, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11264:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 19243, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "11264:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - } - ], - "id": 19242, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "11259:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19245, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11259:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint96", - "typeString": "type(uint96)" - } - }, - "id": 19246, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11272:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "11259:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "src": "11250:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473", - "id": 19248, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11277:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\"" - }, - "value": "SafeCast: value doesn't fit in 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\"" - } - ], - "id": 19240, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "11242:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11242:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19250, - "nodeType": "ExpressionStatement", - "src": "11242:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19253, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19235, - "src": "11342:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19252, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11335:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint96_$", - "typeString": "type(uint96)" - }, - "typeName": { - "id": 19251, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "11335:6:68", - "typeDescriptions": {} - } - }, - "id": 19254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11335:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "functionReturnParameters": 19239, - "id": 19255, - "nodeType": "Return", - "src": "11328:20:68" - } - ] - }, - "documentation": { - "id": 19233, - "nodeType": "StructuredDocumentation", - "src": "10849:314:68", - "text": " @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits\n _Available since v4.2._" - }, - "id": 19257, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint96", - "nameLocation": "11177:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19236, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19235, - "mutability": "mutable", - "name": "value", - "nameLocation": "11194:5:68", - "nodeType": "VariableDeclaration", - "scope": 19257, - "src": "11186:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19234, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11186:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11185:15:68" - }, - "returnParameters": { - "id": 19239, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19238, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19257, - "src": "11224:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - }, - "typeName": { - "id": 19237, - "name": "uint96", - "nodeType": "ElementaryTypeName", - "src": "11224:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint96", - "typeString": "uint96" - } - }, - "visibility": "internal" - } - ], - "src": "11223:8:68" - }, - "scope": 20295, - "src": "11168:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19281, - "nodeType": "Block", - "src": "11744:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19272, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19266, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19260, - "src": "11762:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19269, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11776:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint88_$", - "typeString": "type(uint88)" - }, - "typeName": { - "id": 19268, - "name": "uint88", - "nodeType": "ElementaryTypeName", - "src": "11776:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint88_$", - "typeString": "type(uint88)" - } - ], - "id": 19267, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "11771:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19270, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11771:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint88", - "typeString": "type(uint88)" - } - }, - "id": 19271, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11784:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "11771:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint88", - "typeString": "uint88" - } - }, - "src": "11762:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038382062697473", - "id": 19273, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11789:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\"" - }, - "value": "SafeCast: value doesn't fit in 88 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\"" - } - ], - "id": 19265, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "11754:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11754:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19275, - "nodeType": "ExpressionStatement", - "src": "11754:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19278, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19260, - "src": "11854:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19277, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11847:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint88_$", - "typeString": "type(uint88)" - }, - "typeName": { - "id": 19276, - "name": "uint88", - "nodeType": "ElementaryTypeName", - "src": "11847:6:68", - "typeDescriptions": {} - } - }, - "id": 19279, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11847:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint88", - "typeString": "uint88" - } - }, - "functionReturnParameters": 19264, - "id": 19280, - "nodeType": "Return", - "src": "11840:20:68" - } - ] - }, - "documentation": { - "id": 19258, - "nodeType": "StructuredDocumentation", - "src": "11361:314:68", - "text": " @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits\n _Available since v4.7._" - }, - "id": 19282, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint88", - "nameLocation": "11689:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19261, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19260, - "mutability": "mutable", - "name": "value", - "nameLocation": "11706:5:68", - "nodeType": "VariableDeclaration", - "scope": 19282, - "src": "11698:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19259, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11698:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11697:15:68" - }, - "returnParameters": { - "id": 19264, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19263, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19282, - "src": "11736:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint88", - "typeString": "uint88" - }, - "typeName": { - "id": 19262, - "name": "uint88", - "nodeType": "ElementaryTypeName", - "src": "11736:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint88", - "typeString": "uint88" - } - }, - "visibility": "internal" - } - ], - "src": "11735:8:68" - }, - "scope": 20295, - "src": "11680:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19306, - "nodeType": "Block", - "src": "12256:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19297, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19291, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19285, - "src": "12274:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19294, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12288:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint80_$", - "typeString": "type(uint80)" - }, - "typeName": { - "id": 19293, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "12288:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint80_$", - "typeString": "type(uint80)" - } - ], - "id": 19292, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "12283:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19295, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12283:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint80", - "typeString": "type(uint80)" - } - }, - "id": 19296, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12296:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "12283:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "src": "12274:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038302062697473", - "id": 19298, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12301:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\"" - }, - "value": "SafeCast: value doesn't fit in 80 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\"" - } - ], - "id": 19290, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "12266:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19299, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12266:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19300, - "nodeType": "ExpressionStatement", - "src": "12266:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19303, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19285, - "src": "12366:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19302, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12359:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint80_$", - "typeString": "type(uint80)" - }, - "typeName": { - "id": 19301, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "12359:6:68", - "typeDescriptions": {} - } - }, - "id": 19304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12359:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "functionReturnParameters": 19289, - "id": 19305, - "nodeType": "Return", - "src": "12352:20:68" - } - ] - }, - "documentation": { - "id": 19283, - "nodeType": "StructuredDocumentation", - "src": "11873:314:68", - "text": " @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits\n _Available since v4.7._" - }, - "id": 19307, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint80", - "nameLocation": "12201:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19286, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19285, - "mutability": "mutable", - "name": "value", - "nameLocation": "12218:5:68", - "nodeType": "VariableDeclaration", - "scope": 19307, - "src": "12210:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19284, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12210:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12209:15:68" - }, - "returnParameters": { - "id": 19289, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19288, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19307, - "src": "12248:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - }, - "typeName": { - "id": 19287, - "name": "uint80", - "nodeType": "ElementaryTypeName", - "src": "12248:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint80", - "typeString": "uint80" - } - }, - "visibility": "internal" - } - ], - "src": "12247:8:68" - }, - "scope": 20295, - "src": "12192:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19331, - "nodeType": "Block", - "src": "12768:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19316, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19310, - "src": "12786:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19319, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12800:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint72_$", - "typeString": "type(uint72)" - }, - "typeName": { - "id": 19318, - "name": "uint72", - "nodeType": "ElementaryTypeName", - "src": "12800:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint72_$", - "typeString": "type(uint72)" - } - ], - "id": 19317, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "12795:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19320, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12795:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint72", - "typeString": "type(uint72)" - } - }, - "id": 19321, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12808:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "12795:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint72", - "typeString": "uint72" - } - }, - "src": "12786:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2037322062697473", - "id": 19323, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12813:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606", - "typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\"" - }, - "value": "SafeCast: value doesn't fit in 72 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606", - "typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\"" - } - ], - "id": 19315, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "12778:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12778:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19325, - "nodeType": "ExpressionStatement", - "src": "12778:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19328, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19310, - "src": "12878:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19327, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12871:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint72_$", - "typeString": "type(uint72)" - }, - "typeName": { - "id": 19326, - "name": "uint72", - "nodeType": "ElementaryTypeName", - "src": "12871:6:68", - "typeDescriptions": {} - } - }, - "id": 19329, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12871:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint72", - "typeString": "uint72" - } - }, - "functionReturnParameters": 19314, - "id": 19330, - "nodeType": "Return", - "src": "12864:20:68" - } - ] - }, - "documentation": { - "id": 19308, - "nodeType": "StructuredDocumentation", - "src": "12385:314:68", - "text": " @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits\n _Available since v4.7._" - }, - "id": 19332, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint72", - "nameLocation": "12713:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19310, - "mutability": "mutable", - "name": "value", - "nameLocation": "12730:5:68", - "nodeType": "VariableDeclaration", - "scope": 19332, - "src": "12722:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19309, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12722:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12721:15:68" - }, - "returnParameters": { - "id": 19314, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19313, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19332, - "src": "12760:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint72", - "typeString": "uint72" - }, - "typeName": { - "id": 19312, - "name": "uint72", - "nodeType": "ElementaryTypeName", - "src": "12760:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint72", - "typeString": "uint72" - } - }, - "visibility": "internal" - } - ], - "src": "12759:8:68" - }, - "scope": 20295, - "src": "12704:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19356, - "nodeType": "Block", - "src": "13280:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19347, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19341, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19335, - "src": "13298:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19344, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13312:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 19343, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13312:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 19342, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "13307:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19345, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13307:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 19346, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13320:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "13307:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "src": "13298:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473", - "id": 19348, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13325:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939", - "typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\"" - }, - "value": "SafeCast: value doesn't fit in 64 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939", - "typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\"" - } - ], - "id": 19340, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "13290:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19349, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13290:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19350, - "nodeType": "ExpressionStatement", - "src": "13290:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19353, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19335, - "src": "13390:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19352, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13383:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 19351, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13383:6:68", - "typeDescriptions": {} - } - }, - "id": 19354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13383:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 19339, - "id": 19355, - "nodeType": "Return", - "src": "13376:20:68" - } - ] - }, - "documentation": { - "id": 19333, - "nodeType": "StructuredDocumentation", - "src": "12897:314:68", - "text": " @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v2.5._" - }, - "id": 19357, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint64", - "nameLocation": "13225:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19336, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19335, - "mutability": "mutable", - "name": "value", - "nameLocation": "13242:5:68", - "nodeType": "VariableDeclaration", - "scope": 19357, - "src": "13234:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19334, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13234:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13233:15:68" - }, - "returnParameters": { - "id": 19339, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19338, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19357, - "src": "13272:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 19337, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "13272:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "13271:8:68" - }, - "scope": 20295, - "src": "13216:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19381, - "nodeType": "Block", - "src": "13792:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19366, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19360, - "src": "13810:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19369, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13824:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint56_$", - "typeString": "type(uint56)" - }, - "typeName": { - "id": 19368, - "name": "uint56", - "nodeType": "ElementaryTypeName", - "src": "13824:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint56_$", - "typeString": "type(uint56)" - } - ], - "id": 19367, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "13819:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19370, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13819:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint56", - "typeString": "type(uint56)" - } - }, - "id": 19371, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13832:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "13819:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint56", - "typeString": "uint56" - } - }, - "src": "13810:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2035362062697473", - "id": 19373, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "13837:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5", - "typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\"" - }, - "value": "SafeCast: value doesn't fit in 56 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5", - "typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\"" - } - ], - "id": 19365, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "13802:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13802:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19375, - "nodeType": "ExpressionStatement", - "src": "13802:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19378, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19360, - "src": "13902:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19377, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "13895:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint56_$", - "typeString": "type(uint56)" - }, - "typeName": { - "id": 19376, - "name": "uint56", - "nodeType": "ElementaryTypeName", - "src": "13895:6:68", - "typeDescriptions": {} - } - }, - "id": 19379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13895:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint56", - "typeString": "uint56" - } - }, - "functionReturnParameters": 19364, - "id": 19380, - "nodeType": "Return", - "src": "13888:20:68" - } - ] - }, - "documentation": { - "id": 19358, - "nodeType": "StructuredDocumentation", - "src": "13409:314:68", - "text": " @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits\n _Available since v4.7._" - }, - "id": 19382, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint56", - "nameLocation": "13737:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19361, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19360, - "mutability": "mutable", - "name": "value", - "nameLocation": "13754:5:68", - "nodeType": "VariableDeclaration", - "scope": 19382, - "src": "13746:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19359, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13746:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13745:15:68" - }, - "returnParameters": { - "id": 19364, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19363, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19382, - "src": "13784:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint56", - "typeString": "uint56" - }, - "typeName": { - "id": 19362, - "name": "uint56", - "nodeType": "ElementaryTypeName", - "src": "13784:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint56", - "typeString": "uint56" - } - }, - "visibility": "internal" - } - ], - "src": "13783:8:68" - }, - "scope": 20295, - "src": "13728:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19406, - "nodeType": "Block", - "src": "14304:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19397, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19391, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19385, - "src": "14322:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19394, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14336:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint48_$", - "typeString": "type(uint48)" - }, - "typeName": { - "id": 19393, - "name": "uint48", - "nodeType": "ElementaryTypeName", - "src": "14336:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint48_$", - "typeString": "type(uint48)" - } - ], - "id": 19392, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "14331:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19395, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14331:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint48", - "typeString": "type(uint48)" - } - }, - "id": 19396, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "14344:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "14331:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint48", - "typeString": "uint48" - } - }, - "src": "14322:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034382062697473", - "id": 19398, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14349:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495", - "typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\"" - }, - "value": "SafeCast: value doesn't fit in 48 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495", - "typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\"" - } - ], - "id": 19390, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "14314:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14314:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19400, - "nodeType": "ExpressionStatement", - "src": "14314:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19403, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19385, - "src": "14414:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19402, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14407:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint48_$", - "typeString": "type(uint48)" - }, - "typeName": { - "id": 19401, - "name": "uint48", - "nodeType": "ElementaryTypeName", - "src": "14407:6:68", - "typeDescriptions": {} - } - }, - "id": 19404, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14407:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint48", - "typeString": "uint48" - } - }, - "functionReturnParameters": 19389, - "id": 19405, - "nodeType": "Return", - "src": "14400:20:68" - } - ] - }, - "documentation": { - "id": 19383, - "nodeType": "StructuredDocumentation", - "src": "13921:314:68", - "text": " @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits\n _Available since v4.7._" - }, - "id": 19407, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint48", - "nameLocation": "14249:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19386, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19385, - "mutability": "mutable", - "name": "value", - "nameLocation": "14266:5:68", - "nodeType": "VariableDeclaration", - "scope": 19407, - "src": "14258:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14258:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14257:15:68" - }, - "returnParameters": { - "id": 19389, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19388, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19407, - "src": "14296:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint48", - "typeString": "uint48" - }, - "typeName": { - "id": 19387, - "name": "uint48", - "nodeType": "ElementaryTypeName", - "src": "14296:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint48", - "typeString": "uint48" - } - }, - "visibility": "internal" - } - ], - "src": "14295:8:68" - }, - "scope": 20295, - "src": "14240:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19431, - "nodeType": "Block", - "src": "14816:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19416, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19410, - "src": "14834:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14848:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint40_$", - "typeString": "type(uint40)" - }, - "typeName": { - "id": 19418, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "14848:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint40_$", - "typeString": "type(uint40)" - } - ], - "id": 19417, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "14843:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14843:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint40", - "typeString": "type(uint40)" - } - }, - "id": 19421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "14856:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "14843:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "src": "14834:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034302062697473", - "id": 19423, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14861:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37", - "typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\"" - }, - "value": "SafeCast: value doesn't fit in 40 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37", - "typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\"" - } - ], - "id": 19415, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "14826:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19424, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14826:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19425, - "nodeType": "ExpressionStatement", - "src": "14826:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19428, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19410, - "src": "14926:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19427, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "14919:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint40_$", - "typeString": "type(uint40)" - }, - "typeName": { - "id": 19426, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "14919:6:68", - "typeDescriptions": {} - } - }, - "id": 19429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14919:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "functionReturnParameters": 19414, - "id": 19430, - "nodeType": "Return", - "src": "14912:20:68" - } - ] - }, - "documentation": { - "id": 19408, - "nodeType": "StructuredDocumentation", - "src": "14433:314:68", - "text": " @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits\n _Available since v4.7._" - }, - "id": 19432, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint40", - "nameLocation": "14761:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19411, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19410, - "mutability": "mutable", - "name": "value", - "nameLocation": "14778:5:68", - "nodeType": "VariableDeclaration", - "scope": 19432, - "src": "14770:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19409, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "14770:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "14769:15:68" - }, - "returnParameters": { - "id": 19414, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19413, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19432, - "src": "14808:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - }, - "typeName": { - "id": 19412, - "name": "uint40", - "nodeType": "ElementaryTypeName", - "src": "14808:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint40", - "typeString": "uint40" - } - }, - "visibility": "internal" - } - ], - "src": "14807:8:68" - }, - "scope": 20295, - "src": "14752:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19456, - "nodeType": "Block", - "src": "15328:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19441, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19435, - "src": "15346:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19444, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15360:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 19443, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15360:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - } - ], - "id": 19442, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "15355:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19445, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15355:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint32", - "typeString": "type(uint32)" - } - }, - "id": 19446, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "15368:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "15355:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "15346:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473", - "id": 19448, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15373:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\"" - }, - "value": "SafeCast: value doesn't fit in 32 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\"" - } - ], - "id": 19440, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "15338:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15338:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19450, - "nodeType": "ExpressionStatement", - "src": "15338:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19453, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19435, - "src": "15438:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19452, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15431:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 19451, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15431:6:68", - "typeDescriptions": {} - } - }, - "id": 19454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15431:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 19439, - "id": 19455, - "nodeType": "Return", - "src": "15424:20:68" - } - ] - }, - "documentation": { - "id": 19433, - "nodeType": "StructuredDocumentation", - "src": "14945:314:68", - "text": " @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v2.5._" - }, - "id": 19457, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint32", - "nameLocation": "15273:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19436, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19435, - "mutability": "mutable", - "name": "value", - "nameLocation": "15290:5:68", - "nodeType": "VariableDeclaration", - "scope": 19457, - "src": "15282:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19434, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15282:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15281:15:68" - }, - "returnParameters": { - "id": 19439, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19438, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19457, - "src": "15320:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 19437, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "15320:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "15319:8:68" - }, - "scope": 20295, - "src": "15264:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19481, - "nodeType": "Block", - "src": "15840:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19472, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19466, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19460, - "src": "15858:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19469, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15872:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint24_$", - "typeString": "type(uint24)" - }, - "typeName": { - "id": 19468, - "name": "uint24", - "nodeType": "ElementaryTypeName", - "src": "15872:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint24_$", - "typeString": "type(uint24)" - } - ], - "id": 19467, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "15867:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19470, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15867:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint24", - "typeString": "type(uint24)" - } - }, - "id": 19471, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "15880:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "15867:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint24", - "typeString": "uint24" - } - }, - "src": "15858:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2032342062697473", - "id": 19473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "15885:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55", - "typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\"" - }, - "value": "SafeCast: value doesn't fit in 24 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55", - "typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\"" - } - ], - "id": 19465, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "15850:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19474, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15850:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19475, - "nodeType": "ExpressionStatement", - "src": "15850:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19478, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19460, - "src": "15950:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19477, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "15943:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint24_$", - "typeString": "type(uint24)" - }, - "typeName": { - "id": 19476, - "name": "uint24", - "nodeType": "ElementaryTypeName", - "src": "15943:6:68", - "typeDescriptions": {} - } - }, - "id": 19479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15943:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint24", - "typeString": "uint24" - } - }, - "functionReturnParameters": 19464, - "id": 19480, - "nodeType": "Return", - "src": "15936:20:68" - } - ] - }, - "documentation": { - "id": 19458, - "nodeType": "StructuredDocumentation", - "src": "15457:314:68", - "text": " @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits\n _Available since v4.7._" - }, - "id": 19482, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint24", - "nameLocation": "15785:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19461, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19460, - "mutability": "mutable", - "name": "value", - "nameLocation": "15802:5:68", - "nodeType": "VariableDeclaration", - "scope": 19482, - "src": "15794:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19459, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "15794:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "15793:15:68" - }, - "returnParameters": { - "id": 19464, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19463, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19482, - "src": "15832:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint24", - "typeString": "uint24" - }, - "typeName": { - "id": 19462, - "name": "uint24", - "nodeType": "ElementaryTypeName", - "src": "15832:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint24", - "typeString": "uint24" - } - }, - "visibility": "internal" - } - ], - "src": "15831:8:68" - }, - "scope": 20295, - "src": "15776:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19506, - "nodeType": "Block", - "src": "16352:123:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19491, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19485, - "src": "16370:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19494, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "16384:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - }, - "typeName": { - "id": 19493, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "16384:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - } - ], - "id": 19492, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "16379:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19495, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16379:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint16", - "typeString": "type(uint16)" - } - }, - "id": 19496, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "16392:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "16379:16:68", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "16370:25:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473", - "id": 19498, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16397:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033", - "typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\"" - }, - "value": "SafeCast: value doesn't fit in 16 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033", - "typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\"" - } - ], - "id": 19490, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "16362:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16362:76:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19500, - "nodeType": "ExpressionStatement", - "src": "16362:76:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19503, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19485, - "src": "16462:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19502, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "16455:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint16_$", - "typeString": "type(uint16)" - }, - "typeName": { - "id": 19501, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "16455:6:68", - "typeDescriptions": {} - } - }, - "id": 19504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16455:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "functionReturnParameters": 19489, - "id": 19505, - "nodeType": "Return", - "src": "16448:20:68" - } - ] - }, - "documentation": { - "id": 19483, - "nodeType": "StructuredDocumentation", - "src": "15969:314:68", - "text": " @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v2.5._" - }, - "id": 19507, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint16", - "nameLocation": "16297:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19486, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19485, - "mutability": "mutable", - "name": "value", - "nameLocation": "16314:5:68", - "nodeType": "VariableDeclaration", - "scope": 19507, - "src": "16306:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19484, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16306:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16305:15:68" - }, - "returnParameters": { - "id": 19489, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19488, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19507, - "src": "16344:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 19487, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "16344:6:68", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "16343:8:68" - }, - "scope": 20295, - "src": "16288:187:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19531, - "nodeType": "Block", - "src": "16858:120:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 19522, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19516, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19510, - "src": "16876:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 19519, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "16890:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 19518, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "16890:5:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - } - ], - "id": 19517, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "16885:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 19520, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16885:11:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint8", - "typeString": "type(uint8)" - } - }, - "id": 19521, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "16897:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "16885:15:68", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "16876:24:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473", - "id": 19523, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "16902:39:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\"" - }, - "value": "SafeCast: value doesn't fit in 8 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\"" - } - ], - "id": 19515, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "16868:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16868:74:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19525, - "nodeType": "ExpressionStatement", - "src": "16868:74:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19528, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19510, - "src": "16965:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 19527, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "16959:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 19526, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "16959:5:68", - "typeDescriptions": {} - } - }, - "id": 19529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "16959:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 19514, - "id": 19530, - "nodeType": "Return", - "src": "16952:19:68" - } - ] - }, - "documentation": { - "id": 19508, - "nodeType": "StructuredDocumentation", - "src": "16481:310:68", - "text": " @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits\n _Available since v2.5._" - }, - "id": 19532, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint8", - "nameLocation": "16805:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19511, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19510, - "mutability": "mutable", - "name": "value", - "nameLocation": "16821:5:68", - "nodeType": "VariableDeclaration", - "scope": 19532, - "src": "16813:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19509, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16813:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16812:15:68" - }, - "returnParameters": { - "id": 19514, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19513, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19532, - "src": "16851:5:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 19512, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "16851:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "16850:7:68" - }, - "scope": 20295, - "src": "16796:182:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19552, - "nodeType": "Block", - "src": "17252:103:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19541, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19535, - "src": "17270:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "hexValue": "30", - "id": 19542, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17279:1:68", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "17270:10:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c7565206d75737420626520706f736974697665", - "id": 19544, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17282:34:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807", - "typeString": "literal_string \"SafeCast: value must be positive\"" - }, - "value": "SafeCast: value must be positive" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807", - "typeString": "literal_string \"SafeCast: value must be positive\"" - } - ], - "id": 19540, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17262:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17262:55:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19546, - "nodeType": "ExpressionStatement", - "src": "17262:55:68" - }, - { - "expression": { - "arguments": [ - { - "id": 19549, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19535, - "src": "17342:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19548, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17334:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 19547, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17334:7:68", - "typeDescriptions": {} - } - }, - "id": 19550, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17334:14:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 19539, - "id": 19551, - "nodeType": "Return", - "src": "17327:21:68" - } - ] - }, - "documentation": { - "id": 19533, - "nodeType": "StructuredDocumentation", - "src": "16984:198:68", - "text": " @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0.\n _Available since v3.0._" - }, - "id": 19553, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toUint256", - "nameLocation": "17196:9:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19536, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19535, - "mutability": "mutable", - "name": "value", - "nameLocation": "17213:5:68", - "nodeType": "VariableDeclaration", - "scope": 19553, - "src": "17206:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19534, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "17206:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "17205:14:68" - }, - "returnParameters": { - "id": 19539, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19538, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 19553, - "src": "17243:7:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 19537, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17243:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17242:9:68" - }, - "scope": 20295, - "src": "17187:168:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19575, - "nodeType": "Block", - "src": "17790:124:68", - "statements": [ - { - "expression": { - "id": 19566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19561, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19559, - "src": "17800:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19564, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19556, - "src": "17820:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19563, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17813:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int248_$", - "typeString": "type(int248)" - }, - "typeName": { - "id": 19562, - "name": "int248", - "nodeType": "ElementaryTypeName", - "src": "17813:6:68", - "typeDescriptions": {} - } - }, - "id": 19565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17813:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - } - }, - "src": "17800:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - } - }, - "id": 19567, - "nodeType": "ExpressionStatement", - "src": "17800:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19569, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19559, - "src": "17844:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19570, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19556, - "src": "17858:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "17844:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234382062697473", - "id": 19572, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "17865:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593", - "typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\"" - }, - "value": "SafeCast: value doesn't fit in 248 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_6ac19bba4607c9b45ff35f54fbc4ca64c29c7457109a16fa180ea77cdbda8593", - "typeString": "literal_string \"SafeCast: value doesn't fit in 248 bits\"" - } - ], - "id": 19568, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "17836:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19573, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17836:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19574, - "nodeType": "ExpressionStatement", - "src": "17836:71:68" - } - ] - }, - "documentation": { - "id": 19554, - "nodeType": "StructuredDocumentation", - "src": "17361:350:68", - "text": " @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits\n _Available since v4.7._" - }, - "id": 19576, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt248", - "nameLocation": "17725:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19557, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19556, - "mutability": "mutable", - "name": "value", - "nameLocation": "17741:5:68", - "nodeType": "VariableDeclaration", - "scope": 19576, - "src": "17734:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19555, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "17734:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "17733:14:68" - }, - "returnParameters": { - "id": 19560, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19559, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "17778:10:68", - "nodeType": "VariableDeclaration", - "scope": 19576, - "src": "17771:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - }, - "typeName": { - "id": 19558, - "name": "int248", - "nodeType": "ElementaryTypeName", - "src": "17771:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int248", - "typeString": "int248" - } - }, - "visibility": "internal" - } - ], - "src": "17770:19:68" - }, - "scope": 20295, - "src": "17716:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19598, - "nodeType": "Block", - "src": "18349:124:68", - "statements": [ - { - "expression": { - "id": 19589, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19584, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19582, - "src": "18359:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19587, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19579, - "src": "18379:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18372:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int240_$", - "typeString": "type(int240)" - }, - "typeName": { - "id": 19585, - "name": "int240", - "nodeType": "ElementaryTypeName", - "src": "18372:6:68", - "typeDescriptions": {} - } - }, - "id": 19588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18372:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - } - }, - "src": "18359:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - } - }, - "id": 19590, - "nodeType": "ExpressionStatement", - "src": "18359:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19594, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19592, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19582, - "src": "18403:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19593, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19579, - "src": "18417:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "18403:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203234302062697473", - "id": 19595, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18424:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87", - "typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\"" - }, - "value": "SafeCast: value doesn't fit in 240 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_375fa0f6cb9fb5845d214c630920cedf4424913ed6dc32c297d430efa3d61a87", - "typeString": "literal_string \"SafeCast: value doesn't fit in 240 bits\"" - } - ], - "id": 19591, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "18395:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18395:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19597, - "nodeType": "ExpressionStatement", - "src": "18395:71:68" - } - ] - }, - "documentation": { - "id": 19577, - "nodeType": "StructuredDocumentation", - "src": "17920:350:68", - "text": " @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits\n _Available since v4.7._" - }, - "id": 19599, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt240", - "nameLocation": "18284:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19580, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19579, - "mutability": "mutable", - "name": "value", - "nameLocation": "18300:5:68", - "nodeType": "VariableDeclaration", - "scope": 19599, - "src": "18293:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19578, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "18293:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "18292:14:68" - }, - "returnParameters": { - "id": 19583, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19582, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "18337:10:68", - "nodeType": "VariableDeclaration", - "scope": 19599, - "src": "18330:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - }, - "typeName": { - "id": 19581, - "name": "int240", - "nodeType": "ElementaryTypeName", - "src": "18330:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int240", - "typeString": "int240" - } - }, - "visibility": "internal" - } - ], - "src": "18329:19:68" - }, - "scope": 20295, - "src": "18275:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19621, - "nodeType": "Block", - "src": "18908:124:68", - "statements": [ - { - "expression": { - "id": 19612, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19607, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19605, - "src": "18918:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19610, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19602, - "src": "18938:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19609, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "18931:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int232_$", - "typeString": "type(int232)" - }, - "typeName": { - "id": 19608, - "name": "int232", - "nodeType": "ElementaryTypeName", - "src": "18931:6:68", - "typeDescriptions": {} - } - }, - "id": 19611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18931:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - } - }, - "src": "18918:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - } - }, - "id": 19613, - "nodeType": "ExpressionStatement", - "src": "18918:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19615, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19605, - "src": "18962:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19616, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19602, - "src": "18976:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "18962:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203233322062697473", - "id": 19618, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "18983:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957", - "typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\"" - }, - "value": "SafeCast: value doesn't fit in 232 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5797fb2c4589bd6a92752ce0eacaac67341e37ab28c96c2284ab897e7ac77957", - "typeString": "literal_string \"SafeCast: value doesn't fit in 232 bits\"" - } - ], - "id": 19614, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "18954:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18954:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19620, - "nodeType": "ExpressionStatement", - "src": "18954:71:68" - } - ] - }, - "documentation": { - "id": 19600, - "nodeType": "StructuredDocumentation", - "src": "18479:350:68", - "text": " @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits\n _Available since v4.7._" - }, - "id": 19622, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt232", - "nameLocation": "18843:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19603, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19602, - "mutability": "mutable", - "name": "value", - "nameLocation": "18859:5:68", - "nodeType": "VariableDeclaration", - "scope": 19622, - "src": "18852:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19601, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "18852:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "18851:14:68" - }, - "returnParameters": { - "id": 19606, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19605, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "18896:10:68", - "nodeType": "VariableDeclaration", - "scope": 19622, - "src": "18889:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - }, - "typeName": { - "id": 19604, - "name": "int232", - "nodeType": "ElementaryTypeName", - "src": "18889:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int232", - "typeString": "int232" - } - }, - "visibility": "internal" - } - ], - "src": "18888:19:68" - }, - "scope": 20295, - "src": "18834:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19644, - "nodeType": "Block", - "src": "19467:124:68", - "statements": [ - { - "expression": { - "id": 19635, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19630, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19628, - "src": "19477:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19633, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19625, - "src": "19497:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "19490:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int224_$", - "typeString": "type(int224)" - }, - "typeName": { - "id": 19631, - "name": "int224", - "nodeType": "ElementaryTypeName", - "src": "19490:6:68", - "typeDescriptions": {} - } - }, - "id": 19634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19490:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - } - }, - "src": "19477:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - } - }, - "id": 19636, - "nodeType": "ExpressionStatement", - "src": "19477:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19638, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19628, - "src": "19521:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19639, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19625, - "src": "19535:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "19521:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473", - "id": 19641, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "19542:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79", - "typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\"" - }, - "value": "SafeCast: value doesn't fit in 224 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79", - "typeString": "literal_string \"SafeCast: value doesn't fit in 224 bits\"" - } - ], - "id": 19637, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "19513:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "19513:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19643, - "nodeType": "ExpressionStatement", - "src": "19513:71:68" - } - ] - }, - "documentation": { - "id": 19623, - "nodeType": "StructuredDocumentation", - "src": "19038:350:68", - "text": " @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits\n _Available since v4.7._" - }, - "id": 19645, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt224", - "nameLocation": "19402:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19626, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19625, - "mutability": "mutable", - "name": "value", - "nameLocation": "19418:5:68", - "nodeType": "VariableDeclaration", - "scope": 19645, - "src": "19411:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19624, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "19411:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "19410:14:68" - }, - "returnParameters": { - "id": 19629, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19628, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "19455:10:68", - "nodeType": "VariableDeclaration", - "scope": 19645, - "src": "19448:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - }, - "typeName": { - "id": 19627, - "name": "int224", - "nodeType": "ElementaryTypeName", - "src": "19448:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int224", - "typeString": "int224" - } - }, - "visibility": "internal" - } - ], - "src": "19447:19:68" - }, - "scope": 20295, - "src": "19393:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19667, - "nodeType": "Block", - "src": "20026:124:68", - "statements": [ - { - "expression": { - "id": 19658, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19653, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19651, - "src": "20036:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19656, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19648, - "src": "20056:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19655, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20049:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int216_$", - "typeString": "type(int216)" - }, - "typeName": { - "id": 19654, - "name": "int216", - "nodeType": "ElementaryTypeName", - "src": "20049:6:68", - "typeDescriptions": {} - } - }, - "id": 19657, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20049:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - } - }, - "src": "20036:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - } - }, - "id": 19659, - "nodeType": "ExpressionStatement", - "src": "20036:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19663, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19661, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19651, - "src": "20080:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19662, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19648, - "src": "20094:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "20080:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203231362062697473", - "id": 19664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20101:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\"" - }, - "value": "SafeCast: value doesn't fit in 216 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_8966adc0aad8dc91b207c69c3eb4937e498af8cc706cfe7edd55f3a6ea53488d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 216 bits\"" - } - ], - "id": 19660, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "20072:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19665, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20072:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19666, - "nodeType": "ExpressionStatement", - "src": "20072:71:68" - } - ] - }, - "documentation": { - "id": 19646, - "nodeType": "StructuredDocumentation", - "src": "19597:350:68", - "text": " @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits\n _Available since v4.7._" - }, - "id": 19668, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt216", - "nameLocation": "19961:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19649, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19648, - "mutability": "mutable", - "name": "value", - "nameLocation": "19977:5:68", - "nodeType": "VariableDeclaration", - "scope": 19668, - "src": "19970:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19647, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "19970:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "19969:14:68" - }, - "returnParameters": { - "id": 19652, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19651, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "20014:10:68", - "nodeType": "VariableDeclaration", - "scope": 19668, - "src": "20007:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - }, - "typeName": { - "id": 19650, - "name": "int216", - "nodeType": "ElementaryTypeName", - "src": "20007:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int216", - "typeString": "int216" - } - }, - "visibility": "internal" - } - ], - "src": "20006:19:68" - }, - "scope": 20295, - "src": "19952:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19690, - "nodeType": "Block", - "src": "20585:124:68", - "statements": [ - { - "expression": { - "id": 19681, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19676, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19674, - "src": "20595:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19679, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19671, - "src": "20615:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19678, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "20608:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int208_$", - "typeString": "type(int208)" - }, - "typeName": { - "id": 19677, - "name": "int208", - "nodeType": "ElementaryTypeName", - "src": "20608:6:68", - "typeDescriptions": {} - } - }, - "id": 19680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20608:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - } - }, - "src": "20595:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - } - }, - "id": 19682, - "nodeType": "ExpressionStatement", - "src": "20595:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19686, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19684, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19674, - "src": "20639:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19685, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19671, - "src": "20653:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "20639:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230382062697473", - "id": 19687, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "20660:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23", - "typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\"" - }, - "value": "SafeCast: value doesn't fit in 208 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_43d81217fa633fa1c6e88855de94fb990f5831ac266b0a90afa660e986ab5e23", - "typeString": "literal_string \"SafeCast: value doesn't fit in 208 bits\"" - } - ], - "id": 19683, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "20631:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "20631:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19689, - "nodeType": "ExpressionStatement", - "src": "20631:71:68" - } - ] - }, - "documentation": { - "id": 19669, - "nodeType": "StructuredDocumentation", - "src": "20156:350:68", - "text": " @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits\n _Available since v4.7._" - }, - "id": 19691, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt208", - "nameLocation": "20520:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19672, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19671, - "mutability": "mutable", - "name": "value", - "nameLocation": "20536:5:68", - "nodeType": "VariableDeclaration", - "scope": 19691, - "src": "20529:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19670, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "20529:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "20528:14:68" - }, - "returnParameters": { - "id": 19675, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19674, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "20573:10:68", - "nodeType": "VariableDeclaration", - "scope": 19691, - "src": "20566:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - }, - "typeName": { - "id": 19673, - "name": "int208", - "nodeType": "ElementaryTypeName", - "src": "20566:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int208", - "typeString": "int208" - } - }, - "visibility": "internal" - } - ], - "src": "20565:19:68" - }, - "scope": 20295, - "src": "20511:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19713, - "nodeType": "Block", - "src": "21144:124:68", - "statements": [ - { - "expression": { - "id": 19704, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19699, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19697, - "src": "21154:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19702, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19694, - "src": "21174:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19701, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "21167:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int200_$", - "typeString": "type(int200)" - }, - "typeName": { - "id": 19700, - "name": "int200", - "nodeType": "ElementaryTypeName", - "src": "21167:6:68", - "typeDescriptions": {} - } - }, - "id": 19703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21167:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - } - }, - "src": "21154:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - } - }, - "id": 19705, - "nodeType": "ExpressionStatement", - "src": "21154:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19707, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19697, - "src": "21198:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19708, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19694, - "src": "21212:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "21198:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203230302062697473", - "id": 19710, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21219:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\"" - }, - "value": "SafeCast: value doesn't fit in 200 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_df8130f294fe2698967ea9ead82c4da9454490567d976d00551e0174e655314c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 200 bits\"" - } - ], - "id": 19706, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "21190:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21190:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19712, - "nodeType": "ExpressionStatement", - "src": "21190:71:68" - } - ] - }, - "documentation": { - "id": 19692, - "nodeType": "StructuredDocumentation", - "src": "20715:350:68", - "text": " @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits\n _Available since v4.7._" - }, - "id": 19714, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt200", - "nameLocation": "21079:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19695, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19694, - "mutability": "mutable", - "name": "value", - "nameLocation": "21095:5:68", - "nodeType": "VariableDeclaration", - "scope": 19714, - "src": "21088:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19693, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "21088:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "21087:14:68" - }, - "returnParameters": { - "id": 19698, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19697, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "21132:10:68", - "nodeType": "VariableDeclaration", - "scope": 19714, - "src": "21125:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - }, - "typeName": { - "id": 19696, - "name": "int200", - "nodeType": "ElementaryTypeName", - "src": "21125:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int200", - "typeString": "int200" - } - }, - "visibility": "internal" - } - ], - "src": "21124:19:68" - }, - "scope": 20295, - "src": "21070:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19736, - "nodeType": "Block", - "src": "21703:124:68", - "statements": [ - { - "expression": { - "id": 19727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19722, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19720, - "src": "21713:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19725, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19717, - "src": "21733:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19724, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "21726:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int192_$", - "typeString": "type(int192)" - }, - "typeName": { - "id": 19723, - "name": "int192", - "nodeType": "ElementaryTypeName", - "src": "21726:6:68", - "typeDescriptions": {} - } - }, - "id": 19726, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21726:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - } - }, - "src": "21713:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - } - }, - "id": 19728, - "nodeType": "ExpressionStatement", - "src": "21713:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19732, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19730, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19720, - "src": "21757:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19731, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19717, - "src": "21771:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "21757:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203139322062697473", - "id": 19733, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "21778:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae", - "typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\"" - }, - "value": "SafeCast: value doesn't fit in 192 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_112978800f12a1c4f1eab82789f7b6defd49dc1c17ba270a84ffc28392fb05ae", - "typeString": "literal_string \"SafeCast: value doesn't fit in 192 bits\"" - } - ], - "id": 19729, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "21749:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19734, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "21749:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19735, - "nodeType": "ExpressionStatement", - "src": "21749:71:68" - } - ] - }, - "documentation": { - "id": 19715, - "nodeType": "StructuredDocumentation", - "src": "21274:350:68", - "text": " @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits\n _Available since v4.7._" - }, - "id": 19737, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt192", - "nameLocation": "21638:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19718, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19717, - "mutability": "mutable", - "name": "value", - "nameLocation": "21654:5:68", - "nodeType": "VariableDeclaration", - "scope": 19737, - "src": "21647:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19716, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "21647:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "21646:14:68" - }, - "returnParameters": { - "id": 19721, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19720, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "21691:10:68", - "nodeType": "VariableDeclaration", - "scope": 19737, - "src": "21684:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - }, - "typeName": { - "id": 19719, - "name": "int192", - "nodeType": "ElementaryTypeName", - "src": "21684:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int192", - "typeString": "int192" - } - }, - "visibility": "internal" - } - ], - "src": "21683:19:68" - }, - "scope": 20295, - "src": "21629:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19759, - "nodeType": "Block", - "src": "22262:124:68", - "statements": [ - { - "expression": { - "id": 19750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19745, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19743, - "src": "22272:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19748, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19740, - "src": "22292:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19747, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "22285:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int184_$", - "typeString": "type(int184)" - }, - "typeName": { - "id": 19746, - "name": "int184", - "nodeType": "ElementaryTypeName", - "src": "22285:6:68", - "typeDescriptions": {} - } - }, - "id": 19749, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22285:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - } - }, - "src": "22272:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - } - }, - "id": 19751, - "nodeType": "ExpressionStatement", - "src": "22272:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19755, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19753, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19743, - "src": "22316:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19754, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19740, - "src": "22330:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "22316:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203138342062697473", - "id": 19756, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22337:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75", - "typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\"" - }, - "value": "SafeCast: value doesn't fit in 184 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_86c53d89b1944d561ecfa42e859033241d1df6ea8d42a57ae02f79d45de4aa75", - "typeString": "literal_string \"SafeCast: value doesn't fit in 184 bits\"" - } - ], - "id": 19752, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "22308:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19757, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22308:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19758, - "nodeType": "ExpressionStatement", - "src": "22308:71:68" - } - ] - }, - "documentation": { - "id": 19738, - "nodeType": "StructuredDocumentation", - "src": "21833:350:68", - "text": " @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits\n _Available since v4.7._" - }, - "id": 19760, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt184", - "nameLocation": "22197:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19741, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19740, - "mutability": "mutable", - "name": "value", - "nameLocation": "22213:5:68", - "nodeType": "VariableDeclaration", - "scope": 19760, - "src": "22206:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19739, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "22206:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "22205:14:68" - }, - "returnParameters": { - "id": 19744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19743, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "22250:10:68", - "nodeType": "VariableDeclaration", - "scope": 19760, - "src": "22243:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - }, - "typeName": { - "id": 19742, - "name": "int184", - "nodeType": "ElementaryTypeName", - "src": "22243:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int184", - "typeString": "int184" - } - }, - "visibility": "internal" - } - ], - "src": "22242:19:68" - }, - "scope": 20295, - "src": "22188:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19782, - "nodeType": "Block", - "src": "22821:124:68", - "statements": [ - { - "expression": { - "id": 19773, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19768, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19766, - "src": "22831:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19771, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19763, - "src": "22851:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19770, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "22844:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int176_$", - "typeString": "type(int176)" - }, - "typeName": { - "id": 19769, - "name": "int176", - "nodeType": "ElementaryTypeName", - "src": "22844:6:68", - "typeDescriptions": {} - } - }, - "id": 19772, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22844:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - } - }, - "src": "22831:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - } - }, - "id": 19774, - "nodeType": "ExpressionStatement", - "src": "22831:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19776, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19766, - "src": "22875:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19777, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19763, - "src": "22889:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "22875:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203137362062697473", - "id": 19779, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "22896:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30", - "typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\"" - }, - "value": "SafeCast: value doesn't fit in 176 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_4069e970f734339c7841e84a1b26f503bff22b76884c1168dc24e2e6af9b1e30", - "typeString": "literal_string \"SafeCast: value doesn't fit in 176 bits\"" - } - ], - "id": 19775, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "22867:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19780, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "22867:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19781, - "nodeType": "ExpressionStatement", - "src": "22867:71:68" - } - ] - }, - "documentation": { - "id": 19761, - "nodeType": "StructuredDocumentation", - "src": "22392:350:68", - "text": " @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits\n _Available since v4.7._" - }, - "id": 19783, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt176", - "nameLocation": "22756:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19764, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19763, - "mutability": "mutable", - "name": "value", - "nameLocation": "22772:5:68", - "nodeType": "VariableDeclaration", - "scope": 19783, - "src": "22765:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19762, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "22765:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "22764:14:68" - }, - "returnParameters": { - "id": 19767, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19766, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "22809:10:68", - "nodeType": "VariableDeclaration", - "scope": 19783, - "src": "22802:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - }, - "typeName": { - "id": 19765, - "name": "int176", - "nodeType": "ElementaryTypeName", - "src": "22802:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int176", - "typeString": "int176" - } - }, - "visibility": "internal" - } - ], - "src": "22801:19:68" - }, - "scope": 20295, - "src": "22747:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19805, - "nodeType": "Block", - "src": "23380:124:68", - "statements": [ - { - "expression": { - "id": 19796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19791, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19789, - "src": "23390:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19794, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19786, - "src": "23410:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "23403:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int168_$", - "typeString": "type(int168)" - }, - "typeName": { - "id": 19792, - "name": "int168", - "nodeType": "ElementaryTypeName", - "src": "23403:6:68", - "typeDescriptions": {} - } - }, - "id": 19795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23403:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - } - }, - "src": "23390:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - } - }, - "id": 19797, - "nodeType": "ExpressionStatement", - "src": "23390:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19799, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19789, - "src": "23434:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19800, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19786, - "src": "23448:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "23434:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136382062697473", - "id": 19802, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "23455:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\"" - }, - "value": "SafeCast: value doesn't fit in 168 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_67ef32a3cbe7b34392347d335b0a7ae95c74a34ca40e4efb58f6c9a3154e85a1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 168 bits\"" - } - ], - "id": 19798, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "23426:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23426:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19804, - "nodeType": "ExpressionStatement", - "src": "23426:71:68" - } - ] - }, - "documentation": { - "id": 19784, - "nodeType": "StructuredDocumentation", - "src": "22951:350:68", - "text": " @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits\n _Available since v4.7._" - }, - "id": 19806, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt168", - "nameLocation": "23315:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19786, - "mutability": "mutable", - "name": "value", - "nameLocation": "23331:5:68", - "nodeType": "VariableDeclaration", - "scope": 19806, - "src": "23324:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19785, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "23324:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "23323:14:68" - }, - "returnParameters": { - "id": 19790, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19789, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "23368:10:68", - "nodeType": "VariableDeclaration", - "scope": 19806, - "src": "23361:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - }, - "typeName": { - "id": 19788, - "name": "int168", - "nodeType": "ElementaryTypeName", - "src": "23361:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int168", - "typeString": "int168" - } - }, - "visibility": "internal" - } - ], - "src": "23360:19:68" - }, - "scope": 20295, - "src": "23306:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19828, - "nodeType": "Block", - "src": "23939:124:68", - "statements": [ - { - "expression": { - "id": 19819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19814, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19812, - "src": "23949:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19817, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19809, - "src": "23969:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "23962:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int160_$", - "typeString": "type(int160)" - }, - "typeName": { - "id": 19815, - "name": "int160", - "nodeType": "ElementaryTypeName", - "src": "23962:6:68", - "typeDescriptions": {} - } - }, - "id": 19818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23962:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - } - }, - "src": "23949:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - } - }, - "id": 19820, - "nodeType": "ExpressionStatement", - "src": "23949:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19822, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19812, - "src": "23993:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19823, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19809, - "src": "24007:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "23993:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203136302062697473", - "id": 19825, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24014:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\"" - }, - "value": "SafeCast: value doesn't fit in 160 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_976ecce9083debfe29d3a99b955facf24b8725f1b964d1a5bb4197ffcd60ab9d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 160 bits\"" - } - ], - "id": 19821, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "23985:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "23985:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19827, - "nodeType": "ExpressionStatement", - "src": "23985:71:68" - } - ] - }, - "documentation": { - "id": 19807, - "nodeType": "StructuredDocumentation", - "src": "23510:350:68", - "text": " @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits\n _Available since v4.7._" - }, - "id": 19829, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt160", - "nameLocation": "23874:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19810, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19809, - "mutability": "mutable", - "name": "value", - "nameLocation": "23890:5:68", - "nodeType": "VariableDeclaration", - "scope": 19829, - "src": "23883:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19808, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "23883:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "23882:14:68" - }, - "returnParameters": { - "id": 19813, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19812, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "23927:10:68", - "nodeType": "VariableDeclaration", - "scope": 19829, - "src": "23920:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - }, - "typeName": { - "id": 19811, - "name": "int160", - "nodeType": "ElementaryTypeName", - "src": "23920:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int160", - "typeString": "int160" - } - }, - "visibility": "internal" - } - ], - "src": "23919:19:68" - }, - "scope": 20295, - "src": "23865:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19851, - "nodeType": "Block", - "src": "24498:124:68", - "statements": [ - { - "expression": { - "id": 19842, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19837, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19835, - "src": "24508:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19840, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19832, - "src": "24528:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19839, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "24521:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int152_$", - "typeString": "type(int152)" - }, - "typeName": { - "id": 19838, - "name": "int152", - "nodeType": "ElementaryTypeName", - "src": "24521:6:68", - "typeDescriptions": {} - } - }, - "id": 19841, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24521:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - } - }, - "src": "24508:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - } - }, - "id": 19843, - "nodeType": "ExpressionStatement", - "src": "24508:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19847, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19845, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19835, - "src": "24552:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19846, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19832, - "src": "24566:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "24552:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203135322062697473", - "id": 19848, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "24573:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831", - "typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\"" - }, - "value": "SafeCast: value doesn't fit in 152 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_211cad43a2caf5f01e34af51190b8a7b6f3d9c195bd25586ea12242191b97831", - "typeString": "literal_string \"SafeCast: value doesn't fit in 152 bits\"" - } - ], - "id": 19844, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "24544:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19849, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "24544:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19850, - "nodeType": "ExpressionStatement", - "src": "24544:71:68" - } - ] - }, - "documentation": { - "id": 19830, - "nodeType": "StructuredDocumentation", - "src": "24069:350:68", - "text": " @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits\n _Available since v4.7._" - }, - "id": 19852, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt152", - "nameLocation": "24433:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19833, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19832, - "mutability": "mutable", - "name": "value", - "nameLocation": "24449:5:68", - "nodeType": "VariableDeclaration", - "scope": 19852, - "src": "24442:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19831, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "24442:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "24441:14:68" - }, - "returnParameters": { - "id": 19836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19835, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "24486:10:68", - "nodeType": "VariableDeclaration", - "scope": 19852, - "src": "24479:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - }, - "typeName": { - "id": 19834, - "name": "int152", - "nodeType": "ElementaryTypeName", - "src": "24479:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int152", - "typeString": "int152" - } - }, - "visibility": "internal" - } - ], - "src": "24478:19:68" - }, - "scope": 20295, - "src": "24424:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19874, - "nodeType": "Block", - "src": "25057:124:68", - "statements": [ - { - "expression": { - "id": 19865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19860, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19858, - "src": "25067:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19863, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19855, - "src": "25087:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "25080:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int144_$", - "typeString": "type(int144)" - }, - "typeName": { - "id": 19861, - "name": "int144", - "nodeType": "ElementaryTypeName", - "src": "25080:6:68", - "typeDescriptions": {} - } - }, - "id": 19864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25080:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - } - }, - "src": "25067:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - } - }, - "id": 19866, - "nodeType": "ExpressionStatement", - "src": "25067:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19868, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19858, - "src": "25111:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19869, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19855, - "src": "25125:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "25111:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203134342062697473", - "id": 19871, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25132:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab", - "typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\"" - }, - "value": "SafeCast: value doesn't fit in 144 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_17d8c5a6d3b2fd2517ba2e4a2ac70a3367cd362448f8338aaa6edf8bfd812bab", - "typeString": "literal_string \"SafeCast: value doesn't fit in 144 bits\"" - } - ], - "id": 19867, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "25103:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19872, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25103:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19873, - "nodeType": "ExpressionStatement", - "src": "25103:71:68" - } - ] - }, - "documentation": { - "id": 19853, - "nodeType": "StructuredDocumentation", - "src": "24628:350:68", - "text": " @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits\n _Available since v4.7._" - }, - "id": 19875, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt144", - "nameLocation": "24992:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19856, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19855, - "mutability": "mutable", - "name": "value", - "nameLocation": "25008:5:68", - "nodeType": "VariableDeclaration", - "scope": 19875, - "src": "25001:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19854, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "25001:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "25000:14:68" - }, - "returnParameters": { - "id": 19859, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19858, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "25045:10:68", - "nodeType": "VariableDeclaration", - "scope": 19875, - "src": "25038:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - }, - "typeName": { - "id": 19857, - "name": "int144", - "nodeType": "ElementaryTypeName", - "src": "25038:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int144", - "typeString": "int144" - } - }, - "visibility": "internal" - } - ], - "src": "25037:19:68" - }, - "scope": 20295, - "src": "24983:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19897, - "nodeType": "Block", - "src": "25616:124:68", - "statements": [ - { - "expression": { - "id": 19888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19883, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19881, - "src": "25626:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19886, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19878, - "src": "25646:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19885, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "25639:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int136_$", - "typeString": "type(int136)" - }, - "typeName": { - "id": 19884, - "name": "int136", - "nodeType": "ElementaryTypeName", - "src": "25639:6:68", - "typeDescriptions": {} - } - }, - "id": 19887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25639:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - } - }, - "src": "25626:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - } - }, - "id": 19889, - "nodeType": "ExpressionStatement", - "src": "25626:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19891, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19881, - "src": "25670:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19892, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19878, - "src": "25684:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "25670:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203133362062697473", - "id": 19894, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "25691:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a", - "typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\"" - }, - "value": "SafeCast: value doesn't fit in 136 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_8b1f81e2e2913e1cee9dba7bcd9837bbf8a8122edaac4afc578271db3c25a56a", - "typeString": "literal_string \"SafeCast: value doesn't fit in 136 bits\"" - } - ], - "id": 19890, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "25662:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "25662:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19896, - "nodeType": "ExpressionStatement", - "src": "25662:71:68" - } - ] - }, - "documentation": { - "id": 19876, - "nodeType": "StructuredDocumentation", - "src": "25187:350:68", - "text": " @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits\n _Available since v4.7._" - }, - "id": 19898, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt136", - "nameLocation": "25551:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19879, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19878, - "mutability": "mutable", - "name": "value", - "nameLocation": "25567:5:68", - "nodeType": "VariableDeclaration", - "scope": 19898, - "src": "25560:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19877, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "25560:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "25559:14:68" - }, - "returnParameters": { - "id": 19882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19881, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "25604:10:68", - "nodeType": "VariableDeclaration", - "scope": 19898, - "src": "25597:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - }, - "typeName": { - "id": 19880, - "name": "int136", - "nodeType": "ElementaryTypeName", - "src": "25597:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int136", - "typeString": "int136" - } - }, - "visibility": "internal" - } - ], - "src": "25596:19:68" - }, - "scope": 20295, - "src": "25542:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19920, - "nodeType": "Block", - "src": "26175:124:68", - "statements": [ - { - "expression": { - "id": 19911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19906, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19904, - "src": "26185:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19909, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19901, - "src": "26205:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19908, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "26198:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int128_$", - "typeString": "type(int128)" - }, - "typeName": { - "id": 19907, - "name": "int128", - "nodeType": "ElementaryTypeName", - "src": "26198:6:68", - "typeDescriptions": {} - } - }, - "id": 19910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26198:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "src": "26185:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "id": 19912, - "nodeType": "ExpressionStatement", - "src": "26185:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19914, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19904, - "src": "26229:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19915, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19901, - "src": "26243:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "26229:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473", - "id": 19917, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26250:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\"" - }, - "value": "SafeCast: value doesn't fit in 128 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c", - "typeString": "literal_string \"SafeCast: value doesn't fit in 128 bits\"" - } - ], - "id": 19913, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "26221:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26221:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19919, - "nodeType": "ExpressionStatement", - "src": "26221:71:68" - } - ] - }, - "documentation": { - "id": 19899, - "nodeType": "StructuredDocumentation", - "src": "25746:350:68", - "text": " @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v3.1._" - }, - "id": 19921, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt128", - "nameLocation": "26110:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19902, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19901, - "mutability": "mutable", - "name": "value", - "nameLocation": "26126:5:68", - "nodeType": "VariableDeclaration", - "scope": 19921, - "src": "26119:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19900, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "26119:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "26118:14:68" - }, - "returnParameters": { - "id": 19905, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19904, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "26163:10:68", - "nodeType": "VariableDeclaration", - "scope": 19921, - "src": "26156:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - }, - "typeName": { - "id": 19903, - "name": "int128", - "nodeType": "ElementaryTypeName", - "src": "26156:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int128", - "typeString": "int128" - } - }, - "visibility": "internal" - } - ], - "src": "26155:19:68" - }, - "scope": 20295, - "src": "26101:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19943, - "nodeType": "Block", - "src": "26734:124:68", - "statements": [ - { - "expression": { - "id": 19934, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19929, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19927, - "src": "26744:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19932, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19924, - "src": "26764:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19931, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "26757:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int120_$", - "typeString": "type(int120)" - }, - "typeName": { - "id": 19930, - "name": "int120", - "nodeType": "ElementaryTypeName", - "src": "26757:6:68", - "typeDescriptions": {} - } - }, - "id": 19933, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26757:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - } - }, - "src": "26744:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - } - }, - "id": 19935, - "nodeType": "ExpressionStatement", - "src": "26744:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19937, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19927, - "src": "26788:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19938, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19924, - "src": "26802:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "26788:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203132302062697473", - "id": 19940, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "26809:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09", - "typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\"" - }, - "value": "SafeCast: value doesn't fit in 120 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3c40c26bb27060cce77002ca0c426dcc1bef2d367c195ca2eb24bd8b2cc1bb09", - "typeString": "literal_string \"SafeCast: value doesn't fit in 120 bits\"" - } - ], - "id": 19936, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "26780:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "26780:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19942, - "nodeType": "ExpressionStatement", - "src": "26780:71:68" - } - ] - }, - "documentation": { - "id": 19922, - "nodeType": "StructuredDocumentation", - "src": "26305:350:68", - "text": " @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits\n _Available since v4.7._" - }, - "id": 19944, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt120", - "nameLocation": "26669:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19925, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19924, - "mutability": "mutable", - "name": "value", - "nameLocation": "26685:5:68", - "nodeType": "VariableDeclaration", - "scope": 19944, - "src": "26678:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19923, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "26678:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "26677:14:68" - }, - "returnParameters": { - "id": 19928, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19927, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "26722:10:68", - "nodeType": "VariableDeclaration", - "scope": 19944, - "src": "26715:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - }, - "typeName": { - "id": 19926, - "name": "int120", - "nodeType": "ElementaryTypeName", - "src": "26715:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int120", - "typeString": "int120" - } - }, - "visibility": "internal" - } - ], - "src": "26714:19:68" - }, - "scope": 20295, - "src": "26660:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19966, - "nodeType": "Block", - "src": "27293:124:68", - "statements": [ - { - "expression": { - "id": 19957, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19952, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19950, - "src": "27303:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19955, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19947, - "src": "27323:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19954, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "27316:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int112_$", - "typeString": "type(int112)" - }, - "typeName": { - "id": 19953, - "name": "int112", - "nodeType": "ElementaryTypeName", - "src": "27316:6:68", - "typeDescriptions": {} - } - }, - "id": 19956, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27316:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - } - }, - "src": "27303:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - } - }, - "id": 19958, - "nodeType": "ExpressionStatement", - "src": "27303:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19962, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19960, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19950, - "src": "27347:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19961, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19947, - "src": "27361:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "27347:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203131322062697473", - "id": 19963, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27368:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd", - "typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\"" - }, - "value": "SafeCast: value doesn't fit in 112 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_45659ae152ef697531e1c1115de07c87af91ac22466c3e76b808821799776efd", - "typeString": "literal_string \"SafeCast: value doesn't fit in 112 bits\"" - } - ], - "id": 19959, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "27339:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19964, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27339:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19965, - "nodeType": "ExpressionStatement", - "src": "27339:71:68" - } - ] - }, - "documentation": { - "id": 19945, - "nodeType": "StructuredDocumentation", - "src": "26864:350:68", - "text": " @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits\n _Available since v4.7._" - }, - "id": 19967, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt112", - "nameLocation": "27228:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19948, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19947, - "mutability": "mutable", - "name": "value", - "nameLocation": "27244:5:68", - "nodeType": "VariableDeclaration", - "scope": 19967, - "src": "27237:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19946, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "27237:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "27236:14:68" - }, - "returnParameters": { - "id": 19951, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19950, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "27281:10:68", - "nodeType": "VariableDeclaration", - "scope": 19967, - "src": "27274:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - }, - "typeName": { - "id": 19949, - "name": "int112", - "nodeType": "ElementaryTypeName", - "src": "27274:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int112", - "typeString": "int112" - } - }, - "visibility": "internal" - } - ], - "src": "27273:19:68" - }, - "scope": 20295, - "src": "27219:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 19989, - "nodeType": "Block", - "src": "27852:124:68", - "statements": [ - { - "expression": { - "id": 19980, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19975, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19973, - "src": "27862:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 19978, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19970, - "src": "27882:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 19977, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "27875:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int104_$", - "typeString": "type(int104)" - }, - "typeName": { - "id": 19976, - "name": "int104", - "nodeType": "ElementaryTypeName", - "src": "27875:6:68", - "typeDescriptions": {} - } - }, - "id": 19979, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27875:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - } - }, - "src": "27862:26:68", - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - } - }, - "id": 19981, - "nodeType": "ExpressionStatement", - "src": "27862:26:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 19985, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 19983, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19973, - "src": "27906:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 19984, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19970, - "src": "27920:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "27906:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e203130342062697473", - "id": 19986, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "27927:41:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981", - "typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\"" - }, - "value": "SafeCast: value doesn't fit in 104 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_5d7f3e1b7e9f9a06fded6b093c6fd1473ca0a14cc4bb683db904e803e2482981", - "typeString": "literal_string \"SafeCast: value doesn't fit in 104 bits\"" - } - ], - "id": 19982, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "27898:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 19987, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "27898:71:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 19988, - "nodeType": "ExpressionStatement", - "src": "27898:71:68" - } - ] - }, - "documentation": { - "id": 19968, - "nodeType": "StructuredDocumentation", - "src": "27423:350:68", - "text": " @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits\n _Available since v4.7._" - }, - "id": 19990, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt104", - "nameLocation": "27787:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19971, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19970, - "mutability": "mutable", - "name": "value", - "nameLocation": "27803:5:68", - "nodeType": "VariableDeclaration", - "scope": 19990, - "src": "27796:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19969, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "27796:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "27795:14:68" - }, - "returnParameters": { - "id": 19974, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19973, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "27840:10:68", - "nodeType": "VariableDeclaration", - "scope": 19990, - "src": "27833:17:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - }, - "typeName": { - "id": 19972, - "name": "int104", - "nodeType": "ElementaryTypeName", - "src": "27833:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int104", - "typeString": "int104" - } - }, - "visibility": "internal" - } - ], - "src": "27832:19:68" - }, - "scope": 20295, - "src": "27778:198:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20012, - "nodeType": "Block", - "src": "28404:122:68", - "statements": [ - { - "expression": { - "id": 20003, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 19998, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19996, - "src": "28414:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20001, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19993, - "src": "28433:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20000, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "28427:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int96_$", - "typeString": "type(int96)" - }, - "typeName": { - "id": 19999, - "name": "int96", - "nodeType": "ElementaryTypeName", - "src": "28427:5:68", - "typeDescriptions": {} - } - }, - "id": 20002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28427:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - } - }, - "src": "28414:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - } - }, - "id": 20004, - "nodeType": "ExpressionStatement", - "src": "28414:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20008, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20006, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19996, - "src": "28457:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20007, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 19993, - "src": "28471:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "28457:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473", - "id": 20009, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "28478:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\"" - }, - "value": "SafeCast: value doesn't fit in 96 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 96 bits\"" - } - ], - "id": 20005, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "28449:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20010, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28449:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20011, - "nodeType": "ExpressionStatement", - "src": "28449:70:68" - } - ] - }, - "documentation": { - "id": 19991, - "nodeType": "StructuredDocumentation", - "src": "27982:345:68", - "text": " @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits\n _Available since v4.7._" - }, - "id": 20013, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt96", - "nameLocation": "28341:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 19994, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19993, - "mutability": "mutable", - "name": "value", - "nameLocation": "28356:5:68", - "nodeType": "VariableDeclaration", - "scope": 20013, - "src": "28349:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 19992, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "28349:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "28348:14:68" - }, - "returnParameters": { - "id": 19997, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 19996, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "28392:10:68", - "nodeType": "VariableDeclaration", - "scope": 20013, - "src": "28386:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - }, - "typeName": { - "id": 19995, - "name": "int96", - "nodeType": "ElementaryTypeName", - "src": "28386:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int96", - "typeString": "int96" - } - }, - "visibility": "internal" - } - ], - "src": "28385:18:68" - }, - "scope": 20295, - "src": "28332:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20035, - "nodeType": "Block", - "src": "28954:122:68", - "statements": [ - { - "expression": { - "id": 20026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20021, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20019, - "src": "28964:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20024, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20016, - "src": "28983:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20023, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "28977:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int88_$", - "typeString": "type(int88)" - }, - "typeName": { - "id": 20022, - "name": "int88", - "nodeType": "ElementaryTypeName", - "src": "28977:5:68", - "typeDescriptions": {} - } - }, - "id": 20025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28977:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - } - }, - "src": "28964:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - } - }, - "id": 20027, - "nodeType": "ExpressionStatement", - "src": "28964:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20029, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20019, - "src": "29007:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20030, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20016, - "src": "29021:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "29007:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038382062697473", - "id": 20032, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29028:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\"" - }, - "value": "SafeCast: value doesn't fit in 88 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_ae080bd7a76a46f0a0caf00941bc2cdf6002799ca2813a3af7295019576d715d", - "typeString": "literal_string \"SafeCast: value doesn't fit in 88 bits\"" - } - ], - "id": 20028, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "28999:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20033, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "28999:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20034, - "nodeType": "ExpressionStatement", - "src": "28999:70:68" - } - ] - }, - "documentation": { - "id": 20014, - "nodeType": "StructuredDocumentation", - "src": "28532:345:68", - "text": " @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits\n _Available since v4.7._" - }, - "id": 20036, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt88", - "nameLocation": "28891:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20017, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20016, - "mutability": "mutable", - "name": "value", - "nameLocation": "28906:5:68", - "nodeType": "VariableDeclaration", - "scope": 20036, - "src": "28899:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20015, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "28899:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "28898:14:68" - }, - "returnParameters": { - "id": 20020, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20019, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "28942:10:68", - "nodeType": "VariableDeclaration", - "scope": 20036, - "src": "28936:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - }, - "typeName": { - "id": 20018, - "name": "int88", - "nodeType": "ElementaryTypeName", - "src": "28936:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int88", - "typeString": "int88" - } - }, - "visibility": "internal" - } - ], - "src": "28935:18:68" - }, - "scope": 20295, - "src": "28882:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20058, - "nodeType": "Block", - "src": "29504:122:68", - "statements": [ - { - "expression": { - "id": 20049, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20044, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20042, - "src": "29514:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20047, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20039, - "src": "29533:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20046, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "29527:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int80_$", - "typeString": "type(int80)" - }, - "typeName": { - "id": 20045, - "name": "int80", - "nodeType": "ElementaryTypeName", - "src": "29527:5:68", - "typeDescriptions": {} - } - }, - "id": 20048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29527:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - } - }, - "src": "29514:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - } - }, - "id": 20050, - "nodeType": "ExpressionStatement", - "src": "29514:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20052, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20042, - "src": "29557:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20053, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20039, - "src": "29571:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "29557:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2038302062697473", - "id": 20055, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "29578:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\"" - }, - "value": "SafeCast: value doesn't fit in 80 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3cba87c71fade7d3cd7b673c159aab98afc040a5369691a33559d905d20ab5d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 80 bits\"" - } - ], - "id": 20051, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "29549:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20056, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "29549:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20057, - "nodeType": "ExpressionStatement", - "src": "29549:70:68" - } - ] - }, - "documentation": { - "id": 20037, - "nodeType": "StructuredDocumentation", - "src": "29082:345:68", - "text": " @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits\n _Available since v4.7._" - }, - "id": 20059, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt80", - "nameLocation": "29441:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20040, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20039, - "mutability": "mutable", - "name": "value", - "nameLocation": "29456:5:68", - "nodeType": "VariableDeclaration", - "scope": 20059, - "src": "29449:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20038, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "29449:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "29448:14:68" - }, - "returnParameters": { - "id": 20043, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20042, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "29492:10:68", - "nodeType": "VariableDeclaration", - "scope": 20059, - "src": "29486:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - }, - "typeName": { - "id": 20041, - "name": "int80", - "nodeType": "ElementaryTypeName", - "src": "29486:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int80", - "typeString": "int80" - } - }, - "visibility": "internal" - } - ], - "src": "29485:18:68" - }, - "scope": 20295, - "src": "29432:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20081, - "nodeType": "Block", - "src": "30054:122:68", - "statements": [ - { - "expression": { - "id": 20072, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20067, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20065, - "src": "30064:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20070, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20062, - "src": "30083:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20069, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "30077:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int72_$", - "typeString": "type(int72)" - }, - "typeName": { - "id": 20068, - "name": "int72", - "nodeType": "ElementaryTypeName", - "src": "30077:5:68", - "typeDescriptions": {} - } - }, - "id": 20071, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30077:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - } - }, - "src": "30064:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - } - }, - "id": 20073, - "nodeType": "ExpressionStatement", - "src": "30064:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20075, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20065, - "src": "30107:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20076, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20062, - "src": "30121:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "30107:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2037322062697473", - "id": 20078, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "30128:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606", - "typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\"" - }, - "value": "SafeCast: value doesn't fit in 72 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_71584237cc5250b8f417982144a947efe8f4c76feba008ff32ac480e69d60606", - "typeString": "literal_string \"SafeCast: value doesn't fit in 72 bits\"" - } - ], - "id": 20074, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "30099:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30099:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20080, - "nodeType": "ExpressionStatement", - "src": "30099:70:68" - } - ] - }, - "documentation": { - "id": 20060, - "nodeType": "StructuredDocumentation", - "src": "29632:345:68", - "text": " @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits\n _Available since v4.7._" - }, - "id": 20082, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt72", - "nameLocation": "29991:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20063, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20062, - "mutability": "mutable", - "name": "value", - "nameLocation": "30006:5:68", - "nodeType": "VariableDeclaration", - "scope": 20082, - "src": "29999:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20061, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "29999:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "29998:14:68" - }, - "returnParameters": { - "id": 20066, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20065, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "30042:10:68", - "nodeType": "VariableDeclaration", - "scope": 20082, - "src": "30036:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - }, - "typeName": { - "id": 20064, - "name": "int72", - "nodeType": "ElementaryTypeName", - "src": "30036:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int72", - "typeString": "int72" - } - }, - "visibility": "internal" - } - ], - "src": "30035:18:68" - }, - "scope": 20295, - "src": "29982:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20104, - "nodeType": "Block", - "src": "30604:122:68", - "statements": [ - { - "expression": { - "id": 20095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20090, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20088, - "src": "30614:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20093, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20085, - "src": "30633:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20092, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "30627:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int64_$", - "typeString": "type(int64)" - }, - "typeName": { - "id": 20091, - "name": "int64", - "nodeType": "ElementaryTypeName", - "src": "30627:5:68", - "typeDescriptions": {} - } - }, - "id": 20094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30627:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - } - }, - "src": "30614:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - } - }, - "id": 20096, - "nodeType": "ExpressionStatement", - "src": "30614:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20098, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20088, - "src": "30657:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20099, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20085, - "src": "30671:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "30657:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473", - "id": 20101, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "30678:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939", - "typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\"" - }, - "value": "SafeCast: value doesn't fit in 64 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939", - "typeString": "literal_string \"SafeCast: value doesn't fit in 64 bits\"" - } - ], - "id": 20097, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "30649:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20102, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "30649:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20103, - "nodeType": "ExpressionStatement", - "src": "30649:70:68" - } - ] - }, - "documentation": { - "id": 20083, - "nodeType": "StructuredDocumentation", - "src": "30182:345:68", - "text": " @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v3.1._" - }, - "id": 20105, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt64", - "nameLocation": "30541:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20086, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20085, - "mutability": "mutable", - "name": "value", - "nameLocation": "30556:5:68", - "nodeType": "VariableDeclaration", - "scope": 20105, - "src": "30549:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20084, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "30549:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "30548:14:68" - }, - "returnParameters": { - "id": 20089, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20088, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "30592:10:68", - "nodeType": "VariableDeclaration", - "scope": 20105, - "src": "30586:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - }, - "typeName": { - "id": 20087, - "name": "int64", - "nodeType": "ElementaryTypeName", - "src": "30586:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int64", - "typeString": "int64" - } - }, - "visibility": "internal" - } - ], - "src": "30585:18:68" - }, - "scope": 20295, - "src": "30532:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20127, - "nodeType": "Block", - "src": "31154:122:68", - "statements": [ - { - "expression": { - "id": 20118, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20113, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20111, - "src": "31164:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20116, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20108, - "src": "31183:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20115, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "31177:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int56_$", - "typeString": "type(int56)" - }, - "typeName": { - "id": 20114, - "name": "int56", - "nodeType": "ElementaryTypeName", - "src": "31177:5:68", - "typeDescriptions": {} - } - }, - "id": 20117, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31177:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - } - }, - "src": "31164:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - } - }, - "id": 20119, - "nodeType": "ExpressionStatement", - "src": "31164:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20121, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20111, - "src": "31207:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20122, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20108, - "src": "31221:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "31207:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2035362062697473", - "id": 20124, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "31228:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5", - "typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\"" - }, - "value": "SafeCast: value doesn't fit in 56 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_656ad93b5ff6665bfe05d97d51fad7c02ad79e6c43bef066c042a6900f450bc5", - "typeString": "literal_string \"SafeCast: value doesn't fit in 56 bits\"" - } - ], - "id": 20120, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "31199:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31199:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20126, - "nodeType": "ExpressionStatement", - "src": "31199:70:68" - } - ] - }, - "documentation": { - "id": 20106, - "nodeType": "StructuredDocumentation", - "src": "30732:345:68", - "text": " @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits\n _Available since v4.7._" - }, - "id": 20128, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt56", - "nameLocation": "31091:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20109, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20108, - "mutability": "mutable", - "name": "value", - "nameLocation": "31106:5:68", - "nodeType": "VariableDeclaration", - "scope": 20128, - "src": "31099:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20107, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "31099:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "31098:14:68" - }, - "returnParameters": { - "id": 20112, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20111, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "31142:10:68", - "nodeType": "VariableDeclaration", - "scope": 20128, - "src": "31136:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - }, - "typeName": { - "id": 20110, - "name": "int56", - "nodeType": "ElementaryTypeName", - "src": "31136:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int56", - "typeString": "int56" - } - }, - "visibility": "internal" - } - ], - "src": "31135:18:68" - }, - "scope": 20295, - "src": "31082:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20150, - "nodeType": "Block", - "src": "31704:122:68", - "statements": [ - { - "expression": { - "id": 20141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20136, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20134, - "src": "31714:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20139, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20131, - "src": "31733:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20138, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "31727:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int48_$", - "typeString": "type(int48)" - }, - "typeName": { - "id": 20137, - "name": "int48", - "nodeType": "ElementaryTypeName", - "src": "31727:5:68", - "typeDescriptions": {} - } - }, - "id": 20140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31727:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - } - }, - "src": "31714:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - } - }, - "id": 20142, - "nodeType": "ExpressionStatement", - "src": "31714:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20144, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20134, - "src": "31757:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20145, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20131, - "src": "31771:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "31757:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034382062697473", - "id": 20147, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "31778:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495", - "typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\"" - }, - "value": "SafeCast: value doesn't fit in 48 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_599034f9324dd4e988c6cea5a00a30f53147fec1b01559682f18cd840028f495", - "typeString": "literal_string \"SafeCast: value doesn't fit in 48 bits\"" - } - ], - "id": 20143, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "31749:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "31749:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20149, - "nodeType": "ExpressionStatement", - "src": "31749:70:68" - } - ] - }, - "documentation": { - "id": 20129, - "nodeType": "StructuredDocumentation", - "src": "31282:345:68", - "text": " @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits\n _Available since v4.7._" - }, - "id": 20151, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt48", - "nameLocation": "31641:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20132, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20131, - "mutability": "mutable", - "name": "value", - "nameLocation": "31656:5:68", - "nodeType": "VariableDeclaration", - "scope": 20151, - "src": "31649:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20130, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "31649:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "31648:14:68" - }, - "returnParameters": { - "id": 20135, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20134, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "31692:10:68", - "nodeType": "VariableDeclaration", - "scope": 20151, - "src": "31686:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - }, - "typeName": { - "id": 20133, - "name": "int48", - "nodeType": "ElementaryTypeName", - "src": "31686:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int48", - "typeString": "int48" - } - }, - "visibility": "internal" - } - ], - "src": "31685:18:68" - }, - "scope": 20295, - "src": "31632:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20173, - "nodeType": "Block", - "src": "32254:122:68", - "statements": [ - { - "expression": { - "id": 20164, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20159, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20157, - "src": "32264:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20162, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20154, - "src": "32283:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20161, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "32277:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int40_$", - "typeString": "type(int40)" - }, - "typeName": { - "id": 20160, - "name": "int40", - "nodeType": "ElementaryTypeName", - "src": "32277:5:68", - "typeDescriptions": {} - } - }, - "id": 20163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32277:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - } - }, - "src": "32264:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - } - }, - "id": 20165, - "nodeType": "ExpressionStatement", - "src": "32264:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20167, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20157, - "src": "32307:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20168, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20154, - "src": "32321:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "32307:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2034302062697473", - "id": 20170, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32328:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37", - "typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\"" - }, - "value": "SafeCast: value doesn't fit in 40 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_b23559c58b98a5d3ed7016699c7171ac8defa5a1d180f9a9ffa60468a5701d37", - "typeString": "literal_string \"SafeCast: value doesn't fit in 40 bits\"" - } - ], - "id": 20166, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "32299:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32299:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20172, - "nodeType": "ExpressionStatement", - "src": "32299:70:68" - } - ] - }, - "documentation": { - "id": 20152, - "nodeType": "StructuredDocumentation", - "src": "31832:345:68", - "text": " @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits\n _Available since v4.7._" - }, - "id": 20174, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt40", - "nameLocation": "32191:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20155, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20154, - "mutability": "mutable", - "name": "value", - "nameLocation": "32206:5:68", - "nodeType": "VariableDeclaration", - "scope": 20174, - "src": "32199:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20153, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "32199:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "32198:14:68" - }, - "returnParameters": { - "id": 20158, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20157, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "32242:10:68", - "nodeType": "VariableDeclaration", - "scope": 20174, - "src": "32236:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - }, - "typeName": { - "id": 20156, - "name": "int40", - "nodeType": "ElementaryTypeName", - "src": "32236:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int40", - "typeString": "int40" - } - }, - "visibility": "internal" - } - ], - "src": "32235:18:68" - }, - "scope": 20295, - "src": "32182:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20196, - "nodeType": "Block", - "src": "32804:122:68", - "statements": [ - { - "expression": { - "id": 20187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20182, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20180, - "src": "32814:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20185, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20177, - "src": "32833:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20184, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "32827:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int32_$", - "typeString": "type(int32)" - }, - "typeName": { - "id": 20183, - "name": "int32", - "nodeType": "ElementaryTypeName", - "src": "32827:5:68", - "typeDescriptions": {} - } - }, - "id": 20186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32827:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - } - }, - "src": "32814:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - } - }, - "id": 20188, - "nodeType": "ExpressionStatement", - "src": "32814:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20190, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20180, - "src": "32857:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20191, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20177, - "src": "32871:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "32857:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473", - "id": 20193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "32878:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\"" - }, - "value": "SafeCast: value doesn't fit in 32 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19", - "typeString": "literal_string \"SafeCast: value doesn't fit in 32 bits\"" - } - ], - "id": 20189, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "32849:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "32849:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20195, - "nodeType": "ExpressionStatement", - "src": "32849:70:68" - } - ] - }, - "documentation": { - "id": 20175, - "nodeType": "StructuredDocumentation", - "src": "32382:345:68", - "text": " @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v3.1._" - }, - "id": 20197, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt32", - "nameLocation": "32741:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20178, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20177, - "mutability": "mutable", - "name": "value", - "nameLocation": "32756:5:68", - "nodeType": "VariableDeclaration", - "scope": 20197, - "src": "32749:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20176, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "32749:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "32748:14:68" - }, - "returnParameters": { - "id": 20181, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20180, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "32792:10:68", - "nodeType": "VariableDeclaration", - "scope": 20197, - "src": "32786:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - }, - "typeName": { - "id": 20179, - "name": "int32", - "nodeType": "ElementaryTypeName", - "src": "32786:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int32", - "typeString": "int32" - } - }, - "visibility": "internal" - } - ], - "src": "32785:18:68" - }, - "scope": 20295, - "src": "32732:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20219, - "nodeType": "Block", - "src": "33354:122:68", - "statements": [ - { - "expression": { - "id": 20210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20205, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20203, - "src": "33364:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20208, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20200, - "src": "33383:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20207, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "33377:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int24_$", - "typeString": "type(int24)" - }, - "typeName": { - "id": 20206, - "name": "int24", - "nodeType": "ElementaryTypeName", - "src": "33377:5:68", - "typeDescriptions": {} - } - }, - "id": 20209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33377:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - } - }, - "src": "33364:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - } - }, - "id": 20211, - "nodeType": "ExpressionStatement", - "src": "33364:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20213, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20203, - "src": "33407:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20214, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20200, - "src": "33421:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "33407:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2032342062697473", - "id": 20216, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "33428:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55", - "typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\"" - }, - "value": "SafeCast: value doesn't fit in 24 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_f68b65aaf4574c34e9b9d1442d19636c6608b8c4dbd9331c7245f7915c8b2f55", - "typeString": "literal_string \"SafeCast: value doesn't fit in 24 bits\"" - } - ], - "id": 20212, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "33399:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33399:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20218, - "nodeType": "ExpressionStatement", - "src": "33399:70:68" - } - ] - }, - "documentation": { - "id": 20198, - "nodeType": "StructuredDocumentation", - "src": "32932:345:68", - "text": " @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits\n _Available since v4.7._" - }, - "id": 20220, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt24", - "nameLocation": "33291:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20201, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20200, - "mutability": "mutable", - "name": "value", - "nameLocation": "33306:5:68", - "nodeType": "VariableDeclaration", - "scope": 20220, - "src": "33299:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20199, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "33299:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "33298:14:68" - }, - "returnParameters": { - "id": 20204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20203, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "33342:10:68", - "nodeType": "VariableDeclaration", - "scope": 20220, - "src": "33336:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - }, - "typeName": { - "id": 20202, - "name": "int24", - "nodeType": "ElementaryTypeName", - "src": "33336:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int24", - "typeString": "int24" - } - }, - "visibility": "internal" - } - ], - "src": "33335:18:68" - }, - "scope": 20295, - "src": "33282:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20242, - "nodeType": "Block", - "src": "33904:122:68", - "statements": [ - { - "expression": { - "id": 20233, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20228, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20226, - "src": "33914:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20231, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20223, - "src": "33933:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20230, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "33927:5:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int16_$", - "typeString": "type(int16)" - }, - "typeName": { - "id": 20229, - "name": "int16", - "nodeType": "ElementaryTypeName", - "src": "33927:5:68", - "typeDescriptions": {} - } - }, - "id": 20232, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33927:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - } - }, - "src": "33914:25:68", - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - } - }, - "id": 20234, - "nodeType": "ExpressionStatement", - "src": "33914:25:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20238, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20236, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20226, - "src": "33957:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20237, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20223, - "src": "33971:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "33957:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473", - "id": 20239, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "33978:40:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033", - "typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\"" - }, - "value": "SafeCast: value doesn't fit in 16 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033", - "typeString": "literal_string \"SafeCast: value doesn't fit in 16 bits\"" - } - ], - "id": 20235, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "33949:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20240, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "33949:70:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20241, - "nodeType": "ExpressionStatement", - "src": "33949:70:68" - } - ] - }, - "documentation": { - "id": 20221, - "nodeType": "StructuredDocumentation", - "src": "33482:345:68", - "text": " @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v3.1._" - }, - "id": 20243, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt16", - "nameLocation": "33841:7:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20224, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20223, - "mutability": "mutable", - "name": "value", - "nameLocation": "33856:5:68", - "nodeType": "VariableDeclaration", - "scope": 20243, - "src": "33849:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20222, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "33849:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "33848:14:68" - }, - "returnParameters": { - "id": 20227, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20226, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "33892:10:68", - "nodeType": "VariableDeclaration", - "scope": 20243, - "src": "33886:16:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - }, - "typeName": { - "id": 20225, - "name": "int16", - "nodeType": "ElementaryTypeName", - "src": "33886:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int16", - "typeString": "int16" - } - }, - "visibility": "internal" - } - ], - "src": "33885:18:68" - }, - "scope": 20295, - "src": "33832:194:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20265, - "nodeType": "Block", - "src": "34447:120:68", - "statements": [ - { - "expression": { - "id": 20256, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 20251, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20249, - "src": "34457:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 20254, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20246, - "src": "34475:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20253, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "34470:4:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int8_$", - "typeString": "type(int8)" - }, - "typeName": { - "id": 20252, - "name": "int8", - "nodeType": "ElementaryTypeName", - "src": "34470:4:68", - "typeDescriptions": {} - } - }, - "id": 20255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34470:11:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - } - }, - "src": "34457:24:68", - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - } - }, - "id": 20257, - "nodeType": "ExpressionStatement", - "src": "34457:24:68" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "id": 20261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20259, - "name": "downcasted", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20249, - "src": "34499:10:68", - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 20260, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20246, - "src": "34513:5:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "src": "34499:19:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473", - "id": 20262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "34520:39:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\"" - }, - "value": "SafeCast: value doesn't fit in 8 bits" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1", - "typeString": "literal_string \"SafeCast: value doesn't fit in 8 bits\"" - } - ], - "id": 20258, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "34491:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20263, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34491:69:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20264, - "nodeType": "ExpressionStatement", - "src": "34491:69:68" - } - ] - }, - "documentation": { - "id": 20244, - "nodeType": "StructuredDocumentation", - "src": "34032:340:68", - "text": " @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits\n _Available since v3.1._" - }, - "id": 20266, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt8", - "nameLocation": "34386:6:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20247, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20246, - "mutability": "mutable", - "name": "value", - "nameLocation": "34400:5:68", - "nodeType": "VariableDeclaration", - "scope": 20266, - "src": "34393:12:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20245, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "34393:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "34392:14:68" - }, - "returnParameters": { - "id": 20250, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20249, - "mutability": "mutable", - "name": "downcasted", - "nameLocation": "34435:10:68", - "nodeType": "VariableDeclaration", - "scope": 20266, - "src": "34430:15:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - }, - "typeName": { - "id": 20248, - "name": "int8", - "nodeType": "ElementaryTypeName", - "src": "34430:4:68", - "typeDescriptions": { - "typeIdentifier": "t_int8", - "typeString": "int8" - } - }, - "visibility": "internal" - } - ], - "src": "34429:17:68" - }, - "scope": 20295, - "src": "34377:190:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20293, - "nodeType": "Block", - "src": "34845:233:68", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20275, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20269, - "src": "34962:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<=", - "rightExpression": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 20280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "34984:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int256_$", - "typeString": "type(int256)" - }, - "typeName": { - "id": 20279, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "34984:6:68", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_int256_$", - "typeString": "type(int256)" - } - ], - "id": 20278, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "34979:4:68", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 20281, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34979:12:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_int256", - "typeString": "type(int256)" - } - }, - "id": 20282, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "34992:3:68", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "34979:16:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - ], - "id": 20277, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "34971:7:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20276, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34971:7:68", - "typeDescriptions": {} - } - }, - "id": 20283, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34971:25:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "34962:34:68", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "53616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536", - "id": 20285, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "34998:42:68", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227", - "typeString": "literal_string \"SafeCast: value doesn't fit in an int256\"" - }, - "value": "SafeCast: value doesn't fit in an int256" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227", - "typeString": "literal_string \"SafeCast: value doesn't fit in an int256\"" - } - ], - "id": 20274, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [4294967278, 4294967278], - "referencedDeclaration": 4294967278, - "src": "34954:7:68", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 20286, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "34954:87:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20287, - "nodeType": "ExpressionStatement", - "src": "34954:87:68" - }, - { - "expression": { - "arguments": [ - { - "id": 20290, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20269, - "src": "35065:5:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20289, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "35058:6:68", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_int256_$", - "typeString": "type(int256)" - }, - "typeName": { - "id": 20288, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "35058:6:68", - "typeDescriptions": {} - } - }, - "id": 20291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "35058:13:68", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "functionReturnParameters": 20273, - "id": 20292, - "nodeType": "Return", - "src": "35051:20:68" - } - ] - }, - "documentation": { - "id": 20267, - "nodeType": "StructuredDocumentation", - "src": "34573:203:68", - "text": " @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256.\n _Available since v3.0._" - }, - "id": 20294, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toInt256", - "nameLocation": "34790:8:68", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20270, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20269, - "mutability": "mutable", - "name": "value", - "nameLocation": "34807:5:68", - "nodeType": "VariableDeclaration", - "scope": 20294, - "src": "34799:13:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20268, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "34799:7:68", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "34798:15:68" - }, - "returnParameters": { - "id": 20273, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20272, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20294, - "src": "34837:6:68", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 20271, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "34837:6:68", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - } - ], - "src": "34836:8:68" - }, - "scope": 20295, - "src": "34781:297:68", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 20296, - "src": "927:34153:68", - "usedErrors": [] - } - ], - "src": "192:34889:68" - }, - "id": 68 - }, - "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "exportedSymbols": { - "EnumerableSet": [20908] - }, - "id": 20909, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 20297, - "literals": ["solidity", "^", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "205:23:69" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "EnumerableSet", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 20298, - "nodeType": "StructuredDocumentation", - "src": "230:1090:69", - "text": " @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n and `uint256` (`UintSet`) are supported.\n [WARNING]\n ====\n Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n unusable.\n See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n array of EnumerableSet.\n ====" - }, - "fullyImplemented": true, - "id": 20908, - "linearizedBaseContracts": [20908], - "name": "EnumerableSet", - "nameLocation": "1329:13:69", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "EnumerableSet.Set", - "id": 20306, - "members": [ - { - "constant": false, - "id": 20301, - "mutability": "mutable", - "name": "_values", - "nameLocation": "1853:7:69", - "nodeType": "VariableDeclaration", - "scope": 20306, - "src": "1843:17:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20299, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1843:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20300, - "nodeType": "ArrayTypeName", - "src": "1843:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20305, - "mutability": "mutable", - "name": "_indexes", - "nameLocation": "2021:8:69", - "nodeType": "VariableDeclaration", - "scope": 20306, - "src": "1993:36:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "typeName": { - "id": 20304, - "keyType": { - "id": 20302, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2001:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "1993:27:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - }, - "valueType": { - "id": 20303, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2012:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "internal" - } - ], - "name": "Set", - "nameLocation": "1796:3:69", - "nodeType": "StructDefinition", - "scope": 20908, - "src": "1789:247:69", - "visibility": "public" - }, - { - "body": { - "id": 20347, - "nodeType": "Block", - "src": "2275:335:69", - "statements": [ - { - "condition": { - "id": 20321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "2289:22:69", - "subExpression": { - "arguments": [ - { - "id": 20318, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20310, - "src": "2300:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - { - "id": 20319, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20312, - "src": "2305:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20317, - "name": "_contains", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20451, - "src": "2290:9:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)" - } - }, - "id": 20320, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2290:21:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 20345, - "nodeType": "Block", - "src": "2567:37:69", - "statements": [ - { - "expression": { - "hexValue": "66616c7365", - "id": 20343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2588:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 20316, - "id": 20344, - "nodeType": "Return", - "src": "2581:12:69" - } - ] - }, - "id": 20346, - "nodeType": "IfStatement", - "src": "2285:319:69", - "trueBody": { - "id": 20342, - "nodeType": "Block", - "src": "2313:248:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 20327, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20312, - "src": "2344:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "expression": { - "id": 20322, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20310, - "src": "2327:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20325, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2331:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "2327:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20326, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2339:4:69", - "memberName": "push", - "nodeType": "MemberAccess", - "src": "2327:16:69", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$", - "typeString": "function (bytes32[] storage pointer,bytes32)" - } - }, - "id": 20328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2327:23:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20329, - "nodeType": "ExpressionStatement", - "src": "2327:23:69" - }, - { - "expression": { - "id": 20338, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 20330, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20310, - "src": "2485:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20333, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2489:8:69", - "memberName": "_indexes", - "nodeType": "MemberAccess", - "referencedDeclaration": 20305, - "src": "2485:12:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 20334, - "indexExpression": { - "id": 20332, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20312, - "src": "2498:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2485:19:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "expression": { - "id": 20335, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20310, - "src": "2507:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20336, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2511:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "2507:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2519:6:69", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2507:18:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2485:40:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 20339, - "nodeType": "ExpressionStatement", - "src": "2485:40:69" - }, - { - "expression": { - "hexValue": "74727565", - "id": 20340, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2546:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 20316, - "id": 20341, - "nodeType": "Return", - "src": "2539:11:69" - } - ] - } - } - ] - }, - "documentation": { - "id": 20307, - "nodeType": "StructuredDocumentation", - "src": "2042:159:69", - "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present." - }, - "id": 20348, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_add", - "nameLocation": "2215:4:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20310, - "mutability": "mutable", - "name": "set", - "nameLocation": "2232:3:69", - "nodeType": "VariableDeclaration", - "scope": 20348, - "src": "2220:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20309, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20308, - "name": "Set", - "nameLocations": ["2220:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "2220:3:69" - }, - "referencedDeclaration": 20306, - "src": "2220:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20312, - "mutability": "mutable", - "name": "value", - "nameLocation": "2245:5:69", - "nodeType": "VariableDeclaration", - "scope": 20348, - "src": "2237:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20311, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2237:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2219:32:69" - }, - "returnParameters": { - "id": 20316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20315, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20348, - "src": "2269:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20314, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2269:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2268:6:69" - }, - "scope": 20908, - "src": "2206:404:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 20431, - "nodeType": "Block", - "src": "2850:1316:69", - "statements": [ - { - "assignments": [20360], - "declarations": [ - { - "constant": false, - "id": 20360, - "mutability": "mutable", - "name": "valueIndex", - "nameLocation": "2968:10:69", - "nodeType": "VariableDeclaration", - "scope": 20431, - "src": "2960:18:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20359, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2960:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 20365, - "initialValue": { - "baseExpression": { - "expression": { - "id": 20361, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "2981:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20362, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2985:8:69", - "memberName": "_indexes", - "nodeType": "MemberAccess", - "referencedDeclaration": 20305, - "src": "2981:12:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 20364, - "indexExpression": { - "id": 20363, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20354, - "src": "2994:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2981:19:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2960:40:69" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20368, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20366, - "name": "valueIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20360, - "src": "3015:10:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 20367, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3029:1:69", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3015:15:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 20429, - "nodeType": "Block", - "src": "4123:37:69", - "statements": [ - { - "expression": { - "hexValue": "66616c7365", - "id": 20427, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4144:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 20358, - "id": 20428, - "nodeType": "Return", - "src": "4137:12:69" - } - ] - }, - "id": 20430, - "nodeType": "IfStatement", - "src": "3011:1149:69", - "trueBody": { - "id": 20426, - "nodeType": "Block", - "src": "3032:1085:69", - "statements": [ - { - "assignments": [20370], - "declarations": [ - { - "constant": false, - "id": 20370, - "mutability": "mutable", - "name": "toDeleteIndex", - "nameLocation": "3392:13:69", - "nodeType": "VariableDeclaration", - "scope": 20426, - "src": "3384:21:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20369, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3384:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 20374, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20373, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20371, - "name": "valueIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20360, - "src": "3408:10:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 20372, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3421:1:69", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3408:14:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3384:38:69" - }, - { - "assignments": [20376], - "declarations": [ - { - "constant": false, - "id": 20376, - "mutability": "mutable", - "name": "lastIndex", - "nameLocation": "3444:9:69", - "nodeType": "VariableDeclaration", - "scope": 20426, - "src": "3436:17:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20375, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3436:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 20382, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20381, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 20377, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "3456:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20378, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3460:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "3456:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3468:6:69", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3456:18:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "hexValue": "31", - "id": 20380, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3477:1:69", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "3456:22:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3436:42:69" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20385, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 20383, - "name": "lastIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20376, - "src": "3497:9:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 20384, - "name": "toDeleteIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20370, - "src": "3510:13:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3497:26:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 20410, - "nodeType": "IfStatement", - "src": "3493:398:69", - "trueBody": { - "id": 20409, - "nodeType": "Block", - "src": "3525:366:69", - "statements": [ - { - "assignments": [20387], - "declarations": [ - { - "constant": false, - "id": 20387, - "mutability": "mutable", - "name": "lastValue", - "nameLocation": "3551:9:69", - "nodeType": "VariableDeclaration", - "scope": 20409, - "src": "3543:17:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20386, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3543:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 20392, - "initialValue": { - "baseExpression": { - "expression": { - "id": 20388, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "3563:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20389, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3567:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "3563:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20391, - "indexExpression": { - "id": 20390, - "name": "lastIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20376, - "src": "3575:9:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3563:22:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3543:42:69" - }, - { - "expression": { - "id": 20399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 20393, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "3685:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20396, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3689:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "3685:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20397, - "indexExpression": { - "id": 20395, - "name": "toDeleteIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20370, - "src": "3697:13:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3685:26:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 20398, - "name": "lastValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20387, - "src": "3714:9:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "3685:38:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20400, - "nodeType": "ExpressionStatement", - "src": "3685:38:69" - }, - { - "expression": { - "id": 20407, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "expression": { - "id": 20401, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "3797:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20404, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3801:8:69", - "memberName": "_indexes", - "nodeType": "MemberAccess", - "referencedDeclaration": 20305, - "src": "3797:12:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 20405, - "indexExpression": { - "id": 20403, - "name": "lastValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20387, - "src": "3810:9:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "3797:23:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 20406, - "name": "valueIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20360, - "src": "3823:10:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3797:36:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 20408, - "nodeType": "ExpressionStatement", - "src": "3797:36:69" - } - ] - } - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "expression": { - "id": 20411, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "3969:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20414, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3973:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "3969:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3981:3:69", - "memberName": "pop", - "nodeType": "MemberAccess", - "src": "3969:15:69", - "typeDescriptions": { - "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes32_$dyn_storage_ptr_$", - "typeString": "function (bytes32[] storage pointer)" - } - }, - "id": 20416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3969:17:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20417, - "nodeType": "ExpressionStatement", - "src": "3969:17:69" - }, - { - "expression": { - "id": 20422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "4054:26:69", - "subExpression": { - "baseExpression": { - "expression": { - "id": 20418, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20352, - "src": "4061:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20419, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4065:8:69", - "memberName": "_indexes", - "nodeType": "MemberAccess", - "referencedDeclaration": 20305, - "src": "4061:12:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 20421, - "indexExpression": { - "id": 20420, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20354, - "src": "4074:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "4061:19:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 20423, - "nodeType": "ExpressionStatement", - "src": "4054:26:69" - }, - { - "expression": { - "hexValue": "74727565", - "id": 20424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4102:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 20358, - "id": 20425, - "nodeType": "Return", - "src": "4095:11:69" - } - ] - } - } - ] - }, - "documentation": { - "id": 20349, - "nodeType": "StructuredDocumentation", - "src": "2616:157:69", - "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present." - }, - "id": 20432, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_remove", - "nameLocation": "2787:7:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20355, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20352, - "mutability": "mutable", - "name": "set", - "nameLocation": "2807:3:69", - "nodeType": "VariableDeclaration", - "scope": 20432, - "src": "2795:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20351, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20350, - "name": "Set", - "nameLocations": ["2795:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "2795:3:69" - }, - "referencedDeclaration": 20306, - "src": "2795:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20354, - "mutability": "mutable", - "name": "value", - "nameLocation": "2820:5:69", - "nodeType": "VariableDeclaration", - "scope": 20432, - "src": "2812:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20353, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2812:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2794:32:69" - }, - "returnParameters": { - "id": 20358, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20357, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20432, - "src": "2844:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20356, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2844:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2843:6:69" - }, - "scope": 20908, - "src": "2778:1388:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 20450, - "nodeType": "Block", - "src": "4326:48:69", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 20448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "expression": { - "id": 20443, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20436, - "src": "4343:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20444, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4347:8:69", - "memberName": "_indexes", - "nodeType": "MemberAccess", - "referencedDeclaration": 20305, - "src": "4343:12:69", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", - "typeString": "mapping(bytes32 => uint256)" - } - }, - "id": 20446, - "indexExpression": { - "id": 20445, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20438, - "src": "4356:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4343:19:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 20447, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4366:1:69", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4343:24:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20442, - "id": 20449, - "nodeType": "Return", - "src": "4336:31:69" - } - ] - }, - "documentation": { - "id": 20433, - "nodeType": "StructuredDocumentation", - "src": "4172:70:69", - "text": " @dev Returns true if the value is in the set. O(1)." - }, - "id": 20451, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_contains", - "nameLocation": "4256:9:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20439, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20436, - "mutability": "mutable", - "name": "set", - "nameLocation": "4278:3:69", - "nodeType": "VariableDeclaration", - "scope": 20451, - "src": "4266:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20435, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20434, - "name": "Set", - "nameLocations": ["4266:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "4266:3:69" - }, - "referencedDeclaration": 20306, - "src": "4266:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20438, - "mutability": "mutable", - "name": "value", - "nameLocation": "4291:5:69", - "nodeType": "VariableDeclaration", - "scope": 20451, - "src": "4283:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20437, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4283:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4265:32:69" - }, - "returnParameters": { - "id": 20442, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20441, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20451, - "src": "4320:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20440, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4320:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4319:6:69" - }, - "scope": 20908, - "src": "4247:127:69", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 20464, - "nodeType": "Block", - "src": "4520:42:69", - "statements": [ - { - "expression": { - "expression": { - "expression": { - "id": 20460, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20455, - "src": "4537:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20461, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4541:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "4537:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20462, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4549:6:69", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4537:18:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 20459, - "id": 20463, - "nodeType": "Return", - "src": "4530:25:69" - } - ] - }, - "documentation": { - "id": 20452, - "nodeType": "StructuredDocumentation", - "src": "4380:70:69", - "text": " @dev Returns the number of values on the set. O(1)." - }, - "id": 20465, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_length", - "nameLocation": "4464:7:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20455, - "mutability": "mutable", - "name": "set", - "nameLocation": "4484:3:69", - "nodeType": "VariableDeclaration", - "scope": 20465, - "src": "4472:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20454, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20453, - "name": "Set", - "nameLocations": ["4472:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "4472:3:69" - }, - "referencedDeclaration": 20306, - "src": "4472:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - } - ], - "src": "4471:17:69" - }, - "returnParameters": { - "id": 20459, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20458, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20465, - "src": "4511:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20457, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4511:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4510:9:69" - }, - "scope": 20908, - "src": "4455:107:69", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 20481, - "nodeType": "Block", - "src": "4980:42:69", - "statements": [ - { - "expression": { - "baseExpression": { - "expression": { - "id": 20476, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20469, - "src": "4997:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20477, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5001:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "4997:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "id": 20479, - "indexExpression": { - "id": 20478, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20471, - "src": "5009:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4997:18:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 20475, - "id": 20480, - "nodeType": "Return", - "src": "4990:25:69" - } - ] - }, - "documentation": { - "id": 20466, - "nodeType": "StructuredDocumentation", - "src": "4568:331:69", - "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." - }, - "id": 20482, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_at", - "nameLocation": "4913:3:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20472, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20469, - "mutability": "mutable", - "name": "set", - "nameLocation": "4929:3:69", - "nodeType": "VariableDeclaration", - "scope": 20482, - "src": "4917:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20468, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20467, - "name": "Set", - "nameLocations": ["4917:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "4917:3:69" - }, - "referencedDeclaration": 20306, - "src": "4917:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20471, - "mutability": "mutable", - "name": "index", - "nameLocation": "4942:5:69", - "nodeType": "VariableDeclaration", - "scope": 20482, - "src": "4934:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20470, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4934:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4916:32:69" - }, - "returnParameters": { - "id": 20475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20474, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20482, - "src": "4971:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20473, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4971:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4970:9:69" - }, - "scope": 20908, - "src": "4904:118:69", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 20495, - "nodeType": "Block", - "src": "5636:35:69", - "statements": [ - { - "expression": { - "expression": { - "id": 20492, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20486, - "src": "5653:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set storage pointer" - } - }, - "id": 20493, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5657:7:69", - "memberName": "_values", - "nodeType": "MemberAccess", - "referencedDeclaration": 20301, - "src": "5653:11:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage", - "typeString": "bytes32[] storage ref" - } - }, - "functionReturnParameters": 20491, - "id": 20494, - "nodeType": "Return", - "src": "5646:18:69" - } - ] - }, - "documentation": { - "id": 20483, - "nodeType": "StructuredDocumentation", - "src": "5028:529:69", - "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block." - }, - "id": 20496, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_values", - "nameLocation": "5571:7:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20487, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20486, - "mutability": "mutable", - "name": "set", - "nameLocation": "5591:3:69", - "nodeType": "VariableDeclaration", - "scope": 20496, - "src": "5579:15:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20485, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20484, - "name": "Set", - "nameLocations": ["5579:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "5579:3:69" - }, - "referencedDeclaration": 20306, - "src": "5579:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - } - ], - "src": "5578:17:69" - }, - "returnParameters": { - "id": 20491, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20490, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20496, - "src": "5618:16:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20488, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5618:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20489, - "nodeType": "ArrayTypeName", - "src": "5618:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "src": "5617:18:69" - }, - "scope": 20908, - "src": "5562:109:69", - "stateMutability": "view", - "virtual": false, - "visibility": "private" - }, - { - "canonicalName": "EnumerableSet.Bytes32Set", - "id": 20500, - "members": [ - { - "constant": false, - "id": 20499, - "mutability": "mutable", - "name": "_inner", - "nameLocation": "5728:6:69", - "nodeType": "VariableDeclaration", - "scope": 20500, - "src": "5724:10:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20498, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20497, - "name": "Set", - "nameLocations": ["5724:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "5724:3:69" - }, - "referencedDeclaration": 20306, - "src": "5724:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - } - ], - "name": "Bytes32Set", - "nameLocation": "5703:10:69", - "nodeType": "StructDefinition", - "scope": 20908, - "src": "5696:45:69", - "visibility": "public" - }, - { - "body": { - "id": 20517, - "nodeType": "Block", - "src": "5987:47:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20512, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20504, - "src": "6009:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20513, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6013:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "6009:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20514, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20506, - "src": "6021:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20511, - "name": "_add", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20348, - "src": "6004:4:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20515, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6004:23:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20510, - "id": 20516, - "nodeType": "Return", - "src": "5997:30:69" - } - ] - }, - "documentation": { - "id": 20501, - "nodeType": "StructuredDocumentation", - "src": "5747:159:69", - "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present." - }, - "id": 20518, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nameLocation": "5920:3:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20504, - "mutability": "mutable", - "name": "set", - "nameLocation": "5943:3:69", - "nodeType": "VariableDeclaration", - "scope": 20518, - "src": "5924:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20503, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20502, - "name": "Bytes32Set", - "nameLocations": ["5924:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "5924:10:69" - }, - "referencedDeclaration": 20500, - "src": "5924:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20506, - "mutability": "mutable", - "name": "value", - "nameLocation": "5956:5:69", - "nodeType": "VariableDeclaration", - "scope": 20518, - "src": "5948:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20505, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5948:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5923:39:69" - }, - "returnParameters": { - "id": 20510, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20509, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20518, - "src": "5981:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20508, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5981:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5980:6:69" - }, - "scope": 20908, - "src": "5911:123:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20535, - "nodeType": "Block", - "src": "6281:50:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20530, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20522, - "src": "6306:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20531, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6310:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "6306:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20532, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20524, - "src": "6318:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20529, - "name": "_remove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20432, - "src": "6298:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6298:26:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20528, - "id": 20534, - "nodeType": "Return", - "src": "6291:33:69" - } - ] - }, - "documentation": { - "id": 20519, - "nodeType": "StructuredDocumentation", - "src": "6040:157:69", - "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present." - }, - "id": 20536, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nameLocation": "6211:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20525, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20522, - "mutability": "mutable", - "name": "set", - "nameLocation": "6237:3:69", - "nodeType": "VariableDeclaration", - "scope": 20536, - "src": "6218:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20521, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20520, - "name": "Bytes32Set", - "nameLocations": ["6218:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "6218:10:69" - }, - "referencedDeclaration": 20500, - "src": "6218:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20524, - "mutability": "mutable", - "name": "value", - "nameLocation": "6250:5:69", - "nodeType": "VariableDeclaration", - "scope": 20536, - "src": "6242:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20523, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6242:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6217:39:69" - }, - "returnParameters": { - "id": 20528, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20527, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20536, - "src": "6275:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20526, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6275:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6274:6:69" - }, - "scope": 20908, - "src": "6202:129:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20553, - "nodeType": "Block", - "src": "6498:52:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20548, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20540, - "src": "6525:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20549, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6529:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "6525:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20550, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20542, - "src": "6537:5:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20547, - "name": "_contains", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20451, - "src": "6515:9:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)" - } - }, - "id": 20551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6515:28:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20546, - "id": 20552, - "nodeType": "Return", - "src": "6508:35:69" - } - ] - }, - "documentation": { - "id": 20537, - "nodeType": "StructuredDocumentation", - "src": "6337:70:69", - "text": " @dev Returns true if the value is in the set. O(1)." - }, - "id": 20554, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "contains", - "nameLocation": "6421:8:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20543, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20540, - "mutability": "mutable", - "name": "set", - "nameLocation": "6449:3:69", - "nodeType": "VariableDeclaration", - "scope": 20554, - "src": "6430:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20539, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20538, - "name": "Bytes32Set", - "nameLocations": ["6430:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "6430:10:69" - }, - "referencedDeclaration": 20500, - "src": "6430:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20542, - "mutability": "mutable", - "name": "value", - "nameLocation": "6462:5:69", - "nodeType": "VariableDeclaration", - "scope": 20554, - "src": "6454:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20541, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6454:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "6429:39:69" - }, - "returnParameters": { - "id": 20546, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20545, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20554, - "src": "6492:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20544, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6492:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6491:6:69" - }, - "scope": 20908, - "src": "6412:138:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20568, - "nodeType": "Block", - "src": "6703:43:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20564, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20558, - "src": "6728:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20565, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6732:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "6728:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20563, - "name": "_length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20465, - "src": "6720:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_uint256_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)" - } - }, - "id": 20566, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6720:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 20562, - "id": 20567, - "nodeType": "Return", - "src": "6713:26:69" - } - ] - }, - "documentation": { - "id": 20555, - "nodeType": "StructuredDocumentation", - "src": "6556:70:69", - "text": " @dev Returns the number of values in the set. O(1)." - }, - "id": 20569, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "length", - "nameLocation": "6640:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20559, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20558, - "mutability": "mutable", - "name": "set", - "nameLocation": "6666:3:69", - "nodeType": "VariableDeclaration", - "scope": 20569, - "src": "6647:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20557, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20556, - "name": "Bytes32Set", - "nameLocations": ["6647:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "6647:10:69" - }, - "referencedDeclaration": 20500, - "src": "6647:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - } - ], - "src": "6646:24:69" - }, - "returnParameters": { - "id": 20562, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20561, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20569, - "src": "6694:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20560, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6694:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6693:9:69" - }, - "scope": 20908, - "src": "6631:115:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20586, - "nodeType": "Block", - "src": "7171:46:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20581, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20573, - "src": "7192:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20582, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7196:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "7192:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20583, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20575, - "src": "7204:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20580, - "name": "_at", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20482, - "src": "7188:3:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)" - } - }, - "id": 20584, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7188:22:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 20579, - "id": 20585, - "nodeType": "Return", - "src": "7181:29:69" - } - ] - }, - "documentation": { - "id": 20570, - "nodeType": "StructuredDocumentation", - "src": "6752:331:69", - "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." - }, - "id": 20587, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "at", - "nameLocation": "7097:2:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20576, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20573, - "mutability": "mutable", - "name": "set", - "nameLocation": "7119:3:69", - "nodeType": "VariableDeclaration", - "scope": 20587, - "src": "7100:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20572, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20571, - "name": "Bytes32Set", - "nameLocations": ["7100:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "7100:10:69" - }, - "referencedDeclaration": 20500, - "src": "7100:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20575, - "mutability": "mutable", - "name": "index", - "nameLocation": "7132:5:69", - "nodeType": "VariableDeclaration", - "scope": 20587, - "src": "7124:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20574, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7124:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7099:39:69" - }, - "returnParameters": { - "id": 20579, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20578, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20587, - "src": "7162:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 20577, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7162:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "7161:9:69" - }, - "scope": 20908, - "src": "7088:129:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20616, - "nodeType": "Block", - "src": "7838:219:69", - "statements": [ - { - "assignments": [20601], - "declarations": [ - { - "constant": false, - "id": 20601, - "mutability": "mutable", - "name": "store", - "nameLocation": "7865:5:69", - "nodeType": "VariableDeclaration", - "scope": 20616, - "src": "7848:22:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20599, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7848:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20600, - "nodeType": "ArrayTypeName", - "src": "7848:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "id": 20606, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 20603, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20591, - "src": "7881:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set storage pointer" - } - }, - "id": 20604, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7885:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20499, - "src": "7881:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20602, - "name": "_values", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20496, - "src": "7873:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)" - } - }, - "id": 20605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7873:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[] memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7848:44:69" - }, - { - "assignments": [20611], - "declarations": [ - { - "constant": false, - "id": 20611, - "mutability": "mutable", - "name": "result", - "nameLocation": "7919:6:69", - "nodeType": "VariableDeclaration", - "scope": 20616, - "src": "7902:23:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20609, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7902:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20610, - "nodeType": "ArrayTypeName", - "src": "7902:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "id": 20612, - "nodeType": "VariableDeclarationStatement", - "src": "7902:23:69" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "7988:39:69", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8002:15:69", - "value": { - "name": "store", - "nodeType": "YulIdentifier", - "src": "8012:5:69" - }, - "variableNames": [ - { - "name": "result", - "nodeType": "YulIdentifier", - "src": "8002:6:69" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 20611, - "isOffset": false, - "isSlot": false, - "src": "8002:6:69", - "valueSize": 1 - }, - { - "declaration": 20601, - "isOffset": false, - "isSlot": false, - "src": "8012:5:69", - "valueSize": 1 - } - ], - "id": 20613, - "nodeType": "InlineAssembly", - "src": "7979:48:69" - }, - { - "expression": { - "id": 20614, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20611, - "src": "8044:6:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[] memory" - } - }, - "functionReturnParameters": 20596, - "id": 20615, - "nodeType": "Return", - "src": "8037:13:69" - } - ] - }, - "documentation": { - "id": 20588, - "nodeType": "StructuredDocumentation", - "src": "7223:529:69", - "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block." - }, - "id": 20617, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "values", - "nameLocation": "7766:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20592, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20591, - "mutability": "mutable", - "name": "set", - "nameLocation": "7792:3:69", - "nodeType": "VariableDeclaration", - "scope": 20617, - "src": "7773:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - }, - "typeName": { - "id": 20590, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20589, - "name": "Bytes32Set", - "nameLocations": ["7773:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20500, - "src": "7773:10:69" - }, - "referencedDeclaration": 20500, - "src": "7773:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Bytes32Set_$20500_storage_ptr", - "typeString": "struct EnumerableSet.Bytes32Set" - } - }, - "visibility": "internal" - } - ], - "src": "7772:24:69" - }, - "returnParameters": { - "id": 20596, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20595, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20617, - "src": "7820:16:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20593, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "7820:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20594, - "nodeType": "ArrayTypeName", - "src": "7820:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "src": "7819:18:69" - }, - "scope": 20908, - "src": "7757:300:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "canonicalName": "EnumerableSet.AddressSet", - "id": 20621, - "members": [ - { - "constant": false, - "id": 20620, - "mutability": "mutable", - "name": "_inner", - "nameLocation": "8114:6:69", - "nodeType": "VariableDeclaration", - "scope": 20621, - "src": "8110:10:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20619, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20618, - "name": "Set", - "nameLocations": ["8110:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "8110:3:69" - }, - "referencedDeclaration": 20306, - "src": "8110:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - } - ], - "name": "AddressSet", - "nameLocation": "8089:10:69", - "nodeType": "StructDefinition", - "scope": 20908, - "src": "8082:45:69", - "visibility": "public" - }, - { - "body": { - "id": 20647, - "nodeType": "Block", - "src": "8373:74:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20633, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20625, - "src": "8395:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20634, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8399:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "8395:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 20641, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20627, - "src": "8431:5:69", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 20640, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8423:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 20639, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "8423:7:69", - "typeDescriptions": {} - } - }, - "id": 20642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8423:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 20638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8415:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20637, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8415:7:69", - "typeDescriptions": {} - } - }, - "id": 20643, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8415:23:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20636, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8407:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20635, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8407:7:69", - "typeDescriptions": {} - } - }, - "id": 20644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8407:32:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20632, - "name": "_add", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20348, - "src": "8390:4:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20645, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8390:50:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20631, - "id": 20646, - "nodeType": "Return", - "src": "8383:57:69" - } - ] - }, - "documentation": { - "id": 20622, - "nodeType": "StructuredDocumentation", - "src": "8133:159:69", - "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present." - }, - "id": 20648, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nameLocation": "8306:3:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20628, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20625, - "mutability": "mutable", - "name": "set", - "nameLocation": "8329:3:69", - "nodeType": "VariableDeclaration", - "scope": 20648, - "src": "8310:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20624, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20623, - "name": "AddressSet", - "nameLocations": ["8310:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "8310:10:69" - }, - "referencedDeclaration": 20621, - "src": "8310:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20627, - "mutability": "mutable", - "name": "value", - "nameLocation": "8342:5:69", - "nodeType": "VariableDeclaration", - "scope": 20648, - "src": "8334:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 20626, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8334:7:69", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8309:39:69" - }, - "returnParameters": { - "id": 20631, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20630, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20648, - "src": "8367:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20629, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8367:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8366:6:69" - }, - "scope": 20908, - "src": "8297:150:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20674, - "nodeType": "Block", - "src": "8694:77:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20660, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20652, - "src": "8719:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20661, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8723:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "8719:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 20668, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20654, - "src": "8755:5:69", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 20667, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8747:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 20666, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "8747:7:69", - "typeDescriptions": {} - } - }, - "id": 20669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8747:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 20665, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8739:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20664, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8739:7:69", - "typeDescriptions": {} - } - }, - "id": 20670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8739:23:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20663, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8731:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20662, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8731:7:69", - "typeDescriptions": {} - } - }, - "id": 20671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8731:32:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20659, - "name": "_remove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20432, - "src": "8711:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8711:53:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20658, - "id": 20673, - "nodeType": "Return", - "src": "8704:60:69" - } - ] - }, - "documentation": { - "id": 20649, - "nodeType": "StructuredDocumentation", - "src": "8453:157:69", - "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present." - }, - "id": 20675, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nameLocation": "8624:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20655, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20652, - "mutability": "mutable", - "name": "set", - "nameLocation": "8650:3:69", - "nodeType": "VariableDeclaration", - "scope": 20675, - "src": "8631:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20651, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20650, - "name": "AddressSet", - "nameLocations": ["8631:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "8631:10:69" - }, - "referencedDeclaration": 20621, - "src": "8631:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20654, - "mutability": "mutable", - "name": "value", - "nameLocation": "8663:5:69", - "nodeType": "VariableDeclaration", - "scope": 20675, - "src": "8655:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 20653, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8655:7:69", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8630:39:69" - }, - "returnParameters": { - "id": 20658, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20657, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20675, - "src": "8688:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20656, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8688:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8687:6:69" - }, - "scope": 20908, - "src": "8615:156:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20701, - "nodeType": "Block", - "src": "8938:79:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20687, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20679, - "src": "8965:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20688, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8969:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "8965:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 20695, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20681, - "src": "9001:5:69", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 20694, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8993:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 20693, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "8993:7:69", - "typeDescriptions": {} - } - }, - "id": 20696, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8993:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 20692, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8985:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20691, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8985:7:69", - "typeDescriptions": {} - } - }, - "id": 20697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8985:23:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20690, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8977:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20689, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "8977:7:69", - "typeDescriptions": {} - } - }, - "id": 20698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8977:32:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20686, - "name": "_contains", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20451, - "src": "8955:9:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)" - } - }, - "id": 20699, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8955:55:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20685, - "id": 20700, - "nodeType": "Return", - "src": "8948:62:69" - } - ] - }, - "documentation": { - "id": 20676, - "nodeType": "StructuredDocumentation", - "src": "8777:70:69", - "text": " @dev Returns true if the value is in the set. O(1)." - }, - "id": 20702, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "contains", - "nameLocation": "8861:8:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20682, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20679, - "mutability": "mutable", - "name": "set", - "nameLocation": "8889:3:69", - "nodeType": "VariableDeclaration", - "scope": 20702, - "src": "8870:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20678, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20677, - "name": "AddressSet", - "nameLocations": ["8870:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "8870:10:69" - }, - "referencedDeclaration": 20621, - "src": "8870:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20681, - "mutability": "mutable", - "name": "value", - "nameLocation": "8902:5:69", - "nodeType": "VariableDeclaration", - "scope": 20702, - "src": "8894:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 20680, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8894:7:69", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8869:39:69" - }, - "returnParameters": { - "id": 20685, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20684, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20702, - "src": "8932:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20683, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8932:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "8931:6:69" - }, - "scope": 20908, - "src": "8852:165:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20716, - "nodeType": "Block", - "src": "9170:43:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20712, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20706, - "src": "9195:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20713, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9199:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "9195:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20711, - "name": "_length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20465, - "src": "9187:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_uint256_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)" - } - }, - "id": 20714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9187:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 20710, - "id": 20715, - "nodeType": "Return", - "src": "9180:26:69" - } - ] - }, - "documentation": { - "id": 20703, - "nodeType": "StructuredDocumentation", - "src": "9023:70:69", - "text": " @dev Returns the number of values in the set. O(1)." - }, - "id": 20717, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "length", - "nameLocation": "9107:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20707, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20706, - "mutability": "mutable", - "name": "set", - "nameLocation": "9133:3:69", - "nodeType": "VariableDeclaration", - "scope": 20717, - "src": "9114:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20705, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20704, - "name": "AddressSet", - "nameLocations": ["9114:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "9114:10:69" - }, - "referencedDeclaration": 20621, - "src": "9114:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - } - ], - "src": "9113:24:69" - }, - "returnParameters": { - "id": 20710, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20709, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20717, - "src": "9161:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20708, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9161:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9160:9:69" - }, - "scope": 20908, - "src": "9098:115:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20743, - "nodeType": "Block", - "src": "9638:73:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 20735, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20721, - "src": "9683:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20736, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9687:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "9683:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20737, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20723, - "src": "9695:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20734, - "name": "_at", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20482, - "src": "9679:3:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)" - } - }, - "id": 20738, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9679:22:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20733, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9671:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20732, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9671:7:69", - "typeDescriptions": {} - } - }, - "id": 20739, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9671:31:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20731, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9663:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 20730, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "9663:7:69", - "typeDescriptions": {} - } - }, - "id": 20740, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9663:40:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 20729, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9655:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 20728, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9655:7:69", - "typeDescriptions": {} - } - }, - "id": 20741, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9655:49:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 20727, - "id": 20742, - "nodeType": "Return", - "src": "9648:56:69" - } - ] - }, - "documentation": { - "id": 20718, - "nodeType": "StructuredDocumentation", - "src": "9219:331:69", - "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." - }, - "id": 20744, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "at", - "nameLocation": "9564:2:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20724, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20721, - "mutability": "mutable", - "name": "set", - "nameLocation": "9586:3:69", - "nodeType": "VariableDeclaration", - "scope": 20744, - "src": "9567:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20720, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20719, - "name": "AddressSet", - "nameLocations": ["9567:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "9567:10:69" - }, - "referencedDeclaration": 20621, - "src": "9567:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20723, - "mutability": "mutable", - "name": "index", - "nameLocation": "9599:5:69", - "nodeType": "VariableDeclaration", - "scope": 20744, - "src": "9591:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20722, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9591:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "9566:39:69" - }, - "returnParameters": { - "id": 20727, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20726, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20744, - "src": "9629:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 20725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9629:7:69", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9628:9:69" - }, - "scope": 20908, - "src": "9555:156:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20773, - "nodeType": "Block", - "src": "10332:219:69", - "statements": [ - { - "assignments": [20758], - "declarations": [ - { - "constant": false, - "id": 20758, - "mutability": "mutable", - "name": "store", - "nameLocation": "10359:5:69", - "nodeType": "VariableDeclaration", - "scope": 20773, - "src": "10342:22:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20756, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10342:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20757, - "nodeType": "ArrayTypeName", - "src": "10342:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "id": 20763, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 20760, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20748, - "src": "10375:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet storage pointer" - } - }, - "id": 20761, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10379:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20620, - "src": "10375:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20759, - "name": "_values", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20496, - "src": "10367:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)" - } - }, - "id": 20762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10367:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[] memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10342:44:69" - }, - { - "assignments": [20768], - "declarations": [ - { - "constant": false, - "id": 20768, - "mutability": "mutable", - "name": "result", - "nameLocation": "10413:6:69", - "nodeType": "VariableDeclaration", - "scope": 20773, - "src": "10396:23:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 20766, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10396:7:69", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 20767, - "nodeType": "ArrayTypeName", - "src": "10396:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "id": 20769, - "nodeType": "VariableDeclarationStatement", - "src": "10396:23:69" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "10482:39:69", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10496:15:69", - "value": { - "name": "store", - "nodeType": "YulIdentifier", - "src": "10506:5:69" - }, - "variableNames": [ - { - "name": "result", - "nodeType": "YulIdentifier", - "src": "10496:6:69" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 20768, - "isOffset": false, - "isSlot": false, - "src": "10496:6:69", - "valueSize": 1 - }, - { - "declaration": 20758, - "isOffset": false, - "isSlot": false, - "src": "10506:5:69", - "valueSize": 1 - } - ], - "id": 20770, - "nodeType": "InlineAssembly", - "src": "10473:48:69" - }, - { - "expression": { - "id": 20771, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20768, - "src": "10538:6:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[] memory" - } - }, - "functionReturnParameters": 20753, - "id": 20772, - "nodeType": "Return", - "src": "10531:13:69" - } - ] - }, - "documentation": { - "id": 20745, - "nodeType": "StructuredDocumentation", - "src": "9717:529:69", - "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block." - }, - "id": 20774, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "values", - "nameLocation": "10260:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20749, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20748, - "mutability": "mutable", - "name": "set", - "nameLocation": "10286:3:69", - "nodeType": "VariableDeclaration", - "scope": 20774, - "src": "10267:22:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - }, - "typeName": { - "id": 20747, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20746, - "name": "AddressSet", - "nameLocations": ["10267:10:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20621, - "src": "10267:10:69" - }, - "referencedDeclaration": 20621, - "src": "10267:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_AddressSet_$20621_storage_ptr", - "typeString": "struct EnumerableSet.AddressSet" - } - }, - "visibility": "internal" - } - ], - "src": "10266:24:69" - }, - "returnParameters": { - "id": 20753, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20752, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20774, - "src": "10314:16:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 20750, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10314:7:69", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 20751, - "nodeType": "ArrayTypeName", - "src": "10314:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "10313:18:69" - }, - "scope": 20908, - "src": "10251:300:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "canonicalName": "EnumerableSet.UintSet", - "id": 20778, - "members": [ - { - "constant": false, - "id": 20777, - "mutability": "mutable", - "name": "_inner", - "nameLocation": "10602:6:69", - "nodeType": "VariableDeclaration", - "scope": 20778, - "src": "10598:10:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - }, - "typeName": { - "id": 20776, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20775, - "name": "Set", - "nameLocations": ["10598:3:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20306, - "src": "10598:3:69" - }, - "referencedDeclaration": 20306, - "src": "10598:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage_ptr", - "typeString": "struct EnumerableSet.Set" - } - }, - "visibility": "internal" - } - ], - "name": "UintSet", - "nameLocation": "10580:7:69", - "nodeType": "StructDefinition", - "scope": 20908, - "src": "10573:42:69", - "visibility": "public" - }, - { - "body": { - "id": 20798, - "nodeType": "Block", - "src": "10858:56:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20790, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20782, - "src": "10880:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20791, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10884:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "10880:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "id": 20794, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20784, - "src": "10900:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20793, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10892:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20792, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "10892:7:69", - "typeDescriptions": {} - } - }, - "id": 20795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10892:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20789, - "name": "_add", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20348, - "src": "10875:4:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10875:32:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20788, - "id": 20797, - "nodeType": "Return", - "src": "10868:39:69" - } - ] - }, - "documentation": { - "id": 20779, - "nodeType": "StructuredDocumentation", - "src": "10621:159:69", - "text": " @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present." - }, - "id": 20799, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "add", - "nameLocation": "10794:3:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20782, - "mutability": "mutable", - "name": "set", - "nameLocation": "10814:3:69", - "nodeType": "VariableDeclaration", - "scope": 20799, - "src": "10798:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20781, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20780, - "name": "UintSet", - "nameLocations": ["10798:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "10798:7:69" - }, - "referencedDeclaration": 20778, - "src": "10798:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20784, - "mutability": "mutable", - "name": "value", - "nameLocation": "10827:5:69", - "nodeType": "VariableDeclaration", - "scope": 20799, - "src": "10819:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20783, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10819:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10797:36:69" - }, - "returnParameters": { - "id": 20788, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20787, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20799, - "src": "10852:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20786, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "10852:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "10851:6:69" - }, - "scope": 20908, - "src": "10785:129:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20819, - "nodeType": "Block", - "src": "11158:59:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20811, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20803, - "src": "11183:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20812, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11187:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "11183:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "id": 20815, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20805, - "src": "11203:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20814, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11195:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20813, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11195:7:69", - "typeDescriptions": {} - } - }, - "id": 20816, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11195:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20810, - "name": "_remove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20432, - "src": "11175:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)" - } - }, - "id": 20817, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11175:35:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20809, - "id": 20818, - "nodeType": "Return", - "src": "11168:42:69" - } - ] - }, - "documentation": { - "id": 20800, - "nodeType": "StructuredDocumentation", - "src": "10920:157:69", - "text": " @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present." - }, - "id": 20820, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "remove", - "nameLocation": "11091:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20806, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20803, - "mutability": "mutable", - "name": "set", - "nameLocation": "11114:3:69", - "nodeType": "VariableDeclaration", - "scope": 20820, - "src": "11098:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20802, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20801, - "name": "UintSet", - "nameLocations": ["11098:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "11098:7:69" - }, - "referencedDeclaration": 20778, - "src": "11098:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20805, - "mutability": "mutable", - "name": "value", - "nameLocation": "11127:5:69", - "nodeType": "VariableDeclaration", - "scope": 20820, - "src": "11119:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20804, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11119:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11097:36:69" - }, - "returnParameters": { - "id": 20809, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20808, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20820, - "src": "11152:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20807, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11152:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "11151:6:69" - }, - "scope": 20908, - "src": "11082:135:69", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20840, - "nodeType": "Block", - "src": "11381:61:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20832, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20824, - "src": "11408:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20833, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11412:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "11408:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "arguments": [ - { - "id": 20836, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20826, - "src": "11428:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20835, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11420:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 20834, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11420:7:69", - "typeDescriptions": {} - } - }, - "id": 20837, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11420:14:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20831, - "name": "_contains", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20451, - "src": "11398:9:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)" - } - }, - "id": 20838, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11398:37:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 20830, - "id": 20839, - "nodeType": "Return", - "src": "11391:44:69" - } - ] - }, - "documentation": { - "id": 20821, - "nodeType": "StructuredDocumentation", - "src": "11223:70:69", - "text": " @dev Returns true if the value is in the set. O(1)." - }, - "id": 20841, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "contains", - "nameLocation": "11307:8:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20827, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20824, - "mutability": "mutable", - "name": "set", - "nameLocation": "11332:3:69", - "nodeType": "VariableDeclaration", - "scope": 20841, - "src": "11316:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20823, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20822, - "name": "UintSet", - "nameLocations": ["11316:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "11316:7:69" - }, - "referencedDeclaration": 20778, - "src": "11316:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20826, - "mutability": "mutable", - "name": "value", - "nameLocation": "11345:5:69", - "nodeType": "VariableDeclaration", - "scope": 20841, - "src": "11337:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20825, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11337:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11315:36:69" - }, - "returnParameters": { - "id": 20830, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20829, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20841, - "src": "11375:4:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 20828, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11375:4:69", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "11374:6:69" - }, - "scope": 20908, - "src": "11298:144:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20855, - "nodeType": "Block", - "src": "11592:43:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 20851, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20845, - "src": "11617:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20852, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11621:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "11617:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20850, - "name": "_length", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20465, - "src": "11609:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_uint256_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (uint256)" - } - }, - "id": 20853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11609:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 20849, - "id": 20854, - "nodeType": "Return", - "src": "11602:26:69" - } - ] - }, - "documentation": { - "id": 20842, - "nodeType": "StructuredDocumentation", - "src": "11448:70:69", - "text": " @dev Returns the number of values in the set. O(1)." - }, - "id": 20856, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "length", - "nameLocation": "11532:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20846, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20845, - "mutability": "mutable", - "name": "set", - "nameLocation": "11555:3:69", - "nodeType": "VariableDeclaration", - "scope": 20856, - "src": "11539:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20844, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20843, - "name": "UintSet", - "nameLocations": ["11539:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "11539:7:69" - }, - "referencedDeclaration": 20778, - "src": "11539:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - } - ], - "src": "11538:21:69" - }, - "returnParameters": { - "id": 20849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20848, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20856, - "src": "11583:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20847, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "11583:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11582:9:69" - }, - "scope": 20908, - "src": "11523:112:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20876, - "nodeType": "Block", - "src": "12057:55:69", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "expression": { - "id": 20870, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20860, - "src": "12086:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20871, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12090:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "12086:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - }, - { - "id": 20872, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20862, - "src": "12098:5:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 20869, - "name": "_at", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20482, - "src": "12082:3:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)" - } - }, - "id": 20873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12082:22:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 20868, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12074:7:69", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 20867, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12074:7:69", - "typeDescriptions": {} - } - }, - "id": 20874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12074:31:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 20866, - "id": 20875, - "nodeType": "Return", - "src": "12067:38:69" - } - ] - }, - "documentation": { - "id": 20857, - "nodeType": "StructuredDocumentation", - "src": "11641:331:69", - "text": " @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}." - }, - "id": 20877, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "at", - "nameLocation": "11986:2:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20863, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20860, - "mutability": "mutable", - "name": "set", - "nameLocation": "12005:3:69", - "nodeType": "VariableDeclaration", - "scope": 20877, - "src": "11989:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20859, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20858, - "name": "UintSet", - "nameLocations": ["11989:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "11989:7:69" - }, - "referencedDeclaration": 20778, - "src": "11989:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 20862, - "mutability": "mutable", - "name": "index", - "nameLocation": "12018:5:69", - "nodeType": "VariableDeclaration", - "scope": 20877, - "src": "12010:13:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20861, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12010:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "11988:36:69" - }, - "returnParameters": { - "id": 20866, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20865, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20877, - "src": "12048:7:69", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 20864, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12048:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "12047:9:69" - }, - "scope": 20908, - "src": "11977:135:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 20906, - "nodeType": "Block", - "src": "12730:219:69", - "statements": [ - { - "assignments": [20891], - "declarations": [ - { - "constant": false, - "id": 20891, - "mutability": "mutable", - "name": "store", - "nameLocation": "12757:5:69", - "nodeType": "VariableDeclaration", - "scope": 20906, - "src": "12740:22:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 20889, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12740:7:69", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 20890, - "nodeType": "ArrayTypeName", - "src": "12740:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "visibility": "internal" - } - ], - "id": 20896, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 20893, - "name": "set", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20881, - "src": "12773:3:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet storage pointer" - } - }, - "id": 20894, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12777:6:69", - "memberName": "_inner", - "nodeType": "MemberAccess", - "referencedDeclaration": 20777, - "src": "12773:10:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Set_$20306_storage", - "typeString": "struct EnumerableSet.Set storage ref" - } - ], - "id": 20892, - "name": "_values", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20496, - "src": "12765:7:69", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_Set_$20306_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$", - "typeString": "function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)" - } - }, - "id": 20895, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12765:19:69", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr", - "typeString": "bytes32[] memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12740:44:69" - }, - { - "assignments": [20901], - "declarations": [ - { - "constant": false, - "id": 20901, - "mutability": "mutable", - "name": "result", - "nameLocation": "12811:6:69", - "nodeType": "VariableDeclaration", - "scope": 20906, - "src": "12794:23:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 20899, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12794:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 20900, - "nodeType": "ArrayTypeName", - "src": "12794:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "id": 20902, - "nodeType": "VariableDeclarationStatement", - "src": "12794:23:69" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "12880:39:69", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12894:15:69", - "value": { - "name": "store", - "nodeType": "YulIdentifier", - "src": "12904:5:69" - }, - "variableNames": [ - { - "name": "result", - "nodeType": "YulIdentifier", - "src": "12894:6:69" - } - ] - } - ] - }, - "documentation": "@solidity memory-safe-assembly", - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 20901, - "isOffset": false, - "isSlot": false, - "src": "12894:6:69", - "valueSize": 1 - }, - { - "declaration": 20891, - "isOffset": false, - "isSlot": false, - "src": "12904:5:69", - "valueSize": 1 - } - ], - "id": 20903, - "nodeType": "InlineAssembly", - "src": "12871:48:69" - }, - { - "expression": { - "id": 20904, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20901, - "src": "12936:6:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "functionReturnParameters": 20886, - "id": 20905, - "nodeType": "Return", - "src": "12929:13:69" - } - ] - }, - "documentation": { - "id": 20878, - "nodeType": "StructuredDocumentation", - "src": "12118:529:69", - "text": " @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block." - }, - "id": 20907, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "values", - "nameLocation": "12661:6:69", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 20882, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20881, - "mutability": "mutable", - "name": "set", - "nameLocation": "12684:3:69", - "nodeType": "VariableDeclaration", - "scope": 20907, - "src": "12668:19:69", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - }, - "typeName": { - "id": 20880, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 20879, - "name": "UintSet", - "nameLocations": ["12668:7:69"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20778, - "src": "12668:7:69" - }, - "referencedDeclaration": 20778, - "src": "12668:7:69", - "typeDescriptions": { - "typeIdentifier": "t_struct$_UintSet_$20778_storage_ptr", - "typeString": "struct EnumerableSet.UintSet" - } - }, - "visibility": "internal" - } - ], - "src": "12667:21:69" - }, - "returnParameters": { - "id": 20886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20885, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 20907, - "src": "12712:16:69", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 20883, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "12712:7:69", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 20884, - "nodeType": "ArrayTypeName", - "src": "12712:9:69", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "12711:18:69" - }, - "scope": 20908, - "src": "12652:297:69", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 20909, - "src": "1321:11630:69", - "usedErrors": [] - } - ], - "src": "205:12747:69" - }, - "id": 69 - } - } -} diff --git a/bin/contracts/test/suites/GenesisFactory.abi b/bin/contracts/test/suites/GenesisFactory.abi deleted file mode 100644 index 321baca9..00000000 --- a/bin/contracts/test/suites/GenesisFactory.abi +++ /dev/null @@ -1 +0,0 @@ -[{"inputs":[{"internalType":"address","name":"wethToken","type":"address"},{"internalType":"address","name":"treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acl","outputs":[{"internalType":"contract ACL","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"priceFeed","type":"address"}],"internalType":"struct PriceFeedConfig[]","name":"priceFeeds","type":"tuple[]"}],"name":"addPriceFeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addressProvider","outputs":[{"internalType":"contract AddressProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimACLOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAddressProviderOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceOracle","outputs":[{"internalType":"contract PriceOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/bin/contracts/test/suites/GenesisFactory.bin b/bin/contracts/test/suites/GenesisFactory.bin deleted file mode 100644 index cad30b9b..00000000 --- a/bin/contracts/test/suites/GenesisFactory.bin +++ /dev/null @@ -1 +0,0 @@ -60806040523480156200001157600080fd5b506040516200e3293803806200e329833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6109ea8062000f4083390190565b610728806200192a83390190565b610bd2806200205283390190565b61443b8062002c2483390190565b6116b2806200705f83390190565b612349806200871183390190565b6116c5806200aa5a83390190565b61220a806200c11f83390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61067e80620008c26000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100f7578063abd45ac614610108578063de28735914610110578063f2fde38b14610123578063f9d68c811461013657600080fd5b80632630c12f146100985780632954018c146100c7578063715018a6146100da5780638874ff1f146100e4575b600080fd5b6003546100ab906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546100ab906001600160a01b031681565b6100e261013e565b005b6100e26100f236600461050d565b610152565b6000546001600160a01b03166100ab565b6100e261028f565b6002546100ab906001600160a01b031681565b6100e26101313660046105e9565b610301565b6100e261037f565b6101466103d7565b6101506000610431565b565b61015a6103d7565b60005b815181101561022e5760035482516001600160a01b039091169063e8a97a3e9084908490811061018f5761018f61060b565b6020026020010151600001518484815181106101ad576101ad61060b565b6020026020010151602001516040518363ffffffff1660e01b81526004016101eb9291906001600160a01b0392831681529116602082015260400190565b600060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050508061022790610621565b905061015d565b5060025460405163f2fde38b60e01b81523360048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b5050505050565b6102976103d7565b600260009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50505050565b6103096103d7565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61037c81610431565b50565b6103876103d7565b600160009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b6000546001600160a01b031633146101505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156104ba576104ba610481565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156104e9576104e9610481565b604052919050565b80356001600160a01b038116811461050857600080fd5b919050565b6000602080838503121561052057600080fd5b823567ffffffffffffffff8082111561053857600080fd5b818501915085601f83011261054c57600080fd5b81358181111561055e5761055e610481565b61056c848260051b016104c0565b818152848101925060069190911b83018401908782111561058c57600080fd5b928401925b818410156105de57604084890312156105aa5760008081fd5b6105b2610497565b6105bb856104f1565b81526105c88686016104f1565b8187015283526040939093019291840191610591565b979650505050505050565b6000602082840312156105fb57600080fd5b610604826104f1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161064157634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220b4a1c9a880a352408284487897289c1c30ce6b261117cf6898fd0cc90d1aeda164736f6c63430008110033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61092c806100be6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377532ed9116100f9578063bcaead9811610097578063ce3c4ae411610071578063ce3c4ae414610320578063e30c397814610333578063f2fde38b14610346578063fca513a81461035957600080fd5b8063bcaead98146102f2578063c5120b3914610305578063c513c9bb1461031857600080fd5b80638da5cb5b116100d35780638da5cb5b146102be5780639068a868146102cf578063addc1a76146102d7578063affd9243146102ea57600080fd5b806377532ed9146102905780637b6757ff1461029857806386e09c08146102ab57600080fd5b80634c252f911161016657806354fd4d501161014057806354fd4d5014610236578063699f200f1461024c578063715018a61461027557806376aad6051461027d57600080fd5b80634c252f91146102135780634e71e0c81461021b578063530e784f1461022357600080fd5b8063060678c2146101ae57806308737695146101d35780631ed65110146101db57806321da5837146101f057806326c74fc31461020357806344b885631461020b575b600080fd5b6101b6610361565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b6610383565b6101ee6101e936600461085f565b610394565b005b6101ee6101fe36600461085f565b6103bd565b6101b66103de565b6101b66103fd565b6101b661041c565b6101ee610434565b6101ee61023136600461085f565b6104c9565b61023e600281565b6040519081526020016101ca565b6101b661025a36600461088f565b6002602052600090815260409020546001600160a01b031681565b6101ee6104ea565b6101ee61028b36600461085f565b6104fe565b6101b6610516565b6101ee6102a636600461085f565b610530565b6101ee6102b936600461085f565b610556565b6000546001600160a01b03166101b6565b6101b6610575565b6101ee6102e536600461085f565b610592565b6101b66105b6565b6101ee61030036600461085f565b6105ce565b6101ee61031336600461085f565b6105ed565b6101b6610611565b6101ee61032e36600461085f565b610631565b6001546101b6906001600160a01b031681565b6101ee61035436600461085f565b610658565b6101b66106e9565b600061037e6e2220aa20afa1a7a6a82922a9a9a7a960891b6106ff565b905090565b600061037e621050d360ea1b6106ff565b61039c61075c565b6103ba701514915054d5549657d0d3d395149050d5607a1b826107b6565b50565b6103c561075c565b6103ba6b574554485f4741544557415960a01b826107b6565b600061037e701514915054d5549657d0d3d395149050d5607a1b6106ff565b600061037e704c45564552414745445f414354494f4e5360781b6106ff565b600061037e692ba2aa242faa27a5a2a760b11b6106ff565b6001546001600160a01b031633146104a25760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b6001546104b7906001600160a01b031661080f565b600180546001600160a01b0319169055565b6104d161075c565b6103ba6b50524943455f4f5241434c4560a01b826107b6565b6104f261075c565b6104fc600061080f565b565b61050661075c565b6103ba621050d360ea1b826107b6565b600061037e6b574554485f4741544557415960a01b6106ff565b61053861075c565b6103ba704c45564552414745445f414354494f4e5360781b826107b6565b61055e61075c565b6103ba692ba2aa242faa27a5a2a760b11b826107b6565b600061037e6e4143434f554e545f464143544f525960881b6106ff565b61059a61075c565b6103ba6e4143434f554e545f464143544f525960881b826107b6565b600061037e6923a2a0a92faa27a5a2a760b11b6106ff565b6105d661075c565b6103ba6923a2a0a92faa27a5a2a760b11b826107b6565b6105f561075c565b6103ba6e2220aa20afa1a7a6a82922a9a9a7a960891b826107b6565b600061037e7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b6106ff565b61063961075c565b6103ba7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b826107b6565b61066061075c565b6001600160a01b0381166106c75760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610499565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061037e6b50524943455f4f5241434c4560a01b5b6000818152600260209081526040808320548151808301909252600382526241503160e81b928201929092526001600160a01b0390911690816107555760405162461bcd60e51b815260040161049991906108a8565b5092915050565b6000546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087157600080fd5b81356001600160a01b038116811461088857600080fd5b9392505050565b6000602082840312156108a157600080fd5b5035919050565b600060208083528351808285015260005b818110156108d5578581018301518582016040015282016108b9565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200dac7f71485a8db5aee1d67bb3ff3d39172b102aba5b8428150c0d728e808ea864736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106aa8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637328181911610097578063ba306df111610066578063ba306df114610229578063d4eb5db01461023c578063e30c397814610268578063f2fde38b1461027b57600080fd5b806373281819146101bb578063819ad68e146101de5780638da5cb5b146101f1578063adce758d1461021657600080fd5b80634e71e0c8116100d35780634e71e0c81461017357806354fd4d501461017b5780635f259aba14610191578063715018a6146101b357600080fd5b806335914829146100fa5780633a41ec64146101325780634910832f1461015e575b600080fd5b61011d610108366004610644565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61011d610140366004610644565b6001600160a01b031660009081526002602052604090205460ff1690565b61017161016c366004610644565b61028e565b005b6101716102e2565b610183600181565b604051908152602001610129565b61011d61019f366004610644565b6000546001600160a01b0391821691161490565b610171610377565b61011d6101c9366004610644565b60036020526000908152604090205460ff1681565b6101716101ec366004610644565b61038b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b610171610224366004610644565b6103df565b610171610237366004610644565b610474565b61011d61024a366004610644565b6001600160a01b031660009081526003602052604090205460ff1690565b6001546101fe906001600160a01b031681565b610171610289366004610644565b610509565b61029661059a565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b6001546001600160a01b031633146103505760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610365906001600160a01b03166105f4565b600180546001600160a01b0319169055565b61037f61059a565b61038960006105f4565b565b61039361059a565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b6103e761059a565b6001600160a01b03811660009081526003602052604090205460ff1661042b576040516357f592b760e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b61047c61059a565b6001600160a01b03811660009081526002602052604090205460ff166104c05760405163e116318960e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b61051161059a565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610347565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561065657600080fd5b81356001600160a01b038116811461066d57600080fd5b939250505056fea2646970667358221220835bbaf0cbddf40235bbad8ed20125110b9a758c1c68221f654a0fb5a5226bf064736f6c6343000811003360a060405234801561001057600080fd5b50604051610bd2380380610bd283398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610a9461013e600039600081816101d50152818161027f01528181610390015281816104ad01526106810152610a946000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac68601461020a578063c29277cd14610212578063d914cd4b1461021a578063e26b2f631461022d57600080fd5b80638456cb59146101c057806394144856146101c8578063a50cf2c8146101d0578063ac4afa38146101f757600080fd5b80635b16ebb7116100d35780635b16ebb71461014a5780635c975abb1461017d578063673a2a1f146101885780636fbc6f6b1461019d57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461012a57806354fd4d5014610134575b600080fd5b61010d610108366004610958565b610240565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261026a565b005b61013c600181565b604051908152602001610121565b61016d610158366004610971565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b60005460ff1661016d565b610190610319565b60405161012191906109a1565b61016d6101ab366004610971565b60046020526000908152604090205460ff1681565b61013261037b565b610190610428565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610205366004610958565b610488565b60015461013c565b60035461013c565b610132610228366004610971565b610498565b61013261023b366004610971565b61066c565b6003818154811061025057600080fd5b6000918252602090912001546001600160a01b0316905081565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa1580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f291906109ee565b61030f5760405163081996f760e11b815260040160405180910390fd5b61031761083a565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561037157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610353575b5050505050905090565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906109ee565b6104205760405163d794b1e760e01b815260040160405180910390fd5b61031761088c565b60606003805480602002602001604051908101604052809291908181526020018280548015610371576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610353575050505050905090565b6001818154811061025057600080fd5b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052091906109ee565b61053d576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166105865760405162461bcd60e51b815260040161057d9190610a10565b60405180910390fd5b506001600160a01b038116600090815260026020908152604091829020548251808401909352600383526243523160e81b9183019190915260ff16156105df5760405162461bcd60e51b815260040161057d9190610a10565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038416908117909155600081815260026020526040808220805460ff1916909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906109ee565b610711576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166107515760405162461bcd60e51b815260040161057d9190610a10565b506001600160a01b038116600090815260046020908152604091829020548251808401909352600383526221a91960e91b9183019190915260ff16156107aa5760405162461bcd60e51b815260040161057d9190610a10565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b038416908117909155600081815260046020526040808220805460ff1916909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b6108426108c9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610894610912565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861086f3390565b60005460ff166103175760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057d565b60005460ff16156103175760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057d565b60006020828403121561096a57600080fd5b5035919050565b60006020828403121561098357600080fd5b81356001600160a01b038116811461099a57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156109e25783516001600160a01b0316835292840192918401916001016109bd565b50909695505050505050565b600060208284031215610a0057600080fd5b8151801515811461099a57600080fd5b600060208083528351808285015260005b81811015610a3d57858101830151858201604001528201610a21565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200165d12495f46ea6b90db275dc0ffbe0092ae79649978a2f35c0eaa9ba89b4cd64736f6c6343000811003360e06040523480156200001157600080fd5b506040516200443b3803806200443b833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c05161421e6200021d6000396000818161015b0152818161159e01526120ea0152600081816101c001528181611033015281816118480152818161194301528181611a1001528181611ba401528181611c9f01528181611d4a01528181611df001528181611f02015281816130f4015261319a0152600061011c015261421e6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d5014610190578063663b8fdb146101a65780637a0c7b21146101bb578063a80deda3146101e2578063ae093f3f14610202578063fc9914cb1461022257600080fd5b80630dbd616d146100b957806313d21cdf146100e25780631bcd8fc0146101025780632954018c146101175780634b2f336d146101565780634c472fc91461017d575b600080fd5b6100cc6100c736600461371b565b610245565b6040516100d991906138f5565b60405180910390f35b6100f56100f0366004613908565b61100a565b6040516100d99190613a07565b61010a611842565b6040516100d99190613a16565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d9565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b61013e61018b36600461371b565b6119ec565b610198600281565b6040519081526020016100d9565b6101ae611b9e565b6040516100d99190613cdd565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6101f56101f0366004613908565b611d43565b6040516100d99190613d3f565b610215610210366004613908565b611fc5565b6040516100d99190613d94565b61023561023036600461371b565b6130d0565b60405190151581526020016100d9565b61024d6134d6565b600080600080600061025e8861318e565b509450945094509450945060008560ff166001146102e557604051633a562dc160e21b81526001600160a01b03898116600483015284169063e958b70490602401602060405180830381865afa1580156102bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e09190613db7565b61034f565b604051633a562dc160e21b81526001600160a01b03898116600483015286169063e958b70490602401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190613db7565b60ff871661022089018190526001600160a01b03808b1660208b01528b811660608b01528216895290915060010361071a57846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529085169063c7de38a690602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104569190613dd4565b60e088015260405163dfd5946560e01b81526001600160a01b03828116600483015285169063dfd5946590602401602060405180830381865afa1580156104a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c59190613dd4565b610100880152604051633ce0735560e01b81526001600160a01b03898116600483015260006024830152861690633ce0735590604401602060405180830381865afa925050508015610534575060408051601f3d908101601f1916820190925261053191810190613dd4565b60015b15610540576101608801525b604051633ce0735560e01b81526001600160a01b03898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156105a9575060408051601f3d908101601f191682019092526105a691810190613dd4565b60015b156105b5576101808801525b60e087015160405163132c653f60e31b81526001600160a01b0383811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa92505050801561062c575060408051601f3d908101601f1916820190925261062991810190613ded565b60015b1561063e57505015156101a08a015250505b806001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190613dd4565b6101c0880152604051630c64865760e21b81526001600160a01b038281166004830152851690633192195c90602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613dd4565b60a08801526108df565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529083169063c7de38a6906024016040805180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190613e2d565b5060e088015260405163dfd5946560e01b81526001600160a01b03828116600483015283169063dfd5946590602401602060405180830381865afa15801561083a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085e9190613dd4565b610100880152604051630c64865760e21b81526001600160a01b038281166004830152841690633192195c90602401606060405180830381865afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613e51565b60c08a015260a08901526101c08801525b60008660ff1660011461095357836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190613db7565b6109b5565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613db7565b9050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613dd4565b6101208901526000600160ff891614610a9357846001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190613dd4565b610af5565b856001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613dd4565b90508760ff16600114610b7157604051638991b2f160e01b81526001600160a01b038481166004830152861690638991b2f190602401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613dd4565b610bdb565b604051632d1473b360e21b81526001600160a01b03848116600483015287169063b451cecc90602401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613dd4565b6102408a01528067ffffffffffffffff811115610bfa57610bfa613e7f565b604051908082528060200260200182016040528015610c4c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c185790505b506101408a015260005b81811015610f2657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c169003610d8757604051635785328160e11b81526001600160a01b038781166004830152602482018590528a169063af0a650290604401608060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613e95565b505060208401526001600160a01b0390811680845260405163f9eaee0d60e01b81526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b9190613ee4565b15156040830152610ed8565b60405163172c48c760e01b8152600481018490526001600160a01b0389169063172c48c7906024016040805180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190613f11565b506001600160a01b039081168084526040516370a0823160e01b81529188166004830152906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613dd4565b6020830152815160405163f9eaee0d60e01b81526001600160a01b0391821660048201529088169063f9eaee0d90602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190613ee4565b151560408301525b6102408c0151811615610eec576001610eef565b60005b151560608301526101408c0151805183919085908110610f1157610f11613f46565b60209081029190910101525050600101610c56565b50826001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190613dd4565b896101e0018181525050826001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190613dd4565b6102008a015250969998505050505050505050565b611012613593565b604051635b16ebb760e01b81526001600160a01b03808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613ee4565b6110bd57604051631a70964760e31b815260040160405180910390fd5b6001600160a01b0383168083526040805163fe14112d60e01b8152905185929163fe14112d9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613dd4565b8360c0018181525050806001600160a01b031663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613dd4565b8360e0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613dd4565b8360a0018181525050806001600160a01b0316634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613dd4565b83610100018181525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190613dd4565b83610160018181525050806001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613dd4565b836080018181525050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190613dd4565b83610140018181525050806001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190613db7565b83604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190613db7565b83606001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190613dd4565b83610160018181525050806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190613dd4565b6101808401526040808401516001600160a01b039081167f0000000000000000000000000000000000000000000000000000000000000000821614602080870191909152825163609ae31760e01b815292519184169263609ae31792600480830193928290030181865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190613dd4565b836101c0018181525050806001600160a01b031663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613dd4565b836101a0018181525050600083606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190613dd4565b604051630a84f92760e31b8152600481018290529091506000906001600160a01b03841690635427c93890602401602060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613dd4565b905080156117bd5761018085015181906117ae9061179290612710613f72565b8761010001518861014001516117a89190613f85565b90613402565b6117b89190613fb2565b6117c4565b8461014001515b85610120018181525050826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118309190613dd4565b60ff166101e086015250505050919050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c89190613dd4565b90508067ffffffffffffffff8111156118e3576118e3613e7f565b60405190808252806020026020018201604052801561191c57816020015b611909613593565b8152602001906001900390816119015790505b50915060005b818110156119e7576040516315895f4760e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ac4afa3890602401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613db7565b90506119c18161100a565b8483815181106119d3576119d3613f46565b602090810291909101015250600101611922565b505090565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613ee4565b611a9857604051631679e86f60e11b815260040160405180910390fd5b6000806000611aa68761318e565b5050935093505092508260ff16600114611b295760405163fdd5764560e01b81526001600160a01b03878116600483015282169063fdd5764590602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190613db7565b611b93565b60405163fdd5764560e01b81526001600160a01b03878116600483015283169063fdd5764590602401602060405180830381865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190613db7565b979650505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613dd4565b90508067ffffffffffffffff811115611c3f57611c3f613e7f565b604051908082528060200260200182016040528015611c7857816020015b611c65613630565b815260200190600190039081611c5d5790505b50915060005b818110156119e757604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613db7565b9050611d1d81611fc5565b848381518110611d2f57611d2f613f46565b602090810291909101015250600101611c7e565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca9190613dd4565b905060005b81811015611e8457604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190613db7565b9050611e6f81876130d0565b15611e7b578360010193505b50600101611dcf565b508167ffffffffffffffff811115611e9e57611e9e613e7f565b604051908082528060200260200182016040528015611ed757816020015b611ec46134d6565b815260200190600190039081611ebc5790505b5092506000915060005b81811015611fbd57604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190613db7565b9050611f8181876130d0565b15611fb457611f908187610245565b858581518110611fa257611fa2613f46565b60209081029190910101526001909301925b50600101611ee1565b505050919050565b611fcd613630565b600080600080600080611fdf8861318e565b6001600160a01b038e168d5260ff86166101a08e01819052959b5093995091975095509350915060011461207457826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f9190613db7565b6120d6565b846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613db7565b6001600160a01b03908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460608801526000600160ff88161461218657836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613db7565b6121e8565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190613db7565b6001600160a01b0381811660408b810182905251632e97ca2160e01b8152918c166004830152919250632e97ca2190602401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190613ee4565b15156080890152604080516345d31f9d60e01b815290516001600160a01b038316916345d31f9d9160048083019260209291908290030181865afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190613dd4565b8860a0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190613dd4565b6101208901525060ff861660010361241f57846001600160a01b0316639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190613dd4565b8760c0018181525050846001600160a01b0316635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190613dd4565b60e0880152612497565b816001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190613fdd565b6001600160801b0390811660e08a01521660c08801525b60008660ff1660011461250b57836001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613dd4565b61256d565b846001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190613dd4565b90508067ffffffffffffffff81111561258857612588613e7f565b6040519080825280602002602001820160405280156125b1578160200160208202803683370190505b506101408901528067ffffffffffffffff8111156125d1576125d1613e7f565b6040519080825280602002602001820160405280156125fa578160200160208202803683370190505b5061018089015260005b8181101561280f578760ff1660010361273f57604051632f2f971360e11b8152600481018290526000906001600160a01b03881690635e5f2e2690602401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613db7565b9050808a6101400151838151811061269d5761269d613f46565b6001600160a01b039283166020918202929092010152604051630f064e8760e31b8152828216600482015290881690637832743890602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127169190613dd4565b8a6101800151838151811061272d5761272d613f46565b60200260200101818152505050612807565b60405163172c48c760e01b8152600481018290526001600160a01b0386169063172c48c7906024016040805180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190613f11565b8061ffff1690508a610140015183815181106127c5576127c5613f46565b602002602001018b610180015184815181106127e3576127e3613f46565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505b600101612604565b50508560ff16600103612a1e576000846001600160a01b03166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613dd4565b90508067ffffffffffffffff81111561289b5761289b613e7f565b6040519080825280602002602001820160405280156128e057816020015b60408051808201909152600080825260208201528152602001906001900390816128b95790505b5061016089015260005b81811015612a1757604051635094cb4f60e01b8152600481018290526000906001600160a01b03881690635094cb4f90602401602060405180830381865afa15801561293a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295e9190613db7565b6040805180820182526001600160a01b03808416808352925163fdd5764560e01b81526004810193909352929350916020830191908a169063fdd5764590602401602060405180830381865afa1580156129bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e09190613db7565b6001600160a01b03168152508a61016001518381518110612a0357612a03613f46565b6020908102919091010152506001016128ea565b5050612bea565b6000816001600160a01b031663373c8f626040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a869190810190614007565b80519091508067ffffffffffffffff811115612aa457612aa4613e7f565b604051908082528060200260200182016040528015612ae957816020015b6040805180820190915260008082526020820152815260200190600190039081612ac25790505b506101608a015260005b81811015612be6576000838281518110612b0f57612b0f613f46565b602002602001015190506040518060400160405280826001600160a01b03168152602001886001600160a01b031663fdd57645846040518263ffffffff1660e01b8152600401612b6e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baf9190613db7565b6001600160a01b03168152508b61016001518381518110612bd257612bd2613f46565b602090810291909101015250600101612af3565b5050505b8560ff16600103612dc357846001600160a01b031663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613dd4565b61010088015260ff61028088015260408051635e0b63d360e01b815290516001600160a01b03871691635e0b63d39160048083019260209291908290030181865afa158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190613dd4565b61ffff166102a088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613dd4565b61ffff166102c088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db49190613dd4565b61ffff166102e08801526130c5565b81876101c001906001600160a01b031690816001600160a01b031681525050826001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613db7565b876101e001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190613db7565b8761022001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401608060405180830381865afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906140cc565b505015156102408901525060408051639fd12b7760e01b815290516001600160a01b03851691639fd12b779160048083019260209291908290030181865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190613dd4565b87610260018181525050826001600160a01b0316638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061412c565b60ff1661028088015260408051634d78e9ad60e11b815290516001600160a01b03851691639af1d35a9160048083019260a09291908290030181865afa158015613072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613096919061414f565b61ffff9081166103208d01529081166103008c01529081166102e08b01529081166102c08a0152166102a08801525b505050505050919050565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190613ee4565b61317c57604051631679e86f60e11b815260040160405180910390fd5b6131868484613455565b949350505050565b600080600080600080867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fbc6f6b826040518263ffffffff1660e01b81526004016131f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132349190613ee4565b61325157604051631679e86f60e11b815260040160405180910390fd5b876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190613dd4565b96508660ff1660010361332c57879550856001600160a01b031663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613db7565b94506133f8565b879350836001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561336d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133919190613db7565b9250836001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190613db7565b91505b5091939550919395565b600082158061340f575081155b1561341c5750600061344f565b61271061342a6002826141b4565b61ffff166134388486613f85565b61344291906141d5565b61344c9190613fb2565b90505b92915050565b60405163055ee9b560e01b81526001600160a01b038281166004830152600091829185169063055ee9b590602401602060405180830381865afa1580156134a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c49190613db7565b6001600160a01b031614159392505050565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b60405180610200016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b604080516103408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082018190526101808201526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081019190915290565b6001600160a01b038116811461371857600080fd5b50565b6000806040838503121561372e57600080fd5b823561373981613703565b9150602083013561374981613703565b809150509250929050565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101613768565b509495945050505050565b80516001600160a01b03168252600061026060208301516137e860208601826001600160a01b03169052565b5060408301516137fc604086018215159052565b50606083015161381760608601826001600160a01b03169052565b50608083015161383260808601826001600160a01b03169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261388183870182613754565b925050506101608084015181860152506101808084015181860152506101a0808401516138b18287018215159052565b50506101c083810151908501526101e0808401519085015261020080840151908501526102208084015160ff16908501526102409283015192909301919091525090565b60208152600061344c60208301846137bc565b60006020828403121561391a57600080fd5b813561392581613703565b9392505050565b80516001600160a01b03168252602081015161394c602084018215159052565b50604081015161396760408401826001600160a01b03169052565b50606081015161398260608401826001600160a01b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161344f828461392c565b6020808252825182820181905260009190848201906040850190845b81811015613a5957613a4583855161392c565b928401926102009290920191600101613a32565b50909695505050505050565b600081518084526020808501945080840160005b838110156137b15781516001600160a01b031687529582019590820190600101613a79565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03908116895290840151168388015260409096019590820190600101613ab2565b600081518084526020808501945080840160005b838110156137b157815187529582019590820190600101613afa565b80516001600160a01b0316825260006103406020830151613b4260208601826001600160a01b03169052565b506040830151613b5d60408601826001600160a01b03169052565b506060830151613b71606086018215159052565b506080830151613b85608086018215159052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152613bd483870182613a65565b925050506101608084015185830382870152613bf08382613a9e565b925050506101808084015185830382870152613c0c8382613ae6565b925050506101a080840151613c258287018260ff169052565b50506101c0838101516001600160a01b03908116918601919091526101e0808501518216908601526102008085015115159086015261022080850151909116908501526102408084015115159085015261026080840151908501526102808084015160ff16908501526102a08084015161ffff908116918601919091526102c0808501518216908601526102e08085015182169086015261030080850151821690860152610320938401511692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d20858351613b16565b94509285019290850190600101613d04565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d828583516137bc565b94509285019290850190600101613d66565b60208152600061344c6020830184613b16565b8051613db281613703565b919050565b600060208284031215613dc957600080fd5b815161392581613703565b600060208284031215613de657600080fd5b5051919050565b600080600080600060a08688031215613e0557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008060408385031215613e4057600080fd5b505080516020909101519092909150565b600080600060608486031215613e6657600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215613eab57600080fd5b8451613eb681613703565b60208601516040870151606090970151919890975090945092505050565b80518015158114613db257600080fd5b600060208284031215613ef657600080fd5b61344c82613ed4565b805161ffff81168114613db257600080fd5b60008060408385031215613f2457600080fd5b8251613f2f81613703565b9150613f3d60208401613eff565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561344f5761344f613f5c565b808202811582820484141761344f5761344f613f5c565b634e487b7160e01b600052601260045260246000fd5b600082613fc157613fc1613f9c565b500490565b80516001600160801b0381168114613db257600080fd5b60008060408385031215613ff057600080fd5b613ff983613fc6565b9150613f3d60208401613fc6565b6000602080838503121561401a57600080fd5b825167ffffffffffffffff8082111561403257600080fd5b818501915085601f83011261404657600080fd5b81518181111561405857614058613e7f565b8060051b604051601f19603f8301168101818110858211171561407d5761407d613e7f565b60405291825284820192508381018501918883111561409b57600080fd5b938501935b828510156140c0576140b185613da7565b845293850193928501926140a0565b98975050505050505050565b600080600080608085870312156140e257600080fd5b6140eb85613fc6565b93506140f960208601613ed4565b9250604085015164ffffffffff8116811461411357600080fd5b915061412160608601613eff565b905092959194509250565b60006020828403121561413e57600080fd5b815160ff8116811461392557600080fd5b600080600080600060a0868803121561416757600080fd5b61417086613eff565b945061417e60208701613eff565b935061418c60408701613eff565b925061419a60608701613eff565b91506141a860808701613eff565b90509295509295909350565b600061ffff808416806141c9576141c9613f9c565b92169190910492915050565b8082018082111561344f5761344f613f5c56fea264697066735822122033db04dd6ad85cbb23c61a3c1df229cdee23950afa0e93d191a4e60c173de79664736f6c6343000811003360a06040523480156200001157600080fd5b50604051620016b2380380620016b283398101604081905262000034916200060c565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070e565b6001600160a01b031660805250805160005b8181101562000142576200013983828151811062000100576200010062000733565b60200260200101516000015184838151811062000121576200012162000733565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000827565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004b560201b620005591760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004b560201b620005591760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000749565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076e565b60015b15620003285790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000387575060408051601f3d908101601f19168201909252620003849181019062000749565b60015b620003a55760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003cb5760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042a575060408051601f3d908101601f191682019092526200042791810190620007aa565b60015b62000448576040516367a7cd4360e01b815260040160405180910390fd5b866200045c576200045c85858484620004c4565b50505050506200046f848484846200052a565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b6001600160a01b03163b151590565b60008313620004e6576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000505575081155b15620005245760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200054257600160a11b175b6200055860ff60a21b60a284901b1682620007ff565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200059357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005d357620005d362000598565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000604576200060462000598565b604052919050565b60008060408084860312156200062157600080fd5b6200062c846200057b565b602085810151919450906001600160401b03808211156200064c57600080fd5b818701915087601f8301126200066157600080fd5b81518181111562000676576200067662000598565b62000686848260051b01620005d9565b818152848101925060069190911b830184019089821115620006a757600080fd5b928401925b81841015620006fe5785848b031215620006c65760008081fd5b620006d0620005ae565b620006db856200057b565b8152620006ea8686016200057b565b8187015283529285019291840191620006ac565b8096505050505050509250929050565b6000602082840312156200072157600080fd5b6200072c826200057b565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075c57600080fd5b815160ff811681146200072c57600080fd5b6000602082840312156200078157600080fd5b815180151581146200072c57600080fd5b80516001600160501b03811681146200059357600080fd5b600080600080600060a08688031215620007c357600080fd5b620007ce8662000792565b9450602086015193506040860151925060608601519150620007f36080870162000792565b90509295509295909350565b808201808211156200082157634e487b7160e01b600052601160045260246000fd5b92915050565b608051610e5a62000858600039600081816101950152818161023d01528181610360015261043e0152610e5a6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101b7578063e8a97a3e146101ca578063f190e5fa146101dd578063f9a650301461021557600080fd5b80638456cb591461015d5780639dcb511a14610165578063a50cf2c81461019057600080fd5b80633f4ba83a146100d457806341976e09146100de57806354fd4d50146101045780635c975abb1461010c5780635cecbd0e146101225780637afb01041461014a575b600080fd5b6100dc610228565b005b6100f16100ec366004610b29565b6102d7565b6040519081526020015b60405180910390f35b6100f1600281565b60005460ff1660405190151581526020016100fb565b610135610130366004610b4b565b6102e9565b604080519283526020830191909152016100fb565b6100f1610158366004610b91565b61030d565b6100dc61034b565b610178610173366004610b29565b6103f8565b6040516001600160a01b0390911681526020016100fb565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6100f16101c5366004610bbd565b61040c565b6100dc6101d8366004610bf9565b610429565b6101f06101eb366004610b29565b6104dc565b604080516001600160a01b0390941684529115156020840152908201526060016100fb565b6100f1610223366004610b91565b610531565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610c23565b6102cd5760405163081996f760e11b815260040160405180910390fd5b6102d5610568565b565b60006102e2826105ba565b5092915050565b6000806102f68686610531565b91506103028484610531565b905094509492505050565b600080600061031b846105ba565b90925090508161032c82600a610d3f565b6103369087610d4b565b6103409190610d62565b925050505b92915050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610c23565b6103f05760405163d794b1e760e01b815260040160405180910390fd5b6102d5610665565b6000610403826104dc565b50909392505050565b600061042161041b8585610531565b8361030d565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610c23565b6104ce576040516361081c1560e01b815260040160405180910390fd5b6104d882826106a2565b5050565b6001600160a01b03811660009081526001602052604081205481908190808203610519576040516325dc56c160e11b815260040160405180910390fd5b94600160a11b86161515945060a286901c9350915050565b600080600061053f846105ba565b909250905061054f81600a610d3f565b6103368387610d4b565b6001600160a01b03163b151590565b6105706109c7565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000806000806105c9856104dc565b809550819350829450505050600080600080856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190610d9e565b945094505093509350846106575761065784848484610a10565b829750505050505050915091565b61066d610a79565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861059d3390565b6001600160a01b03821615806106bf57506001600160a01b038116155b156106dd57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0382163b6107155760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b0381163b6107485760405163df4c572d60e01b81526001600160a01b038216600482015260240161070c565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156107a2575060408051601f3d908101601f1916820190925261079f91810190610dee565b60015b6107bf576040516367a7cd4360e01b815260040160405180910390fd5b8060ff166008146107e3576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c23565b60015b156108485790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108a4575060408051601f3d908101601f191682019092526108a191810190610dee565b60015b6108c15760405163528ca31d60e01b815260040160405180910390fd5b60128160ff1611156108e65760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610942575060408051601f3d908101601f1916820190925261093f91810190610d9e565b60015b61095f576040516367a7cd4360e01b815260040160405180910390fd5b866109705761097085858484610a10565b505050505061098184848484610abf565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60005460ff166102d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161070c565b60008313610a31576040516356e05d2b60e01b815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610a55575081155b15610a735760405163b1cf675560e01b815260040160405180910390fd5b50505050565b60005460ff16156102d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161070c565b6001600160a01b0383168215610ad657600160a11b175b610aea60ff60a21b60a284901b1682610e11565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80356001600160a01b0381168114610b2457600080fd5b919050565b600060208284031215610b3b57600080fd5b610b4482610b0d565b9392505050565b60008060008060808587031215610b6157600080fd5b84359350610b7160208601610b0d565b925060408501359150610b8660608601610b0d565b905092959194509250565b60008060408385031215610ba457600080fd5b82359150610bb460208401610b0d565b90509250929050565b600080600060608486031215610bd257600080fd5b83359250610be260208501610b0d565b9150610bf060408501610b0d565b90509250925092565b60008060408385031215610c0c57600080fd5b610c1583610b0d565b9150610bb460208401610b0d565b600060208284031215610c3557600080fd5b81518015158114610b4457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610c96578160001904821115610c7c57610c7c610c45565b80851615610c8957918102915b93841c9390800290610c60565b509250929050565b600082610cad57506001610345565b81610cba57506000610345565b8160018114610cd05760028114610cda57610cf6565b6001915050610345565b60ff841115610ceb57610ceb610c45565b50506001821b610345565b5060208310610133831016604e8410600b8410161715610d19575081810a610345565b610d238383610c5b565b8060001904821115610d3757610d37610c45565b029392505050565b6000610b448383610c9e565b808202811582820484141761034557610345610c45565b600082610d7f57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610b2457600080fd5b600080600080600060a08688031215610db657600080fd5b610dbf86610d84565b9450602086015193506040860151925060608601519150610de260808701610d84565b90509295509295909350565b600060208284031215610e0057600080fd5b815160ff81168114610b4457600080fd5b8082018082111561034557610345610c4556fea264697066735822122069c2fd2db6d7dc1b5845e60541bf11eeb508185a9ae85239b49627abfd6b814564736f6c6343000811003360e06040523480156200001157600080fd5b5060405162002349380380620023498339810160408190526200003491620004af565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004af565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004e1565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004af565b6001600160a01b031660c052604051620001a490620004a1565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000531565b6000620002a460a0516200038c60201b62000d091760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200042f811b62000da317901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166200042a5760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000446836001600160a01b0384166200044f565b90505b92915050565b6000818152600183016020526040812054620004985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000449565b50600062000449565b610b1a806200182f83390190565b600060208284031215620004c257600080fd5b81516001600160a01b0381168114620004da57600080fd5b9392505050565b600060208083528351808285015260005b818110156200051057858101830151858201604001528201620004f2565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05160c05161129d6200059260003960008181610213015281816102eb01526108850152600081816101b80152610c120152600081816102600152818161049501528181610729015281816107d80152610a94015261129d6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806388f64c54116100ad578063b193976311610071578063b193976314610295578063b60e85181461029d578063d82ecc48146102a5578063e3ba9ace146102b8578063f23953ab146102cb57600080fd5b806388f64c541461020e57806389b77b3e146102355780638f7dcfa314610248578063a50cf2c81461025b578063a904aab61461028257600080fd5b806354fd4d50116100f457806354fd4d50146101865780635c975abb1461019c5780635da33c5b146101b3578063765e0159146101da5780638456cb591461020657600080fd5b806313d8c8401461012657806321d18456146101565780632932472f146101695780633f4ba83a1461017e575b600080fd5b600454610139906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101396101643660046110c0565b6102d3565b61017c6101773660046110f9565b610480565b005b61017c610714565b61018e600181565b60405190815260200161014d565b60005460ff165b604051901515815260200161014d565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101396101e836600461113c565b6001600160a01b039081166000908152600260205260409020541690565b61017c6107c3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c61024336600461113c565b610870565b600354610139906001600160a01b031681565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c6102903660046110f9565b610a7f565b61018e610b8c565b61018e610be0565b6101a36102b336600461113c565b610bf1565b6101396102c6366004611157565b610bfe565b61017c610c0b565b604051636fbc6f6b60e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190611170565b60405180604001604052806002815260200161043560f41b815250906103a05760405162461bcd60e51b81526004016103979190611192565b60405180910390fd5b506103a9610dbf565b600380546001600160a01b038082166000818152600260205260409081902080549093166001600160a01b03199485161790945581549092169055905163c75b5a7160e01b81523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50506040513392506001600160a01b03841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105089190611170565b610525576040516361081c1560e01b815260040160405180910390fd5b61052d610dbf565b6003546001600160a01b0380841691160361057e57600380546001600160a01b03808216600090815260026020526040902080549091166001600160a01b0319928316179092558154169055610651565b6001600160a01b03838116600090815260026020908152604091829020548251808401909352600383526241463360e81b9183019190915290918481169116146105db5760405162461bcd60e51b81526004016103979190611192565b506004546001600160a01b039081169083160361060e57600480546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b03199283161790945591905281541690555b60405163c75b5a7160e01b81526001600160a01b038281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506106ce826005610de990919063ffffffff16565b50806001600160a01b0316826001600160a01b03167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611170565b6107b95760405163081996f760e11b815260040160405180910390fd5b6107c1610dfe565b565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611170565b6108685760405163d794b1e760e01b815260040160405180910390fd5b6107c1610e50565b604051636fbc6f6b60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190611170565b60405180604001604052806002815260200161043560f41b815250906109315760405162461bcd60e51b81526004016103979190611192565b5061093d600582610e8d565b6040518060400160405280600381526020016210518d60ea1b815250906109775760405162461bcd60e51b81526004016103979190611192565b5043816001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906111e0565b14156040518060400160405280600381526020016241463160e81b81525090610a175760405162461bcd60e51b81526004016103979190611192565b50600480546001600160a01b0390811660009081526002602052604080822080546001600160a01b03199081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611170565b610b24576040516361081c1560e01b815260040160405180910390fd5b6040516319a1603960e01b81526001600160a01b03838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050505050565b60035460009081906001600160a01b03165b6001600160a01b03811615610bda576001600160a01b039081166000908152600260205260409020541681610bd28161120f565b925050610b9e565b50919050565b6000610bec6005610eaf565b905090565b600061047a600583610e8d565b600061047a600583610eb9565b6000610c367f0000000000000000000000000000000000000000000000000000000000000000610d09565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020526040902080546001600160a01b031990811692871692831790915582541617905550610cd19050600582610da3565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610d9e5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610397565b919050565b6000610db8836001600160a01b038416610ec5565b9392505050565b6003546001600160a01b03908116600090815260026020526040902054166107c1576107c1610c0b565b6000610db8836001600160a01b038416610f14565b610e06611007565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610e58611050565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e333390565b6001600160a01b03811660009081526001830160205260408120541515610db8565b600061047a825490565b6000610db88383611096565b6000818152600183016020526040812054610f0c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047a565b50600061047a565b60008181526001830160205260408120548015610ffd576000610f38600183611228565b8554909150600090610f4c90600190611228565b9050818114610fb1576000866000018281548110610f6c57610f6c61123b565b9060005260206000200154905080876000018481548110610f8f57610f8f61123b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fc257610fc2611251565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047a565b600091505061047a565b60005460ff166107c15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610397565b60005460ff16156107c15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610397565b60008260000182815481106110ad576110ad61123b565b9060005260206000200154905092915050565b600080604083850312156110d357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114610d9e57600080fd5b60008060006060848603121561110e57600080fd5b611117846110e2565b9250611125602085016110e2565b9150611133604085016110e2565b90509250925092565b60006020828403121561114e57600080fd5b610db8826110e2565b60006020828403121561116957600080fd5b5035919050565b60006020828403121561118257600080fd5b81518015158114610db857600080fd5b600060208083528351808285015260005b818110156111bf578581018301518582016040015282016111a3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156111f257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611221576112216111f9565b5060010190565b8181038181111561047a5761047a6111f9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ade996890c56d4b43fb9e4ec0941b92fb2f65af6439db82451fa7e4509c266064736f6c63430008110033608060405234801561001057600080fd5b50610afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c6343000811003360c06040523480156200001157600080fd5b50604051620016c5380380620016c5833981016040819052620000349162000172565b600160005580806001600160a01b0381166200006357604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c8919062000172565b6001600160a01b0390811660805283169150620000fa905057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f919062000172565b6001600160a01b031660a05250620001a4565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b60805160a05161147e620002476000396000818160a5015281816101420152818161027001528181610343015281816103b2015281816104c601528181610649015281816106fc01528181610828015281816108fb01528181610a0901528181610ac701528181610b7a01528181610c9b01528181610d6e01528181610ed501528181610f6f0152610ff8015260008181610e3a0152611092015261147e6000f3fe6080604052600436106100955760003560e01c806372b0d90c1161005957806372b0d90c146101bf578063cd604a31146101df578063dfcd412e146101f2578063f9609f0814610212578063fea53be11461022557600080fd5b80630d4d1513146100ea5780632f4f21e2146101105780633fc8cef31461013057806354fd4d501461017c57806370a082311461019257600080fd5b366100e557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e3576040516377ead08760e11b815260040160405180910390fd5b005b600080fd5b6100fd6100f836600461124f565b610245565b6040519081526020015b60405180910390f35b34801561011c57600080fd5b506100e361012b366004611291565b610558565b34801561013c57600080fd5b506101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610107565b34801561018857600080fd5b506100fd61012c81565b34801561019e57600080fd5b506100fd6101ad3660046112bd565b60016020526000908152604090205481565b3480156101cb57600080fd5b506100e36101da3660046112bd565b6105b1565b6100fd6101ed3660046112e1565b61061e565b3480156101fe57600080fd5b506100fd61020d366004611328565b6107fd565b6100fd61022036600461137b565b610a9c565b34801561023157600080fd5b506100fd610240366004611328565b610c70565b60008361025181610e18565b61026e57604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa91906113b4565b6001600160a01b03161461032157604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015233906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906113d1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505061042e8734610eae565b6040516394bf804d60e01b8152600481018790526001600160a01b0386811660248301528816906394bf804d906044016020604051808303816000875af115801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a191906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906113d1565b61053b9190611400565b9050801561054d5761054d8382610fe2565b505050509392505050565b3361056281611070565b61057f57604051635e35244560e11b815260040160405180910390fd5b6001600160a01b038316600090815260016020526040812080548492906105a7908490611413565b9091555050505050565b6105b96110c3565b6001600160a01b03811660009081526001602081905260409091205490811115610610576001600160a01b038216600090815260016020819052604090912081905561061090839061060b9084611400565b610fe2565b5061061b6001600055565b50565b60008361062a81610e18565b61064757604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906113b4565b6001600160a01b0316146106fa57604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b50505050506107788534610eae565b60405163d598971360e01b81523460048201526001600160a01b03858116602483015261ffff8516604483015286169063d5989713906064016020604051808303816000875af11580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f491906113d1565b95945050505050565b60008461080981610e18565b61082657604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906113b4565b6001600160a01b0316146108d957604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906113d1565b604051632d182be560e21b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063b460af94906064015b6020604051808303816000875af11580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e491906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906113d1565b610a7e9190611400565b90508015610a9057610a908382610fe2565b50505050949350505050565b600082610aa881610e18565b610ac557604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5191906113b4565b6001600160a01b031614610b7857604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b5050505050610bf68434610eae565b604051636e553f6560e01b81523460048201526001600160a01b038481166024830152851690636e553f65906044016020604051808303816000875af1158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6891906113d1565b949350505050565b600084610c7c81610e18565b610c9957604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906113b4565b6001600160a01b031614610d4c57604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906113d1565b604051635d043b2960e11b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063ba087652906064016109a1565b604051635b16ebb760e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb7906024015b602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611426565b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4291906113d1565b1015610fde5760405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611426565b505b5050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b50610fde925050506001600160a01b03831682611121565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401610e67565b60026000540361111a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b804710156111715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611111565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b5050905080610fdc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611111565b6001600160a01b038116811461061b57600080fd5b60008060006060848603121561126457600080fd5b833561126f8161123a565b92506020840135915060408401356112868161123a565b809150509250925092565b600080604083850312156112a457600080fd5b82356112af8161123a565b946020939093013593505050565b6000602082840312156112cf57600080fd5b81356112da8161123a565b9392505050565b6000806000606084860312156112f657600080fd5b83356113018161123a565b925060208401356113118161123a565b9150604084013561ffff8116811461128657600080fd5b6000806000806080858703121561133e57600080fd5b84356113498161123a565b93506020850135925060408501356113608161123a565b915060608501356113708161123a565b939692955090935050565b6000806040838503121561138e57600080fd5b82356113998161123a565b915060208301356113a98161123a565b809150509250929050565b6000602082840312156113c657600080fd5b81516112da8161123a565b6000602082840312156113e357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ea857610ea86113ea565b80820180821115610ea857610ea86113ea565b60006020828403121561143857600080fd5b815180151581146112da57600080fdfea2646970667358221220cb4af6bfdb718634b9264c949899ac22d1c5f59bf3c6f8047430621a5ee8d16664736f6c6343000811003360806040523480156200001157600080fd5b506040516200220a3803806200220a833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b6120a680620001646000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104b9578063f1127ed8146104e0578063f2fde38b1461054757600080fd5b8063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b806395d89b41116100d357806395d89b41146103ea5780639742ca461461040d578063a9059cbb14610420578063b0660c3d1461043357600080fd5b806370a082311461036d578063782d6fe11461039f5780637ecebe00146103ca57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a75146102de578063587cde1e146102f65780635c19a95c1461031f5780636fcfff451461033257600080fd5b806330adf81f14610272578063313ce56714610299578063349dc329146102b357600080fd5b806306fdde03146101ae578063095ea7b3146101ea57806318160ddd1461020d57806320606b701461022e5780632185810b1461025557806323b872dd1461025f575b600080fd5b6101d46040518060400160405280600781526020016608ecac2e4c4def60cb1b81525081565b6040516101e19190611b92565b60405180910390f35b6101fd6101f8366004611bfc565b61055a565b60405190151581526020016101e1565b6102206b204fce5e3e2502611000000081565b6040519081526020016101e1565b6102207f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61025d610618565b005b6101fd61026d366004611c26565b610688565b6102207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102a1601281565b60405160ff90911681526020016101e1565b6007546102c6906001600160a01b031681565b6040516001600160a01b0390911681526020016101e1565b6006546102c69061010090046001600160a01b031681565b6102c6610304366004611c62565b6002602052600090815260409020546001600160a01b031681565b61025d61032d366004611c62565b6107c9565b610358610340366004611c62565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e1565b61022061037b366004611c62565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b6103b26103ad366004611bfc565b6107d6565b6040516001600160601b0390911681526020016101e1565b6102206103d8366004611c62565b60056020526000908152604090205481565b6101d46040518060400160405280600481526020016323a2a0a960e11b81525081565b61025d61041b366004611c62565b610a60565b6101fd61042e366004611bfc565b610b2f565b6006546101fd9060ff1681565b6103b261044e366004611c62565b610b6b565b61025d610461366004611c8e565b610be9565b61025d610474366004611ce6565b610ed4565b610220610487366004611d50565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b6102207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105236104ee366004611d83565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016101e1565b61025d610555366004611c62565b6112c1565b600080600019830361057457506001600160601b03610599565b61059683604051806060016040528060258152602001611edc602591396113ad565b90505b336000818152602081815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60065461010090046001600160a01b031633146106505760405162461bcd60e51b815260040161064790611dc3565b60405180910390fd5b6006805460ff191660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b6001600160a01b0383166000908152602081815260408083203380855290835281842054825160608101909352602580845291936001600160601b039091169285926106de9288929190611edc908301396113ad565b9050866001600160a01b0316836001600160a01b03161415801561070b57506001600160601b0382811614155b156107b157600061073583836040518060600160405280603d8152602001611ffe603d91396113dc565b6001600160a01b03898116600081815260208181526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6107bc878783611426565b5060019695505050505050565b6107d333826116f8565b50565b60004382106108375760405162461bcd60e51b815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610647565b6001600160a01b03831660009081526004602052604081205463ffffffff1690819003610868576000915050610612565b6001600160a01b0384166000908152600360205260408120849161088d600185611e10565b63ffffffff90811682526020820192909252604001600020541611610900576001600160a01b0384166000908152600360205260408120906108d0600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b031691506106129050565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff1683101561093b576000915050610612565b600080610949600184611e10565b90505b8163ffffffff168163ffffffff161115610a1b576000600261096e8484611e10565b6109789190611e34565b6109829083611e10565b6001600160a01b038816600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529192508790036109ef576020015194506106129350505050565b805163ffffffff16871115610a0657819350610a14565b610a11600183611e10565b92505b505061094c565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60065461010090046001600160a01b03163314610a8f5760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610b5483604051806060016040528060268152602001611f31602691396113ad565b9050610b61338583611426565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610b96576000610be2565b6001600160a01b038316600090815260036020526040812090610bba600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d6b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610647565b6001600160a01b0381166000908152600560205260408120805491610e0183611e65565b919050558914610e5e5760405162461bcd60e51b815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610647565b87421115610ebd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610647565b610ec7818b6116f8565b505050505b505050505050565b60006000198603610eed57506001600160601b03610f12565b610f0f86604051806060016040528060248152602001611fa6602491396113ad565b90505b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086610fef83611e65565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161106e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661113c5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e6174757265006044820152606401610647565b8b6001600160a01b0316816001600160a01b03161461119d5760405162461bcd60e51b815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a65640000000000006044820152606401610647565b884211156111ed5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e61747572652065787069726564006044820152606401610647565b846000808e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ab91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b60065461010090046001600160a01b031633146112f05760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b0381166113465760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b6006546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081600160601b84106113d45760405162461bcd60e51b81526004016106479190611b92565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114135760405162461bcd60e51b81526004016106479190611b92565b5061141e8385611e7e565b949350505050565b60065460ff1680611446575060065461010090046001600160a01b031633145b8061145b57506007546001600160a01b031633145b6114a75760405162461bcd60e51b815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e0000006044820152606401610647565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610647565b6001600160a01b03821661159f5760405162461bcd60e51b815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610647565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526115ea936001600160601b03909216928592919061203b908301396113dc565b6001600160a01b03848116600090815260016020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482516060810190935260308084526116529491909116928592909190611f0190830139611782565b6001600160a01b0383811660008181526001602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038084166000908152600260205260408082205485841683529120546116f3929182169116836117cf565b505050565b6001600160a01b03808316600081815260026020818152604080842080546001845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461177c8284836117cf565b50505050565b60008061178f8486611e9e565b9050846001600160601b0316816001600160601b0316101583906117c65760405162461bcd60e51b81526004016106479190611b92565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156117fa57506000816001600160601b0316115b156116f3576001600160a01b038316156118bf576001600160a01b03831660009081526004602052604081205463ffffffff16908161183a576000611886565b6001600160a01b03851660009081526003602052604081209061185e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b905060006118ad8285604051806060016040528060288152602001611f57602891396113dc565b90506118bb86848484611977565b5050505b6001600160a01b038216156116f3576001600160a01b03821660009081526004602052604081205463ffffffff1690816118fa576000611946565b6001600160a01b03841660009081526003602052604081209061191e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061196d8285604051806060016040528060278152602001611f7f60279139611782565b9050610ecc858484845b600061199b43604051806060016040528060348152602001611fca60349139611b6f565b905060008463ffffffff161180156119f557506001600160a01b038516600090815260036020526040812063ffffffff8316916119d9600188611e10565b63ffffffff908116825260208201929092526040016000205416145b15611a69576001600160a01b03851660009081526003602052604081208391611a1f600188611e10565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611b1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600382528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611ae9846001611ebe565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d45760405162461bcd60e51b815260040161064791905b600060208083528351808285015260005b81811015611bbf57858101830151858201604001528201611ba3565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bf757600080fd5b919050565b60008060408385031215611c0f57600080fd5b611c1883611be0565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b611c4484611be0565b9250611c5260208501611be0565b9150604084013590509250925092565b600060208284031215611c7457600080fd5b610be282611be0565b803560ff81168114611bf757600080fd5b60008060008060008060c08789031215611ca757600080fd5b611cb087611be0565b95506020870135945060408701359350611ccc60608801611c7d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611d0157600080fd5b611d0a88611be0565b9650611d1860208901611be0565b95506040880135945060608801359350611d3460808901611c7d565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d6357600080fd5b611d6c83611be0565b9150611d7a60208401611be0565b90509250929050565b60008060408385031215611d9657600080fd5b611d9f83611be0565b9150602083013563ffffffff81168114611db857600080fd5b809150509250929050565b6020808252601f908201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604082015260600190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611e2d57611e2d611dfa565b5092915050565b600063ffffffff80841680611e5957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611e7757611e77611dfa565b5060010190565b6001600160601b03828116828216039080821115611e2d57611e2d611dfa565b6001600160601b03818116838216019080821115611e2d57611e2d611dfa565b63ffffffff818116838216019080821115611e2d57611e2d611dfa56fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212205c356fbd26a2927ad0969afd2d786175a49452b6df0cc597ce2d0edbb24a252964736f6c63430008110033 \ No newline at end of file diff --git a/bin/contracts/test/suites/GenesisFactory.json b/bin/contracts/test/suites/GenesisFactory.json deleted file mode 100644 index 91303b03..00000000 --- a/bin/contracts/test/suites/GenesisFactory.json +++ /dev/null @@ -1,3768 +0,0 @@ -{ - "contractName": "GenesisFactory", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "wethToken", - "type": "address" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acl", - "outputs": [ - { - "internalType": "contract ACL", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - } - ], - "internalType": "struct PriceFeedConfig[]", - "name": "priceFeeds", - "type": "tuple[]" - } - ], - "name": "addPriceFeeds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "addressProvider", - "outputs": [ - { - "internalType": "contract AddressProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimACLOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "claimAddressProviderOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "priceOracle", - "outputs": [ - { - "internalType": "contract PriceOracle", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wethToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acl\",\"outputs\":[{\"internalType\":\"contract ACL\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"internalType\":\"struct PriceFeedConfig[]\",\"name\":\"priceFeeds\",\"type\":\"tuple[]\"}],\"name\":\"addPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract AddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimACLOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimAddressProviderOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceOracle\",\"outputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol\":\"GenesisFactory\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x8195b1103c4a784b1645ff8485d5fbf6994eeb8d033f34953fb76987c9aa7f74\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://995e2a8c9ee5befe9493b15e7991cd3d575ef11d6f4024aee9cda00af27686d0\",\"dweb:/ipfs/QmeHkzcHNwoPcC4i2G3G6LDF9oChusiztyGTYsq5fotHgb\"]},\"/home/mikko/Coding/core-v3/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0xf28a6b6e4e5da385ddfc95ae6e0719484a14a240687ad7a514435eede83c9efc\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c5a5189a274068c60f5e73fd5f3d32a262042b05c368a8aa140b3913a3104c71\",\"dweb:/ipfs/QmcT2U2H77TvKcbzyHp5XAZXiXrAGK1CbTzWZbPX7nhLC2\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0x7ec541ae052e1b6f45932028f4dcef0c05dbdb07f377cf244016b17bf026c092\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c812d20108a644e7c069e425659ef400a6e1cddf945f0cca0e3c28140f900353\",\"dweb:/ipfs/QmZ2GKfgTEw8ESBcTcpg19SvxnaqxK5rjEyzBRhJHBENZm\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IExceptions.sol\":{\"keccak256\":\"0x0cfa1c64af4cde6e8b4b62c6b38037cd5aea944f82169f080214c06091f70273\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61d057be08a8bb3d820bb1912d45269e245f3ff20b975c5b5d8aa23a72c472e5\",\"dweb:/ipfs/QmcCfpARaN4zhaxXTzsEUaK3LggjB96bBi6Npu3znENh2A\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IPool4626.sol\":{\"keccak256\":\"0x15c2053e52a08294a944ae110dd1e0a12e19d9d9745737542e6422a5abbebb38\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cbe740138c55fbd331a3ded7d2f4013c7afccbb8fb08dc7125bdd8da3257db8\",\"dweb:/ipfs/QmTetdSAkqsx7vv5u6f6ciRDWfHU1hjn9ojK5YJjfey7PX\"]},\"/home/mikko/Coding/core-v3/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x995f818158c4e1aa59528855a9f3c27a055750f454e4719f3ee3189b4546ca7b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02adbbe9097cccb4a83f0d321cbe0c699b1d60d6d784d5dcca14d8fee2afc015\",\"dweb:/ipfs/QmTyHJ3D95dyfMJXjDFyBu6TpiAnmpFT9of1oF8MFdLKku\"]},\"/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol\":{\"keccak256\":\"0x9d500b214e988952c4eaf05eec8170e5cd1c4dd93f104d0be7aa9404fb76c5b2\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://a618da1ff8a67718e0fdb2020873cfb9a18aa17086b15bb7ed7f5f5bb8d4b0cb\",\"dweb:/ipfs/QmZ5fpcj5fCrPuHcfHcdfq58jDjs3g4wmodKdVLUifPNH7\"]},\"/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol\":{\"keccak256\":\"0x048f035496e2d45ca35e1e4629c2313dc591afae67c20c5577ccd5ec26a206c8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3a1f792f5c50b0c034f147b1a00373da038a70e73d9c9202b15a2c08ad851094\",\"dweb:/ipfs/QmQPSCC8k65NFZzKNv4JzSsQVzaC54aM7Q555iCkJtwCNj\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ACLTrait.sol\":{\"keccak256\":\"0x8c1ac20b391ec15c994d89b77d297edff4d99a9cef63f1a16b10c8a64aefa6f3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://50308df8f32fcba6dbadbc3d720b24351d80c89e432d3915e00f24a7262c508a\",\"dweb:/ipfs/QmVmecTuUqKdbT56vPJBuCQLTVSgKbQU5KSuUWTH6rJLca\"]},\"/home/mikko/Coding/core-v3/contracts/traits/ContractsRegisterTrait.sol\":{\"keccak256\":\"0xdecb13fa2b9269e64c184276cc62b7c9ecde2bf9427402b6534690572fd2d821\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://ff9189896a9447a469ad1d12d6fa2694aa8e0ca2a4e858f028752ba57787722a\",\"dweb:/ipfs/QmTy3ADxN8CA4QHVkHe7R24UpHaHmvZW5KQGZb7grBCCGJ\"]},\"/home/mikko/Coding/core-v3/contracts/traits/SanityCheckTrait.sol\":{\"keccak256\":\"0x357bfe8417fb5ee1d72912c1013e7dc5f68abed1059bdc85b3f0d08a55392483\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://97e6e4ce1523098d7ccb09dd45dfec7ecb522d7da149acdbc0a377f6be5d23e2\",\"dweb:/ipfs/QmPVxv1kG4kMh9ETE1Bkt4tcNcWVjoPKJf16pNRrumSVBq\"]},\"/home/mikko/Coding/core-v3/node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol\":{\"keccak256\":\"0x8c8608d5e5a99250c4888cf036b5af4c4adcb7d7a6ee65aa1bd3d26d59a0ea57\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4f68cde5dc3fb75497df4cebd071ecdb53ab6bcedb609935a604dbe9ff81d5a7\",\"dweb:/ipfs/QmQQUwxcVdQo7BSoyXkd7z9aHm9qcNsmeacqksmQGDD3ph\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACLTrait.sol\":{\"keccak256\":\"0xa56c58c3be8332c32603a50a537f1d453e381fe0e35b20ce85bba4ecfe41b6d8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://8e6998d74359f0206629ca7f0e9384f05a35f947a975b8fb0c395b6d5226fd47\",\"dweb:/ipfs/QmUem8CeNogBxauwpMJtX1SxeUKdR62Ct8yANU4vUhERKB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol\":{\"keccak256\":\"0x33f124bfc1b3a1e5621e65b647a386e1f937ca2290f4d975ee64372a7c935208\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://40073d2122802645ec2d52f5ccbb98986481730e862180e6894da7d3b2017f58\",\"dweb:/ipfs/QmURnsN6Q6HrTAJZBpU28xtg39s2UGH84Kg8VdgbaV5WYG\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol\":{\"keccak256\":\"0xa967853d1a640e88efb6e51b6bb5b7a12ce4b720da7e9e2e8d0aa49c76a1da62\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f87ceed70e9f8ab1044efd792f3eec3e10d43a332d8dc37d5068dc6085099223\",\"dweb:/ipfs/QmXaDPutCTnEMw5x5iKSdGpqVDRDt9yrCk5BWihJgheck7\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol\":{\"keccak256\":\"0x3f418916b2bc572dd31b8a0e8fec4001deb376146b5dc5effc3d5d187faf5689\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://05c566f256fc2eeba67b839eda10f0c6bd126944a281e0597fc1fb433b8a24f0\",\"dweb:/ipfs/QmTV6KWn5ez25YHgRn5fpL8VEg8ui7fQiNcPMoZ8R7jmct\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol\":{\"keccak256\":\"0x65282248dfed37353288ecef1fbe29ca1795dd2be8e41bcc82c89959f3e1891f\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9cbab66f5bf30f9b04e28d877c83013a211d786395fe35f43079c7b2ad1e16ff\",\"dweb:/ipfs/QmQXEwb1PsYQMt3mZCQJBjx7Qfwur6rdKCTFJ5nk8qJzRR\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/access/Claimable.sol\":{\"keccak256\":\"0xaec5f372b066904d6b2d1ce672e48bc81155f60b5bc416a906bf9fc425d6790b\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f0791f1acb411c1a1c79eb4bcc6e4091f1cc14221d1b7c5bd327ce45dfe1fe1c\",\"dweb:/ipfs/QmeoREunqvxjLJgwtrtbtMw7eFR28ozMs5CvYL4Ew8KjBy\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol\":{\"keccak256\":\"0x03dff98ec94968396354b8f2063b2954297a4e13fbb43bf94d5e14e8e883f8ed\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://74180382ecc18d692902e2b67c561682a25a3faf227bf6a13e99ca56e339a497\",\"dweb:/ipfs/QmfV9TDgz33PwmixtBE1Rqp3eAZBoyoLoMVaDC5yzFTy3Q\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditFacade.sol\":{\"keccak256\":\"0x1ec4e076880c0c3fb8b5f7697e8304528906ae4208a89a3bfdb2a4a8a00f6fb5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://bd1b978c87fa3314f0e0d1c9a3339efff2bf70be43160b1d991d15177f8ba5b4\",\"dweb:/ipfs/QmP6xQ7BfdsP2TXMUDjnKv55L1qfnEBpQ8ccQjQjW8JGc6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/credit/CreditManager.sol\":{\"keccak256\":\"0xc3bb830d9a1595c5ce250f12d199b345d35b490876c739358e8da45ebb63f40e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://167f8f57c396c6a416a89ac76a22171173a64e5253493d4f8ebc08f92d50e88f\",\"dweb:/ipfs/QmdmcM5sXJrXu58uzZ5WuCm5NVWRM8zjA7CJASN5bwJ6a8\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IACL.sol\":{\"keccak256\":\"0xb2613ba2579762637ef8143f2b49c3dd3a2119f949fd57875ef420575d6c9184\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7ba653bdd000d05ed5975c243b806fb93ded00dd10b391fcbb7523eaa893f05\",\"dweb:/ipfs/QmfJf8hLhSsRucVVmtHSjKAzQ5tS3PpVKDmYEuiSTyVNSp\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAccountFactory.sol\":{\"keccak256\":\"0xbc8baa9635a89a5db3f6acc2ee412069e0f06e04849cf0c8fceab30c146ab910\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4938e96b832ec6f6c3c8aaa98dd86ca6cb4b418406ebd60cc546a1789ca723bf\",\"dweb:/ipfs/QmRrFMNWHpUhGBq7Ak8qwH2CqeD3QFZzC84APFAB4CyLVo\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x0b7de02c52dc124665cb5704e190d8487fc4190ab44df1367011549ed5f3380c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fae7bf6d10fd0b1ac2f90625cf92b31285f77f74bd0b220bbbb5aebac68c523\",\"dweb:/ipfs/QmNLkWcHEEz4231Vmyp1JHXNy7QuD5StJnpX2Anjd6puJB\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IBlacklistHelper.sol\":{\"keccak256\":\"0x01b2ff48b30e3b7750d723201ee577b7948902e5deb44fb301920dae4359a8a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dcb62ac0b3167059931ef2d83df02242cd3e396c9d78fa9b3bb25aeed3c07562\",\"dweb:/ipfs/QmZLnVM396bEwShiYxTTnhfWPqqpMFFGtAs3tPLJdVweUj\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IContractsRegister.sol\":{\"keccak256\":\"0x1a345f7043aca5a0c1113ccb59d6ba4042fc283f031e6071fb866bafabd34544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fd804e1e492059d6a03aa9a50972940b25ff6d26bdf28ab4028b0f2828a9805\",\"dweb:/ipfs/QmPH654Jxv5gVGBpjiztk2E8jSUXqdNyJxd7DQ4pAaSdxC\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol\":{\"keccak256\":\"0xa1175ab6a39794a71e9c7a37660567776cb6471730799065c7bdc9d639432f39\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a393fdd1ca2c0fee4190933b0497df85fb3359e1b1c6f76a414008a4caad5eb\",\"dweb:/ipfs/QmQ7Psr8jRQpQcEj9yvdoPow1SjEdVyPY9AxrPVWfX8KbL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditConfigurator.sol\":{\"keccak256\":\"0xfa3b27f4ab5221f7a47c3bf4f32517735970e1e3bd68c0aa72a1c57ec0beb276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b88784aef5755b4b68df6aff3dd473b6aae0e1c96949da2e9aba997bad7392b1\",\"dweb:/ipfs/QmQ2Ac9g4qrwNztnmpDycJBovhEpvEbaK5uSyn1qRN41aW\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditFacade.sol\":{\"keccak256\":\"0x78876556fffde17bf6472747b0cf3ee650828af304c7d25078d6421485398c50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://abe7ba43eebc5ad58a9e9f280b73b9d381305db976d37aedb324cb7c060f5de5\",\"dweb:/ipfs/Qme3eADqR9e4fPgC7YSEcaZ7ZjBXPRDWX8sebTYZPGxf48\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/ICreditManagerV2.sol\":{\"keccak256\":\"0xd54a04b1d3c51a32d06e387d3f4aa42e29e6c6fa04f6ea812e3332c29bbbe895\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3dd864c44bae19c636e504ec29f0ff54f2ebdcfd1672af3d51e9770333e14616\",\"dweb:/ipfs/QmaALYpxGrp8YnnqZXoXADhja8jXavnb588hDJgUdjq5XQ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDataCompressor.sol\":{\"keccak256\":\"0xe1410055319adc7ecf394fb8544d529db28b529b1d1294d6dcfeeb99f4321a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1eae0a83069a64c7ebd3af145566e31693a0d902dfcc4412cd6c49f48e653b83\",\"dweb:/ipfs/QmaAHy5YqbSLdWSXfGRHiVZxwMuVs5ZgMeZ1qkTKSSd5fr\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol\":{\"keccak256\":\"0x7a13bff663adce27a2b2ef9946bab1c4e39d237d3f301ec4c1abb9513bf1bdf7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c507cd200116d3aed6155e4de9ad5004f3fc02dc886ef8253e059dbdc61b35\",\"dweb:/ipfs/QmVUg1UkUVwV3DQiMH4V7xGbjimnNi4Fo8PqHc6ZWzGGSL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IErrors.sol\":{\"keccak256\":\"0xa6beaa5cdc919a2293694e76c400eb134a633b36de147c2a8437aac9adecda58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80756fa44665c69173b13831f79cf24794fcd2445a29efa0235a32b25b362516\",\"dweb:/ipfs/QmRTZJAqRA1iG9KcfFgaaPzAduoMmr4BMDYTWBwk8ZguKN\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPausable.sol\":{\"keccak256\":\"0xec118b94e53e20bce5571e9e3dfbd48779bdf1eb44b1415c37c16c798ec92992\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d206fa08ca382e463b1953648679c2d94218659fd16e62d8d93608442263c73\",\"dweb:/ipfs/QmU98YNAmyyNYwiY8MtCd1jRV3pRcJSHj9vTVqY5YLh5Cz\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol\":{\"keccak256\":\"0x1670e9b03e28443c88983c05ec195b0e63fdd49e65be9e763025e5d0915f4066\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46d62348c7392662f7a575e46431af7b53ca3ce626357bff7c525434ab84e33a\",\"dweb:/ipfs/QmexDytUVscmGcgjgtfNkPMF4rAf5Y9Ygp2twp4UPwRnm6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeedType.sol\":{\"keccak256\":\"0x59e6767df59b43511a7b1d37115b67bef0cc3d4fa044855add4b632df75b38b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e3d489de1808b3f7c963bb0f96877efc4735edfe051f334847a0ea8fbb43b0d\",\"dweb:/ipfs/QmaLifTCHF2TfHKReXBviLKnp846oEPChxWSpZuxY1s5kq\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3bf4882b07d816750b137238a8a3994130fb5ef0b7d66fdff1abf873ccc9301a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aabad2518c0e771437a8b2fa40c63bb2cf270b9e4373e328a5f02be41189ddd7\",\"dweb:/ipfs/QmfCERT8JyqFsTgSt7wN2VQHKfSjwcBxs1NX3J74dkLJT3\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol\":{\"keccak256\":\"0xacac869ec3ac67fce125372ce24f1b1298218474f36254dedc0902d22c7f00f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9cd22f594bfa34198dca58904ff8c0a016d01919f9229a4860c43d0977f2a67b\",\"dweb:/ipfs/Qmd8FshdsugHmyiD7tDhKQ3buv5iS2xZ9tB37o7ZWY3YmU\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/IWETHGateway.sol\":{\"keccak256\":\"0x5cca78bb2354a1605415fb20c1bdf27390f6ec83e273fff3fd365f4c75de0af4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5c209ba3f76d180dead5cbc0e49a6dba18e3a77793e795e1f2faf8b446b9763\",\"dweb:/ipfs/QmSuht2cSg5cpLvd1hasWGuYC8X7kqNe79s6RoKHq7aDjP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol\":{\"keccak256\":\"0x33021aa2cf8a70971bc33cee83d1efc8f8054579b419c7beb26653be92bb1a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad3e94c28e83e55a70eaaa2dd683242a8be7319024f7149b657044189116dd93\",\"dweb:/ipfs/QmVsXMF7qoEMZ3wYB4TVWJwvsxUZjUDYC2JdxTPPNbssDM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditManager.sol\":{\"keccak256\":\"0x22db3491682fd72c4b261ce500ccb2e9c3742ac18830d4e10d40f49014bafa5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b192f1ec27283cab14d04466ec19a4d5b765e0ba3c951108d147d1fe6c5948f0\",\"dweb:/ipfs/QmY7oMStzT9JqbpCVAbaXSPhLqdeQKN1eXwEaEuTxNcLz6\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol\":{\"keccak256\":\"0x0b7be55df7b9ebfb90b0bd187b299f95bab27d911c1ab5ade8f771ba2a27dd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56274c5ffe6c18c4b176c5a0a9a60e0c09cb6957f96139ece273513b380f7662\",\"dweb:/ipfs/QmWRWGjWPJ3wivCpTo3wWfcB46pDWUTYzvzMWXsWRSyABZ\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Balances.sol\":{\"keccak256\":\"0x981a6fbba9c7f694c358423b729a8e84b7636d9e339fe814c988922de207699a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1640ffb4941b94fabc17250febe7947f607dbaed27d01459840117f837bf78\",\"dweb:/ipfs/QmXG9G1eV3FapHzdRsUk7Fp3tnczFC1ZZRXpwyDmRyzpeg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Constants.sol\":{\"keccak256\":\"0x596e9dedcc57851256b0b00fdf706f6504c2cc799610b0e59897f65e303c6034\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ed4ee80d7c06d294d0bd9b4e035fb2bf9d7d19a87f4b237283055d095dd3c5c\",\"dweb:/ipfs/QmNvqG4Mb2QwXjHGUDUtpuRekj68TudqVSVTLb7Vow4kLP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Errors.sol\":{\"keccak256\":\"0x4f5bae8667b9ae6d5c64853b070ca099afab4a871c10205492aa7ce01451fe24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://127d677791c1936dcd02b02e59d82593918b72691decb08bdc2cf04d2a29d6f0\",\"dweb:/ipfs/Qmevb5eG9shiiog4EdWs4h3QHj6RsdtoFtczihMmPm8KBg\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol\":{\"keccak256\":\"0x8fb1d48671f7b93b8f27b98d45625c045c09de89fa660ff3763abbe51e4d11f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://81d2c413023db778b0291b90cb305cc42646f9c0c09e49d2ef2f43be5975517b\",\"dweb:/ipfs/QmW3Z27Pcf7rZzaR3F1Pv9jiTXnTEZnqo5n5gnZWNekaeL\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol\":{\"keccak256\":\"0xb18a26509834e8de4841e7ebeedf7fdb6cadb4273a615ed6d11317b6a92c86cb\",\"license\":\"agpl-3.0\",\"urls\":[\"bzz-raw://ec9448a37c44d42d16cceb2e84709574e90c3c281f715385dc27043912ba45c5\",\"dweb:/ipfs/Qmebk8npQwkyLnXwLBFBfXuw4fqm4VVx7HjV5pj8ZPJHKM\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/libraries/Types.sol\":{\"keccak256\":\"0x1c6c6e6078da902a7551eaaf696cd91295559959966b5a9ccd790266128f86e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c26ab3e22c4acd8d91d546a4a5c0f7b3da268f328da93ca33d6b92f453d0d846\",\"dweb:/ipfs/QmQsQhx3bp3pzwkTqdYQ8th2XaYhxk7xSRFaqY2iij1ViP\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceFeedChecker.sol\":{\"keccak256\":\"0x78bd925e7883e63dda90f615a808dd0ffc7ebbdba1933044ea560dcf527c4360\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3fa61016c62a4a39096e07bd8362aa410b1a62d8de8bf1a8e25653b8098a01a8\",\"dweb:/ipfs/Qme6m47fXLd9xjgiz652ghwS12Q7zzhWYjdzRhJ5M48UJE\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol\":{\"keccak256\":\"0x0d8a848ee309dc12b4422793bacb572b273aa4074cbd28b7322b3a0e6c15ea7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://405281dbf2a2b2d88fbb6168f2e831301e3e03912f280435a75f1a573d5bcea3\",\"dweb:/ipfs/QmP13xDAXyz7MqZd7jnNY6Mjwefq3Y1SJFMtYQu7qnWM8H\"]},\"/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol\":{\"keccak256\":\"0x99030b3930a07eccf12d3d4880db02563f84b60dad10003ed829467fc701dd8c\",\"license\":\"BSD-3-Clause\",\"urls\":[\"bzz-raw://1be7a72c75732fa48bd8351f7a82475602b45492caf4a1dc8646c9115914e0c2\",\"dweb:/ipfs/QmSKMk53jJrtgWSG5U5nuZP9eRhrMLCStwpxT7gmZPX2pP\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0xd82776ed6975a5939668e068f995acb1394c2f60a12a9ef3f14cacb91b5a8fd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f381a6a834cd8d5296b819365ffd39d192ab7ac3d458b894a612d1c3b92f03f\",\"dweb:/ipfs/QmTRQE9c57bHGtuubLp8fMAA5jfsb1BR5s7iPd9cWSPfKm\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/Clones.sol\":{\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4da0f451fe5aefdb95204dbec4a9448a8a2b00a444864bb5dbf7162da842a0f7\",\"dweb:/ipfs/QmYciAwNiJzgGMAqSTUANwMjy5HykNUvmkQ5PQhNTRqrB5\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3798da9e212cd00a7cda94ddb5a9721171a718e89c500d8901f810e0e37fa74e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a93f9c584e4b29dce1c7520b63d19f34c684f5ea972b5d04323a132059851004\",\"dweb:/ipfs/QmajmiA7BsarS63FMoP5PcBS4mqVGoiJ7xZ3wJVonYNTHC\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddabb16009cd17eaca3143feadf450ac13e72919ebe2ca50e00f61cb78bc004\",\"dweb:/ipfs/QmSPwPxX7d6TTWakN5jy5wsaGkS1y9TW8fuhGSraMkLk2B\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5a7b96e511be78d5cdf635c784e6ab8cdd38625bb8cafb8a80914a1c89cf0f6\",\"dweb:/ipfs/QmVzTCwJxQAkjRQHboT5QrvsVJGWQHgfEjeTbvyxoKBrds\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xab28a56179c1db258c9bf5235b382698cb650debecb51b23d12be9e241374b68\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://daae589a9d6fa7e55f99f86c0a16796ca490f243fb3693632c3711c0646c1d56\",\"dweb:/ipfs/QmR3zpd7wNw3rcUdekwiv6FYHJqksuTCXLVioTxu6Fbxk3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ec772b45a624be516f1c81970caa8a2e144301e9d0921cbc1a2789fef39a1269\",\"dweb:/ipfs/QmNyjwxCrGhQMyzLD93oUobJXVe9ceJvRvfXwbEtuxPiEj\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0xc3ff3f5c4584e1d9a483ad7ced51ab64523201f4e3d3c65293e4ca8aeb77a961\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7d3dd6067a994690471b5fc71b6f81fac3847798b37d404f74db00b4d3c3d0e\",\"dweb:/ipfs/QmRHF1RarifjNi93RttouNPkYZGyu6CD926PgRDzD5iL35\"]}},\"version\":1}", - "bytecode": "60806040523480156200001157600080fd5b506040516200e3293803806200e329833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6109ea8062000f4083390190565b610728806200192a83390190565b610bd2806200205283390190565b61443b8062002c2483390190565b6116b2806200705f83390190565b612349806200871183390190565b6116c5806200aa5a83390190565b61220a806200c11f83390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61067e80620008c26000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100f7578063abd45ac614610108578063de28735914610110578063f2fde38b14610123578063f9d68c811461013657600080fd5b80632630c12f146100985780632954018c146100c7578063715018a6146100da5780638874ff1f146100e4575b600080fd5b6003546100ab906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546100ab906001600160a01b031681565b6100e261013e565b005b6100e26100f236600461050d565b610152565b6000546001600160a01b03166100ab565b6100e261028f565b6002546100ab906001600160a01b031681565b6100e26101313660046105e9565b610301565b6100e261037f565b6101466103d7565b6101506000610431565b565b61015a6103d7565b60005b815181101561022e5760035482516001600160a01b039091169063e8a97a3e9084908490811061018f5761018f61060b565b6020026020010151600001518484815181106101ad576101ad61060b565b6020026020010151602001516040518363ffffffff1660e01b81526004016101eb9291906001600160a01b0392831681529116602082015260400190565b600060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050508061022790610621565b905061015d565b5060025460405163f2fde38b60e01b81523360048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b5050505050565b6102976103d7565b600260009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50505050565b6103096103d7565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61037c81610431565b50565b6103876103d7565b600160009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b6000546001600160a01b031633146101505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156104ba576104ba610481565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156104e9576104e9610481565b604052919050565b80356001600160a01b038116811461050857600080fd5b919050565b6000602080838503121561052057600080fd5b823567ffffffffffffffff8082111561053857600080fd5b818501915085601f83011261054c57600080fd5b81358181111561055e5761055e610481565b61056c848260051b016104c0565b818152848101925060069190911b83018401908782111561058c57600080fd5b928401925b818410156105de57604084890312156105aa5760008081fd5b6105b2610497565b6105bb856104f1565b81526105c88686016104f1565b8187015283526040939093019291840191610591565b979650505050505050565b6000602082840312156105fb57600080fd5b610604826104f1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161064157634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220b4a1c9a880a352408284487897289c1c30ce6b261117cf6898fd0cc90d1aeda164736f6c63430008110033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61092c806100be6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806377532ed9116100f9578063bcaead9811610097578063ce3c4ae411610071578063ce3c4ae414610320578063e30c397814610333578063f2fde38b14610346578063fca513a81461035957600080fd5b8063bcaead98146102f2578063c5120b3914610305578063c513c9bb1461031857600080fd5b80638da5cb5b116100d35780638da5cb5b146102be5780639068a868146102cf578063addc1a76146102d7578063affd9243146102ea57600080fd5b806377532ed9146102905780637b6757ff1461029857806386e09c08146102ab57600080fd5b80634c252f911161016657806354fd4d501161014057806354fd4d5014610236578063699f200f1461024c578063715018a61461027557806376aad6051461027d57600080fd5b80634c252f91146102135780634e71e0c81461021b578063530e784f1461022357600080fd5b8063060678c2146101ae57806308737695146101d35780631ed65110146101db57806321da5837146101f057806326c74fc31461020357806344b885631461020b575b600080fd5b6101b6610361565b6040516001600160a01b0390911681526020015b60405180910390f35b6101b6610383565b6101ee6101e936600461085f565b610394565b005b6101ee6101fe36600461085f565b6103bd565b6101b66103de565b6101b66103fd565b6101b661041c565b6101ee610434565b6101ee61023136600461085f565b6104c9565b61023e600281565b6040519081526020016101ca565b6101b661025a36600461088f565b6002602052600090815260409020546001600160a01b031681565b6101ee6104ea565b6101ee61028b36600461085f565b6104fe565b6101b6610516565b6101ee6102a636600461085f565b610530565b6101ee6102b936600461085f565b610556565b6000546001600160a01b03166101b6565b6101b6610575565b6101ee6102e536600461085f565b610592565b6101b66105b6565b6101ee61030036600461085f565b6105ce565b6101ee61031336600461085f565b6105ed565b6101b6610611565b6101ee61032e36600461085f565b610631565b6001546101b6906001600160a01b031681565b6101ee61035436600461085f565b610658565b6101b66106e9565b600061037e6e2220aa20afa1a7a6a82922a9a9a7a960891b6106ff565b905090565b600061037e621050d360ea1b6106ff565b61039c61075c565b6103ba701514915054d5549657d0d3d395149050d5607a1b826107b6565b50565b6103c561075c565b6103ba6b574554485f4741544557415960a01b826107b6565b600061037e701514915054d5549657d0d3d395149050d5607a1b6106ff565b600061037e704c45564552414745445f414354494f4e5360781b6106ff565b600061037e692ba2aa242faa27a5a2a760b11b6106ff565b6001546001600160a01b031633146104a25760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b6001546104b7906001600160a01b031661080f565b600180546001600160a01b0319169055565b6104d161075c565b6103ba6b50524943455f4f5241434c4560a01b826107b6565b6104f261075c565b6104fc600061080f565b565b61050661075c565b6103ba621050d360ea1b826107b6565b600061037e6b574554485f4741544557415960a01b6106ff565b61053861075c565b6103ba704c45564552414745445f414354494f4e5360781b826107b6565b61055e61075c565b6103ba692ba2aa242faa27a5a2a760b11b826107b6565b600061037e6e4143434f554e545f464143544f525960881b6106ff565b61059a61075c565b6103ba6e4143434f554e545f464143544f525960881b826107b6565b600061037e6923a2a0a92faa27a5a2a760b11b6106ff565b6105d661075c565b6103ba6923a2a0a92faa27a5a2a760b11b826107b6565b6105f561075c565b6103ba6e2220aa20afa1a7a6a82922a9a9a7a960891b826107b6565b600061037e7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b6106ff565b61063961075c565b6103ba7121a7a72a2920a1aa29afa922a3a4a9aa22a960711b826107b6565b61066061075c565b6001600160a01b0381166106c75760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610499565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061037e6b50524943455f4f5241434c4560a01b5b6000818152600260209081526040808320548151808301909252600382526241503160e81b928201929092526001600160a01b0390911690816107555760405162461bcd60e51b815260040161049991906108a8565b5092915050565b6000546001600160a01b031633146104fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b60008281526002602052604080822080546001600160a01b0319166001600160a01b0385169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561087157600080fd5b81356001600160a01b038116811461088857600080fd5b9392505050565b6000602082840312156108a157600080fd5b5035919050565b600060208083528351808285015260005b818110156108d5578581018301518582016040015282016108b9565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200dac7f71485a8db5aee1d67bb3ff3d39172b102aba5b8428150c0d728e808ea864736f6c63430008110033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106aa8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637328181911610097578063ba306df111610066578063ba306df114610229578063d4eb5db01461023c578063e30c397814610268578063f2fde38b1461027b57600080fd5b806373281819146101bb578063819ad68e146101de5780638da5cb5b146101f1578063adce758d1461021657600080fd5b80634e71e0c8116100d35780634e71e0c81461017357806354fd4d501461017b5780635f259aba14610191578063715018a6146101b357600080fd5b806335914829146100fa5780633a41ec64146101325780634910832f1461015e575b600080fd5b61011d610108366004610644565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61011d610140366004610644565b6001600160a01b031660009081526002602052604090205460ff1690565b61017161016c366004610644565b61028e565b005b6101716102e2565b610183600181565b604051908152602001610129565b61011d61019f366004610644565b6000546001600160a01b0391821691161490565b610171610377565b61011d6101c9366004610644565b60036020526000908152604090205460ff1681565b6101716101ec366004610644565b61038b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b610171610224366004610644565b6103df565b610171610237366004610644565b610474565b61011d61024a366004610644565b6001600160a01b031660009081526003602052604090205460ff1690565b6001546101fe906001600160a01b031681565b610171610289366004610644565b610509565b61029661059a565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b6001546001600160a01b031633146103505760405162461bcd60e51b815260206004820152602660248201527f436c61696d61626c653a2053656e646572206973206e6f742070656e64696e676044820152651037bbb732b960d11b60648201526084015b60405180910390fd5b600154610365906001600160a01b03166105f4565b600180546001600160a01b0319169055565b61037f61059a565b61038960006105f4565b565b61039361059a565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b6103e761059a565b6001600160a01b03811660009081526003602052604090205460ff1661042b576040516357f592b760e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260036020526040808220805460ff19169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b61047c61059a565b6001600160a01b03811660009081526002602052604090205460ff166104c05760405163e116318960e01b81526001600160a01b0382166004820152602401610347565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b61051161059a565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602860248201527f436c61696d61626c653a206e6577206f776e657220697320746865207a65726f604482015267206164647265737360c01b6064820152608401610347565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610347565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561065657600080fd5b81356001600160a01b038116811461066d57600080fd5b939250505056fea2646970667358221220835bbaf0cbddf40235bbad8ed20125110b9a758c1c68221f654a0fb5a5226bf064736f6c6343000811003360a060405234801561001057600080fd5b50604051610bd2380380610bd283398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610a9461013e600039600081816101d50152818161027f01528181610390015281816104ad01526106810152610a946000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac68601461020a578063c29277cd14610212578063d914cd4b1461021a578063e26b2f631461022d57600080fd5b80638456cb59146101c057806394144856146101c8578063a50cf2c8146101d0578063ac4afa38146101f757600080fd5b80635b16ebb7116100d35780635b16ebb71461014a5780635c975abb1461017d578063673a2a1f146101885780636fbc6f6b1461019d57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461012a57806354fd4d5014610134575b600080fd5b61010d610108366004610958565b610240565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261026a565b005b61013c600181565b604051908152602001610121565b61016d610158366004610971565b60026020526000908152604090205460ff1681565b6040519015158152602001610121565b60005460ff1661016d565b610190610319565b60405161012191906109a1565b61016d6101ab366004610971565b60046020526000908152604090205460ff1681565b61013261037b565b610190610428565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610205366004610958565b610488565b60015461013c565b60035461013c565b610132610228366004610971565b610498565b61013261023b366004610971565b61066c565b6003818154811061025057600080fd5b6000918252602090912001546001600160a01b0316905081565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa1580156102ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f291906109ee565b61030f5760405163081996f760e11b815260040160405180910390fd5b61031761083a565b565b6060600180548060200260200160405190810160405280929190818152602001828054801561037157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610353575b5050505050905090565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040391906109ee565b6104205760405163d794b1e760e01b815260040160405180910390fd5b61031761088c565b60606003805480602002602001604051908101604052809291908181526020018280548015610371576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610353575050505050905090565b6001818154811061025057600080fd5b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052091906109ee565b61053d576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166105865760405162461bcd60e51b815260040161057d9190610a10565b60405180910390fd5b506001600160a01b038116600090815260026020908152604091829020548251808401909352600383526243523160e81b9183019190915260ff16156105df5760405162461bcd60e51b815260040161057d9190610a10565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b038416908117909155600081815260026020526040808220805460ff1916909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906109ee565b610711576040516361081c1560e01b815260040160405180910390fd5b60408051808201909152600281526105a360f41b60208201526001600160a01b0382166107515760405162461bcd60e51b815260040161057d9190610a10565b506001600160a01b038116600090815260046020908152604091829020548251808401909352600383526221a91960e91b9183019190915260ff16156107aa5760405162461bcd60e51b815260040161057d9190610a10565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b038416908117909155600081815260046020526040808220805460ff1916909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b6108426108c9565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610894610912565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861086f3390565b60005460ff166103175760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057d565b60005460ff16156103175760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057d565b60006020828403121561096a57600080fd5b5035919050565b60006020828403121561098357600080fd5b81356001600160a01b038116811461099a57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156109e25783516001600160a01b0316835292840192918401916001016109bd565b50909695505050505050565b600060208284031215610a0057600080fd5b8151801515811461099a57600080fd5b600060208083528351808285015260005b81811015610a3d57858101830151858201604001528201610a21565b506000604082860101526040601f19601f830116850101925050509291505056fea26469706673582212200165d12495f46ea6b90db275dc0ffbe0092ae79649978a2f35c0eaa9ba89b4cd64736f6c6343000811003360e06040523480156200001157600080fd5b506040516200443b3803806200443b833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c05161421e6200021d6000396000818161015b0152818161159e01526120ea0152600081816101c001528181611033015281816118480152818161194301528181611a1001528181611ba401528181611c9f01528181611d4a01528181611df001528181611f02015281816130f4015261319a0152600061011c015261421e6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d5014610190578063663b8fdb146101a65780637a0c7b21146101bb578063a80deda3146101e2578063ae093f3f14610202578063fc9914cb1461022257600080fd5b80630dbd616d146100b957806313d21cdf146100e25780631bcd8fc0146101025780632954018c146101175780634b2f336d146101565780634c472fc91461017d575b600080fd5b6100cc6100c736600461371b565b610245565b6040516100d991906138f5565b60405180910390f35b6100f56100f0366004613908565b61100a565b6040516100d99190613a07565b61010a611842565b6040516100d99190613a16565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d9565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b61013e61018b36600461371b565b6119ec565b610198600281565b6040519081526020016100d9565b6101ae611b9e565b6040516100d99190613cdd565b61013e7f000000000000000000000000000000000000000000000000000000000000000081565b6101f56101f0366004613908565b611d43565b6040516100d99190613d3f565b610215610210366004613908565b611fc5565b6040516100d99190613d94565b61023561023036600461371b565b6130d0565b60405190151581526020016100d9565b61024d6134d6565b600080600080600061025e8861318e565b509450945094509450945060008560ff166001146102e557604051633a562dc160e21b81526001600160a01b03898116600483015284169063e958b70490602401602060405180830381865afa1580156102bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e09190613db7565b61034f565b604051633a562dc160e21b81526001600160a01b03898116600483015286169063e958b70490602401602060405180830381865afa15801561032b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034f9190613db7565b60ff871661022089018190526001600160a01b03808b1660208b01528b811660608b01528216895290915060010361071a57846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e39190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529085169063c7de38a690602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104569190613dd4565b60e088015260405163dfd5946560e01b81526001600160a01b03828116600483015285169063dfd5946590602401602060405180830381865afa1580156104a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c59190613dd4565b610100880152604051633ce0735560e01b81526001600160a01b03898116600483015260006024830152861690633ce0735590604401602060405180830381865afa925050508015610534575060408051601f3d908101601f1916820190925261053191810190613dd4565b60015b15610540576101608801525b604051633ce0735560e01b81526001600160a01b03898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156105a9575060408051601f3d908101601f191682019092526105a691810190613dd4565b60015b156105b5576101808801525b60e087015160405163132c653f60e31b81526001600160a01b0383811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa92505050801561062c575060408051601f3d908101601f1916820190925261062991810190613ded565b60015b1561063e57505015156101a08a015250505b806001600160a01b0316631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a09190613dd4565b6101c0880152604051630c64865760e21b81526001600160a01b038281166004830152851690633192195c90602401602060405180830381865afa1580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190613dd4565b60a08801526108df565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077c9190613db7565b6001600160a01b0390811660808901526040516363ef1c5360e11b815282821660048201529083169063c7de38a6906024016040805180830381865afa1580156107ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ee9190613e2d565b5060e088015260405163dfd5946560e01b81526001600160a01b03828116600483015283169063dfd5946590602401602060405180830381865afa15801561083a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085e9190613dd4565b610100880152604051630c64865760e21b81526001600160a01b038281166004830152841690633192195c90602401606060405180830381865afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613e51565b60c08a015260a08901526101c08801525b60008660ff1660011461095357836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190613db7565b6109b5565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b59190613db7565b9050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613dd4565b6101208901526000600160ff891614610a9357846001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190613dd4565b610af5565b856001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613dd4565b90508760ff16600114610b7157604051638991b2f160e01b81526001600160a01b038481166004830152861690638991b2f190602401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613dd4565b610bdb565b604051632d1473b360e21b81526001600160a01b03848116600483015287169063b451cecc90602401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb9190613dd4565b6102408a01528067ffffffffffffffff811115610bfa57610bfa613e7f565b604051908082528060200260200182016040528015610c4c57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c185790505b506101408a015260005b81811015610f2657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c169003610d8757604051635785328160e11b81526001600160a01b038781166004830152602482018590528a169063af0a650290604401608060405180830381865afa158015610cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d039190613e95565b505060208401526001600160a01b0390811680845260405163f9eaee0d60e01b81526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015610d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7b9190613ee4565b15156040830152610ed8565b60405163172c48c760e01b8152600481018490526001600160a01b0389169063172c48c7906024016040805180830381865afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190613f11565b506001600160a01b039081168084526040516370a0823160e01b81529188166004830152906370a0823190602401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190613dd4565b6020830152815160405163f9eaee0d60e01b81526001600160a01b0391821660048201529088169063f9eaee0d90602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190613ee4565b151560408301525b6102408c0151811615610eec576001610eef565b60005b151560608301526101408c0151805183919085908110610f1157610f11613f46565b60209081029190910101525050600101610c56565b50826001600160a01b03166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190613dd4565b896101e0018181525050826001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff59190613dd4565b6102008a015250969998505050505050505050565b611012613593565b604051635b16ebb760e01b81526001600160a01b03808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561107c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a09190613ee4565b6110bd57604051631a70964760e31b815260040160405180910390fd5b6001600160a01b0383168083526040805163fe14112d60e01b8152905185929163fe14112d9160048083019260209291908290030181865afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613dd4565b8360c0018181525050806001600160a01b031663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190613dd4565b8360e0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613dd4565b8360a0018181525050806001600160a01b0316634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190613dd4565b83610100018181525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d89190613dd4565b83610160018181525050806001600160a01b0316630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113449190613dd4565b836080018181525050806001600160a01b03166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af9190613dd4565b83610140018181525050806001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190613db7565b83604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190613db7565b83606001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190613dd4565b83610160018181525050806001600160a01b031663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115859190613dd4565b6101808401526040808401516001600160a01b039081167f0000000000000000000000000000000000000000000000000000000000000000821614602080870191909152825163609ae31760e01b815292519184169263609ae31792600480830193928290030181865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190613dd4565b836101c0018181525050806001600160a01b031663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613dd4565b836101a0018181525050600083606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190613dd4565b604051630a84f92760e31b8152600481018290529091506000906001600160a01b03841690635427c93890602401602060405180830381865afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190613dd4565b905080156117bd5761018085015181906117ae9061179290612710613f72565b8761010001518861014001516117a89190613f85565b90613402565b6117b89190613fb2565b6117c4565b8461014001515b85610120018181525050826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118309190613dd4565b60ff166101e086015250505050919050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c89190613dd4565b90508067ffffffffffffffff8111156118e3576118e3613e7f565b60405190808252806020026020018201604052801561191c57816020015b611909613593565b8152602001906001900390816119015790505b50915060005b818110156119e7576040516315895f4760e31b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ac4afa3890602401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613db7565b90506119c18161100a565b8483815181106119d3576119d3613f46565b602090810291909101015250600101611922565b505090565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b9190613ee4565b611a9857604051631679e86f60e11b815260040160405180910390fd5b6000806000611aa68761318e565b5050935093505092508260ff16600114611b295760405163fdd5764560e01b81526001600160a01b03878116600483015282169063fdd5764590602401602060405180830381865afa158015611b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b249190613db7565b611b93565b60405163fdd5764560e01b81526001600160a01b03878116600483015283169063fdd5764590602401602060405180830381865afa158015611b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b939190613db7565b979650505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190613dd4565b90508067ffffffffffffffff811115611c3f57611c3f613e7f565b604051908082528060200260200182016040528015611c7857816020015b611c65613630565b815260200190600190039081611c5d5790505b50915060005b818110156119e757604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611cee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d129190613db7565b9050611d1d81611fc5565b848381518110611d2f57611d2f613f46565b602090810291909101015250600101611c7e565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dca9190613dd4565b905060005b81811015611e8457604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e639190613db7565b9050611e6f81876130d0565b15611e7b578360010193505b50600101611dcf565b508167ffffffffffffffff811115611e9e57611e9e613e7f565b604051908082528060200260200182016040528015611ed757816020015b611ec46134d6565b815260200190600190039081611ebc5790505b5092506000915060005b81811015611fbd57604051630785b93f60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e16e4fc90602401602060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f759190613db7565b9050611f8181876130d0565b15611fb457611f908187610245565b858581518110611fa257611fa2613f46565b60209081029190910101526001909301925b50600101611ee1565b505050919050565b611fcd613630565b600080600080600080611fdf8861318e565b6001600160a01b038e168d5260ff86166101a08e01819052959b5093995091975095509350915060011461207457826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f9190613db7565b6120d6565b846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d69190613db7565b6001600160a01b03908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460608801526000600160ff88161461218657836001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613db7565b6121e8565b856001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e89190613db7565b6001600160a01b0381811660408b810182905251632e97ca2160e01b8152918c166004830152919250632e97ca2190602401602060405180830381865afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190613ee4565b15156080890152604080516345d31f9d60e01b815290516001600160a01b038316916345d31f9d9160048083019260209291908290030181865afa1580156122a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cb9190613dd4565b8860a0018181525050806001600160a01b031663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123369190613dd4565b6101208901525060ff861660010361241f57846001600160a01b0316639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123aa9190613dd4565b8760c0018181525050846001600160a01b0316635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124159190613dd4565b60e0880152612497565b816001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561245c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124809190613fdd565b6001600160801b0390811660e08a01521660c08801525b60008660ff1660011461250b57836001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125069190613dd4565b61256d565b846001600160a01b03166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256d9190613dd4565b90508067ffffffffffffffff81111561258857612588613e7f565b6040519080825280602002602001820160405280156125b1578160200160208202803683370190505b506101408901528067ffffffffffffffff8111156125d1576125d1613e7f565b6040519080825280602002602001820160405280156125fa578160200160208202803683370190505b5061018089015260005b8181101561280f578760ff1660010361273f57604051632f2f971360e11b8152600481018290526000906001600160a01b03881690635e5f2e2690602401602060405180830381865afa15801561265f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126839190613db7565b9050808a6101400151838151811061269d5761269d613f46565b6001600160a01b039283166020918202929092010152604051630f064e8760e31b8152828216600482015290881690637832743890602401602060405180830381865afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127169190613dd4565b8a6101800151838151811061272d5761272d613f46565b60200260200101818152505050612807565b60405163172c48c760e01b8152600481018290526001600160a01b0386169063172c48c7906024016040805180830381865afa158015612783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a79190613f11565b8061ffff1690508a610140015183815181106127c5576127c5613f46565b602002602001018b610180015184815181106127e3576127e3613f46565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505b600101612604565b50508560ff16600103612a1e576000846001600160a01b03166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190613dd4565b90508067ffffffffffffffff81111561289b5761289b613e7f565b6040519080825280602002602001820160405280156128e057816020015b60408051808201909152600080825260208201528152602001906001900390816128b95790505b5061016089015260005b81811015612a1757604051635094cb4f60e01b8152600481018290526000906001600160a01b03881690635094cb4f90602401602060405180830381865afa15801561293a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295e9190613db7565b6040805180820182526001600160a01b03808416808352925163fdd5764560e01b81526004810193909352929350916020830191908a169063fdd5764590602401602060405180830381865afa1580156129bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e09190613db7565b6001600160a01b03168152508a61016001518381518110612a0357612a03613f46565b6020908102919091010152506001016128ea565b5050612bea565b6000816001600160a01b031663373c8f626040518163ffffffff1660e01b8152600401600060405180830381865afa158015612a5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a869190810190614007565b80519091508067ffffffffffffffff811115612aa457612aa4613e7f565b604051908082528060200260200182016040528015612ae957816020015b6040805180820190915260008082526020820152815260200190600190039081612ac25790505b506101608a015260005b81811015612be6576000838281518110612b0f57612b0f613f46565b602002602001015190506040518060400160405280826001600160a01b03168152602001886001600160a01b031663fdd57645846040518263ffffffff1660e01b8152600401612b6e91906001600160a01b0391909116815260200190565b602060405180830381865afa158015612b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baf9190613db7565b6001600160a01b03168152508b61016001518381518110612bd257612bd2613f46565b602090810291909101015250600101612af3565b5050505b8560ff16600103612dc357846001600160a01b031663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c579190613dd4565b61010088015260ff61028088015260408051635e0b63d360e01b815290516001600160a01b03871691635e0b63d39160048083019260209291908290030181865afa158015612caa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cce9190613dd4565b61ffff166102a088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d419190613dd4565b61ffff166102c088015260408051631c8affd560e11b815290516001600160a01b03871691633915ffaa9160048083019260209291908290030181865afa158015612d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db49190613dd4565b61ffff166102e08801526130c5565b81876101c001906001600160a01b031690816001600160a01b031681525050826001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613db7565b876101e001906001600160a01b031690816001600160a01b031681525050816001600160a01b0316639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190613db7565b8761022001906001600160a01b031690816001600160a01b031681525050816001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401608060405180830381865afa158015612f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4491906140cc565b505015156102408901525060408051639fd12b7760e01b815290516001600160a01b03851691639fd12b779160048083019260209291908290030181865afa158015612f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb89190613dd4565b87610260018181525050826001600160a01b0316638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613024919061412c565b60ff1661028088015260408051634d78e9ad60e11b815290516001600160a01b03851691639af1d35a9160048083019260a09291908290030181865afa158015613072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613096919061414f565b61ffff9081166103208d01529081166103008c01529081166102e08b01529081166102c08a0152166102a08801525b505050505050919050565b604051636fbc6f6b60e01b81526001600160a01b03808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa15801561313b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315f9190613ee4565b61317c57604051631679e86f60e11b815260040160405180910390fd5b6131868484613455565b949350505050565b600080600080600080867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fbc6f6b826040518263ffffffff1660e01b81526004016131f391906001600160a01b0391909116815260200190565b602060405180830381865afa158015613210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132349190613ee4565b61325157604051631679e86f60e11b815260040160405180910390fd5b876001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190613dd4565b96508660ff1660010361332c57879550856001600160a01b031663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613db7565b94506133f8565b879350836001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561336d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133919190613db7565b9250836001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f59190613db7565b91505b5091939550919395565b600082158061340f575081155b1561341c5750600061344f565b61271061342a6002826141b4565b61ffff166134388486613f85565b61344291906141d5565b61344c9190613fb2565b90505b92915050565b60405163055ee9b560e01b81526001600160a01b038281166004830152600091829185169063055ee9b590602401602060405180830381865afa1580156134a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c49190613db7565b6001600160a01b031614159392505050565b60405180610260016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b60405180610200016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b604080516103408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082018190526101808201526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052610260810182905261028081018290526102a081018290526102c081018290526102e08101829052610300810182905261032081019190915290565b6001600160a01b038116811461371857600080fd5b50565b6000806040838503121561372e57600080fd5b823561373981613703565b9150602083013561374981613703565b809150509250929050565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101613768565b509495945050505050565b80516001600160a01b03168252600061026060208301516137e860208601826001600160a01b03169052565b5060408301516137fc604086018215159052565b50606083015161381760608601826001600160a01b03169052565b50608083015161383260808601826001600160a01b03169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151818601525061014080840151828287015261388183870182613754565b925050506101608084015181860152506101808084015181860152506101a0808401516138b18287018215159052565b50506101c083810151908501526101e0808401519085015261020080840151908501526102208084015160ff16908501526102409283015192909301919091525090565b60208152600061344c60208301846137bc565b60006020828403121561391a57600080fd5b813561392581613703565b9392505050565b80516001600160a01b03168252602081015161394c602084018215159052565b50604081015161396760408401826001600160a01b03169052565b50606081015161398260608401826001600160a01b03169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161344f828461392c565b6020808252825182820181905260009190848201906040850190845b81811015613a5957613a4583855161392c565b928401926102009290920191600101613a32565b50909695505050505050565b600081518084526020808501945080840160005b838110156137b15781516001600160a01b031687529582019590820190600101613a79565b600081518084526020808501945080840160005b838110156137b157815180516001600160a01b03908116895290840151168388015260409096019590820190600101613ab2565b600081518084526020808501945080840160005b838110156137b157815187529582019590820190600101613afa565b80516001600160a01b0316825260006103406020830151613b4260208601826001600160a01b03169052565b506040830151613b5d60408601826001600160a01b03169052565b506060830151613b71606086018215159052565b506080830151613b85608086018215159052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401518282870152613bd483870182613a65565b925050506101608084015185830382870152613bf08382613a9e565b925050506101808084015185830382870152613c0c8382613ae6565b925050506101a080840151613c258287018260ff169052565b50506101c0838101516001600160a01b03908116918601919091526101e0808501518216908601526102008085015115159086015261022080850151909116908501526102408084015115159085015261026080840151908501526102808084015160ff16908501526102a08084015161ffff908116918601919091526102c0808501518216908601526102e08085015182169086015261030080850151821690860152610320938401511692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d20858351613b16565b94509285019290850190600101613d04565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d3257603f19888603018452613d828583516137bc565b94509285019290850190600101613d66565b60208152600061344c6020830184613b16565b8051613db281613703565b919050565b600060208284031215613dc957600080fd5b815161392581613703565b600060208284031215613de657600080fd5b5051919050565b600080600080600060a08688031215613e0557600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008060408385031215613e4057600080fd5b505080516020909101519092909150565b600080600060608486031215613e6657600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215613eab57600080fd5b8451613eb681613703565b60208601516040870151606090970151919890975090945092505050565b80518015158114613db257600080fd5b600060208284031215613ef657600080fd5b61344c82613ed4565b805161ffff81168114613db257600080fd5b60008060408385031215613f2457600080fd5b8251613f2f81613703565b9150613f3d60208401613eff565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561344f5761344f613f5c565b808202811582820484141761344f5761344f613f5c565b634e487b7160e01b600052601260045260246000fd5b600082613fc157613fc1613f9c565b500490565b80516001600160801b0381168114613db257600080fd5b60008060408385031215613ff057600080fd5b613ff983613fc6565b9150613f3d60208401613fc6565b6000602080838503121561401a57600080fd5b825167ffffffffffffffff8082111561403257600080fd5b818501915085601f83011261404657600080fd5b81518181111561405857614058613e7f565b8060051b604051601f19603f8301168101818110858211171561407d5761407d613e7f565b60405291825284820192508381018501918883111561409b57600080fd5b938501935b828510156140c0576140b185613da7565b845293850193928501926140a0565b98975050505050505050565b600080600080608085870312156140e257600080fd5b6140eb85613fc6565b93506140f960208601613ed4565b9250604085015164ffffffffff8116811461411357600080fd5b915061412160608601613eff565b905092959194509250565b60006020828403121561413e57600080fd5b815160ff8116811461392557600080fd5b600080600080600060a0868803121561416757600080fd5b61417086613eff565b945061417e60208701613eff565b935061418c60408701613eff565b925061419a60608701613eff565b91506141a860808701613eff565b90509295509295909350565b600061ffff808416806141c9576141c9613f9c565b92169190910492915050565b8082018082111561344f5761344f613f5c56fea264697066735822122033db04dd6ad85cbb23c61a3c1df229cdee23950afa0e93d191a4e60c173de79664736f6c6343000811003360a06040523480156200001157600080fd5b50604051620016b2380380620016b283398101604081905262000034916200060c565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070e565b6001600160a01b031660805250805160005b8181101562000142576200013983828151811062000100576200010062000733565b60200260200101516000015184838151811062000121576200012162000733565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000827565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004b560201b620005591760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004b560201b620005591760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000749565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076e565b60015b15620003285790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000387575060408051601f3d908101601f19168201909252620003849181019062000749565b60015b620003a55760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003cb5760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042a575060408051601f3d908101601f191682019092526200042791810190620007aa565b60015b62000448576040516367a7cd4360e01b815260040160405180910390fd5b866200045c576200045c85858484620004c4565b50505050506200046f848484846200052a565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b6001600160a01b03163b151590565b60008313620004e6576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000505575081155b15620005245760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200054257600160a11b175b6200055860ff60a21b60a284901b1682620007ff565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200059357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005d357620005d362000598565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000604576200060462000598565b604052919050565b60008060408084860312156200062157600080fd5b6200062c846200057b565b602085810151919450906001600160401b03808211156200064c57600080fd5b818701915087601f8301126200066157600080fd5b81518181111562000676576200067662000598565b62000686848260051b01620005d9565b818152848101925060069190911b830184019089821115620006a757600080fd5b928401925b81841015620006fe5785848b031215620006c65760008081fd5b620006d0620005ae565b620006db856200057b565b8152620006ea8686016200057b565b8187015283529285019291840191620006ac565b8096505050505050509250929050565b6000602082840312156200072157600080fd5b6200072c826200057b565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075c57600080fd5b815160ff811681146200072c57600080fd5b6000602082840312156200078157600080fd5b815180151581146200072c57600080fd5b80516001600160501b03811681146200059357600080fd5b600080600080600060a08688031215620007c357600080fd5b620007ce8662000792565b9450602086015193506040860151925060608601519150620007f36080870162000792565b90509295509295909350565b808201808211156200082157634e487b7160e01b600052601160045260246000fd5b92915050565b608051610e5a62000858600039600081816101950152818161023d01528181610360015261043e0152610e5a6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101b7578063e8a97a3e146101ca578063f190e5fa146101dd578063f9a650301461021557600080fd5b80638456cb591461015d5780639dcb511a14610165578063a50cf2c81461019057600080fd5b80633f4ba83a146100d457806341976e09146100de57806354fd4d50146101045780635c975abb1461010c5780635cecbd0e146101225780637afb01041461014a575b600080fd5b6100dc610228565b005b6100f16100ec366004610b29565b6102d7565b6040519081526020015b60405180910390f35b6100f1600281565b60005460ff1660405190151581526020016100fb565b610135610130366004610b4b565b6102e9565b604080519283526020830191909152016100fb565b6100f1610158366004610b91565b61030d565b6100dc61034b565b610178610173366004610b29565b6103f8565b6040516001600160a01b0390911681526020016100fb565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6100f16101c5366004610bbd565b61040c565b6100dc6101d8366004610bf9565b610429565b6101f06101eb366004610b29565b6104dc565b604080516001600160a01b0390941684529115156020840152908201526060016100fb565b6100f1610223366004610b91565b610531565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610c23565b6102cd5760405163081996f760e11b815260040160405180910390fd5b6102d5610568565b565b60006102e2826105ba565b5092915050565b6000806102f68686610531565b91506103028484610531565b905094509492505050565b600080600061031b846105ba565b90925090508161032c82600a610d3f565b6103369087610d4b565b6103409190610d62565b925050505b92915050565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa1580156103af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d39190610c23565b6103f05760405163d794b1e760e01b815260040160405180910390fd5b6102d5610665565b6000610403826104dc565b50909392505050565b600061042161041b8585610531565b8361030d565b949350505050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa15801561048d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b19190610c23565b6104ce576040516361081c1560e01b815260040160405180910390fd5b6104d882826106a2565b5050565b6001600160a01b03811660009081526001602052604081205481908190808203610519576040516325dc56c160e11b815260040160405180910390fd5b94600160a11b86161515945060a286901c9350915050565b600080600061053f846105ba565b909250905061054f81600a610d3f565b6103368387610d4b565b6001600160a01b03163b151590565b6105706109c7565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000806000806105c9856104dc565b809550819350829450505050600080600080856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610619573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063d9190610d9e565b945094505093509350846106575761065784848484610a10565b829750505050505050915091565b61066d610a79565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861059d3390565b6001600160a01b03821615806106bf57506001600160a01b038116155b156106dd57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b0382163b6107155760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b0381163b6107485760405163df4c572d60e01b81526001600160a01b038216600482015260240161070c565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156107a2575060408051601f3d908101601f1916820190925261079f91810190610dee565b60015b6107bf576040516367a7cd4360e01b815260040160405180910390fd5b8060ff166008146107e3576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610840575060408051601f3d908101601f1916820190925261083d91810190610c23565b60015b156108485790505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108a4575060408051601f3d908101601f191682019092526108a191810190610dee565b60015b6108c15760405163528ca31d60e01b815260040160405180910390fd5b60128160ff1611156108e65760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610942575060408051601f3d908101601f1916820190925261093f91810190610d9e565b60015b61095f576040516367a7cd4360e01b815260040160405180910390fd5b866109705761097085858484610a10565b505050505061098184848484610abf565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60005460ff166102d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161070c565b60008313610a31576040516356e05d2b60e01b815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610a55575081155b15610a735760405163b1cf675560e01b815260040160405180910390fd5b50505050565b60005460ff16156102d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161070c565b6001600160a01b0383168215610ad657600160a11b175b610aea60ff60a21b60a284901b1682610e11565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80356001600160a01b0381168114610b2457600080fd5b919050565b600060208284031215610b3b57600080fd5b610b4482610b0d565b9392505050565b60008060008060808587031215610b6157600080fd5b84359350610b7160208601610b0d565b925060408501359150610b8660608601610b0d565b905092959194509250565b60008060408385031215610ba457600080fd5b82359150610bb460208401610b0d565b90509250929050565b600080600060608486031215610bd257600080fd5b83359250610be260208501610b0d565b9150610bf060408501610b0d565b90509250925092565b60008060408385031215610c0c57600080fd5b610c1583610b0d565b9150610bb460208401610b0d565b600060208284031215610c3557600080fd5b81518015158114610b4457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610c96578160001904821115610c7c57610c7c610c45565b80851615610c8957918102915b93841c9390800290610c60565b509250929050565b600082610cad57506001610345565b81610cba57506000610345565b8160018114610cd05760028114610cda57610cf6565b6001915050610345565b60ff841115610ceb57610ceb610c45565b50506001821b610345565b5060208310610133831016604e8410600b8410161715610d19575081810a610345565b610d238383610c5b565b8060001904821115610d3757610d37610c45565b029392505050565b6000610b448383610c9e565b808202811582820484141761034557610345610c45565b600082610d7f57634e487b7160e01b600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610b2457600080fd5b600080600080600060a08688031215610db657600080fd5b610dbf86610d84565b9450602086015193506040860151925060608601519150610de260808701610d84565b90509295509295909350565b600060208284031215610e0057600080fd5b815160ff81168114610b4457600080fd5b8082018082111561034557610345610c4556fea264697066735822122069c2fd2db6d7dc1b5845e60541bf11eeb508185a9ae85239b49627abfd6b814564736f6c6343000811003360e06040523480156200001157600080fd5b5060405162002349380380620023498339810160408190526200003491620004af565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004af565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004e1565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004af565b6001600160a01b031660c052604051620001a490620004a1565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000531565b6000620002a460a0516200038c60201b62000d091760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200042f811b62000da317901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166200042a5760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000446836001600160a01b0384166200044f565b90505b92915050565b6000818152600183016020526040812054620004985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000449565b50600062000449565b610b1a806200182f83390190565b600060208284031215620004c257600080fd5b81516001600160a01b0381168114620004da57600080fd5b9392505050565b600060208083528351808285015260005b818110156200051057858101830151858201604001528201620004f2565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05160c05161129d6200059260003960008181610213015281816102eb01526108850152600081816101b80152610c120152600081816102600152818161049501528181610729015281816107d80152610a94015261129d6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806388f64c54116100ad578063b193976311610071578063b193976314610295578063b60e85181461029d578063d82ecc48146102a5578063e3ba9ace146102b8578063f23953ab146102cb57600080fd5b806388f64c541461020e57806389b77b3e146102355780638f7dcfa314610248578063a50cf2c81461025b578063a904aab61461028257600080fd5b806354fd4d50116100f457806354fd4d50146101865780635c975abb1461019c5780635da33c5b146101b3578063765e0159146101da5780638456cb591461020657600080fd5b806313d8c8401461012657806321d18456146101565780632932472f146101695780633f4ba83a1461017e575b600080fd5b600454610139906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101396101643660046110c0565b6102d3565b61017c6101773660046110f9565b610480565b005b61017c610714565b61018e600181565b60405190815260200161014d565b60005460ff165b604051901515815260200161014d565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b6101396101e836600461113c565b6001600160a01b039081166000908152600260205260409020541690565b61017c6107c3565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c61024336600461113c565b610870565b600354610139906001600160a01b031681565b6101397f000000000000000000000000000000000000000000000000000000000000000081565b61017c6102903660046110f9565b610a7f565b61018e610b8c565b61018e610be0565b6101a36102b336600461113c565b610bf1565b6101396102c6366004611157565b610bfe565b61017c610c0b565b604051636fbc6f6b60e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa15801561033a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035e9190611170565b60405180604001604052806002815260200161043560f41b815250906103a05760405162461bcd60e51b81526004016103979190611192565b60405180910390fd5b506103a9610dbf565b600380546001600160a01b038082166000818152600260205260409081902080549093166001600160a01b03199485161790945581549092169055905163c75b5a7160e01b81523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561042957600080fd5b505af115801561043d573d6000803e3d6000fd5b50506040513392506001600160a01b03841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105089190611170565b610525576040516361081c1560e01b815260040160405180910390fd5b61052d610dbf565b6003546001600160a01b0380841691160361057e57600380546001600160a01b03808216600090815260026020526040902080549091166001600160a01b0319928316179092558154169055610651565b6001600160a01b03838116600090815260026020908152604091829020548251808401909352600383526241463360e81b9183019190915290918481169116146105db5760405162461bcd60e51b81526004016103979190611192565b506004546001600160a01b039081169083160361060e57600480546001600160a01b0319166001600160a01b0385161790555b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b03199283161790945591905281541690555b60405163c75b5a7160e01b81526001600160a01b038281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156106a257600080fd5b505af11580156106b6573d6000803e3d6000fd5b505050506106ce826005610de990919063ffffffff16565b50806001600160a01b0316826001600160a01b03167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b604051630d4eb5db60e41b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d4eb5db090602401602060405180830381865afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190611170565b6107b95760405163081996f760e11b815260040160405180910390fd5b6107c1610dfe565b565b604051630e907b1960e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633a41ec6490602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611170565b6108685760405163d794b1e760e01b815260040160405180910390fd5b6107c1610e50565b604051636fbc6f6b60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636fbc6f6b90602401602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190611170565b60405180604001604052806002815260200161043560f41b815250906109315760405162461bcd60e51b81526004016103979190611192565b5061093d600582610e8d565b6040518060400160405280600381526020016210518d60ea1b815250906109775760405162461bcd60e51b81526004016103979190611192565b5043816001600160a01b0316633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db91906111e0565b14156040518060400160405280600381526020016241463160e81b81525090610a175760405162461bcd60e51b81526004016103979190611192565b50600480546001600160a01b0390811660009081526002602052604080822080546001600160a01b03199081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b604051632f92cd5d60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635f259aba90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611170565b610b24576040516361081c1560e01b815260040160405180910390fd5b6040516319a1603960e01b81526001600160a01b03838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050505050565b60035460009081906001600160a01b03165b6001600160a01b03811615610bda576001600160a01b039081166000908152600260205260409020541681610bd28161120f565b925050610b9e565b50919050565b6000610bec6005610eaf565b905090565b600061047a600583610e8d565b600061047a600583610eb9565b6000610c367f0000000000000000000000000000000000000000000000000000000000000000610d09565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020526040902080546001600160a01b031990811692871692831790915582541617905550610cd19050600582610da3565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116610d9e5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401610397565b919050565b6000610db8836001600160a01b038416610ec5565b9392505050565b6003546001600160a01b03908116600090815260026020526040902054166107c1576107c1610c0b565b6000610db8836001600160a01b038416610f14565b610e06611007565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610e58611050565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e333390565b6001600160a01b03811660009081526001830160205260408120541515610db8565b600061047a825490565b6000610db88383611096565b6000818152600183016020526040812054610f0c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047a565b50600061047a565b60008181526001830160205260408120548015610ffd576000610f38600183611228565b8554909150600090610f4c90600190611228565b9050818114610fb1576000866000018281548110610f6c57610f6c61123b565b9060005260206000200154905080876000018481548110610f8f57610f8f61123b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fc257610fc2611251565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047a565b600091505061047a565b60005460ff166107c15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610397565b60005460ff16156107c15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610397565b60008260000182815481106110ad576110ad61123b565b9060005260206000200154905092915050565b600080604083850312156110d357600080fd5b50508035926020909101359150565b80356001600160a01b0381168114610d9e57600080fd5b60008060006060848603121561110e57600080fd5b611117846110e2565b9250611125602085016110e2565b9150611133604085016110e2565b90509250925092565b60006020828403121561114e57600080fd5b610db8826110e2565b60006020828403121561116957600080fd5b5035919050565b60006020828403121561118257600080fd5b81518015158114610db857600080fd5b600060208083528351808285015260005b818110156111bf578581018301518582016040015282016111a3565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156111f257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611221576112216111f9565b5060010190565b8181038181111561047a5761047a6111f9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212209ade996890c56d4b43fb9e4ec0941b92fb2f65af6439db82451fa7e4509c266064736f6c63430008110033608060405234801561001057600080fd5b50610afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806354fd4d501161007157806354fd4d501461012f5780638129fc1c14610137578063c12c21c01461013f578063c45a01551461016a578063c75b5a7114610183578063d1660f991461019657600080fd5b806316128211146100b957806317d11a15146100ce57806319a16039146100ea5780631afbb7a4146100fd5780631cff79cd146101065780633dc54b4014610126575b600080fd5b6100cc6100c7366004610852565b6101a9565b005b6100d760035481565b6040519081526020015b60405180910390f35b6100cc6100f8366004610890565b6101df565b6100d760025481565b6101196101143660046108d9565b610229565b6040516100e191906109eb565b6100d760045481565b6100d7600181565b6100cc610271565b600154610152906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b600054610152906201000090046001600160a01b031681565b6100cc6101913660046109fe565b610398565b6100cc6101a4366004610a31565b6103f6565b6001546001600160a01b031633146101d457604051631f51116760e01b815260040160405180910390fd5b600291909155600355565b6000546201000090046001600160a01b0316331461021057604051631624d70960e31b815260040160405180910390fd5b6102256001600160a01b03831682600061043a565b5050565b6001546060906001600160a01b0316331461025757604051631f51116760e01b815260040160405180910390fd5b61026a6001600160a01b03841683610582565b9392505050565b600054610100900460ff16158080156102915750600054600160ff909116105b806102ab5750303b1580156102ab575060005460ff166001145b6103135760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610336576000805461ff0019166101001790555b6000805462010000600160b01b0319163362010000021790558015610395576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546201000090046001600160a01b031633146103c957604051631624d70960e31b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03949094169390931790925560025560035543600455565b6001546001600160a01b0316331461042157604051631f51116760e01b815260040160405180910390fd5b6104356001600160a01b03841683836105c6565b505050565b8015806104b45750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190610a6d565b155b61051f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161030a565b6040516001600160a01b03831660248201526044810182905261043590849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526105f6565b606061026a838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506106c8565b6040516001600160a01b03831660248201526044810182905261043590849063a9059cbb60e01b9060640161054b565b600061064b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107a59092919063ffffffff16565b80519091501561043557808060200190518101906106699190610a86565b6104355760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161030a565b6060824710156107295760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161030a565b600080866001600160a01b031685876040516107459190610aa8565b60006040518083038185875af1925050503d8060008114610782576040519150601f19603f3d011682016040523d82523d6000602084013e610787565b606091505b5091509150610798878383876107b4565b925050505b949350505050565b606061079d84846000856106c8565b6060831561082357825160000361081c576001600160a01b0385163b61081c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161030a565b508161079d565b61079d83838151156108385781518083602001fd5b8060405162461bcd60e51b815260040161030a91906109eb565b6000806040838503121561086557600080fd5b50508035926020909101359150565b80356001600160a01b038116811461088b57600080fd5b919050565b600080604083850312156108a357600080fd5b6108ac83610874565b91506108ba60208401610874565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156108ec57600080fd5b6108f583610874565b9150602083013567ffffffffffffffff8082111561091257600080fd5b818501915085601f83011261092657600080fd5b813581811115610938576109386108c3565b604051601f8201601f19908116603f01168101908382118183101715610960576109606108c3565b8160405282815288602084870101111561097957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156109b657818101518382015260200161099e565b50506000910152565b600081518084526109d781602086016020860161099b565b601f01601f19169290920160200192915050565b60208152600061026a60208301846109bf565b600080600060608486031215610a1357600080fd5b610a1c84610874565b95602085013595506040909401359392505050565b600080600060608486031215610a4657600080fd5b610a4f84610874565b9250610a5d60208501610874565b9150604084013590509250925092565b600060208284031215610a7f57600080fd5b5051919050565b600060208284031215610a9857600080fd5b8151801515811461026a57600080fd5b60008251610aba81846020870161099b565b919091019291505056fea2646970667358221220d3e032b4d454fde89d47c1f3e3d28883f9dd7a1d4a9f2897ad07a0ce3eb716d364736f6c6343000811003360c06040523480156200001157600080fd5b50604051620016c5380380620016c5833981016040819052620000349162000172565b600160005580806001600160a01b0381166200006357604051635919af9760e11b815260040160405180910390fd5b816001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c8919062000172565b6001600160a01b0390811660805283169150620000fa905057604051635919af9760e11b815260040160405180910390fd5b806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000139573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015f919062000172565b6001600160a01b031660a05250620001a4565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b60805160a05161147e620002476000396000818160a5015281816101420152818161027001528181610343015281816103b2015281816104c601528181610649015281816106fc01528181610828015281816108fb01528181610a0901528181610ac701528181610b7a01528181610c9b01528181610d6e01528181610ed501528181610f6f0152610ff8015260008181610e3a0152611092015261147e6000f3fe6080604052600436106100955760003560e01c806372b0d90c1161005957806372b0d90c146101bf578063cd604a31146101df578063dfcd412e146101f2578063f9609f0814610212578063fea53be11461022557600080fd5b80630d4d1513146100ea5780632f4f21e2146101105780633fc8cef31461013057806354fd4d501461017c57806370a082311461019257600080fd5b366100e557336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e3576040516377ead08760e11b815260040160405180910390fd5b005b600080fd5b6100fd6100f836600461124f565b610245565b6040519081526020015b60405180910390f35b34801561011c57600080fd5b506100e361012b366004611291565b610558565b34801561013c57600080fd5b506101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610107565b34801561018857600080fd5b506100fd61012c81565b34801561019e57600080fd5b506100fd6101ad3660046112bd565b60016020526000908152604090205481565b3480156101cb57600080fd5b506100e36101da3660046112bd565b6105b1565b6100fd6101ed3660046112e1565b61061e565b3480156101fe57600080fd5b506100fd61020d366004611328565b6107fd565b6100fd61022036600461137b565b610a9c565b34801561023157600080fd5b506100fd610240366004611328565b610c70565b60008361025181610e18565b61026e57604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fa91906113b4565b6001600160a01b03161461032157604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015233906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906113d1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505061042e8734610eae565b6040516394bf804d60e01b8152600481018790526001600160a01b0386811660248301528816906394bf804d906044016020604051808303816000875af115801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a191906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561050d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053191906113d1565b61053b9190611400565b9050801561054d5761054d8382610fe2565b505050509392505050565b3361056281611070565b61057f57604051635e35244560e11b815260040160405180910390fd5b6001600160a01b038316600090815260016020526040812080548492906105a7908490611413565b9091555050505050565b6105b96110c3565b6001600160a01b03811660009081526001602081905260409091205490811115610610576001600160a01b038216600090815260016020819052604090912081905561061090839061060b9084611400565b610fe2565b5061061b6001600055565b50565b60008361062a81610e18565b61064757604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d391906113b4565b6001600160a01b0316146106fa57604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b50505050506107788534610eae565b60405163d598971360e01b81523460048201526001600160a01b03858116602483015261ffff8516604483015286169063d5989713906064016020604051808303816000875af11580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f491906113d1565b95945050505050565b60008461080981610e18565b61082657604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906113b4565b6001600160a01b0316146108d957604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610942573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096691906113d1565b604051632d182be560e21b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063b460af94906064015b6020604051808303816000875af11580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e491906113d1565b6040516370a0823160e01b815230600482015290945060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906113d1565b610a7e9190611400565b90508015610a9057610a908382610fe2565b50505050949350505050565b600082610aa881610e18565b610ac557604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5191906113b4565b6001600160a01b031614610b7857604051630c8319d960e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610bd357600080fd5b505af1158015610be7573d6000803e3d6000fd5b5050505050610bf68434610eae565b604051636e553f6560e01b81523460048201526001600160a01b038481166024830152851690636e553f65906044016020604051808303816000875af1158015610c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6891906113d1565b949350505050565b600084610c7c81610e18565b610c9957604051634d0a593160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2591906113b4565b6001600160a01b031614610d4c57604051630c8319d960e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015284906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906113d1565b604051635d043b2960e11b8152600481018990523060248201526001600160a01b0387811660448301529192509089169063ba087652906064016109a1565b604051635b16ebb760e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb7906024015b602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190611426565b92915050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4291906113d1565b1015610fde5760405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdc9190611426565b505b5050565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b50610fde925050506001600160a01b03831682611121565b604051636fbc6f6b60e01b81526001600160a01b0382811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401610e67565b60026000540361111a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b804710156111715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611111565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b5050905080610fdc5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611111565b6001600160a01b038116811461061b57600080fd5b60008060006060848603121561126457600080fd5b833561126f8161123a565b92506020840135915060408401356112868161123a565b809150509250925092565b600080604083850312156112a457600080fd5b82356112af8161123a565b946020939093013593505050565b6000602082840312156112cf57600080fd5b81356112da8161123a565b9392505050565b6000806000606084860312156112f657600080fd5b83356113018161123a565b925060208401356113118161123a565b9150604084013561ffff8116811461128657600080fd5b6000806000806080858703121561133e57600080fd5b84356113498161123a565b93506020850135925060408501356113608161123a565b915060608501356113708161123a565b939692955090935050565b6000806040838503121561138e57600080fd5b82356113998161123a565b915060208301356113a98161123a565b809150509250929050565b6000602082840312156113c657600080fd5b81516112da8161123a565b6000602082840312156113e357600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ea857610ea86113ea565b80820180821115610ea857610ea86113ea565b60006020828403121561143857600080fd5b815180151581146112da57600080fdfea2646970667358221220cb4af6bfdb718634b9264c949899ac22d1c5f59bf3c6f8047430621a5ee8d16664736f6c6343000811003360806040523480156200001157600080fd5b506040516200220a3803806200220a833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b6120a680620001646000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610479578063e7a324dc146104b9578063f1127ed8146104e0578063f2fde38b1461054757600080fd5b8063b4b5ea5714610440578063c3cda52014610453578063d505accf1461046657600080fd5b806395d89b41116100d357806395d89b41146103ea5780639742ca461461040d578063a9059cbb14610420578063b0660c3d1461043357600080fd5b806370a082311461036d578063782d6fe11461039f5780637ecebe00146103ca57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a75146102de578063587cde1e146102f65780635c19a95c1461031f5780636fcfff451461033257600080fd5b806330adf81f14610272578063313ce56714610299578063349dc329146102b357600080fd5b806306fdde03146101ae578063095ea7b3146101ea57806318160ddd1461020d57806320606b701461022e5780632185810b1461025557806323b872dd1461025f575b600080fd5b6101d46040518060400160405280600781526020016608ecac2e4c4def60cb1b81525081565b6040516101e19190611b92565b60405180910390f35b6101fd6101f8366004611bfc565b61055a565b60405190151581526020016101e1565b6102206b204fce5e3e2502611000000081565b6040519081526020016101e1565b6102207f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61025d610618565b005b6101fd61026d366004611c26565b610688565b6102207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102a1601281565b60405160ff90911681526020016101e1565b6007546102c6906001600160a01b031681565b6040516001600160a01b0390911681526020016101e1565b6006546102c69061010090046001600160a01b031681565b6102c6610304366004611c62565b6002602052600090815260409020546001600160a01b031681565b61025d61032d366004611c62565b6107c9565b610358610340366004611c62565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101e1565b61022061037b366004611c62565b6001600160a01b03166000908152600160205260409020546001600160601b031690565b6103b26103ad366004611bfc565b6107d6565b6040516001600160601b0390911681526020016101e1565b6102206103d8366004611c62565b60056020526000908152604090205481565b6101d46040518060400160405280600481526020016323a2a0a960e11b81525081565b61025d61041b366004611c62565b610a60565b6101fd61042e366004611bfc565b610b2f565b6006546101fd9060ff1681565b6103b261044e366004611c62565b610b6b565b61025d610461366004611c8e565b610be9565b61025d610474366004611ce6565b610ed4565b610220610487366004611d50565b6001600160a01b039182166000908152602081815260408083209390941682529190915220546001600160601b031690565b6102207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105236104ee366004611d83565b600360209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6040805163ffffffff90931683526001600160601b039091166020830152016101e1565b61025d610555366004611c62565b6112c1565b600080600019830361057457506001600160601b03610599565b61059683604051806060016040528060258152602001611edc602591396113ad565b90505b336000818152602081815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b03871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b60065461010090046001600160a01b031633146106505760405162461bcd60e51b815260040161064790611dc3565b60405180910390fd5b6006805460ff191660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b6001600160a01b0383166000908152602081815260408083203380855290835281842054825160608101909352602580845291936001600160601b039091169285926106de9288929190611edc908301396113ad565b9050866001600160a01b0316836001600160a01b03161415801561070b57506001600160601b0382811614155b156107b157600061073583836040518060600160405280603d8152602001611ffe603d91396113dc565b6001600160a01b03898116600081815260208181526040808320948a168084529482529182902080546001600160601b0319166001600160601b0387169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6107bc878783611426565b5060019695505050505050565b6107d333826116f8565b50565b60004382106108375760405162461bcd60e51b815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f742079657420646574604482015266195c9b5a5b995960ca1b6064820152608401610647565b6001600160a01b03831660009081526004602052604081205463ffffffff1690819003610868576000915050610612565b6001600160a01b0384166000908152600360205260408120849161088d600185611e10565b63ffffffff90811682526020820192909252604001600020541611610900576001600160a01b0384166000908152600360205260408120906108d0600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b031691506106129050565b6001600160a01b038416600090815260036020908152604080832083805290915290205463ffffffff1683101561093b576000915050610612565b600080610949600184611e10565b90505b8163ffffffff168163ffffffff161115610a1b576000600261096e8484611e10565b6109789190611e34565b6109829083611e10565b6001600160a01b038816600090815260036020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529192508790036109ef576020015194506106129350505050565b805163ffffffff16871115610a0657819350610a14565b610a11600183611e10565b92505b505061094c565b506001600160a01b038516600090815260036020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60065461010090046001600160a01b03163314610a8f5760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b038116610ae55760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610b5483604051806060016040528060268152602001611f31602691396113ad565b9050610b61338583611426565b5060019392505050565b6001600160a01b03811660009081526004602052604081205463ffffffff1680610b96576000610be2565b6001600160a01b038316600090815260036020526040812090610bba600184611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9392505050565b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610d6b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ddd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c6964207369676044820152656e617475726560d01b6064820152608401610647565b6001600160a01b0381166000908152600560205260408120805491610e0183611e65565b919050558914610e5e5760405162461bcd60e51b815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e604482015261636560f01b6064820152608401610647565b87421115610ebd5760405162461bcd60e51b815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e617475726520656044820152651e1c1a5c995960d21b6064820152608401610647565b610ec7818b6116f8565b505050505b505050505050565b60006000198603610eed57506001600160601b03610f12565b610f0f86604051806060016040528060248152602001611fa6602491396113ad565b90505b604080518082018252600781526608ecac2e4c4def60cb1b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a090910183528051908201206001600160a01b038b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086610fef83611e65565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012090506000828260405160200161106e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156110d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661113c5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e6174757265006044820152606401610647565b8b6001600160a01b0316816001600160a01b03161461119d5760405162461bcd60e51b815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a65640000000000006044820152606401610647565b884211156111ed5760405162461bcd60e51b815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e61747572652065787069726564006044820152606401610647565b846000808e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ab91906001600160601b0391909116815260200190565b60405180910390a3505050505050505050505050565b60065461010090046001600160a01b031633146112f05760405162461bcd60e51b815260040161064790611dc3565b6001600160a01b0381166113465760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006044820152606401610647565b6006546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081600160601b84106113d45760405162461bcd60e51b81526004016106479190611b92565b509192915050565b6000836001600160601b0316836001600160601b0316111582906114135760405162461bcd60e51b81526004016106479190611b92565b5061141e8385611e7e565b949350505050565b60065460ff1680611446575060065461010090046001600160a01b031633145b8061145b57506007546001600160a01b031633145b6114a75760405162461bcd60e51b815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e0000006044820152606401610647565b6001600160a01b0383166115235760405162461bcd60e51b815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f2061646472657373000000006064820152608401610647565b6001600160a01b03821661159f5760405162461bcd60e51b815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f20616464726573730000000000006064820152608401610647565b6001600160a01b0383166000908152600160209081526040918290205482516060810190935260368084526115ea936001600160601b03909216928592919061203b908301396113dc565b6001600160a01b03848116600090815260016020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482516060810190935260308084526116529491909116928592909190611f0190830139611782565b6001600160a01b0383811660008181526001602090815260409182902080546001600160601b0319166001600160601b03968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b038084166000908152600260205260408082205485841683529120546116f3929182169116836117cf565b505050565b6001600160a01b03808316600081815260026020818152604080842080546001845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461177c8284836117cf565b50505050565b60008061178f8486611e9e565b9050846001600160601b0316816001600160601b0316101583906117c65760405162461bcd60e51b81526004016106479190611b92565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156117fa57506000816001600160601b0316115b156116f3576001600160a01b038316156118bf576001600160a01b03831660009081526004602052604081205463ffffffff16908161183a576000611886565b6001600160a01b03851660009081526003602052604081209061185e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b905060006118ad8285604051806060016040528060288152602001611f57602891396113dc565b90506118bb86848484611977565b5050505b6001600160a01b038216156116f3576001600160a01b03821660009081526004602052604081205463ffffffff1690816118fa576000611946565b6001600160a01b03841660009081526003602052604081209061191e600185611e10565b63ffffffff168152602081019190915260400160002054600160201b90046001600160601b03165b9050600061196d8285604051806060016040528060278152602001611f7f60279139611782565b9050610ecc858484845b600061199b43604051806060016040528060348152602001611fca60349139611b6f565b905060008463ffffffff161180156119f557506001600160a01b038516600090815260036020526040812063ffffffff8316916119d9600188611e10565b63ffffffff908116825260208201929092526040016000205416145b15611a69576001600160a01b03851660009081526003602052604081208391611a1f600188611e10565b63ffffffff168152602081019190915260400160002080546001600160601b0392909216600160201b026fffffffffffffffffffffffff0000000019909216919091179055611b1a565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000908152600382528681208b8616825290915294909420925183549451909116600160201b026fffffffffffffffffffffffffffffffff19909416911617919091179055611ae9846001611ebe565b6001600160a01b0386166000908152600460205260409020805463ffffffff191663ffffffff929092169190911790555b604080516001600160601b038086168252841660208201526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b600081600160201b84106113d45760405162461bcd60e51b815260040161064791905b600060208083528351808285015260005b81811015611bbf57858101830151858201604001528201611ba3565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611bf757600080fd5b919050565b60008060408385031215611c0f57600080fd5b611c1883611be0565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b611c4484611be0565b9250611c5260208501611be0565b9150604084013590509250925092565b600060208284031215611c7457600080fd5b610be282611be0565b803560ff81168114611bf757600080fd5b60008060008060008060c08789031215611ca757600080fd5b611cb087611be0565b95506020870135945060408701359350611ccc60608801611c7d565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611d0157600080fd5b611d0a88611be0565b9650611d1860208901611be0565b95506040880135945060608801359350611d3460808901611c7d565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d6357600080fd5b611d6c83611be0565b9150611d7a60208401611be0565b90509250929050565b60008060408385031215611d9657600080fd5b611d9f83611be0565b9150602083013563ffffffff81168114611db857600080fd5b809150509250929050565b6020808252601f908201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604082015260600190565b634e487b7160e01b600052601160045260246000fd5b63ffffffff828116828216039080821115611e2d57611e2d611dfa565b5092915050565b600063ffffffff80841680611e5957634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600060018201611e7757611e77611dfa565b5060010190565b6001600160601b03828116828216039080821115611e2d57611e2d611dfa565b6001600160601b03818116838216019080821115611e2d57611e2d611dfa565b63ffffffff818116838216019080821115611e2d57611e2d611dfa56fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212205c356fbd26a2927ad0969afd2d786175a49452b6df0cc597ce2d0edbb24a252964736f6c63430008110033", - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100f7578063abd45ac614610108578063de28735914610110578063f2fde38b14610123578063f9d68c811461013657600080fd5b80632630c12f146100985780632954018c146100c7578063715018a6146100da5780638874ff1f146100e4575b600080fd5b6003546100ab906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6001546100ab906001600160a01b031681565b6100e261013e565b005b6100e26100f236600461050d565b610152565b6000546001600160a01b03166100ab565b6100e261028f565b6002546100ab906001600160a01b031681565b6100e26101313660046105e9565b610301565b6100e261037f565b6101466103d7565b6101506000610431565b565b61015a6103d7565b60005b815181101561022e5760035482516001600160a01b039091169063e8a97a3e9084908490811061018f5761018f61060b565b6020026020010151600001518484815181106101ad576101ad61060b565b6020026020010151602001516040518363ffffffff1660e01b81526004016101eb9291906001600160a01b0392831681529116602082015260400190565b600060405180830381600087803b15801561020557600080fd5b505af1158015610219573d6000803e3d6000fd5b505050508061022790610621565b905061015d565b5060025460405163f2fde38b60e01b81523360048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b5050505050565b6102976103d7565b600260009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b505af11580156102fb573d6000803e3d6000fd5b50505050565b6103096103d7565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61037c81610431565b50565b6103876103d7565b600160009054906101000a90046001600160a01b03166001600160a01b0316634e71e0c86040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102e757600080fd5b6000546001600160a01b031633146101505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161036a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156104ba576104ba610481565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156104e9576104e9610481565b604052919050565b80356001600160a01b038116811461050857600080fd5b919050565b6000602080838503121561052057600080fd5b823567ffffffffffffffff8082111561053857600080fd5b818501915085601f83011261054c57600080fd5b81358181111561055e5761055e610481565b61056c848260051b016104c0565b818152848101925060069190911b83018401908782111561058c57600080fd5b928401925b818410156105de57604084890312156105aa5760008081fd5b6105b2610497565b6105bb856104f1565b81526105c88686016104f1565b8187015283526040939093019291840191610591565b979650505050505050565b6000602082840312156105fb57600080fd5b610604826104f1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161064157634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220b4a1c9a880a352408284487897289c1c30ce6b261117cf6898fd0cc90d1aeda164736f6c63430008110033", - "sourceMap": "1393:2344:7:-:0;;;1535:1650;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:52;719:10:66;936:18:52;:32::i;:::-;1612:21:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1594:15:7;:39;;-1:-1:-1;;;;;;1594:39:7;-1:-1:-1;;;;;1594:39:7;;;;;;;;;1655;;-1:-1:-1;;;1655:39:7;;658:32:70;;;1655:39:7;;;640:51:70;1594:39:7;1655:28;;613:18:70;;1655:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1716:15:7;;:45;;-1:-1:-1;;;1716:45:7;;-1:-1:-1;;;;;658:32:70;;;1716:45:7;;;640:51:70;1716:15:7;;;;-1:-1:-1;1716:35:7;;-1:-1:-1;613:18:70;;1716:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1790:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1784:3:7;:15;;-1:-1:-1;;;;;;1784:15:7;-1:-1:-1;;;;;1784:15:7;;;;;;;;;-1:-1:-1;1821:15:7;:36;;-1:-1:-1;;;1821:36:7;;;;;640:51:70;;;;1821:15:7;;;;:22;;613:18:70;;1821:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1961:15:7;;1918:69;;1880:35;;-1:-1:-1;;;;;;1961:15:7;;;;-1:-1:-1;1918:69:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;1918:69:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2009:15:7;;:64;;-1:-1:-1;;;2009:64:7;;-1:-1:-1;;;;;658:32:70;;;2009:64:7;;;640:51:70;1880:107:7;;-1:-1:-1;2009:15:7;;;:36;;613:18:70;;2009:64:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2168:15:7;;2128:66;;2096:29;;-1:-1:-1;;;;;;2168:15:7;;;;-1:-1:-1;2128:66:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2128:66:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2216:15:7;;:58;;-1:-1:-1;;;2216:58:7;;-1:-1:-1;;;;;658:32:70;;;2216:58:7;;;640:51:70;2096:98:7;;-1:-1:-1;2216:15:7;;;:33;;613:18:70;;2216:58:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2376:15:7;;2352:49;;2297:31;;-1:-1:-1;;;;;;2376:15:7;;;;-1:-1:-1;2297:31:7;;2352:49;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2338:11:7;:63;;-1:-1:-1;;;;;;2338:63:7;-1:-1:-1;;;;;2338:63:7;;;;;;;;;-1:-1:-1;2423:15:7;:52;;-1:-1:-1;;;2423:52:7;;;;;640:51:70;;;;2423:15:7;;;;:30;;613:18:70;;2423:52:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2570:15:7;;2530:66;;2498:29;;-1:-1:-1;;;;;;2570:15:7;;;;-1:-1:-1;2530:66:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2530:66:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2618:15:7;;:58;;-1:-1:-1;;;2618:58:7;;-1:-1:-1;;;;;658:32:70;;;2618:58:7;;;640:51:70;2498:98:7;;-1:-1:-1;2618:15:7;;;:33;;613:18:70;;2618:58:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2749:15:7;;2725:41;;2699:23;;-1:-1:-1;;;;;;2749:15:7;;;;-1:-1:-1;2725:41:7;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2725:41:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2788:15:7;;:52;;-1:-1:-1;;;2788:52:7;;-1:-1:-1;;;;;658:32:70;;;2788:52:7;;;640:51:70;2699:67:7;;-1:-1:-1;2788:15:7;;;:30;;613:18:70;;2788:52:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2863:19;2907:4;2885:28;;;;;:::i;:::-;-1:-1:-1;;;;;658:32:70;;;640:51;;628:2;613:18;2885:28:7;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2935:15:7;;:48;;-1:-1:-1;;;2935:48:7;;-1:-1:-1;;;;;658:32:70;;;2935:48:7;;;640:51:70;2863:50:7;;-1:-1:-1;2935:15:7;;;:28;;613:18:70;;2935:48:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3005:39:7;;-1:-1:-1;;;3005:39:7;;3033:10;3005:39;;;640:51:70;-1:-1:-1;;;;;3005:27:7;;;-1:-1:-1;3005:27:7;;-1:-1:-1;613:18:70;;3005:39:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3066:15:7;;:45;;-1:-1:-1;;;3066:45:7;;3100:10;3066:45;;;640:51:70;-1:-1:-1;;;;;3066:15:7;;;;-1:-1:-1;3066:33:7;;-1:-1:-1;613:18:70;;3066:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3133:3:7;;:33;;-1:-1:-1;;;3133:33:7;;3155:10;3133:33;;;640:51:70;-1:-1:-1;;;;;3133:3:7;;;;-1:-1:-1;3133:21:7;;-1:-1:-1;613:18:70;;3133:33:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1584:1601;;;;;;1535:1650;;1393:2344;;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1393:2344:7:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:177:70:-;93:13;;-1:-1:-1;;;;;135:31:70;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;702:942::-;-1:-1:-1;;;;;1077:15:70;;;1059:34;;969:2;1112;1130:18;;;1123:30;;;1202:13;;994:18;;;1224:22;;;940:4;;1303:15;;;;1031:19;;1277:2;1262:18;;;940:4;1346:272;1360:6;1357:1;1354:13;1346:272;;;1419:13;;1461:9;;1457:18;;1445:31;;1520:11;;1514:18;1510:27;;1496:12;;;1489:49;1593:15;;;;1558:12;;;;1382:1;1375:9;1346:272;;;-1:-1:-1;1635:3:70;;702:942;-1:-1:-1;;;;;;;;;702:942:70:o;:::-;1393:2344:7;;;;;;", - "deployedSourceMap": "1393:2344:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:30;;;;;-1:-1:-1;;;;;1498:30:7;;;;;;-1:-1:-1;;;;;199:32:70;;;181:51;;169:2;154:18;1498:30:7;;;;;;;1434:38;;;;;-1:-1:-1;;;;;1434:38:7;;;1831:101:52;;;:::i;:::-;;3191:338:7;;;;;;:::i;:::-;;:::i;1201:85:52:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;1201:85;;3535::7;;;:::i;1478:14::-;;;;;-1:-1:-1;;;;;1478:14:7;;;2081:198:52;;;;;;:::i;:::-;;:::i;3626:109:7:-;;;:::i;1831:101:52:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;3191:338:7:-;1094:13:52;:11;:13::i;:::-;3317:9:7::1;3312:155;3336:10;:17;3332:1;:21;3312:155;;;3374:11;::::0;3399:13;;-1:-1:-1;;;;;3374:11:7;;::::1;::::0;:24:::1;::::0;3399:10;;3410:1;;3399:13;::::1;;;;;:::i;:::-;;;;;;;:19;;;3420:10;3431:1;3420:13;;;;;;;;:::i;:::-;;;;;;;:23;;;3374:70;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3567:15:70;;;3549:34;;3619:15;;3614:2;3599:18;;3592:43;3499:2;3484:18;;3337:304;3374:70:7::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3355:3;;;;:::i;:::-;;;3312:155;;;-1:-1:-1::0;3477:3:7::1;::::0;:33:::1;::::0;-1:-1:-1;;;3477:33:7;;3499:10:::1;3477:33;::::0;::::1;181:51:70::0;-1:-1:-1;;;;;3477:3:7;;::::1;::::0;:21:::1;::::0;154:18:70;;3477:33:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3191:338:::0;:::o;3535:85::-;1094:13:52;:11;:13::i;:::-;3593:3:7::1;;;;;;;;;-1:-1:-1::0;;;;;3593:3:7::1;-1:-1:-1::0;;;;;3593:18:7::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3535:85::o:0;2081:198:52:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:52;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:52;;4085:2:70;2161:73:52::1;::::0;::::1;4067:21:70::0;4124:2;4104:18;;;4097:30;4163:34;4143:18;;;4136:62;-1:-1:-1;;;4214:18:70;;;4207:36;4260:19;;2161:73:52::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;3626:109:7:-;1094:13:52;:11;:13::i;:::-;3696:15:7::1;;;;;;;;;-1:-1:-1::0;;;;;3696:15:7::1;-1:-1:-1::0;;;;;3696:30:7::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;1359:130:52::0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:52;719:10:66;1422:23:52;1414:68;;;;-1:-1:-1;;;1414:68:52;;4492:2:70;1414:68:52;;;4474:21:70;;;4511:18;;;4504:30;4570:34;4550:18;;;4543:62;4622:18;;1414:68:52;4290:356:70;2433:187:52;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:52;;;-1:-1:-1;;;;;;2541:17:52;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;475:127:70:-;536:10;531:3;527:20;524:1;517:31;567:4;564:1;557:15;591:4;588:1;581:15;607:256;678:4;672:11;;;710:17;;757:18;742:34;;778:22;;;739:62;736:88;;;804:18;;:::i;:::-;840:4;833:24;607:256;:::o;868:275::-;939:2;933:9;1004:2;985:13;;-1:-1:-1;;981:27:70;969:40;;1039:18;1024:34;;1060:22;;;1021:62;1018:88;;;1086:18;;:::i;:::-;1122:2;1115:22;868:275;;-1:-1:-1;868:275:70:o;1148:173::-;1216:20;;-1:-1:-1;;;;;1265:31:70;;1255:42;;1245:70;;1311:1;1308;1301:12;1245:70;1148:173;;;:::o;1326:1255::-;1444:6;1475:2;1518;1506:9;1497:7;1493:23;1489:32;1486:52;;;1534:1;1531;1524:12;1486:52;1574:9;1561:23;1603:18;1644:2;1636:6;1633:14;1630:34;;;1660:1;1657;1650:12;1630:34;1698:6;1687:9;1683:22;1673:32;;1743:7;1736:4;1732:2;1728:13;1724:27;1714:55;;1765:1;1762;1755:12;1714:55;1801:2;1788:16;1823:2;1819;1816:10;1813:36;;;1829:18;;:::i;:::-;1869:36;1901:2;1896;1893:1;1889:10;1885:19;1869:36;:::i;:::-;1939:15;;;1970:12;;;;-1:-1:-1;2021:1:70;2017:10;;;;2009:19;;2005:28;;;2045:19;;;2042:39;;;2077:1;2074;2067:12;2042:39;2101:11;;;;2121:430;2137:6;2132:3;2129:15;2121:430;;;2219:4;2213:3;2204:7;2200:17;2196:28;2193:118;;;2265:1;2294:2;2290;2283:14;2193:118;2337:21;;:::i;:::-;2385:23;2404:3;2385:23;:::i;:::-;2378:5;2371:38;2445:32;2473:2;2468:3;2464:12;2445:32;:::i;:::-;2429:14;;;2422:56;2491:18;;2163:4;2154:14;;;;;2529:12;;;;2121:430;;;2570:5;1326:1255;-1:-1:-1;;;;;;;1326:1255:70:o;3014:186::-;3073:6;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3165:29;3184:9;3165:29;:::i;:::-;3155:39;3014:186;-1:-1:-1;;;3014:186:70:o;3205:127::-;3266:10;3261:3;3257:20;3254:1;3247:31;3297:4;3294:1;3287:15;3321:4;3318:1;3311:15;3646:232;3685:3;3706:17;;;3703:140;;3765:10;3760:3;3756:20;3753:1;3746:31;3800:4;3797:1;3790:15;3828:4;3825:1;3818:15;3703:140;-1:-1:-1;3870:1:70;3859:13;;3646:232::o", - "sourcePath": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol", - "compiler": { - "name": "solc", - "version": "0.8.17+commit.8df45f5f" - }, - "ast": { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/test/suites/GenesisFactory.sol", - "exportedSymbols": { - "ACL": [1959], - "AccountFactory": [2565], - "AccountFactoryV2": [138], - "AddressProvider": [2931], - "ContractsRegister": [3114], - "DataCompressor": [4723], - "GearToken": [16548], - "GenesisFactory": [1568], - "Ownable": [16661], - "PriceFeedConfig": [14722], - "PriceOracle": [15267], - "WETHGateway": [1272] - }, - "id": 1569, - "license": "BUSL-1.1", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1274, - "literals": ["solidity", "^", "0.8", ".10"], - "nodeType": "PragmaDirective", - "src": "217:24:7" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@openzeppelin/contracts/access/Ownable.sol", - "id": 1276, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 16662, - "src": "243:107:7", - "symbolAliases": [ - { - "foreign": { - "id": 1275, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16661, - "src": "251:7:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol", - "id": 1278, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 2932, - "src": "352:133:7", - "symbolAliases": [ - { - "foreign": { - "id": 1277, - "name": "AddressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2931, - "src": "360:15:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ContractsRegister.sol", - "id": 1280, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 3115, - "src": "486:137:7", - "symbolAliases": [ - { - "foreign": { - "id": 1279, - "name": "ContractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3114, - "src": "494:17:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/ACL.sol", - "id": 1282, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 1960, - "src": "624:109:7", - "symbolAliases": [ - { - "foreign": { - "id": 1281, - "name": "ACL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1959, - "src": "632:3:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol", - "id": 1284, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 4724, - "src": "734:131:7", - "symbolAliases": [ - { - "foreign": { - "id": 1283, - "name": "DataCompressor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4723, - "src": "742:14:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol", - "id": 1286, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 2566, - "src": "866:131:7", - "symbolAliases": [ - { - "foreign": { - "id": 1285, - "name": "AccountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2565, - "src": "874:14:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/core/AccountFactory.sol", - "file": "../../core/AccountFactory.sol", - "id": 1288, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 139, - "src": "998:63:7", - "symbolAliases": [ - { - "foreign": { - "id": 1287, - "name": "AccountFactoryV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 138, - "src": "1006:16:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/contracts/support/WETHGateway.sol", - "file": "../../support/WETHGateway.sol", - "id": 1290, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 1273, - "src": "1063:58:7", - "symbolAliases": [ - { - "foreign": { - "id": 1289, - "name": "WETHGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1272, - "src": "1071:11:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol", - "id": 1293, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 15268, - "src": "1122:145:7", - "symbolAliases": [ - { - "foreign": { - "id": 1291, - "name": "PriceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 15267, - "src": "1130:11:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1292, - "name": "PriceFeedConfig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 14722, - "src": "1143:15:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol", - "file": "/home/mikko/Coding/core-v3/node_modules/@gearbox-protocol/core-v2/contracts/tokens/GearToken.sol", - "id": 1295, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1569, - "sourceUnit": 16549, - "src": "1268:123:7", - "symbolAliases": [ - { - "foreign": { - "id": 1294, - "name": "GearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16548, - "src": "1276:9:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1296, - "name": "Ownable", - "nameLocations": ["1420:7:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16661, - "src": "1420:7:7" - }, - "id": 1297, - "nodeType": "InheritanceSpecifier", - "src": "1420:7:7" - } - ], - "canonicalName": "GenesisFactory", - "contractDependencies": [ - 1272, 1959, 2565, 2931, 3114, 4723, 15267, 16548 - ], - "contractKind": "contract", - "fullyImplemented": true, - "id": 1568, - "linearizedBaseContracts": [1568, 16661, 18742], - "name": "GenesisFactory", - "nameLocation": "1402:14:7", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "functionSelector": "2954018c", - "id": 1300, - "mutability": "mutable", - "name": "addressProvider", - "nameLocation": "1457:15:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1434:38:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - }, - "typeName": { - "id": 1299, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1298, - "name": "AddressProvider", - "nameLocations": ["1434:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "1434:15:7" - }, - "referencedDeclaration": 2931, - "src": "1434:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "de287359", - "id": 1303, - "mutability": "mutable", - "name": "acl", - "nameLocation": "1489:3:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1478:14:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - }, - "typeName": { - "id": 1302, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1301, - "name": "ACL", - "nameLocations": ["1478:3:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1959, - "src": "1478:3:7" - }, - "referencedDeclaration": 1959, - "src": "1478:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "2630c12f", - "id": 1306, - "mutability": "mutable", - "name": "priceOracle", - "nameLocation": "1517:11:7", - "nodeType": "VariableDeclaration", - "scope": 1568, - "src": "1498:30:7", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - }, - "typeName": { - "id": 1305, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1304, - "name": "PriceOracle", - "nameLocations": ["1498:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15267, - "src": "1498:11:7" - }, - "referencedDeclaration": 15267, - "src": "1498:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "visibility": "public" - }, - { - "body": { - "id": 1501, - "nodeType": "Block", - "src": "1584:1601:7", - "statements": [ - { - "expression": { - "id": 1318, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1313, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1594:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1316, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1612:19:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_AddressProvider_$2931_$", - "typeString": "function () returns (contract AddressProvider)" - }, - "typeName": { - "id": 1315, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1314, - "name": "AddressProvider", - "nameLocations": ["1616:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2931, - "src": "1616:15:7" - }, - "referencedDeclaration": 2931, - "src": "1616:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - }, - "id": 1317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1612:21:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "src": "1594:39:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1319, - "nodeType": "ExpressionStatement", - "src": "1594:39:7" - }, - { - "expression": { - "arguments": [ - { - "id": 1323, - "name": "wethToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1308, - "src": "1684:9:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1320, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1655:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1671:12:7", - "memberName": "setWethToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2831, - "src": "1655:28:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1324, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1655:39:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1325, - "nodeType": "ExpressionStatement", - "src": "1655:39:7" - }, - { - "expression": { - "arguments": [ - { - "id": 1329, - "name": "treasury", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1310, - "src": "1752:8:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1326, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1716:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1732:19:7", - "memberName": "setTreasuryContract", - "nodeType": "MemberAccess", - "referencedDeclaration": 2779, - "src": "1716:35:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1330, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1716:45:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1331, - "nodeType": "ExpressionStatement", - "src": "1716:45:7" - }, - { - "expression": { - "id": 1337, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1332, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "1784:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1790:7:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_ACL_$1959_$", - "typeString": "function () returns (contract ACL)" - }, - "typeName": { - "id": 1334, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1333, - "name": "ACL", - "nameLocations": ["1794:3:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1959, - "src": "1794:3:7" - }, - "referencedDeclaration": 1959, - "src": "1794:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - } - }, - "id": 1336, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1790:9:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "src": "1784:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1338, - "nodeType": "ExpressionStatement", - "src": "1784:15:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1344, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "1852:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - ], - "id": 1343, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1844:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1342, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1844:7:7", - "typeDescriptions": {} - } - }, - "id": 1345, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1844:12:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1339, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1821:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1341, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1837:6:7", - "memberName": "setACL", - "nodeType": "MemberAccess", - "referencedDeclaration": 2652, - "src": "1821:22:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1821:36:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1347, - "nodeType": "ExpressionStatement", - "src": "1821:36:7" - }, - { - "assignments": [1350], - "declarations": [ - { - "constant": false, - "id": 1350, - "mutability": "mutable", - "name": "contractsRegister", - "nameLocation": "1898:17:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "1880:35:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - }, - "typeName": { - "id": 1349, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1348, - "name": "ContractsRegister", - "nameLocations": ["1880:17:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "1880:17:7" - }, - "referencedDeclaration": 3114, - "src": "1880:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "visibility": "internal" - } - ], - "id": 1359, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1356, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "1961:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1355, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1953:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1953:7:7", - "typeDescriptions": {} - } - }, - "id": 1357, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1953:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1353, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "1918:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_ContractsRegister_$3114_$", - "typeString": "function (address) returns (contract ContractsRegister)" - }, - "typeName": { - "id": 1352, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1351, - "name": "ContractsRegister", - "nameLocations": ["1922:17:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3114, - "src": "1922:17:7" - }, - "referencedDeclaration": 3114, - "src": "1922:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - } - }, - "id": 1358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1918:69:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1880:107:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1365, - "name": "contractsRegister", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1350, - "src": "2054:17:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ContractsRegister_$3114", - "typeString": "contract ContractsRegister" - } - ], - "id": 1364, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2046:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1363, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2046:7:7", - "typeDescriptions": {} - } - }, - "id": 1366, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2046:26:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1360, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2009:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1362, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2025:20:7", - "memberName": "setContractsRegister", - "nodeType": "MemberAccess", - "referencedDeclaration": 2677, - "src": "2009:36:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1367, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2009:64:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1368, - "nodeType": "ExpressionStatement", - "src": "2009:64:7" - }, - { - "assignments": [1371], - "declarations": [ - { - "constant": false, - "id": 1371, - "mutability": "mutable", - "name": "dataCompressor", - "nameLocation": "2111:14:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2096:29:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - }, - "typeName": { - "id": 1370, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1369, - "name": "DataCompressor", - "nameLocations": ["2096:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4723, - "src": "2096:14:7" - }, - "referencedDeclaration": 4723, - "src": "2096:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - }, - "visibility": "internal" - } - ], - "id": 1380, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1377, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2168:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1376, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2160:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1375, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2160:7:7", - "typeDescriptions": {} - } - }, - "id": 1378, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2160:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2128:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_DataCompressor_$4723_$", - "typeString": "function (address) returns (contract DataCompressor)" - }, - "typeName": { - "id": 1373, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1372, - "name": "DataCompressor", - "nameLocations": ["2132:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4723, - "src": "2132:14:7" - }, - "referencedDeclaration": 4723, - "src": "2132:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - } - }, - "id": 1379, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2128:66:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2096:98:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1386, - "name": "dataCompressor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1371, - "src": "2258:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_DataCompressor_$4723", - "typeString": "contract DataCompressor" - } - ], - "id": 1385, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2250:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1384, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2250:7:7", - "typeDescriptions": {} - } - }, - "id": 1387, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2250:23:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1381, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2216:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1383, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2232:17:7", - "memberName": "setDataCompressor", - "nodeType": "MemberAccess", - "referencedDeclaration": 2754, - "src": "2216:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1388, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2216:58:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1389, - "nodeType": "ExpressionStatement", - "src": "2216:58:7" - }, - { - "assignments": [1394], - "declarations": [ - { - "constant": false, - "id": 1394, - "mutability": "mutable", - "name": "config", - "nameLocation": "2322:6:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2297:31:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig[]" - }, - "typeName": { - "baseType": { - "id": 1392, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1391, - "name": "PriceFeedConfig", - "nameLocations": ["2297:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14722, - "src": "2297:15:7" - }, - "referencedDeclaration": 14722, - "src": "2297:15:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_storage_ptr", - "typeString": "struct PriceFeedConfig" - } - }, - "id": 1393, - "nodeType": "ArrayTypeName", - "src": "2297:17:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_storage_$dyn_storage_ptr", - "typeString": "struct PriceFeedConfig[]" - } - }, - "visibility": "internal" - } - ], - "id": 1395, - "nodeType": "VariableDeclarationStatement", - "src": "2297:31:7" - }, - { - "expression": { - "id": 1406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1396, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "2338:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 1402, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2376:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1401, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2368:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1400, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2368:7:7", - "typeDescriptions": {} - } - }, - "id": 1403, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2368:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1404, - "name": "config", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1394, - "src": "2394:6:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - ], - "id": 1399, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2352:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr_$returns$_t_contract$_PriceOracle_$15267_$", - "typeString": "function (address,struct PriceFeedConfig memory[] memory) returns (contract PriceOracle)" - }, - "typeName": { - "id": 1398, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1397, - "name": "PriceOracle", - "nameLocations": ["2356:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 15267, - "src": "2356:11:7" - }, - "referencedDeclaration": 15267, - "src": "2356:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - } - }, - "id": 1405, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2352:49:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "src": "2338:63:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "id": 1407, - "nodeType": "ExpressionStatement", - "src": "2338:63:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1413, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "2462:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - ], - "id": 1412, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2454:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1411, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2454:7:7", - "typeDescriptions": {} - } - }, - "id": 1414, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2454:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1408, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2423:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1410, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2439:14:7", - "memberName": "setPriceOracle", - "nodeType": "MemberAccess", - "referencedDeclaration": 2703, - "src": "2423:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1415, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2423:52:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1416, - "nodeType": "ExpressionStatement", - "src": "2423:52:7" - }, - { - "assignments": [1419], - "declarations": [ - { - "constant": false, - "id": 1419, - "mutability": "mutable", - "name": "accountFactory", - "nameLocation": "2513:14:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2498:29:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - }, - "typeName": { - "id": 1418, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1417, - "name": "AccountFactory", - "nameLocations": ["2498:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2565, - "src": "2498:14:7" - }, - "referencedDeclaration": 2565, - "src": "2498:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - }, - "visibility": "internal" - } - ], - "id": 1428, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1425, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2570:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1424, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2562:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1423, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2562:7:7", - "typeDescriptions": {} - } - }, - "id": 1426, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2562:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2530:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_AccountFactory_$2565_$", - "typeString": "function (address) returns (contract AccountFactory)" - }, - "typeName": { - "id": 1421, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1420, - "name": "AccountFactory", - "nameLocations": ["2534:14:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2565, - "src": "2534:14:7" - }, - "referencedDeclaration": 2565, - "src": "2534:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - } - }, - "id": 1427, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2530:66:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2498:98:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1434, - "name": "accountFactory", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1419, - "src": "2660:14:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AccountFactory_$2565", - "typeString": "contract AccountFactory" - } - ], - "id": 1433, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2652:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1432, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2652:7:7", - "typeDescriptions": {} - } - }, - "id": 1435, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2652:23:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1429, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2618:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2634:17:7", - "memberName": "setAccountFactory", - "nodeType": "MemberAccess", - "referencedDeclaration": 2728, - "src": "2618:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2618:58:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1437, - "nodeType": "ExpressionStatement", - "src": "2618:58:7" - }, - { - "assignments": [1440], - "declarations": [ - { - "constant": false, - "id": 1440, - "mutability": "mutable", - "name": "wethGateway", - "nameLocation": "2711:11:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2699:23:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - }, - "typeName": { - "id": 1439, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1438, - "name": "WETHGateway", - "nameLocations": ["2699:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1272, - "src": "2699:11:7" - }, - "referencedDeclaration": 1272, - "src": "2699:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - }, - "visibility": "internal" - } - ], - "id": 1449, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1446, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2749:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - ], - "id": 1445, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2741:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1444, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2741:7:7", - "typeDescriptions": {} - } - }, - "id": 1447, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2741:24:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1443, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2725:15:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_WETHGateway_$1272_$", - "typeString": "function (address) returns (contract WETHGateway)" - }, - "typeName": { - "id": 1442, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1441, - "name": "WETHGateway", - "nameLocations": ["2729:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1272, - "src": "2729:11:7" - }, - "referencedDeclaration": 1272, - "src": "2729:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - }, - "id": 1448, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2725:41:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2699:67:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1455, - "name": "wethGateway", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1440, - "src": "2827:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_WETHGateway_$1272", - "typeString": "contract WETHGateway" - } - ], - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2819:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1453, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2819:7:7", - "typeDescriptions": {} - } - }, - "id": 1456, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2819:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1450, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2788:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1452, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2804:14:7", - "memberName": "setWETHGateway", - "nodeType": "MemberAccess", - "referencedDeclaration": 2857, - "src": "2788:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1457, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2788:52:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1458, - "nodeType": "ExpressionStatement", - "src": "2788:52:7" - }, - { - "assignments": [1461], - "declarations": [ - { - "constant": false, - "id": 1461, - "mutability": "mutable", - "name": "gearToken", - "nameLocation": "2873:9:7", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "2863:19:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - }, - "typeName": { - "id": 1460, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1459, - "name": "GearToken", - "nameLocations": ["2863:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16548, - "src": "2863:9:7" - }, - "referencedDeclaration": 16548, - "src": "2863:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "visibility": "internal" - } - ], - "id": 1470, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 1467, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2907:4:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GenesisFactory_$1568", - "typeString": "contract GenesisFactory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GenesisFactory_$1568", - "typeString": "contract GenesisFactory" - } - ], - "id": 1466, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2899:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1465, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2899:7:7", - "typeDescriptions": {} - } - }, - "id": 1468, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2899:13:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1464, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2885:13:7", - "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_GearToken_$16548_$", - "typeString": "function (address) returns (contract GearToken)" - }, - "typeName": { - "id": 1463, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1462, - "name": "GearToken", - "nameLocations": ["2889:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16548, - "src": "2889:9:7" - }, - "referencedDeclaration": 16548, - "src": "2889:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - }, - "id": 1469, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2885:28:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2863:50:7" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1476, - "name": "gearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "2972:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - ], - "id": 1475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2964:7:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1474, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2964:7:7", - "typeDescriptions": {} - } - }, - "id": 1477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2964:18:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1471, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "2935:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1473, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2951:12:7", - "memberName": "setGearToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 2805, - "src": "2935:28:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2935:48:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1479, - "nodeType": "ExpressionStatement", - "src": "2935:48:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1483, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3033:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1484, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3037:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3033:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1480, - "name": "gearToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1461, - "src": "3005:9:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_GearToken_$16548", - "typeString": "contract GearToken" - } - }, - "id": 1482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3015:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 15482, - "src": "3005:27:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3005:39:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1486, - "nodeType": "ExpressionStatement", - "src": "3005:39:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1490, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3100:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3104:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3100:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1487, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "3066:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1489, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3082:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3066:33:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3066:45:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1493, - "nodeType": "ExpressionStatement", - "src": "3066:45:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1497, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3155:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1498, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3159:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3155:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1494, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3133:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1496, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3137:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3133:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1499, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3133:33:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1500, - "nodeType": "ExpressionStatement", - "src": "3133:33:7" - } - ] - }, - "id": 1502, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1311, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1308, - "mutability": "mutable", - "name": "wethToken", - "nameLocation": "1555:9:7", - "nodeType": "VariableDeclaration", - "scope": 1502, - "src": "1547:17:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1307, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1547:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1310, - "mutability": "mutable", - "name": "treasury", - "nameLocation": "1574:8:7", - "nodeType": "VariableDeclaration", - "scope": 1502, - "src": "1566:16:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1566:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1546:37:7" - }, - "returnParameters": { - "id": 1312, - "nodeType": "ParameterList", - "parameters": [], - "src": "1584:0:7" - }, - "scope": 1568, - "src": "1535:1650:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 1544, - "nodeType": "Block", - "src": "3302:227:7", - "statements": [ - { - "body": { - "id": 1535, - "nodeType": "Block", - "src": "3360:107:7", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 1525, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3399:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1527, - "indexExpression": { - "id": 1526, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3410:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3399:13:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 1528, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3413:5:7", - "memberName": "token", - "nodeType": "MemberAccess", - "referencedDeclaration": 14719, - "src": "3399:19:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "baseExpression": { - "id": 1529, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3420:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1531, - "indexExpression": { - "id": 1530, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3431:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3420:13:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_memory_ptr", - "typeString": "struct PriceFeedConfig memory" - } - }, - "id": 1532, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3434:9:7", - "memberName": "priceFeed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14721, - "src": "3420:23:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1522, - "name": "priceOracle", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1306, - "src": "3374:11:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_PriceOracle_$15267", - "typeString": "contract PriceOracle" - } - }, - "id": 1524, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3386:12:7", - "memberName": "addPriceFeed", - "nodeType": "MemberAccess", - "referencedDeclaration": 14806, - "src": "3374:24:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address) external" - } - }, - "id": 1533, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3374:70:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1534, - "nodeType": "ExpressionStatement", - "src": "3374:70:7" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1518, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1515, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3332:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 1516, - "name": "priceFeeds", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1506, - "src": "3336:10:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig memory[] memory" - } - }, - "id": 1517, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3347:6:7", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3336:17:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3332:21:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1536, - "initializationExpression": { - "assignments": [1512], - "declarations": [ - { - "constant": false, - "id": 1512, - "mutability": "mutable", - "name": "i", - "nameLocation": "3325:1:7", - "nodeType": "VariableDeclaration", - "scope": 1536, - "src": "3317:9:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1511, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3317:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1514, - "initialValue": { - "hexValue": "30", - "id": 1513, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3329:1:7", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "3317:13:7" - }, - "loopExpression": { - "expression": { - "id": 1520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": true, - "src": "3355:3:7", - "subExpression": { - "id": 1519, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1512, - "src": "3357:1:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1521, - "nodeType": "ExpressionStatement", - "src": "3355:3:7" - }, - "nodeType": "ForStatement", - "src": "3312:155:7" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1540, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3499:3:7", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3503:6:7", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3499:10:7", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1537, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3477:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1539, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3481:17:7", - "memberName": "transferOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4772, - "src": "3477:21:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1542, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3477:33:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1543, - "nodeType": "ExpressionStatement", - "src": "3477:33:7" - } - ] - }, - "functionSelector": "8874ff1f", - "id": 1545, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1509, - "kind": "modifierInvocation", - "modifierName": { - "id": 1508, - "name": "onlyOwner", - "nameLocations": ["3276:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3276:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3276:9:7" - } - ], - "name": "addPriceFeeds", - "nameLocation": "3200:13:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1506, - "mutability": "mutable", - "name": "priceFeeds", - "nameLocation": "3239:10:7", - "nodeType": "VariableDeclaration", - "scope": 1545, - "src": "3214:35:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_memory_ptr_$dyn_memory_ptr", - "typeString": "struct PriceFeedConfig[]" - }, - "typeName": { - "baseType": { - "id": 1504, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1503, - "name": "PriceFeedConfig", - "nameLocations": ["3214:15:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 14722, - "src": "3214:15:7" - }, - "referencedDeclaration": 14722, - "src": "3214:15:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_PriceFeedConfig_$14722_storage_ptr", - "typeString": "struct PriceFeedConfig" - } - }, - "id": 1505, - "nodeType": "ArrayTypeName", - "src": "3214:17:7", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_PriceFeedConfig_$14722_storage_$dyn_storage_ptr", - "typeString": "struct PriceFeedConfig[]" - } - }, - "visibility": "internal" - } - ], - "src": "3213:37:7" - }, - "returnParameters": { - "id": 1510, - "nodeType": "ParameterList", - "parameters": [], - "src": "3302:0:7" - }, - "scope": 1568, - "src": "3191:338:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1555, - "nodeType": "Block", - "src": "3583:37:7", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1550, - "name": "acl", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1303, - "src": "3593:3:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ACL_$1959", - "typeString": "contract ACL" - } - }, - "id": 1552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3597:14:7", - "memberName": "claimOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4790, - "src": "3593:18:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 1553, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3593:20:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1554, - "nodeType": "ExpressionStatement", - "src": "3593:20:7" - } - ] - }, - "functionSelector": "abd45ac6", - "id": 1556, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1548, - "kind": "modifierInvocation", - "modifierName": { - "id": 1547, - "name": "onlyOwner", - "nameLocations": ["3573:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3573:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3573:9:7" - } - ], - "name": "claimACLOwnership", - "nameLocation": "3544:17:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1546, - "nodeType": "ParameterList", - "parameters": [], - "src": "3561:2:7" - }, - "returnParameters": { - "id": 1549, - "nodeType": "ParameterList", - "parameters": [], - "src": "3583:0:7" - }, - "scope": 1568, - "src": "3535:85:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 1566, - "nodeType": "Block", - "src": "3686:49:7", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1561, - "name": "addressProvider", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1300, - "src": "3696:15:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_AddressProvider_$2931", - "typeString": "contract AddressProvider" - } - }, - "id": 1563, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3712:14:7", - "memberName": "claimOwnership", - "nodeType": "MemberAccess", - "referencedDeclaration": 4790, - "src": "3696:30:7", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", - "typeString": "function () external" - } - }, - "id": 1564, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3696:32:7", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1565, - "nodeType": "ExpressionStatement", - "src": "3696:32:7" - } - ] - }, - "functionSelector": "f9d68c81", - "id": 1567, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1559, - "kind": "modifierInvocation", - "modifierName": { - "id": 1558, - "name": "onlyOwner", - "nameLocations": ["3676:9:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 16580, - "src": "3676:9:7" - }, - "nodeType": "ModifierInvocation", - "src": "3676:9:7" - } - ], - "name": "claimAddressProviderOwnership", - "nameLocation": "3635:29:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1557, - "nodeType": "ParameterList", - "parameters": [], - "src": "3664:2:7" - }, - "returnParameters": { - "id": 1560, - "nodeType": "ParameterList", - "parameters": [], - "src": "3686:0:7" - }, - "scope": 1568, - "src": "3626:109:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1569, - "src": "1393:2344:7", - "usedErrors": [] - } - ], - "src": "217:3521:7" - }, - "functionHashes": { - "acl()": "de287359", - "addPriceFeeds((address,address)[])": "8874ff1f", - "addressProvider()": "2954018c", - "claimACLOwnership()": "abd45ac6", - "claimAddressProviderOwnership()": "f9d68c81", - "owner()": "8da5cb5b", - "priceOracle()": "2630c12f", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "332400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "acl()": "2369", - "addPriceFeeds((address,address)[])": "infinite", - "addressProvider()": "2348", - "claimACLOwnership()": "infinite", - "claimAddressProviderOwnership()": "infinite", - "owner()": "2319", - "priceOracle()": "2326", - "renounceOwnership()": "infinite", - "transferOwnership(address)": "28399" - } - } -} diff --git a/contracts/core/AccountFactory.sol b/contracts/core/AccountFactory.sol deleted file mode 100644 index 3756689e..00000000 --- a/contracts/core/AccountFactory.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.17; - -import {ContractsRegisterTrait} from "../traits/ContractsRegisterTrait.sol"; -import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; - -import {CreditAccount} from "../credit/CreditAccount.sol"; -import {ACLTrait} from "../traits/ACLTrait.sol"; - -import {IAccountFactory} from "../interfaces/IAccountFactory.sol"; - -// EXCEPTIONS -import "../interfaces/IExceptions.sol"; - -import "forge-std/console.sol"; - -/// @title Disposable credit accounts factory -contract AccountFactoryV2 is IAccountFactory, ACLTrait, ContractsRegisterTrait { - /// @dev Address of master credit account for cloning - mapping(address => address) public masterCreditAccounts; - - /// @dev Contract version - uint256 public constant version = 3_00; - - error MasterCreditAccountAlreadyDeployed(); - - /// @param addressProvider Address of address repository - constructor(address addressProvider) ACLTrait(addressProvider) ContractsRegisterTrait(addressProvider) {} - - /// @dev Provides a new credit account to a Credit Manager - /// @return creditAccount Address of credit account - function takeCreditAccount(uint256, uint256) external override returns (address creditAccount) { - address masterCreditAccount = _getMasterCreditAccountOrRevert(); - // Create a new credit account if there are none in stock - creditAccount = Clones.clone(masterCreditAccount); // T:[AF-2] - - // emit InitializeCreditAccount(result, msg.sender); // T:[AF-5] - } - - function returnCreditAccount(address usedAccount) external override { - // Do nothing for disposable CA - } - - // CONFIGURATION - - function addCreditManager(address creditManager) - external - configuratorOnly - registeredCreditManagerOnly(creditManager) - { - if (masterCreditAccounts[creditManager] != address(0)) { - revert MasterCreditAccountAlreadyDeployed(); - } - - masterCreditAccounts[creditManager] = address(new CreditAccount(creditManager)); - - console.log("CM", creditManager); - console.log(masterCreditAccounts[creditManager]); - } - - function _getMasterCreditAccountOrRevert() internal view returns (address masterCA) { - masterCA = masterCreditAccounts[msg.sender]; - console.log(msg.sender); - console.log(masterCA); - if (masterCA == address(0)) { - revert CallerNotCreditManagerException(); - } - } -} diff --git a/contracts/core/AccountFactoryV3.sol b/contracts/core/AccountFactoryV3.sol new file mode 100644 index 00000000..161596e5 --- /dev/null +++ b/contracts/core/AccountFactoryV3.sol @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: BUSL-1.1 +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; +pragma abicoder v1; + +import {ContractsRegisterTrait} from "../traits/ContractsRegisterTrait.sol"; +import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; + +import {CreditAccountV3} from "../credit/CreditAccountV3.sol"; +import {ACLTrait} from "../traits/ACLTrait.sol"; + +import {IAccountFactory, TakeAccountAction} from "../interfaces/IAccountFactory.sol"; + +// EXCEPTIONS +import "../interfaces/IExceptions.sol"; + +import "forge-std/console.sol"; + +struct CreditManagerFactory { + address masterCreditAccount; + uint32 head; + uint32 tail; + uint16 minUsedInQueue; +} + +/// @title Disposable credit accounts factory +contract AccountFactoryV3 is IAccountFactory, ACLTrait, ContractsRegisterTrait { + /// @dev Address of master credit account for cloning + mapping(address => CreditManagerFactory) public masterCreditAccounts; + + mapping(address => address[]) public usedCreditAccounts; + + /// @dev Contract version + uint256 public constant version = 3_00; + + error MasterCreditAccountAlreadyDeployed(); + + /// @param addressProvider Address of address repository + constructor(address addressProvider) ACLTrait(addressProvider) ContractsRegisterTrait(addressProvider) {} + + /// @dev Provides a new credit account to a Credit Manager + /// @return creditAccount Address of credit account + function takeCreditAccount(uint256 deployAction, uint256) external override returns (address creditAccount) { + CreditManagerFactory storage cmf = masterCreditAccounts[msg.sender]; + address masterCreditAccount = cmf.masterCreditAccount; + + if (masterCreditAccount == address(0)) { + revert CallerNotCreditManagerException(); + } + uint256 totalUsed = cmf.tail - cmf.head; + if (totalUsed < cmf.minUsedInQueue || deployAction == uint256(TakeAccountAction.DEPLOY_NEW_ONE)) { + // Create a new credit account if there are none in stock + creditAccount = Clones.clone(masterCreditAccount); // T:[AF-2] + emit DeployCreditAccount(creditAccount); + } else { + creditAccount = usedCreditAccounts[msg.sender][cmf.head]; + ++cmf.head; + emit ReuseCreditAccount(creditAccount); + } + + // emit InitializeCreditAccount(result, msg.sender); // T:[AF-5] + } + + function returnCreditAccount(address usedAccount) external override { + CreditManagerFactory storage cmf = masterCreditAccounts[msg.sender]; + + if (cmf.masterCreditAccount == address(0)) { + revert CallerNotCreditManagerException(); + } + + usedCreditAccounts[msg.sender][cmf.tail] = usedAccount; + ++cmf.tail; + emit ReturnCreditAccount(usedAccount); + } + + // CONFIGURATION + + function addCreditManager(address creditManager, uint16 minUsedInQueue) + external + configuratorOnly + registeredCreditManagerOnly(creditManager) + { + if (masterCreditAccounts[creditManager].masterCreditAccount != address(0)) { + revert MasterCreditAccountAlreadyDeployed(); + } + + masterCreditAccounts[creditManager] = CreditManagerFactory({ + masterCreditAccount: address(new CreditAccountV3(creditManager)), + head: 0, + tail: 0, + minUsedInQueue: minUsedInQueue + }); + + emit AddCreditManager(creditManager); + } +} diff --git a/contracts/credit/CreditAccount.sol b/contracts/credit/CreditAccountV3.sol similarity index 81% rename from contracts/credit/CreditAccount.sol rename to contracts/credit/CreditAccountV3.sol index 8be5fd28..2c0ace1e 100644 --- a/contracts/credit/CreditAccount.sol +++ b/contracts/credit/CreditAccountV3.sol @@ -2,23 +2,18 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; +pragma abicoder v1; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {ICreditAccount} from "../interfaces/ICreditAccount.sol"; import "../interfaces/IExceptions.sol"; -/// @title Credit Account -/// @notice Implements generic credit account logic: -/// - Holds collateral assets -/// - Stores general parameters: borrowed amount, cumulative index at open and block when it was initialized -/// - Transfers assets -/// - Executes financial orders by calling connected protocols on its behalf -/// -/// More: https://dev.gearbox.fi/developers/credit/credit_account -contract CreditAccount { +/// @title Credit AccountV3 +contract CreditAccountV3 is ICreditAccount { using SafeERC20 for IERC20; using Address for address; /// @dev Address of the currently connected Credit Manager diff --git a/contracts/credit/CreditConfigurator.sol b/contracts/credit/CreditConfiguratorV3.sol similarity index 95% rename from contracts/credit/CreditConfigurator.sol rename to contracts/credit/CreditConfiguratorV3.sol index 8a7be4fc..8c955eff 100644 --- a/contracts/credit/CreditConfigurator.sol +++ b/contracts/credit/CreditConfiguratorV3.sol @@ -31,7 +31,7 @@ import { CollateralToken, CreditManagerOpts, AllowanceAction -} from "../interfaces/ICreditConfigurator.sol"; +} from "../interfaces/ICreditConfiguratorV3.sol"; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol"; @@ -207,21 +207,20 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { if (currentLT != liquidationThreshold) { // Sets the LT in Credit Manager, where token existence is checked - creditManager.setLiquidationThreshold(token, liquidationThreshold); // F:[CC-6] + // _setLTRampParams(tokenData, tokenMask, , 0); + creditManager.setCollateralTokenData(token, liquidationThreshold, liquidationThreshold, type(uint40).max, 0); // F:[CC-6] emit SetTokenLiquidationThreshold(token, liquidationThreshold); // F:[CC-6] } } /// @dev Schedules an LT ramping for any token except underlying + /// @param token Token to ramp LT for /// @param liquidationThresholdFinal Liquidation threshold after ramping - /// @param timestampRampStart Timestamp when ramping starts /// @param rampDuration Duration of ramping - function rampLiquidationThreshold( - address token, - uint16 liquidationThresholdFinal, - uint40 timestampRampStart, - uint24 rampDuration - ) external controllerOnly { + function rampLiquidationThreshold(address token, uint16 liquidationThresholdFinal, uint24 rampDuration) + external + controllerOnly + { // Checks that the token is not underlying, since its LT is determined by Credit Manager params if (token == underlying) revert SetLTForUnderlyingException(); @@ -235,9 +234,15 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { if (currentLT != liquidationThresholdFinal) { // Sets the LT in Credit Manager, where token existence is checked - creditManager.rampLiquidationThreshold(token, liquidationThresholdFinal, timestampRampStart, rampDuration); + creditManager.setCollateralTokenData( + token, currentLT, liquidationThresholdFinal, uint40(block.timestamp), rampDuration + ); emit ScheduleTokenLiquidationThresholdRamp( - token, currentLT, liquidationThresholdFinal, timestampRampStart, timestampRampStart + rampDuration + token, + currentLT, + liquidationThresholdFinal, + uint40(block.timestamp), + uint40(block.timestamp) + rampDuration ); } } @@ -545,20 +550,17 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { /// @dev Updates Liquidation threshold for the underlying asset /// @param ltUnderlying New LT for the underlying function _updateLiquidationThreshold(uint16 ltUnderlying) internal { - creditManager.setLiquidationThreshold(underlying, ltUnderlying); // F:[CC-25] + creditManager.setCollateralTokenData(underlying, ltUnderlying, ltUnderlying, type(uint40).max, 0); // F:[CC-25] // An LT of an ordinary collateral token cannot be larger than the LT of underlying // As such, all LTs need to be checked and reduced if needed uint256 len = creditManager.collateralTokensCount(); - for (uint256 i = 1; i < len;) { - (address token, uint16 lt) = creditManager.collateralTokens(i); - if (lt > ltUnderlying) { - creditManager.setLiquidationThreshold(token, ltUnderlying); // F:[CC-25] - emit SetTokenLiquidationThreshold(token, ltUnderlying); // F:[CC-1A,25] - } - - unchecked { - ++i; + unchecked { + for (uint256 i = 1; i < len; ++i) { + (address token, uint16 lt) = creditManager.collateralTokens(i); + if (lt > ltUnderlying) { + _setLiquidationThreshold(token, ltUnderlying); // F:[CC-25] + } } } } @@ -680,7 +682,7 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { (, uint128 maxCumulativeLossCurrent) = creditFacade().lossParams(); if (_maxCumulativeLoss != maxCumulativeLossCurrent) { - creditFacade().setMaxCumulativeLoss(_maxCumulativeLoss); + creditFacade().setCumulativeLossParams(_maxCumulativeLoss, false); emit SetMaxCumulativeLoss(_maxCumulativeLoss); } } @@ -690,7 +692,8 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { external configuratorOnly // F: [CC-02] { - creditFacade().resetCumulativeLoss(); + (, uint128 maxCumulativeLossCurrent) = creditFacade().lossParams(); + creditFacade().setCumulativeLossParams(maxCumulativeLossCurrent, true); emit ResetCumulativeLoss(); } @@ -795,7 +798,7 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { // Checks that the address is not already in the list, // to avoid redundant events if (!statusCurrent) { - creditFacade().addEmergencyLiquidator(liquidator); // F: [CC-38] + creditFacade().setEmergencyLiquidator(liquidator, AllowanceAction.ALLOW); // F: [CC-38] emit AddEmergencyLiquidator(liquidator); // F: [CC-38] } } @@ -816,7 +819,7 @@ contract CreditConfigurator is ICreditConfigurator, ACLNonReentrantTrait { // Checks that the address is in the list // to avoid redundant events if (statusCurrent) { - creditFacade().removeEmergencyLiquidator(liquidator); // F: [CC-38] + creditFacade().setEmergencyLiquidator(liquidator, AllowanceAction.FORBID); // F: [CC-38] emit RemoveEmergencyLiquidator(liquidator); // F: [CC-38] } } diff --git a/contracts/credit/CreditFacadeV3.sol b/contracts/credit/CreditFacadeV3.sol index 656c9c7d..48c418e7 100644 --- a/contracts/credit/CreditFacadeV3.sol +++ b/contracts/credit/CreditFacadeV3.sol @@ -6,31 +6,36 @@ pragma solidity ^0.8.10; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; // LIBS & TRAITS +import {CreditLogic} from "../libraries/CreditLogic.sol"; import {ACLNonReentrantTrait} from "../traits/ACLNonReentrantTrait.sol"; -import {IERC20HelperTrait} from "../traits/IERC20HelperTrait.sol"; -import {UNDERLYING_TOKEN_MASK, BitMask} from "../libraries/BitMask.sol"; +import {BitMask, UNDERLYING_TOKEN_MASK} from "../libraries/BitMask.sol"; // DATA import {MultiCall} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; -import {Balance, BalanceOps} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; -import {QuotaUpdate} from "../interfaces/IPoolQuotaKeeper.sol"; +import {Balance} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; /// INTERFACES import "../interfaces/ICreditFacade.sol"; -import {ICreditManagerV3, ClosureAction, ManageDebtAction, RevocationPair} from "../interfaces/ICreditManagerV3.sol"; -import {AllowanceAction} from "../interfaces/ICreditConfigurator.sol"; +import { + ICreditManagerV3, + ClosureAction, + ManageDebtAction, + RevocationPair, + CollateralDebtData, + CollateralCalcTask, + BOT_PERMISSIONS_SET_FLAG +} from "../interfaces/ICreditManagerV3.sol"; +import {AllowanceAction} from "../interfaces/ICreditConfiguratorV3.sol"; +import {ClaimAction} from "../interfaces/IWithdrawalManager.sol"; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; import {IPool4626} from "../interfaces/IPool4626.sol"; -import {TokenLT} from "../interfaces/IPoolQuotaKeeper.sol"; import {IDegenNFT} from "@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol"; import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; import {IWETHGateway} from "../interfaces/IWETHGateway.sol"; import {IBotList} from "../interfaces/IBotList.sol"; -import {CancellationType} from "../interfaces/IWithdrawManager.sol"; - // CONSTANTS import {LEVERAGE_DECIMALS} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; @@ -66,7 +71,7 @@ struct CumulativeLossParams { /// - Through CreditFacadeV3, which provides all the required account management function: open / close / liquidate / manageDebt, /// as well as Multicalls that allow to perform multiple actions within a single transaction, with a single health check /// - Through adapters, which call the Credit Manager directly, but only allow interactions with specific target contracts -contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrait { +contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait { using Address for address; using BitMask for uint256; @@ -207,7 +212,13 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// @param calls The array of MultiCall structs encoding the required operations. Generally must have /// at least a call to addCollateral, as otherwise the health check at the end will fail. /// @param referralCode Referral code which is used for potential rewards. 0 if no referral code provided - function openCreditAccount(uint256 debt, address onBehalfOf, MultiCall[] calldata calls, uint16 referralCode) + function openCreditAccount( + uint256 debt, + address onBehalfOf, + MultiCall[] calldata calls, + bool deployNew, + uint16 referralCode + ) external payable override @@ -241,17 +252,23 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai _wrapETH(); // F:[FA-3B] // Requests the Credit Manager to open a Credit Account - creditAccount = creditManager.openCreditAccount(debt, onBehalfOf); // F:[FA-8] + creditAccount = creditManager.openCreditAccount({debt: debt, onBehalfOf: onBehalfOf, deployNew: deployNew}); // F:[FA-8] // emits a new event emit OpenCreditAccount(creditAccount, onBehalfOf, msg.sender, debt, referralCode); // F:[FA-8] // F:[FA-10]: no free flashloans through opening a Credit Account // and immediately decreasing debt - FullCheckParams memory fullCheckParams = - _multicall(creditAccount, calls, UNDERLYING_TOKEN_MASK, OPEN_CREDIT_ACCOUNT_FLAGS); // F:[FA-8] + FullCheckParams memory fullCheckParams = _multicall({ + creditAccount: creditAccount, + calls: calls, + enabledTokensMask: UNDERLYING_TOKEN_MASK, + flags: OPEN_CREDIT_ACCOUNT_FLAGS + }); // F:[FA-8] // Checks that the new credit account has enough collateral to cover the debt - _fullCollateralCheck(creditAccount, UNDERLYING_TOKEN_MASK, fullCheckParams, forbiddenBalances); // F:[FA-8, 9] + _fullCollateralCheck( + creditAccount, UNDERLYING_TOKEN_MASK, fullCheckParams, forbiddenBalances, forbiddenTokenMask + ); // F:[FA-8, 9] } /// @dev Runs a batch of transactions within a multicall and closes the account @@ -263,6 +280,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// from the Credit Account and proceeds. If not, tries to transfer the shortfall from msg.sender. /// + Transfers all enabled assets with non-zero balances to the "to" address, unless they are marked /// to be skipped in skipTokenMask + /// + If there are withdrawals scheduled for Credit Account, claims them all to `to` /// + If convertWETH is true, converts WETH into ETH before sending to the recipient /// - Emits a CloseCreditAccount event /// @@ -280,34 +298,30 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai // Wraps ETH and sends it back to msg.sender _wrapETH(); // F:[FA-3C] - uint256 enabledTokensMask = _enabledTokenMask(creditAccount); + CollateralDebtData memory debtData = _calcDebtAndCollateral(creditAccount, CollateralCalcTask.DEBT_ONLY); - _cancelWithdrawals(creditAccount, CancellationType.PUSH_WITHDRAWALS); + _claimWithdrawals(creditAccount, to, ClaimAction.FORCE_CLAIM); // [FA-13]: Calls to CreditFacadeV3 are forbidden during closure if (calls.length != 0) { // TODO: CHANGE FullCheckParams memory fullCheckParams = - _multicall(creditAccount, calls, enabledTokensMask, CLOSE_CREDIT_ACCOUNT_FLAGS); - enabledTokensMask = fullCheckParams.enabledTokensMaskAfter; + _multicall(creditAccount, calls, debtData.enabledTokensMask, CLOSE_CREDIT_ACCOUNT_FLAGS); + debtData.enabledTokensMask = fullCheckParams.enabledTokensMaskAfter; } // F:[FA-2, 12, 13] /// HOW TO CHECK QUOTED BALANCES - (, uint256 debtWithInterest,) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - // Requests the Credit manager to close the Credit Account - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - msg.sender, - to, - enabledTokensMask, - skipTokenMask, - debtWithInterest, - convertWETH - ); // F:[FA-2, 12] + _closeCreditAccount({ + creditAccount: creditAccount, + closureAction: ClosureAction.CLOSE_ACCOUNT, + collateralDebtData: debtData, + payer: msg.sender, + to: to, + skipTokensMask: skipTokenMask, + convertWETH: convertWETH + }); // F:[FA-2, 12] // TODO: add test if (convertWETH) { @@ -335,6 +349,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// + Transfers all enabled assets with non-zero balances to the "to" address, unless they are marked /// to be skipped in skipTokenMask. If the liquidator is confident that all assets were converted /// during the multicall, they can set the mask to uint256.max - 1, to only transfer the underlying + /// + If there are withdrawals scheduled for Credit Account, cancels immature withdrawals and claims mature ones /// + If convertWETH is true, converts WETH into ETH before sending /// - Emits LiquidateCreditAccount event /// @@ -348,65 +363,44 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai uint256 skipTokenMask, bool convertWETH, MultiCall[] calldata calls - ) external payable override whenNotPausedOrEmergency nonReentrant nonZeroAddress(to) { + ) external payable override whenNotPausedOrEmergency nonZeroAddress(to) nonReentrant { // Checks that the CA exists to revert early for late liquidations and save gas address borrower = _getBorrowerOrRevert(creditAccount); // F:[FA-2] // Checks that the account hf < 1 and computes the totalValue // before the multicall ClosureAction closeAction; - uint256 totalValue; - uint256 debtWithInterest; - uint256 enabledTokensMask; + CollateralDebtData memory collateralDebtData; { - bool isLiquidatable; - (isLiquidatable, closeAction, totalValue, debtWithInterest, enabledTokensMask) = - _isAccountLiquidatable(creditAccount); // F:[FA-14] + ClaimAction claimAction; + (claimAction, closeAction, collateralDebtData) = + _isAccountLiquidatable({creditAccount: creditAccount, isEmergency: paused()}); // F:[FA-14] + + if (!collateralDebtData.isLiquidatable) revert CreditAccountNotLiquidatableException(); - if (!isLiquidatable) revert CreditAccountNotLiquidatableException(); + collateralDebtData.enabledTokensMask = collateralDebtData.enabledTokensMask.enable( + _claimWithdrawals({action: claimAction, creditAccount: creditAccount, to: borrower}) + ); } + // Wraps ETH and sends it back to msg.sender _wrapETH(); // F:[FA-3D] - enabledTokensMask |= _cancelWithdrawals(creditAccount, CancellationType.RETURN_FUNDS); - if (calls.length != 0) { - // TODO: CHANGE FullCheckParams memory fullCheckParams = - _multicall(creditAccount, calls, enabledTokensMask, CLOSE_CREDIT_ACCOUNT_FLAGS); - enabledTokensMask = fullCheckParams.enabledTokensMaskAfter; + _multicall(creditAccount, calls, collateralDebtData.enabledTokensMask, CLOSE_CREDIT_ACCOUNT_FLAGS); + collateralDebtData.enabledTokensMask = fullCheckParams.enabledTokensMaskAfter; } // F:[FA-15] - uint256 remainingFunds = _liquidateCreditAccount( - creditAccount, closeAction, totalValue, to, skipTokenMask, convertWETH, enabledTokensMask, debtWithInterest - ); - - emit LiquidateCreditAccount(creditAccount, borrower, msg.sender, to, closeAction, remainingFunds); // F:[FA-15] - } - - /// @dev Closes a liquidated credit account, possibly expired - function _liquidateCreditAccount( - address creditAccount, - ClosureAction closeAction, - uint256 totalValue, - address to, - uint256 skipTokenMask, - bool convertWETH, - uint256 enabledTokensMask, - uint256 debtWithInterest - ) internal returns (uint256 remainingFunds) { - uint256 reportedLoss; - (remainingFunds, reportedLoss) = creditManager.closeCreditAccount( - creditAccount, - closeAction, - totalValue, - msg.sender, - to, - enabledTokensMask, - skipTokenMask, - debtWithInterest, - convertWETH - ); // F:[FA-15,49] + (uint256 remainingFunds, uint256 reportedLoss) = _closeCreditAccount({ + creditAccount: creditAccount, + closureAction: closeAction, + collateralDebtData: collateralDebtData, + payer: msg.sender, + to: to, + skipTokensMask: skipTokenMask, + convertWETH: convertWETH + }); // F:[FA-15,49] if (reportedLoss > 0) { maxDebtPerBlockMultiplier = 0; // F: [FA-15A] @@ -423,6 +417,8 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai if (convertWETH) { _wethWithdrawTo(to); } + + emit LiquidateCreditAccount(creditAccount, borrower, msg.sender, to, closeAction, remainingFunds); // F:[FA-15] } /// @dev Executes a batch of transactions within a Multicall, to manage an existing account @@ -472,14 +468,25 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai internal nonZeroCallsOnly(calls) { - (uint256 enabledTokenMaskBefore, uint256[] memory forbiddenBalances) = _storeForbiddenBalances(creditAccount); + uint256 _forbiddenTokenMask = forbiddenTokenMask; - FullCheckParams memory fullCheckParams = _multicall(creditAccount, calls, enabledTokenMaskBefore, permissions); + uint256 enabledTokensMaskBefore = creditManager.enabledTokensMaskOf(creditAccount); + + uint256[] memory forbiddenBalances = CreditLogic.storeForbiddenBalances({ + creditAccount: creditAccount, + forbiddenTokenMask: _forbiddenTokenMask, + enabledTokensMask: enabledTokensMaskBefore, + getTokenByMaskFn: _getTokenByMask + }); + + FullCheckParams memory fullCheckParams = _multicall(creditAccount, calls, enabledTokensMaskBefore, permissions); // Performs a fullCollateralCheck // During a multicall, all intermediary health checks are skipped, // as one fullCollateralCheck at the end is sufficient - _fullCollateralCheck(creditAccount, enabledTokenMaskBefore, fullCheckParams, forbiddenBalances); + _fullCollateralCheck( + creditAccount, enabledTokensMaskBefore, fullCheckParams, forbiddenBalances, _forbiddenTokenMask + ); } /// @dev IMPLEMENTATION: multicall @@ -517,7 +524,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai unchecked { for (uint256 i = 0; i < len; ++i) { MultiCall calldata mcall = calls[i]; // F:[FA-26] - // + //xw // CREDIT FACADE // if (mcall.target == address(this)) { @@ -526,29 +533,37 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai bytes4 method = bytes4(mcall.callData); - /// TODO: Check not to copy and use [4:] directly - bytes memory callData = mcall.callData[4:]; - // // REVERT_IF_RECEIVED_LESS_THAN // if (method == ICreditFacadeMulticall.revertIfReceivedLessThan.selector) { + // Method can only be called once since the provided Balance array + // contains deltas that are added to the current balances + // Calling this function again could potentially override old values + // and cause confusion, especially if called later in the MultiCall + if (expectedBalances.length != 0) { + revert ExpectedBalancesAlreadySetException(); + } // F:[FA-45A] + // Sets expected balances to currentBalance + delta - expectedBalances = _storeBalances(creditAccount, callData, expectedBalances); // F:[FA-45] + expectedBalances = CreditLogic.storeBalances(creditAccount, mcall.callData[4:]); // F:[FA-45] } // // SET FULL CHECK PARAMS // else if (method == ICreditFacadeMulticall.setFullCheckParams.selector) { (fullCheckParams.collateralHints, fullCheckParams.minHealthFactor) = - abi.decode(callData, (uint256[], uint16)); + abi.decode(mcall.callData[4:], (uint256[], uint16)); } // // ADD COLLATERAL // else if (method == ICreditFacadeMulticall.addCollateral.selector) { _revertIfNoPermission(flags, ADD_COLLATERAL_PERMISSION); - enabledTokensMask |= _addCollateral(creditAccount, callData) & quotedTokenMaskInverted; // F:[FA-26, 27] + enabledTokensMask = enabledTokensMask.enable({ + bitsToEnable: _addCollateral(creditAccount, mcall.callData[4:]), + invertedSkipMask: quotedTokenMaskInverted + }); // F:[FA-26, 27] } // // INCREASE DEBT @@ -560,8 +575,10 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai // as that could be used to get free flash loans flags &= ~DECREASE_DEBT_PERMISSION; // F:[FA-28] flags |= INCREASE_DEBT_WAS_CALLED; - enabledTokensMask = - _manageDebt(creditAccount, callData, enabledTokensMask, ManageDebtAction.INCREASE_DEBT); // F:[FA-26] + (uint256 tokensToEnable, uint256 tokensToDisable) = _manageDebt( + creditAccount, mcall.callData[4:], enabledTokensMask, ManageDebtAction.INCREASE_DEBT + ); // F:[FA-26] + enabledTokensMask = enabledTokensMask.enableDisable(tokensToEnable, tokensToDisable); } // // DECREASE DEBT @@ -571,8 +588,10 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai _revertIfNoPermission(flags, DECREASE_DEBT_PERMISSION); // F:[FA-28] - enabledTokensMask = - _manageDebt(creditAccount, callData, enabledTokensMask, ManageDebtAction.DECREASE_DEBT); // F:[FA-27] + (uint256 tokensToEnable, uint256 tokensToDisable) = _manageDebt( + creditAccount, mcall.callData[4:], enabledTokensMask, ManageDebtAction.DECREASE_DEBT + ); // F:[FA-27] + enabledTokensMask = enabledTokensMask.enableDisable(tokensToEnable, tokensToDisable); } // // ENABLE TOKEN @@ -580,8 +599,11 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai else if (method == ICreditFacadeMulticall.enableToken.selector) { _revertIfNoPermission(flags, ENABLE_TOKEN_PERMISSION); // Parses token - address token = abi.decode(callData, (address)); // F: [FA-53] - enabledTokensMask |= _getTokenMaskOrRevert(token) & quotedTokenMaskInverted; + address token = abi.decode(mcall.callData[4:], (address)); // F: [FA-53] + enabledTokensMask = enabledTokensMask.enable({ + bitsToEnable: _getTokenMaskOrRevert(token), + invertedSkipMask: quotedTokenMaskInverted + }); } // // DISABLE TOKEN @@ -589,32 +611,40 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai else if (method == ICreditFacadeMulticall.disableToken.selector) { _revertIfNoPermission(flags, DISABLE_TOKEN_PERMISSION); // Parses token - address token = abi.decode(callData, (address)); // F: [FA-53] + address token = abi.decode(mcall.callData[4:], (address)); // F: [FA-53] /// IGNORE QUOTED TOKEN MASK - enabledTokensMask &= ~(_getTokenMaskOrRevert(token) & quotedTokenMaskInverted); + enabledTokensMask = enabledTokensMask.disable({ + bitsToDisable: _getTokenMaskOrRevert(token), + invertedSkipMask: quotedTokenMaskInverted + }); } // - // UPDATE QUOTAS + // UPDATE QUOTA // - else if (method == ICreditFacadeMulticall.updateQuotas.selector) { - _revertIfNoPermission(flags, UPDATE_QUOTAS_PERMISSION); - enabledTokensMask = _updateQuotas(creditAccount, callData, enabledTokensMask); + else if (method == ICreditFacadeMulticall.updateQuota.selector) { + _revertIfNoPermission(flags, UPDATE_QUOTA_PERMISSION); + (uint256 tokensToEnable, uint256 tokensToDisable) = + _updateQuota(creditAccount, mcall.callData[4:], enabledTokensMask); + enabledTokensMask = enabledTokensMask.enableDisable(tokensToEnable, tokensToDisable); } // // WITHDRAW // - else if (method == ICreditFacadeMulticall.withdraw.selector) { + else if (method == ICreditFacadeMulticall.scheduleWithdrawal.selector) { _revertIfNoPermission(flags, WITHDRAW_PERMISSION); - uint256 tokensToDisable = _withdraw(creditAccount, callData); + uint256 tokensToDisable = _scheduleWithdrawal(creditAccount, mcall.callData[4:]); /// IGNORE QUOTED TOKEN MASK - enabledTokensMask = enabledTokensMask & (~(tokensToDisable & quotedTokenMaskInverted)); + enabledTokensMask = enabledTokensMask.disable({ + bitsToDisable: tokensToDisable, + invertedSkipMask: quotedTokenMaskInverted + }); } // // RevokeAdapterAllowances // else if (method == ICreditFacadeMulticall.revokeAdapterAllowances.selector) { _revertIfNoPermission(flags, REVOKE_ALLOWANCES_PERMISSION); - _revokeAdapterAllowances(creditAccount, callData); + _revokeAdapterAllowances(creditAccount, mcall.callData[4:]); } // // UNKNOWN METHOD @@ -632,10 +662,9 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai // functionCall to it is strictly forbidden, even if // the Configurator adds it as an adapter - if ( - creditManager.adapterToContract(mcall.target) == address(0) - || mcall.target == address(creditManager) - ) revert TargetContractNotAllowedException(); // F:[FA-24] + if (creditManager.adapterToContract(mcall.target) == address(0)) { + revert TargetContractNotAllowedException(); + } // F:[FA-24] if (flags & EXTERNAL_CONTRACT_WAS_CALLED == 0) { flags |= EXTERNAL_CONTRACT_WAS_CALLED; @@ -646,8 +675,11 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai bytes memory result = mcall.target.functionCall(mcall.callData); // F:[FA-29] (uint256 tokensToEnable, uint256 tokensToDisable) = abi.decode(result, (uint256, uint256)); /// IGNORE QUOTED TOKEN MASK - enabledTokensMask = (enabledTokensMask | (tokensToEnable & quotedTokenMaskInverted)) - & (~(tokensToDisable & quotedTokenMaskInverted)); + enabledTokensMask = enabledTokensMask.enableDisable({ + bitsToEnable: tokensToEnable, + bitsToDisable: tokensToDisable, + invertedSkipMask: quotedTokenMaskInverted + }); } } } @@ -655,7 +687,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai // If expectedBalances was set by calling revertIfGetLessThan, // checks that actual token balances are not less than expected balances if (expectedBalances.length != 0) { - _compareBalances(creditAccount, expectedBalances); + CreditLogic.compareBalances(creditAccount, expectedBalances); } /// @dev Checks that there are no intersections between the user's enabled tokens @@ -699,7 +731,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai } function _setExternalCallCreditAccount(address creditAccount) internal { - creditManager.setCaForExternalCall(creditAccount); // F:[FA-26] + creditManager.setCreditAccountForExternalCall(creditAccount); // F:[FA-26] } function _revertIfNoPermission(uint256 flags, uint256 permission) internal pure { @@ -708,81 +740,30 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai } } - function _updateQuotas(address creditAccount, bytes memory callData, uint256 enabledTokensMask) + function _updateQuota(address creditAccount, bytes calldata callData, uint256 enabledTokensMask) internal - returns (uint256) + returns (uint256 tokensToEnable, uint256 tokensToDisable) { - QuotaUpdate[] memory quotaUpdates = abi.decode(callData, (QuotaUpdate[])); - (uint256 tokensToEnable, uint256 tokensToDisable) = creditManager.updateQuotas(creditAccount, quotaUpdates); - return (enabledTokensMask | tokensToEnable) & (~tokensToDisable); + (address token, int96 quotaChange) = abi.decode(callData, (address, int96)); + return creditManager.updateQuota(creditAccount, token, quotaChange); } - function _revokeAdapterAllowances(address creditAccount, bytes memory callData) internal { + function _revokeAdapterAllowances(address creditAccount, bytes calldata callData) internal { (RevocationPair[] memory revocations) = abi.decode(callData, (RevocationPair[])); creditManager.revokeAdapterAllowances(creditAccount, revocations); } - function _withdraw(address creditAccount, bytes memory callData) internal returns (uint256 tokensToDisable) { - (address to, address token, uint256 amount) = abi.decode(callData, (address, address, uint256)); - tokensToDisable = creditManager.withdraw(creditAccount, to, token, amount); - } - /// @dev Adds expected deltas to current balances on a Credit account and returns the result - /// @param creditAccount Credit Account to compute balances for - /// @param callData Bytes calldata for parsing - /// @param expectedBalances Current value of expected balances, used for checking that we run the function only once - - function _storeBalances(address creditAccount, bytes memory callData, Balance[] memory expectedBalances) - internal - view - returns (Balance[] memory expected) - { - // Method can only be called once since the provided Balance array - // contains deltas that are added to the current balances - // Calling this function again could potentially override old values - // and cause confusion, especially if called later in the MultiCall - if (expectedBalances.length != 0) { - revert ExpectedBalancesAlreadySetException(); - } // F:[FA-45A] - - // Retrieves the balance list from calldata - expected = abi.decode(callData, (Balance[])); // F:[FA-45] - uint256 len = expected.length; // F:[FA-45] - - for (uint256 i = 0; i < len;) { - expected[i].balance += _balanceOf(expected[i].token, creditAccount); // F:[FA-45] - unchecked { - ++i; - } - } - } - - /// @dev Compares current balances to previously saved expected balances. - /// Reverts if at least one balance is lower than expected - /// @param creditAccount Credit Account to check - /// @param expected Expected balances after all operations - - function _compareBalances(address creditAccount, Balance[] memory expected) internal view { - uint256 len = expected.length; // F:[FA-45] - unchecked { - for (uint256 i = 0; i < len; ++i) { - if (_balanceOf(expected[i].token, creditAccount) < expected[i].balance) { - revert BalanceLessThanMinimumDesiredException(expected[i].token); - } // F:[FA-45] - } - } - } - /// @dev Increases debt for a Credit Account /// @param creditAccount CA to increase debt for /// @param callData Bytes calldata for parsing function _manageDebt( address creditAccount, - bytes memory callData, - uint256 _enabledTokensMask, + bytes calldata callData, + uint256 enabledTokensMask, ManageDebtAction action - ) internal returns (uint256 enabledTokensMask) { + ) internal returns (uint256 tokensToEnable, uint256 tokensToDisable) { uint256 amount = abi.decode(callData, (uint256)); // F:[FA-26] if (action == ManageDebtAction.INCREASE_DEBT) { @@ -792,7 +773,8 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai uint256 newDebt; // Requests the Credit Manager to borrow additional funds from the pool - (newDebt, enabledTokensMask) = creditManager.manageDebt(creditAccount, amount, _enabledTokensMask, action); // F:[FA-17] + (newDebt, tokensToEnable, tokensToDisable) = + creditManager.manageDebt(creditAccount, amount, enabledTokensMask, action); // F:[FA-17] // Checks that the new total borrowed amount is within bounds _revertIfOutOfDebtLimits(newDebt); // F:[FA-18B] @@ -805,7 +787,7 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai } } - function _addCollateral(address creditAccount, bytes memory callData) internal returns (uint256 tokenMaskAfter) { + function _addCollateral(address creditAccount, bytes calldata callData) internal returns (uint256 tokenMaskAfter) { (address token, uint256 amount) = abi.decode(callData, (address, uint256)); // F:[FA-26, 27] // Requests Credit Manager to transfer collateral to the Credit Account tokenMaskAfter = creditManager.addCollateral(msg.sender, creditAccount, token, amount); // F:[FA-21] @@ -814,6 +796,14 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai emit AddCollateral(creditAccount, token, amount); // F:[FA-21] } + function _scheduleWithdrawal(address creditAccount, bytes calldata callData) + internal + returns (uint256 tokensToDisable) + { + (address token, uint256 amount) = abi.decode(callData, (address, uint256)); + tokensToDisable = creditManager.scheduleWithdrawal(creditAccount, token, amount); + } + /// @dev Transfers credit account to another user /// By default, this action is forbidden, and the user has to approve transfers from sender to itself /// by calling approveAccountTransfer. @@ -832,9 +822,9 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// Checks that the account hf > 1, as it is forbidden to transfer /// accounts that are liquidatable - (bool isLiquidatable,,,,) = _isAccountLiquidatable(creditAccount); // F:[FA-34] + (,, CollateralDebtData memory collateralDebtData) = _isAccountLiquidatable(creditAccount, false); // F:[FA-34] - if (isLiquidatable) revert CantTransferLiquidatableAccountException(); // F:[FA-34] + if (collateralDebtData.isLiquidatable) revert CantTransferLiquidatableAccountException(); // F:[FA-34] // Requests the Credit Manager to transfer the account creditManager.transferAccountOwnership(creditAccount, to); // F:[FA-35] @@ -843,6 +833,17 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai emit TransferAccount(creditAccount, msg.sender, to); // F:[FA-35] } + function claimWithdrawals(address creditAccount, address to) + external + override + whenNotPaused + nonZeroAddress(to) + creditAccountOwnerOnly(creditAccount) + nonReentrant + { + _claimWithdrawals(creditAccount, to, ClaimAction.CLAIM); + } + /// @dev Checks that transfer is allowed function _revertIfAccountTransferNotAllowed(address from, address to) internal view { if (!transfersAllowed[from][to]) { @@ -888,16 +889,16 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// @dev Approves account transfer from another user to msg.sender /// @param from Address for which account transfers are allowed/forbidden - /// @param state True is transfer is allowed, false if forbidden - function approveAccountTransfer(address from, bool state) external override nonReentrant { + /// @param allowTransfer True is transfer is allowed, false if forbidden + function approveAccountTransfer(address from, bool allowTransfer) external override nonReentrant { // In whitelisted mode only select addresses can have Credit Accounts // So this action is prohibited if (whitelisted) revert AccountTransferNotAllowedException(); // F:[FA-32] - transfersAllowed[from][msg.sender] = state; // F:[FA-38] + transfersAllowed[from][msg.sender] = allowTransfer; // F:[FA-38] // Emits event - emit AllowAccountTransfer(from, msg.sender, state); // F:[FA-38] + emit SetAccountTransferAllowance(from, msg.sender, allowTransfer); // F:[FA-38] } // @@ -914,13 +915,34 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai mask = creditManager.getTokenMaskOrRevert(token); } + function _closeCreditAccount( + address creditAccount, + ClosureAction closureAction, + CollateralDebtData memory collateralDebtData, + address payer, + address to, + uint256 skipTokensMask, + bool convertWETH + ) internal returns (uint256 remainingFunds, uint256 reportedLoss) { + (remainingFunds, reportedLoss) = creditManager.closeCreditAccount({ + creditAccount: creditAccount, + closureAction: closureAction, + collateralDebtData: collateralDebtData, + payer: payer, + to: to, + skipTokensMask: skipTokensMask, + convertWETH: convertWETH + }); // F:[FA-15,49] + } + /// @dev Internal wrapper for `creditManager.fullCollateralCheck()` /// @notice The external call is wrapped to optimize contract size function _fullCollateralCheck( address creditAccount, - uint256 enabledTokenMaskBefore, + uint256 enabledTokensMaskBefore, FullCheckParams memory fullCheckParams, - uint256[] memory forbiddenBalances + uint256[] memory forbiddenBalances, + uint256 _forbiddenTokenMask ) internal { creditManager.fullCollateralCheck( creditAccount, @@ -929,66 +951,14 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai fullCheckParams.minHealthFactor ); - uint256 forbiddenTokensOnAccount = fullCheckParams.enabledTokensMaskAfter & forbiddenTokenMask; - - if (forbiddenTokensOnAccount != 0) { - _checkForbiddenBalances(creditAccount, enabledTokenMaskBefore, forbiddenBalances, forbiddenTokensOnAccount); - } - } - - function _storeForbiddenBalances(address creditAccount) - internal - view - returns (uint256 enabledTokenMaskBefore, uint256[] memory forbiddenBalances) - { - enabledTokenMaskBefore = creditManager.enabledTokensMap(creditAccount); - uint256 forbiddenTokensOnAccount = enabledTokenMaskBefore & forbiddenTokenMask; - - if (forbiddenTokensOnAccount != 0) { - forbiddenBalances = new uint256[](enabledTokenMaskBefore.calcEnabledTokens()); - uint256 tokenMask; - uint256 j; - for (uint256 i; tokenMask < forbiddenTokensOnAccount; ++i) { - tokenMask = 1 << i; // F: [CM-68] - - if (forbiddenTokensOnAccount & tokenMask != 0) { - address token = _getTokenByMask(tokenMask); - forbiddenBalances[j] = _balanceOf(token, creditAccount); - ++j; - } - } - } - } - - function _checkForbiddenBalances( - address creditAccount, - uint256 enabledTokenMaskBefore, - uint256[] memory forbiddenBalances, - uint256 forbiddenTokensOnAccount - ) internal view { - unchecked { - uint256 forbiddenTokensOnAccountBefore = enabledTokenMaskBefore & forbiddenTokenMask; - - if (forbiddenTokensOnAccount & ~forbiddenTokensOnAccountBefore > 0) revert ForbiddenTokensException(); - - uint256 tokenMask; - uint256 j; - for (uint256 i; tokenMask < forbiddenTokensOnAccountBefore; ++i) { - tokenMask = 1 << i; // F: [CM-68] - - if (forbiddenTokensOnAccountBefore & tokenMask != 0) { - if (forbiddenTokensOnAccount & tokenMask != 0) { - address token = _getTokenByMask(tokenMask); - uint256 balance = _balanceOf(token, creditAccount); - if (balance > forbiddenBalances[j]) { - revert ForbiddenTokensException(); - } - } - - ++j; - } - } - } + CreditLogic.checkForbiddenBalances({ + creditAccount: creditAccount, + enabledTokensMaskBefore: enabledTokensMaskBefore, + enabledTokensMaskAfter: fullCheckParams.enabledTokensMaskAfter, + forbiddenBalances: forbiddenBalances, + forbiddenTokenMask: _forbiddenTokenMask, + getTokenByMaskFn: _getTokenByMask + }); } /// @dev Returns whether the Credit Facade is expired @@ -1011,49 +981,43 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// @dev Checks if account is liquidatable (i.e., hf < 1) /// @param creditAccount Address of credit account to check - - function _isAccountLiquidatable(address creditAccount) + function _isAccountLiquidatable(address creditAccount, bool isEmergency) internal view - returns ( - bool isLiquidatable, - ClosureAction ca, - uint256 totalValue, - uint256 debtWithInterest, - uint256 enabledTokenMask - ) + returns (ClaimAction claimAction, ClosureAction closeAction, CollateralDebtData memory collateralDebtData) { - (enabledTokenMask, totalValue,, debtWithInterest, isLiquidatable) = _calcTotalValue(creditAccount); + claimAction = isEmergency ? ClaimAction.FORCE_CANCEL : ClaimAction.CANCEL; + collateralDebtData = _calcDebtAndCollateral( + creditAccount, + isEmergency + ? CollateralCalcTask.DEBT_COLLATERAL_FORCE_CANCEL_WITHDRAWALS + : CollateralCalcTask.DEBT_COLLATERAL_CANCEL_WITHDRAWALS + ); + closeAction = ClosureAction.LIQUIDATE_ACCOUNT; - /// CHANGE PRIORITY IN EXPIRED / LIQUIDATE - if (_isExpired()) { - return (true, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, totalValue, debtWithInterest, enabledTokenMask); + if (!collateralDebtData.isLiquidatable && _isExpired()) { + collateralDebtData.isLiquidatable = true; + closeAction = ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT; } - - return (isLiquidatable, ClosureAction.LIQUIDATE_ACCOUNT, totalValue, debtWithInterest, enabledTokenMask); } - function _calcTotalValue(address creditAccount) + function _calcDebtAndCollateral(address creditAccount, CollateralCalcTask task) internal view - returns (uint256 enabledTokenMask, uint256 total, uint256 twv, uint256 debtWithInterest, bool canBeLiquidated) + returns (CollateralDebtData memory) { - return creditManager.calcTotalValue(creditAccount); + return creditManager.calcDebtAndCollateral(creditAccount, task); } function _getTokenByMask(uint256 mask) internal view returns (address) { return creditManager.getTokenByMask(mask); } - function _enabledTokenMask(address creditAccount) internal view returns (uint256) { - return creditManager.enabledTokensMap(creditAccount); - } - - function _cancelWithdrawals(address creditAccount, CancellationType ctype) + function _claimWithdrawals(address creditAccount, address to, ClaimAction action) internal returns (uint256 tokensToEnable) { - tokensToEnable = creditManager.cancelWithdrawals(creditAccount, ctype); + tokensToEnable = creditManager.claimWithdrawals(creditAccount, to, action); } function _wethWithdrawTo(address to) internal { @@ -1096,13 +1060,14 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai } /// @dev Sets the max cumulative loss that can be accrued before pausing the Credit Manager - function setMaxCumulativeLoss(uint128 _maxCumulativeLoss) external creditConfiguratorOnly { + function setCumulativeLossParams(uint128 _maxCumulativeLoss, bool resetCumulativeLoss) + external + creditConfiguratorOnly + { lossParams.maxCumulativeLoss = _maxCumulativeLoss; - } - - /// @dev Resets the current cumulative loss value - function resetCumulativeLoss() external creditConfiguratorOnly { - lossParams.currentCumulativeLoss = 0; + if (resetCumulativeLoss) { + lossParams.currentCumulativeLoss = 0; + } } /// @dev Adds forbidden token @@ -1120,19 +1085,10 @@ contract CreditFacadeV3 is ICreditFacade, ACLNonReentrantTrait, IERC20HelperTrai /// @dev Adds an address to the list of emergency liquidators /// @param liquidator Address to add to the list - function addEmergencyLiquidator(address liquidator) + function setEmergencyLiquidator(address liquidator, AllowanceAction allowanceAction) external creditConfiguratorOnly // F:[CM-4] { - canLiquidateWhilePaused[liquidator] = true; - } - - /// @dev Removes an address from the list of emergency liquidators - /// @param liquidator Address to remove from the list - function removeEmergencyLiquidator(address liquidator) - external - creditConfiguratorOnly // F: [CM-4] - { - canLiquidateWhilePaused[liquidator] = false; + canLiquidateWhilePaused[liquidator] = allowanceAction == AllowanceAction.ALLOW; } } diff --git a/contracts/credit/CreditManagerV3.sol b/contracts/credit/CreditManagerV3.sol index 2a82634a..8aba5bcc 100644 --- a/contracts/credit/CreditManagerV3.sol +++ b/contracts/credit/CreditManagerV3.sol @@ -7,20 +7,24 @@ pragma solidity ^0.8.17; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; // LIBS & TRAITS import {UNDERLYING_TOKEN_MASK, BitMask} from "../libraries/BitMask.sol"; +import {CreditLogic} from "../libraries/CreditLogic.sol"; +import {CreditAccountHelper} from "../libraries/CreditAccountHelper.sol"; + import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import {SanityCheckTrait} from "../traits/SanityCheckTrait.sol"; -import {IERC20HelperTrait} from "../traits/IERC20HelperTrait.sol"; +import {IERC20Helper} from "../libraries/IERC20Helper.sol"; // INTERFACES -import {IAccountFactory} from "../interfaces/IAccountFactory.sol"; -import {ICreditAccount} from "@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol"; +import {IAccountFactory, TakeAccountAction} from "../interfaces/IAccountFactory.sol"; +import {ICreditAccount} from "../interfaces/ICreditAccount.sol"; import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; import {IPool4626} from "../interfaces/IPool4626.sol"; import {IWETHGateway} from "../interfaces/IWETHGateway.sol"; -import {IWithdrawManager, CancellationType} from "../interfaces/IWithdrawManager.sol"; +import {ClaimAction, IWithdrawalManager} from "../interfaces/IWithdrawalManager.sol"; import { ICreditManagerV3, ClosureAction, @@ -28,11 +32,13 @@ import { ManageDebtAction, CreditAccountInfo, RevocationPair, + CollateralDebtData, + CollateralCalcTask, WITHDRAWAL_FLAG } from "../interfaces/ICreditManagerV3.sol"; import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol"; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; -import {IPoolQuotaKeeper, QuotaUpdate, TokenLT} from "../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper} from "../interfaces/IPoolQuotaKeeper.sol"; import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; // CONSTANTS @@ -49,23 +55,26 @@ import "../interfaces/IExceptions.sol"; import "forge-std/console.sol"; -uint256 constant INDEX_PRECISION = 10 ** 9; - /// @title Credit Manager /// @notice Encapsulates the business logic for managing Credit Accounts /// /// More info: https://dev.gearbox.fi/developers/credit/credit_manager -contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, IERC20HelperTrait { +contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard { using EnumerableSet for EnumerableSet.AddressSet; using Address for address payable; using BitMask for uint256; + using CreditLogic for CollateralDebtData; + using CreditLogic for CollateralTokenData; + using SafeERC20 for IERC20; + using IERC20Helper for IERC20; + using CreditAccountHelper for ICreditAccount; // IMMUTABLE PARAMS /// @dev contract version uint256 public constant override version = 3_00; /// @dev Factory contract for Credit Accounts - IAccountFactory public immutable _accountFactory; + IAccountFactory public immutable accountFactory; /// @dev Address of the underlying asset address public immutable override underlying; @@ -82,6 +91,8 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @dev Whether the CM supports quota-related logic bool public immutable override supportsQuotas; + uint256 private immutable deployAccountAction; + /// @dev The maximal number of enabled tokens on a single Credit Account uint8 public override maxAllowedEnabledTokenLength = 12; @@ -120,7 +131,8 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @dev Mask of tokens to apply quotas for uint256 public override quotedTokenMask; - IWithdrawManager public withdrawManager; + /// @dev Withdrawal manager + IWithdrawalManager public immutable override withdrawalManager; /// @dev Address of the connected Credit Configurator address public creditConfigurator; @@ -166,9 +178,9 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, _; } - /// @dev Restricts calls to Credit Facade only - modifier withdrawManagerOnly() { - if (msg.sender != address(withdrawManager)) revert CallerNotCreditFacadeException(); + /// @dev Restricts calls to Withdrawal Manager only + modifier withdrawalManagerOnly() { + if (msg.sender != address(withdrawalManager)) revert CallerNotWithdrawalManagerException(); _; } @@ -182,7 +194,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @dev Constructor /// @param _pool Address of the pool to borrow funds from - constructor(address _pool, address _withdrawManager) { + constructor(address _pool, address _withdrawalManager) { IAddressProvider addressProvider = IPoolService(_pool).addressProvider(); pool = _pool; // F:[CM-1] @@ -202,10 +214,12 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, // Price oracle is stored in Slot1, as it is accessed frequently with fees priceOracle = IPriceOracleV2(addressProvider.getPriceOracle()); // F:[CM-1] - _accountFactory = IAccountFactory(addressProvider.getAccountFactory()); // F:[CM-1] + accountFactory = IAccountFactory(addressProvider.getAccountFactory()); // F:[CM-1] + + deployAccountAction = accountFactory.version() == 3_00 ? uint256(TakeAccountAction.DEPLOY_NEW_ONE) : 0; creditConfigurator = msg.sender; // F:[CM-1] - withdrawManager = IWithdrawManager(_withdrawManager); + withdrawalManager = IWithdrawalManager(_withdrawalManager); _externalCallCreditAccount = address(1); } @@ -220,7 +234,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// /// @param debt Amount to be borrowed by the Credit Account /// @param onBehalfOf The owner of the newly opened Credit Account - function openCreditAccount(uint256 debt, address onBehalfOf) + function openCreditAccount(uint256 debt, address onBehalfOf, bool deployNew) external override nonReentrant @@ -229,10 +243,10 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, { // Takes a Credit Account from the factory and sets initial parameters // The Credit Account will be connected to this Credit Manager until closing - creditAccount = _accountFactory.takeCreditAccount(0, 0); // F:[CM-8] + creditAccount = accountFactory.takeCreditAccount(deployNew ? deployAccountAction : 0, 0); // F:[CM-8] creditAccountInfo[creditAccount].debt = debt; - creditAccountInfo[creditAccount].cumulativeIndexAtOpen = IPoolService(pool).calcLinearCumulative_RAY(); + creditAccountInfo[creditAccount].cumulativeIndexLastUpdate = IPoolService(pool).calcLinearCumulative_RAY(); creditAccountInfo[creditAccount].borrower = onBehalfOf; if (supportsQuotas) creditAccountInfo[creditAccount].cumulativeQuotaInterest = 1; // F: [CMQ-1] @@ -266,21 +280,19 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// - Returns the Credit Account back to factory /// /// @param creditAccount Credit account address - /// @param closureActionType Whether the account is closed, liquidated or liquidated due to expiry - /// @param totalValue Portfolio value for liqution, 0 for ordinary closure + /// @param closureAction Whether the account is closed, liquidated or liquidated due to expiry + // @param totalValue Portfolio value for liqution, 0 for ordinary closure /// @param payer Address which would be charged if credit account has not enough funds to cover amountToPool /// @param to Address to which the leftover funds will be sent /// @param skipTokensMask Tokenmask contains 1 for tokens which needed to be send directly /// @param convertWETH If true converts WETH to ETH function closeCreditAccount( address creditAccount, - ClosureAction closureActionType, - uint256 totalValue, + ClosureAction closureAction, + CollateralDebtData memory collateralDebtData, address payer, address to, - uint256 enabledTokenMask, uint256 skipTokensMask, - uint256 debtWithInterest, bool convertWETH ) external @@ -292,71 +304,53 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, // Checks that the Credit Account exists for the borrower address borrower = getBorrowerOrRevert(creditAccount); // F:[CM-6, 9, 10] - // Sets borrower's Credit Account to zero address in the map + // Sets borrower's Credit Account to zero address creditAccountInfo[creditAccount].borrower = address(0); // F:[CM-9] + creditAccountInfo[creditAccount].flags = 0; // Makes all computations needed to close credit account - { - uint256 amountToPool; - uint256 debt = creditAccountInfo[creditAccount].debt; - uint256 profit; - - (amountToPool, remainingFunds, profit, loss) = - calcClosePayments(totalValue, closureActionType, debt, debtWithInterest); // F:[CM-10,11,12] - - _transferClosurePayments( - creditAccount, payer, to, borrower, convertWETH, amountToPool, remainingFunds, debt, profit, loss - ); - } + uint256 amountToPool; + uint256 profit; - if (supportsQuotas) { - TokenLT[] memory tokens; - tokens = _getQuotedTokens(enabledTokenMask); + if (closureAction == ClosureAction.CLOSE_ACCOUNT) { + (amountToPool, profit) = collateralDebtData.calcClosePayments({amountWithFeeFn: _amountWithFee}); + } else { + // During liquidation, totalValue of the account is discounted + // by (1 - liquidationPremium). This means that totalValue * liquidationPremium + // is removed from all calculations and can be claimed by the liquidator at the end of transaction - if (tokens.length > 0) { - poolQuotaKeeper().removeQuotas(creditAccount, tokens); // F: [CMQ-6] + // The liquidation premium depends on liquidation type: + // * For normal unhealthy account or emergency liquidations, usual premium applies + // * For expiry liquidations, the premium is typically reduced, + // since the account does not risk bad debt, so the liquidation + // is not as urgent - if (loss > 0) { - poolQuotaKeeper().setLimitsToZero(tokens); // F: [CMQ-12] - } - } + (amountToPool, remainingFunds, profit, loss) = collateralDebtData.calcLiquidationPayments({ + liquidationDiscount: closureAction == ClosureAction.LIQUIDATE_ACCOUNT + ? liquidationDiscount + : liquidationDiscountExpired, + feeLiquidation: closureAction == ClosureAction.LIQUIDATE_ACCOUNT ? feeLiquidation : feeLiquidationExpired, + amountWithFeeFn: _amountWithFee, + amountMinusFeeFn: _amountWithFee + }); } - enabledTokenMask &= ~skipTokensMask; + uint256 underlyingBalance = IERC20(underlying)._balanceOf(creditAccount); - _transferAssetsTo(creditAccount, to, convertWETH, enabledTokenMask); // F:[CM-14,17,19] - - // Returns Credit Account to the factory - _accountFactory.returnCreditAccount(creditAccount); // F:[CM-9] - creditAccountsSet.remove(creditAccount); - } - - function _transferClosurePayments( - address creditAccount, - address payer, - address to, - address borrower, - bool convertWETH, - uint256 amountToPool, - uint256 remainingFunds, - uint256 debt, - uint256 profit, - uint256 loss - ) internal { - uint256 underlyingBalance = _balanceOf(underlying, creditAccount); - - // If there is an underlying surplus, transfers it to the "to" address if (underlyingBalance > amountToPool + remainingFunds + 1) { + // If there is an underlying surplus, transfers it to the "to" address unchecked { _safeTokenTransfer( creditAccount, underlying, to, underlyingBalance - amountToPool - remainingFunds - 1, convertWETH ); // F:[CM-10,12,16] } + } else if (underlyingBalance < amountToPool + remainingFunds + 1) { // If there is an underlying shortfall, attempts to transfer it from the payer - } else { unchecked { - _transferFrom(underlying, payer, creditAccount, amountToPool + remainingFunds - underlyingBalance + 1); // F:[CM-11,13] + IERC20(underlying).safeTransferFrom( + payer, creditAccount, _amountWithFee(amountToPool + remainingFunds - underlyingBalance + 1) + ); // F:[CM-11,13] } } @@ -366,12 +360,30 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, // Signals to the pool that debt has been repaid. The pool relies // on the Credit Manager to repay the debt correctly, and does not // check internally whether the underlying was actually transferred - IPoolService(pool).repayCreditAccount(debt, profit, loss); // F:[CM-10,11,12,13] + IPoolService(pool).repayCreditAccount(collateralDebtData.debt, profit, loss); // F:[CM-10,11,12,13] // transfer remaining funds to the borrower [liquidations only] if (remainingFunds > 1) { _safeTokenTransfer(creditAccount, underlying, borrower, remainingFunds, false); // F:[CM-13,18] } + + if (supportsQuotas && collateralDebtData.quotedTokens.length > 0) { + /// In case of amy loss, PQK sets limits to zero for all quoted tokens + bool setLimitsToZero = loss > 0; + poolQuotaKeeper().removeQuotas({ + creditAccount: creditAccount, + tokens: collateralDebtData.quotedTokens, + setLimitsToZero: setLimitsToZero + }); // F: [CMQ-6] + } + + uint256 enabledTokensMask = collateralDebtData.enabledTokensMask & ~skipTokensMask; + + _transferAssetsTo(creditAccount, to, convertWETH, enabledTokensMask); // F:[CM-14,17,19] + + // Returns Credit Account to the factory + accountFactory.returnCreditAccount(creditAccount); // F:[CM-9] + creditAccountsSet.remove(creditAccount); } /// @dev Manages debt size for borrower: @@ -390,181 +402,69 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @param amount Amount to increase / decrease the principal by /// @param action Increase/decrease bed debt /// @return newDebt The new debt principal - function manageDebt(address creditAccount, uint256 amount, uint256 _enabledTokensMask, ManageDebtAction action) + function manageDebt(address creditAccount, uint256 amount, uint256 enabledTokensMask, ManageDebtAction action) external nonReentrant creditFacadeOnly // F:[CM-2] - returns (uint256 newDebt, uint256 enabledTokensMask) + returns (uint256 newDebt, uint256 tokensToEnable, uint256 tokensToDisable) { - (uint256 debt, uint256 cumulativeIndexAtOpen_RAY, uint256 cumulativeIndexNow_RAY) = + (uint256 debt, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow) = _getCreditAccountParameters(creditAccount); uint256 newCumulativeIndex; if (action == ManageDebtAction.INCREASE_DEBT) { - newDebt = debt + amount; - - // Computes the new cumulative index to keep the interest - // unchanged with different principal - newCumulativeIndex = - _calcNewCumulativeIndex(debt, amount, cumulativeIndexNow_RAY, cumulativeIndexAtOpen_RAY, true); + (newDebt, newCumulativeIndex) = + CreditLogic.calcIncrease(debt, amount, cumulativeIndexNow, cumulativeIndexLastUpdate); // Requests the pool to lend additional funds to the Credit Account IPoolService(pool).lendCreditAccount(amount, creditAccount); // F:[CM-20] - enabledTokensMask = _enabledTokensMask | UNDERLYING_TOKEN_MASK; + tokensToEnable = UNDERLYING_TOKEN_MASK; } else { // Decrease - uint256 amountRepaid = amount; - uint256 amountProfit = 0; + uint256 cumulativeQuotaInterest; if (supportsQuotas) { - (amountRepaid, amountProfit) = - _computeQuotasAmountDebtDecrease(creditAccount, amountRepaid, amountProfit, _enabledTokensMask); - } - - if (amountRepaid > 0) { - // Computes the interest accrued thus far - uint256 interestAccrued = (debt * cumulativeIndexNow_RAY) / cumulativeIndexAtOpen_RAY - debt; // F:[CM-21] - - // Computes profit, taken as a percentage of the interest rate - uint256 profit = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; // F:[CM-21] - - if (amountRepaid >= interestAccrued + profit) { - // If the amount covers all of the interest and fees, they are - // paid first, and the remainder is used to pay the principal - - amountRepaid -= interestAccrued + profit; - newDebt = debt - amountRepaid; // + interestAccrued + profit - amount; - - amountProfit += profit; - - // Since interest is fully repaid, the Credit Account's cumulativeIndexAtOpen - // is set to the current cumulative index - which means interest starts accruing - // on the new principal from zero - newCumulativeIndex = cumulativeIndexNow_RAY; // F:[CM-21] - } else { - // If the amount is not enough to cover interest and fees, - // then the sum is split between dao fees and pool profits pro-rata. Since the fee is the percentage - // of interest, this ensures that the new fee is consistent with the - // new pending interest - - uint256 amountToPool = (amountRepaid * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); - - amountProfit += amountRepaid - amountToPool; - amountRepaid = 0; - - // Since interest and fees are paid out first, the principal - // remains unchanged - newDebt = debt; - - // Since the interest was only repaid partially, we need to recompute the - // cumulativeIndexAtOpen, so that "debt * (indexNow / indexAtOpenNew - 1)" - // is equal to interestAccrued - amountToInterest - newCumulativeIndex = _calcNewCumulativeIndex( - debt, amountToPool, cumulativeIndexNow_RAY, cumulativeIndexAtOpen_RAY, false - ); + cumulativeQuotaInterest = creditAccountInfo[creditAccount].cumulativeQuotaInterest - 1; + { + (address[] memory tokens,) = + _getQuotedTokens({enabledTokensMask: enabledTokensMask, withLTs: false}); + if (tokens.length > 0) { + cumulativeQuotaInterest += poolQuotaKeeper().accrueQuotaInterest(creditAccount, tokens); // F: [CMQ-4,5] + } } - } else { - newDebt = debt; - newCumulativeIndex = cumulativeIndexAtOpen_RAY; } // Pays the amount back to the pool - _creditAccountSafeTransfer(creditAccount, underlying, pool, amount); // F:[CM-21] - - enabledTokensMask = _balanceOf(underlying, creditAccount) <= 1 - ? _enabledTokensMask & (~UNDERLYING_TOKEN_MASK) - : _enabledTokensMask; - - // TODO: delete after tests or write Invaraiant test - require(debt - newDebt == amountRepaid, "Ooops, something was wring"); + ICreditAccount(creditAccount)._safeTransfer(underlying, pool, amount); // F:[CM-21] + { + uint256 amountToRepay; + uint256 profit; + + (newDebt, newCumulativeIndex, amountToRepay, profit, cumulativeQuotaInterest) = CreditLogic + .calcDescrease({ + amount: amount, + quotaInterestAccrued: cumulativeQuotaInterest, + feeInterest: feeInterest, + debt: debt, + cumulativeIndexNow: cumulativeIndexNow, + cumulativeIndexLastUpdate: cumulativeIndexLastUpdate + }); + + IPoolService(pool).repayCreditAccount(amountToRepay, profit, 0); // F:[CM-21] + } + if (supportsQuotas) { + creditAccountInfo[creditAccount].cumulativeQuotaInterest = cumulativeQuotaInterest; + } - IPoolService(pool).repayCreditAccount(amountRepaid, amountProfit, 0); // F:[CM-21] + if (IERC20(underlying)._balanceOf(creditAccount) <= 1) { + tokensToDisable = UNDERLYING_TOKEN_MASK; + } } // // Sets new parameters on the Credit Account if they were changed - if (newDebt != debt || newCumulativeIndex != cumulativeIndexAtOpen_RAY) { + if (newDebt != debt || newCumulativeIndex != cumulativeIndexLastUpdate) { creditAccountInfo[creditAccount].debt = newDebt; // F:[CM-20. 21] - creditAccountInfo[creditAccount].cumulativeIndexAtOpen = newCumulativeIndex; // F:[CM-20. 21] - } - } - - function _computeQuotasAmountDebtDecrease( - address creditAccount, - uint256 _amountRepaid, - uint256 _amountProfit, - uint256 enabledTokenMask - ) internal returns (uint256 amountRepaid, uint256 amountProfit) { - amountRepaid = _amountRepaid; - amountProfit = _amountProfit; - - uint16 _feeInterest = feeInterest; - uint256 quotaInterestAccrued = creditAccountInfo[creditAccount].cumulativeQuotaInterest - 1; - - TokenLT[] memory tokens = _getQuotedTokens(enabledTokenMask); - if (tokens.length > 0) { - quotaInterestAccrued += poolQuotaKeeper().accrueQuotaInterest(creditAccount, tokens); // F: [CMQ-4,5] - } - - if (quotaInterestAccrued > 1) { - uint256 quotaProfit = (quotaInterestAccrued * _feeInterest) / PERCENTAGE_FACTOR; - - if (amountRepaid >= quotaInterestAccrued + quotaProfit) { - amountRepaid -= quotaInterestAccrued + quotaProfit; // F: [CMQ-5] - amountProfit += quotaProfit; // F: [CMQ-5] - creditAccountInfo[creditAccount].cumulativeQuotaInterest = 1; // F: [CMQ-5] - } else { - uint256 amountToPool = (amountRepaid * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + _feeInterest); - - amountProfit += amountRepaid - amountToPool; // F: [CMQ-4] - amountRepaid = 0; // F: [CMQ-4] - - uint256 newCumulativeQuotaInterest = quotaInterestAccrued - amountToPool; - - creditAccountInfo[creditAccount].cumulativeQuotaInterest = newCumulativeQuotaInterest + 1; // F: [CMQ-4] - } - } - } - - /// @dev Calculates the new cumulative index when debt is updated - /// @param debt Current debt principal - /// @param delta Absolute value of total debt amount change - /// @param cumulativeIndexNow Current cumulative index of the pool - /// @param cumulativeIndexOpen Last updated cumulative index recorded for the corresponding debt position - /// @param isIncrease Whether the debt is increased or decreased - /// @notice Handles two potential cases: - /// * Debt principal is increased by delta - in this case, the principal is changed - /// but the interest / fees have to stay the same - /// * Interest is decreased by delta - in this case, the principal stays the same, - /// but the interest changes. The delta is assumed to have fee repayment excluded. - /// The debt decrease case where delta > interest + fees is trivial and should be handled outside - /// this function. - function _calcNewCumulativeIndex( - uint256 debt, - uint256 delta, - uint256 cumulativeIndexNow, - uint256 cumulativeIndexOpen, - bool isIncrease - ) internal pure returns (uint256 newCumulativeIndex) { - if (isIncrease) { - // In case of debt increase, the principal increases by exactly delta, but interest has to be kept unchanged - // newCumulativeIndex is proven to be the solution to - // debt * (cumulativeIndexNow / cumulativeIndexOpen - 1) == - // == (debt + delta) * (cumulativeIndexNow / newCumulativeIndex - 1) - - uint256 newDebt = debt + delta; - - newCumulativeIndex = ( - (cumulativeIndexNow * newDebt * INDEX_PRECISION) - / ((INDEX_PRECISION * cumulativeIndexNow * debt) / cumulativeIndexOpen + INDEX_PRECISION * delta) - ); - } else { - // In case of debt decrease, the principal is the same, but the interest is reduced exactly by delta - // newCumulativeIndex is proven to be the solution to - // debt * (cumulativeIndexNow / cumulativeIndexOpen - 1) - delta == - // == debt * (cumulativeIndexNow / newCumulativeIndex - 1) - - newCumulativeIndex = (INDEX_PRECISION * cumulativeIndexNow * cumulativeIndexOpen) - / (INDEX_PRECISION * cumulativeIndexNow - (INDEX_PRECISION * delta * cumulativeIndexOpen) / debt); + creditAccountInfo[creditAccount].cumulativeIndexLastUpdate = newCumulativeIndex; // F:[CM-20. 21] } } @@ -580,7 +480,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, returns (uint256 tokenMask) { tokenMask = getTokenMaskOrRevert(token); - _transferFrom(token, payer, creditAccount, amount); // F:[CM-22] + IERC20(token).safeTransferFrom(payer, creditAccount, amount); // F:[CM-22] } /// @dev Transfers Credit Account ownership to another address @@ -613,36 +513,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, // sell them off getTokenMaskOrRevert(token); - // Attempts to set allowance directly to the required amount - // If unsuccessful, assumes that the token requires setting allowance to zero first - if (!_approve(token, targetContract, creditAccount, amount, false)) { - _approve(token, targetContract, creditAccount, 0, true); // F: - _approve(token, targetContract, creditAccount, amount, true); - } - } - - /// @dev Internal function used to approve token from a Credit Account - /// Uses Credit Account's execute to properly handle both ERC20-compliant and - /// non-compliant (no returned value from "approve") tokens - function _approve(address token, address targetContract, address creditAccount, uint256 amount, bool revertIfFailed) - internal - returns (bool) - { - // Makes a low-level call to approve from the Credit Account - // and parses the value. If nothing or true was returned, - // assumes that the call succeeded - try ICreditAccount(creditAccount).execute(token, abi.encodeCall(IERC20.approve, (targetContract, amount))) - returns (bytes memory result) { - if (result.length == 0 || abi.decode(result, (bool)) == true) { - return true; - } - } catch {} - - // On the first try, failure is allowed to handle tokens - // that prohibit changing allowance from non-zero value; - // After that, failure results in a revert - if (revertIfFailed) revert AllowanceFailedException(); - return false; + ICreditAccount(creditAccount).safeApprove(token, targetContract, amount); } /// @dev Requests a Credit Account to make a low-level call with provided data @@ -681,7 +552,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @param minHealthFactor Minimal health factor of the account, in PERCENTAGE format function fullCollateralCheck( address creditAccount, - uint256 enabledTokenMask, + uint256 enabledTokensMask, uint256[] memory collateralHints, uint16 minHealthFactor ) external creditFacadeOnly nonReentrant { @@ -689,19 +560,14 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, revert CustomHealthFactorTooLowException(); } - IPriceOracleV2 _priceOracle = priceOracle; + CollateralDebtData memory collateralDebtData = + _calcFullCollateral(creditAccount, enabledTokensMask, minHealthFactor, collateralHints, priceOracle, true); - uint256 twvUSD; - uint256 debtPlusInterestRateAndFeesUSD; - - (enabledTokenMask,, twvUSD, debtPlusInterestRateAndFeesUSD,) = - _calcAllCollateral(_priceOracle, creditAccount, enabledTokenMask, minHealthFactor, collateralHints, true); - - if (twvUSD < debtPlusInterestRateAndFeesUSD) { + if (collateralDebtData.isLiquidatable) { revert NotEnoughCollateralException(); } - _saveEnabledTokenMask(creditAccount, enabledTokenMask); + _saveEnabledTokensMask(creditAccount, collateralDebtData.enabledTokensMask); } /// @dev Calculates total value for provided Credit Account in underlying @@ -710,153 +576,173 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @param creditAccount Credit Account address // @return total Total value in underlying // @return twv Total weighted (discounted by liquidation thresholds) value in underlying - function calcTotalValue(address creditAccount) + function calcDebtAndCollateral(address creditAccount, CollateralCalcTask task) external view override - returns (uint256 enabledTokenMask, uint256 total, uint256 hf, uint256 debtWithInterest, bool canBeLiquidated) + returns (CollateralDebtData memory collateralDebtData) { - IPriceOracleV2 _priceOracle = priceOracle; - uint256[] memory collateralHints; - enabledTokenMask = enabledTokensMap(creditAccount); - uint256 totalUSD; - uint256 twvUSD; - uint256 debtPlusInterestRateAndFeesUSD; - (, totalUSD, twvUSD, debtPlusInterestRateAndFeesUSD, debtWithInterest) = - _calcAllCollateral(_priceOracle, creditAccount, enabledTokenMask, PERCENTAGE_FACTOR, collateralHints, false); + uint256 enabledTokensMask = enabledTokensMaskOf(creditAccount); - // add withdrawal balances to TotalValue - if (hasWithdrawalValue(creditAccount)) { - (uint256 withdrawValueUSD, uint256 tokensToEnable) = - _calcDelayedWithdrawalValue(_priceOracle, creditAccount); + if (task == CollateralCalcTask.DEBT_ONLY) { + uint256 quotaInterest; - totalUSD += withdrawValueUSD; - enabledTokenMask |= tokensToEnable; - } + if (supportsQuotas) { + (address[] memory tokens,) = _getQuotedTokens({enabledTokensMask: enabledTokensMask, withLTs: false}); - total = _convertFromUSD(_priceOracle, totalUSD, underlying); // F:[FA-41] - hf = twvUSD * PERCENTAGE_FACTOR / debtPlusInterestRateAndFeesUSD; + quotaInterest = creditAccountInfo[creditAccount].cumulativeQuotaInterest - 1; - canBeLiquidated = twvUSD < debtPlusInterestRateAndFeesUSD; + if (tokens.length > 0) { + quotaInterest += poolQuotaKeeper().outstandingQuotaInterest(creditAccount, tokens); // F: [CMQ-10] + } + + collateralDebtData.quotedTokens = tokens; + } + + (collateralDebtData.debt, collateralDebtData.accruedInterest, collateralDebtData.accruedFees) = + _calcCreditAccountAccruedInterest(creditAccount, quotaInterest); + } else { + IPriceOracleV2 _priceOracle = priceOracle; + uint256[] memory collateralHints; + + collateralDebtData = _calcFullCollateral( + creditAccount, enabledTokensMask, PERCENTAGE_FACTOR, collateralHints, _priceOracle, false + ); + + if ( + ( + task == CollateralCalcTask.DEBT_COLLATERAL_CANCEL_WITHDRAWALS + || task == CollateralCalcTask.DEBT_COLLATERAL_FORCE_CANCEL_WITHDRAWALS + ) && _hasWithdrawals(creditAccount) + ) { + collateralDebtData.totalValueUSD += _calcCancellableWithdrawalsValue( + _priceOracle, creditAccount, task == CollateralCalcTask.DEBT_COLLATERAL_FORCE_CANCEL_WITHDRAWALS + ); + } + + collateralDebtData.totalValue = _convertFromUSD(_priceOracle, collateralDebtData.totalValueUSD, underlying); // F:[FA-41] + } + + // FINALLY + collateralDebtData.enabledTokensMask = enabledTokensMask; } /// @dev Calculates total value for provided Credit Account in USD // @param _priceOracle Oracle used to convert assets to USD // @param creditAccount Address of the Credit Account - // @return totalUSD Total value of the account in USD - // @return canBeLiquidated True if HF <1 - function _calcAllCollateral( - IPriceOracleV2 _priceOracle, + + function _calcFullCollateral( address creditAccount, - uint256 enabledTokenMask, + uint256 enabledTokensMask, uint16 minHealthFactor, uint256[] memory collateralHints, + IPriceOracleV2 _priceOracle, bool lazy - ) - internal - view - returns ( - uint256 _enabledTokenMask, - uint256 totalUSD, - uint256 twvUSD, - uint256 debtPlusInterestRateAndFeesUSD, - uint256 debtWithInterestAndFees // TODO: without FEES - ) - { + ) internal view returns (CollateralDebtData memory collateralDebtData) { + uint256 totalUSD; + uint256 twvUSD; + uint256 quotaInterest; if (supportsQuotas) { - (totalUSD, twvUSD, quotaInterest) = _calcQuotedCollateral(creditAccount, enabledTokenMask, _priceOracle); + (totalUSD, twvUSD, quotaInterest, collateralDebtData.quotedTokens) = + _calcQuotedCollateral(creditAccount, enabledTokensMask, _priceOracle); } - { - // The total weighted value of a Credit Account has to be compared - // with the entire debt sum, including interest and fees - (,, debtWithInterestAndFees) = _calcCreditAccountAccruedInterest(creditAccount, quotaInterest); + // The total weighted value of a Credit Account has to be compared + // with the entire debt sum, including interest and fees + (collateralDebtData.debt, collateralDebtData.accruedInterest, collateralDebtData.accruedFees) = + _calcCreditAccountAccruedInterest(creditAccount, quotaInterest); - debtPlusInterestRateAndFeesUSD = _convertToUSD( - _priceOracle, - debtWithInterestAndFees * minHealthFactor, // F: [CM-42] - underlying - ) / PERCENTAGE_FACTOR; - } + uint256 debtPlusInterestRateAndFeesUSD = _convertToUSD( + _priceOracle, + collateralDebtData.calcTotalDebt() * minHealthFactor, // F: [CM-42] + underlying + ) / PERCENTAGE_FACTOR; // If quoted tokens fully cover the debt, we can stop here // after performing some additional cleanup if (twvUSD < debtPlusInterestRateAndFeesUSD || !lazy) { - uint256 limit = lazy ? (debtPlusInterestRateAndFeesUSD - twvUSD) : type(uint256).max; uint256 _totalUSD; uint256 _twvUSD; + uint256 limit = lazy ? (debtPlusInterestRateAndFeesUSD - twvUSD) : type(uint256).max; + + uint256 tokensToDisable; + (tokensToDisable, _totalUSD, _twvUSD) = + _calcNotQuotedCollateral(creditAccount, enabledTokensMask, limit, collateralHints, _priceOracle); - (enabledTokenMask, _totalUSD, _twvUSD) = - _calcNotQuotedCollateral(_priceOracle, creditAccount, enabledTokenMask, limit, collateralHints); + /// @notice tokensToDisable doesn't have any quoted tokens, no need to mask it + enabledTokensMask = enabledTokensMask.disable(tokensToDisable); totalUSD += _totalUSD; twvUSD += _twvUSD; } - _enabledTokenMask = enabledTokenMask; + collateralDebtData.totalValueUSD = totalUSD; + collateralDebtData.twvUSD = twvUSD; + + collateralDebtData.enabledTokensMask = enabledTokensMask; + collateralDebtData.hf = uint16(collateralDebtData.twvUSD * PERCENTAGE_FACTOR / debtPlusInterestRateAndFeesUSD); + collateralDebtData.isLiquidatable = twvUSD < debtPlusInterestRateAndFeesUSD; } - function _calcQuotedCollateral(address creditAccount, uint256 enabledTokenMask, IPriceOracleV2 _priceOracle) + function _calcQuotedCollateral(address creditAccount, uint256 enabledTokensMask, IPriceOracleV2 _priceOracle) internal view - returns (uint256 totalValueUSD, uint256 twvUSD, uint256 quotaInterest) + returns (uint256 totalValueUSD, uint256 twvUSD, uint256 quotaInterest, address[] memory tokens) { - TokenLT[] memory tokens = _getQuotedTokens(enabledTokenMask); + uint256[] memory lts; + (tokens, lts) = _getQuotedTokens({enabledTokensMask: enabledTokensMask, withLTs: true}); if (tokens.length > 0) { /// If credit account has any connected token - then check that - (totalValueUSD, twvUSD, quotaInterest) = poolQuotaKeeper().computeQuotedCollateralUSD( - address(this), creditAccount, address(_priceOracle), tokens - ); // F: [CMQ-8] + (totalValueUSD, twvUSD, quotaInterest) = + poolQuotaKeeper().computeQuotedCollateralUSD(creditAccount, address(_priceOracle), tokens, lts); // F: [CMQ-8] } quotaInterest += creditAccountInfo[creditAccount].cumulativeQuotaInterest - 1; // F: [CMQ-8] } function _calcNotQuotedCollateral( - IPriceOracleV2 _priceOracle, address creditAccount, - uint256 _enabledTokensMask, - uint256 debtPlusInterestRateAndFeesUSD, - uint256[] memory collateralHints - ) internal view returns (uint256 enabledTokensMask, uint256 totalValue, uint256 twvUSD) { + uint256 enabledTokensMask, + uint256 enoughCollateralUSD, + uint256[] memory collateralHints, + IPriceOracleV2 _priceOracle + ) internal view returns (uint256 tokensToDisable, uint256 totalValueUSD, uint256 twvUSD) { uint256 tokenMask; uint256 len = collateralHints.length; bool nonZeroBalance; - enabledTokensMask = _enabledTokensMask; - uint256 checkedTokenMask = supportsQuotas ? enabledTokensMask & (~quotedTokenMask) : enabledTokensMask; + uint256 checkedTokenMask = supportsQuotas ? enabledTokensMask.disable(quotedTokenMask) : enabledTokensMask; - if (debtPlusInterestRateAndFeesUSD != type(uint256).max) { - debtPlusInterestRateAndFeesUSD *= PERCENTAGE_FACTOR; + if (enoughCollateralUSD != type(uint256).max) { + enoughCollateralUSD *= PERCENTAGE_FACTOR; } - uint256 twvUSDx10K; - unchecked { // TODO: add test that we check all values and it's always reachable for (uint256 i; checkedTokenMask != 0; ++i) { + // TODO: add check for super long collateralnhints and for double masks tokenMask = (i < len) ? collateralHints[i] : 1 << (i - len); // F: [CM-68] - // CASE enabledTokenMask & tokenMask == 0 F:[CM-38] + // CASE enabledTokensMask & tokenMask == 0 F:[CM-38] if (checkedTokenMask & tokenMask != 0) { - (totalValue, twvUSDx10K, nonZeroBalance) = - _calcOneNonQuotedTokenCollateral(_priceOracle, tokenMask, creditAccount, totalValue, twvUSDx10K); + (totalValueUSD, twvUSD, nonZeroBalance) = + _calcOneNonQuotedTokenCollateral(_priceOracle, tokenMask, creditAccount, totalValueUSD, twvUSD); // Collateral calculations are only done if there is a non-zero balance if (nonZeroBalance) { // Full collateral check evaluates a Credit Account's health factor lazily; // Once the TWV computed thus far exceeds the debt, the check is considered // successful, and the function returns without evaluating any further collateral - if (twvUSDx10K >= debtPlusInterestRateAndFeesUSD) { + if (twvUSD >= enoughCollateralUSD) { break; } // Zero-balance tokens are disabled; this is done by flipping the - // bit in enabledTokenMask, which is then written into storage at the + // bit in enabledTokensMask, which is then written into storage at the // very end, to avoid redundant storage writes } else { - enabledTokensMask &= ~tokenMask; // F:[CM-39] + tokensToDisable |= tokenMask; // F:[CM-39] } } @@ -864,7 +750,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, } } - twvUSD = twvUSDx10K / PERCENTAGE_FACTOR; + twvUSD /= PERCENTAGE_FACTOR; } function _calcOneNonQuotedTokenCollateral( @@ -875,7 +761,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, uint256 _twvUSDx10K ) internal view returns (uint256 totalValueUSD, uint256 twvUSDx10K, bool nonZeroBalance) { (address token, uint16 liquidationThreshold) = collateralTokensByMask(tokenMask); - uint256 balance = _balanceOf(token, creditAccount); + uint256 balance = IERC20(token)._balanceOf(creditAccount); // Collateral calculations are only done if there is a non-zero balance if (balance > 1) { @@ -887,54 +773,32 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, } } - function _calcDelayedWithdrawalValue(IPriceOracleV2 _priceOracle, address creditAccount) - internal - view - returns (uint256 withdrawValueUSD, uint256 tokensToEnable) - { - (uint256 tokenMask1, uint256 balance1, uint256 tokenMask2, uint256 balance2) = - withdrawManager.getWithdrawals(address(this), creditAccount); - - (withdrawValueUSD, tokensToEnable) = _calcWithdrawalValueUSD(0, 0, _priceOracle, tokenMask1, balance1); - (withdrawValueUSD, tokensToEnable) = - _calcWithdrawalValueUSD(withdrawValueUSD, tokensToEnable, _priceOracle, tokenMask2, balance2); - } - - function _calcWithdrawalValueUSD( - uint256 _withdrawValueUSD, - uint256 _tokensToEnbable, - IPriceOracleV2 _priceOracle, - uint256 tokenMask, - uint256 balance - ) internal view returns (uint256 withdrawValueUSD, uint256 tokensToEnable) { - withdrawValueUSD = _withdrawValueUSD; - tokensToEnable = _tokensToEnbable; - - if (balance > 1) { - address token = getTokenByMask(tokenMask); - withdrawValueUSD += _convertToUSD(_priceOracle, balance, token); - tokensToEnable |= tokenMask; - } - } + // + // QUOTAS MANAGEMENT + // /// @dev Returns the array of quoted tokens that are enabled on the account - function getQuotedTokens(address creditAccount) public view returns (TokenLT[] memory tokens) { - return _getQuotedTokens(enabledTokensMap(creditAccount)); + function getQuotedTokens(address creditAccount) public view returns (address[] memory tokens) { + (tokens,) = _getQuotedTokens({enabledTokensMask: enabledTokensMaskOf(creditAccount), withLTs: false}); } - function _getQuotedTokens(uint256 enabledTokensMask) internal view returns (TokenLT[] memory tokens) { + function _getQuotedTokens(uint256 enabledTokensMask, bool withLTs) + internal + view + returns (address[] memory tokens, uint256[] memory lts) + { uint256 quotedMask = enabledTokensMask & quotedTokenMask; if (quotedMask > 0) { - tokens = new TokenLT[](maxAllowedEnabledTokenLength + 1); + tokens = new address[](maxAllowedEnabledTokenLength ); + lts = new uint256[](maxAllowedEnabledTokenLength ); uint256 j; unchecked { for (uint256 tokenMask = 2; tokenMask <= quotedMask; tokenMask <<= 1) { if (quotedMask & tokenMask != 0) { - (address token, uint16 lt) = collateralTokensByMask(tokenMask); - tokens[j] = TokenLT({token: token, lt: lt}); + (tokens[j], lts[j]) = _collateralTokensByMask({tokenMask: tokenMask, calcLT: withLTs}); ++j; } } @@ -942,22 +806,22 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, } } - // - // QUOTAS MANAGEMENT - // - /// @dev Updates credit account's quotas for multiple tokens /// @param creditAccount Address of credit account - /// @param quotaUpdates Requested quota updates, see `QuotaUpdate` - function updateQuotas(address creditAccount, QuotaUpdate[] memory quotaUpdates) + function updateQuota(address creditAccount, address token, int96 quotaChange) external override creditFacadeOnly // F: [CMQ-3] returns (uint256 tokensToEnable, uint256 tokensToDisable) { - uint256 caInterestChange; - (caInterestChange, tokensToEnable, tokensToDisable) = - poolQuotaKeeper().updateQuotas(creditAccount, quotaUpdates); // F: [CMQ-3] + (uint256 caInterestChange, bool enable, bool disable) = + poolQuotaKeeper().updateQuota(creditAccount, token, quotaChange); // F: [CMQ-3] + + if (enable) { + tokensToEnable = getTokenMaskOrRevert(token); + } else if (disable) { + tokensToDisable = getTokenMaskOrRevert(token); + } creditAccountInfo[creditAccount].cumulativeQuotaInterest += caInterestChange; // F: [CMQ-3] } @@ -978,33 +842,31 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, { // Since underlying should have been transferred to "to" before this function is called // (if there is a surplus), its tokenMask of 1 is skipped - uint256 tokenMask = 2; // Since enabledTokensMask encodes all enabled tokens as 1, // tokenMask > enabledTokensMask is equivalent to the last 1 bit being passed // The loop can be ended at this point - while (tokenMask <= enabledTokensMask) { - // enabledTokensMask & tokenMask == tokenMask when the token is enabled, - // and 0 otherwise - if (enabledTokensMask & tokenMask != 0) { - address token = getTokenByMask(tokenMask); // F:[CM-44] - uint256 amount = _balanceOf(token, creditAccount); // F:[CM-44] - if (amount > 1) { - // 1 is subtracted from amount to leave a non-zero value - // in the balance mapping, optimizing future writes - // Since the amount is checked to be more than 1, - // the block can be marked as unchecked - - // F:[CM-44] - unchecked { + unchecked { + for (uint256 tokenMask = 2; tokenMask <= enabledTokensMask; tokenMask = tokenMask << 1) { + // enabledTokensMask & tokenMask == tokenMask when the token is enabled, + // and 0 otherwise + if (enabledTokensMask & tokenMask != 0) { + address token = getTokenByMask(tokenMask); // F:[CM-44] + uint256 amount = IERC20(token)._balanceOf(creditAccount); // F:[CM-44] + if (amount > 1) { + // 1 is subtracted from amount to leave a non-zero value + // in the balance mapping, optimizing future writes + // Since the amount is checked to be more than 1, + // the block can be marked as unchecked + + // F:[CM-44] _safeTokenTransfer(creditAccount, token, to, amount - 1, convertWETH); // F:[CM-44] } } } - // The loop iterates by moving 1 bit to the left, // which corresponds to moving on to the next token - tokenMask = tokenMask << 1; // F:[CM-44] + // F:[CM-44] } } @@ -1018,127 +880,31 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, internal { if (convertToETH && token == wethAddress) { - _creditAccountSafeTransfer(creditAccount, token, wethGateway, amount); // F:[CM-45] + ICreditAccount(creditAccount).safeTransfer(token, wethGateway, amount); // F:[CM-45] IWETHGateway(wethGateway).depositFor(to, amount); // F:[CM-45] } else { try ICreditAccount(creditAccount).safeTransfer(token, to, amount) { // F:[CM-45] } catch { - uint256 balanceBefore = _balanceOf(token, address(withdrawManager)); - _creditAccountSafeTransfer(creditAccount, token, address(withdrawManager), amount); - withdrawManager.addImmediateWithdrawal( - to, token, _balanceOf(token, address(withdrawManager)) - balanceBefore + it(to == pool) revert; // TODO: add exception + uint256 delivered = ICreditAccount(creditAccount).safeTransferDeliveredBalanceControl( + token, address(withdrawalManager), amount ); + withdrawalManager.addImmediateWithdrawal(to, token, delivered); } } } - function _creditAccountSafeTransfer(address creditAccount, address token, address to, uint256 amount) internal { - ICreditAccount(creditAccount).safeTransfer(token, to, amount); + function _checkEnabledTokenLength(uint256 enabledTokensMask) internal view { + uint256 totalTokensEnabled = enabledTokensMask.calcEnabledTokens(); + if (totalTokensEnabled > maxAllowedEnabledTokenLength) { + revert TooManyEnabledTokensException(); + } } // // GETTERS // - /// @dev Computes amounts that must be sent to various addresses before closing an account - /// @param totalValue Credit Accounts total value in underlying - /// @param closureActionType Type of account closure - /// * CLOSE_ACCOUNT: The account is healthy and is closed normally - /// * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt - /// * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) - /// * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium) - /// @param debt Credit Account's debt principal - /// @param debtWithInterest Credit Account's debt principal + interest - /// @return amountToPool Amount of underlying to be sent to the pool - /// @return remainingFunds Amount of underlying to be sent to the borrower (only applicable to liquidations) - /// @return profit Protocol's profit from fees (if any) - /// @return loss Protocol's loss from bad debt (if any) - function calcClosePayments( - uint256 totalValue, - ClosureAction closureActionType, - uint256 debt, - uint256 debtWithInterest - ) public view override returns (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) { - // The amount to be paid to pool is computed with fees included - // The pool will compute the amount of Diesel tokens to treasury - // based on profit - amountToPool = debtWithInterest + ((debtWithInterest - debt) * feeInterest) / PERCENTAGE_FACTOR; // F:[CM-43] - - if ( - closureActionType == ClosureAction.LIQUIDATE_ACCOUNT - || closureActionType == ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT - ) { - // LIQUIDATION CASE - - // During liquidation, totalValue of the account is discounted - // by (1 - liquidationPremium). This means that totalValue * liquidationPremium - // is removed from all calculations and can be claimed by the liquidator at the end of transaction - - // The liquidation premium depends on liquidation type: - // * For normal unhealthy account or emergency liquidations, usual premium applies - // * For expiry liquidations, the premium is typically reduced, - // since the account does not risk bad debt, so the liquidation - // is not as urgent - - uint256 totalFunds = ( - totalValue - * ( - closureActionType == ClosureAction.LIQUIDATE_ACCOUNT - ? liquidationDiscount - : liquidationDiscountExpired - ) - ) / PERCENTAGE_FACTOR; // F:[CM-43] - - amountToPool += ( - totalValue - * (closureActionType == ClosureAction.LIQUIDATE_ACCOUNT ? feeLiquidation : feeLiquidationExpired) - ) / PERCENTAGE_FACTOR; // F:[CM-43] - - /// Adding fee here - // amountToPool = _amountWithFee(amountToPool); - - // If there are any funds left after all respective payments (this - // includes the liquidation premium, since totalFunds is already - // discounted from totalValue), they are recorded to remainingFunds - // and will later be sent to the borrower. - - // If totalFunds is not sufficient to cover the entire payment to pool, - // the Credit Manager will repay what it can. When totalFunds >= debt + interest, - // this simply means that part of protocol fees will be waived (profit is reduced). Otherwise, - // there is bad debt (loss > 0). - - // Since values are compared to each other before subtracting, - // this can be marked as unchecked to optimize gas - - unchecked { - if (totalFunds > amountToPool) { - remainingFunds = totalFunds - amountToPool - 1; // F:[CM-43] - } else { - amountToPool = totalFunds; // F:[CM-43] - } - - if (totalFunds >= debtWithInterest) { - profit = amountToPool - debtWithInterest; // F:[CM-43] - } else { - loss = debtWithInterest - amountToPool; // F:[CM-43] - } - } - } else { - // CLOSURE CASE - - // During closure, it is assumed that the user has enough to cover - // the principal + interest + fees. closeCreditAccount, thus, will - // attempt to charge them the entire amount. - - // Since in this case amountToPool + debtWithInterest + fee, - // this block can be marked as unchecked - - unchecked { - profit = amountToPool - debtWithInterest; // F:[CM-43] - } - } - } - /// @dev Returns the collateral token at requested index and its liquidation threshold /// @param id The index of token to return function collateralTokens(uint256 id) public view returns (address token, uint16 liquidationThreshold) { @@ -1150,64 +916,42 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @dev Returns the collateral token with requested mask and its liquidationThreshold /// @param tokenMask Token mask corresponding to the token + + // TODO: naming! function collateralTokensByMask(uint256 tokenMask) public view override returns (address token, uint16 liquidationThreshold) { - // The underlying is a special case and its mask is always 1 - if (tokenMask == 1) { - token = underlying; // F:[CM-47] - liquidationThreshold = ltUnderlying; - } else { - CollateralTokenData memory tokenData = collateralTokensData[tokenMask]; // F:[CM-47] - - token = tokenData.token; - - if (token == address(0)) { - revert TokenNotAllowedException(); - } - - if (block.timestamp < tokenData.timestampRampStart) { - liquidationThreshold = tokenData.ltInitial; // F:[CM-47] - } else if (block.timestamp < tokenData.timestampRampStart + tokenData.rampDuration) { - liquidationThreshold = _getRampingLiquidationThreshold( - tokenData.ltInitial, - tokenData.ltFinal, - tokenData.timestampRampStart, - tokenData.timestampRampStart + tokenData.rampDuration - ); - } else { - liquidationThreshold = tokenData.ltFinal; - } - } + return _collateralTokensByMask({tokenMask: tokenMask, calcLT: true}); } function getTokenByMask(uint256 tokenMask) public view override returns (address token) { + (token,) = _collateralTokensByMask({tokenMask: tokenMask, calcLT: false}); + } + + /// @dev Returns the collateral token with requested mask and its liquidationThreshold + /// @param tokenMask Token mask corresponding to the token + function _collateralTokensByMask(uint256 tokenMask, bool calcLT) + internal + view + returns (address token, uint16 liquidationThreshold) + { + // The underlying is a special case and its mask is always 1 if (tokenMask == 1) { token = underlying; // F:[CM-47] + liquidationThreshold = ltUnderlying; } else { - CollateralTokenData memory tokenData = collateralTokensData[tokenMask]; // F:[CM-47] - token = tokenData.token; - if (token == address(0)) { - revert TokenNotAllowedException(); + CollateralTokenData storage tokenData = collateralTokensData[tokenMask]; // F:[CM-47] + token = tokenData.getTokenOrRevert(); + + if (calcLT) { + liquidationThreshold = tokenData.getLiquidationThreshold(); } } } - function _getRampingLiquidationThreshold( - uint16 ltInitial, - uint16 ltFinal, - uint40 timestampRampStart, - uint40 timestampRampEnd - ) internal view returns (uint16) { - return uint16( - (ltInitial * (timestampRampEnd - block.timestamp) + ltFinal * (block.timestamp - timestampRampStart)) - / (timestampRampEnd - timestampRampStart) - ); // F: [CM-72] - } - /// @dev Returns the address of a borrower's Credit Account, or reverts if there is none. /// @param borrower Borrower's address function getBorrowerOrRevert(address creditAccount) public view override returns (address borrower) { @@ -1215,71 +959,46 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, if (borrower == address(0)) revert CreditAccountNotExistsException(); // F:[CM-48] } - /// @dev Calculates the debt accrued by a Credit Account - /// @param creditAccount Address of the Credit Account - /// @return debt The debt principal - /// @return debtWithInterest The debt principal + accrued interest - /// @return debtWithInterestAndFees The debt principal + accrued interest and protocol fees - function calcCreditAccountAccruedInterest(address creditAccount) - external - view - override - returns (uint256 debt, uint256 debtWithInterest, uint256 debtWithInterestAndFees) - { - uint256 quotaInterest; - - if (supportsQuotas) { - TokenLT[] memory tokens = getQuotedTokens(creditAccount); - - quotaInterest = creditAccountInfo[creditAccount].cumulativeQuotaInterest - 1; - - if (tokens.length > 0) { - quotaInterest += poolQuotaKeeper().outstandingQuotaInterest(address(this), creditAccount, tokens); // F: [CMQ-10] - } - } - - return _calcCreditAccountAccruedInterest(creditAccount, quotaInterest); - } - /// @dev IMPLEMENTATION: calcCreditAccountAccruedInterest /// @param creditAccount Address of the Credit Account /// @param quotaInterest Total quota premiums accrued, computed elsewhere /// @return debt The debt principal - /// @return debtWithInterest The debt principal + accrued interest - /// @return debtWithInterestAndFees The debt principal + accrued interest and protocol fees + /// @return accruedInterest Accrued interest + /// @return accruedFees Accrued interest and protocol fees function _calcCreditAccountAccruedInterest(address creditAccount, uint256 quotaInterest) internal view - returns (uint256 debt, uint256 debtWithInterest, uint256 debtWithInterestAndFees) + returns (uint256 debt, uint256 accruedInterest, uint256 accruedFees) { - uint256 cumulativeIndexAtOpen_RAY; - uint256 cumulativeIndexNow_RAY; - (debt, cumulativeIndexAtOpen_RAY, cumulativeIndexNow_RAY) = _getCreditAccountParameters(creditAccount); // F:[CM-49] + uint256 cumulativeIndexLastUpdate; + uint256 cumulativeIndexNow; + (debt, cumulativeIndexLastUpdate, cumulativeIndexNow) = _getCreditAccountParameters(creditAccount); // F:[CM-49] // Interest is never stored and is always computed dynamically // as the difference between the current cumulative index of the pool // and the cumulative index recorded in the Credit Account - debtWithInterest = (debt * cumulativeIndexNow_RAY) / cumulativeIndexAtOpen_RAY + quotaInterest; // F:[CM-49] + accruedInterest = + CreditLogic.calcAccruedInterest(debt, cumulativeIndexLastUpdate, cumulativeIndexNow) + quotaInterest; // F:[CM-49] // Fees are computed as a percentage of interest - debtWithInterestAndFees = debtWithInterest + ((debtWithInterest - debt) * feeInterest) / PERCENTAGE_FACTOR; // F: [CM-49] + accruedFees = accruedInterest * feeInterest / PERCENTAGE_FACTOR; // F: [CM-49] } /// @dev Returns the parameters of the Credit Account required to calculate debt /// @param creditAccount Address of the Credit Account /// @return debt Debt principal amount - /// @return cumulativeIndexAtOpen_RAY The cumulative index value used to calculate + /// @return cumulativeIndexLastUpdate The cumulative index value used to calculate /// interest in conjunction with current pool index. Not necessarily the index /// value at the time of account opening, since it can be updated by manageDebt. - /// @return cumulativeIndexNow_RAY Current cumulative index of the pool + /// @return cumulativeIndexNow Current cumulative index of the pool function _getCreditAccountParameters(address creditAccount) internal view - returns (uint256 debt, uint256 cumulativeIndexAtOpen_RAY, uint256 cumulativeIndexNow_RAY) + returns (uint256 debt, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow) { debt = creditAccountInfo[creditAccount].debt; // F:[CM-49,50] - cumulativeIndexAtOpen_RAY = creditAccountInfo[creditAccount].cumulativeIndexAtOpen; // F:[CM-49,50] - cumulativeIndexNow_RAY = IPoolService(pool).calcLinearCumulative_RAY(); // F:[CM-49,50] + cumulativeIndexLastUpdate = creditAccountInfo[creditAccount].cumulativeIndexLastUpdate; // F:[CM-49,50] + cumulativeIndexNow = IPoolService(pool).calcLinearCumulative_RAY(); // F:[CM-49,50] } /// @dev Returns the liquidation threshold for the provided token @@ -1289,7 +1008,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, if (token == underlying) return ltUnderlying; // F:[CM-47] uint256 tokenMask = getTokenMaskOrRevert(token); - (, lt) = collateralTokensByMask(tokenMask); // F:[CM-47] + (, lt) = _collateralTokensByMask({tokenMask: tokenMask, calcLT: true}); // F:[CM-47] } /// @dev Returns the mask for the provided token @@ -1414,30 +1133,6 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, // CONFIGURATION // - /// @dev Sets the liquidation threshold for a collateral token - /// @notice Liquidation thresholds are weights used to compute - /// TWV with. They denote the risk of the token, with - /// more volatile and unpredictable tokens having lower LTs. - /// @param token The collateral token to set the LT for - /// @param liquidationThreshold The new LT - function setLiquidationThreshold(address token, uint16 liquidationThreshold) - external - creditConfiguratorOnly // F:[CM-4] - { - // Underlying is a special case and its LT is stored in Slot1, - // to be accessed frequently - if (token == underlying) { - // F:[CM-47] - ltUnderlying = liquidationThreshold; // F:[CM-47] - } else { - uint256 tokenMask = getTokenMaskOrRevert(token); // F:[CM-47, 54] - - CollateralTokenData memory tokenData = collateralTokensData[tokenMask]; - - _setLTRampParams(tokenData, tokenMask, liquidationThreshold, liquidationThreshold, type(uint40).max, 0); // F:[CM-47] - } - } - /// @dev Sets ramping parameters for a token's liquidation threshold /// @notice Ramping parameters allow to decrease the LT gradually over a period of time /// which gives users/bots time to react and adjust their position for the new LT @@ -1445,34 +1140,24 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// @param finalLT The final LT after ramping /// @param timestampRampStart Timestamp when the LT starts ramping /// @param rampDuration Duration of ramping - function rampLiquidationThreshold(address token, uint16 finalLT, uint40 timestampRampStart, uint24 rampDuration) - external - creditConfiguratorOnly - { - uint256 tokenMask = getTokenMaskOrRevert(token); - - if (tokenMask == 1) revert CannotRampLTForUnderlyingException(); - - CollateralTokenData memory tokenData = collateralTokensData[tokenMask]; - - _setLTRampParams(tokenData, tokenMask, tokenData.ltInitial, finalLT, timestampRampStart, rampDuration); // F: [CM-71] - } - - /// @dev Internal function that sets the LT params - function _setLTRampParams( - CollateralTokenData memory tokenData, - uint256 tokenMask, - uint16 ltInitial, - uint16 ltFinal, + function setCollateralTokenData( + address token, + uint16 initialLT, + uint16 finalLT, uint40 timestampRampStart, uint24 rampDuration - ) internal { - tokenData.ltInitial = ltInitial; - tokenData.ltFinal = ltFinal; - tokenData.timestampRampStart = timestampRampStart; - tokenData.rampDuration = rampDuration; + ) external creditConfiguratorOnly { + if (token == underlying) { + ltUnderlying = initialLT; // F:[CM-47] + } else { + uint256 tokenMask = getTokenMaskOrRevert(token); + CollateralTokenData storage tokenData = collateralTokensData[tokenMask]; - collateralTokensData[tokenMask] = tokenData; + tokenData.ltInitial = initialLT; + tokenData.ltFinal = finalLT; + tokenData.timestampRampStart = timestampRampStart; + tokenData.rampDuration = rampDuration; + } } /// @dev Sets the limited token mask @@ -1503,6 +1188,10 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, /// to disallow a particular target or adapter, since this would set values in respective /// mappings to address(0). function setContractAllowance(address adapter, address targetContract) external creditConfiguratorOnly { + if (targetContract == address(this) || adapter == address(this)) { + revert TargetContractNotAllowedException(); + } // F:[CC-13] + if (adapter != address(0)) { adapterToContract[adapter] = targetContract; // F:[CM-56] } @@ -1539,14 +1228,12 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, emit SetCreditConfigurator(_creditConfigurator); // F:[CM-58] } - function _checkEnabledTokenLength(uint256 enabledTokenMask) internal view { - uint256 totalTokensEnabled = enabledTokenMask.calcEnabledTokens(); - if (totalTokensEnabled > maxAllowedEnabledTokenLength) { - revert TooManyEnabledTokensException(); - } - } + /// ----------- /// + /// WITHDRAWALS /// + /// ----------- /// - function withdraw(address creditAccount, address to, address token, uint256 amount) + /// @inheritdoc ICreditManagerV3 + function scheduleWithdrawal(address creditAccount, address token, uint256 amount) external override creditFacadeOnly @@ -1554,32 +1241,53 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, { uint256 tokenMask = getTokenMaskOrRevert(token); - uint256 balanceBefore = _balanceOf(token, address(withdrawManager)); + uint256 delivered = + ICreditAccount(creditAccount).safeTransferDeliveredBalanceControl(token, address(withdrawalManager), amount); - _creditAccountSafeTransfer(creditAccount, token, address(withdrawManager), amount); - withdrawManager.addDelayedWithdrawal( - creditAccount, to, token, tokenMask, _balanceOf(token, address(withdrawManager)) - balanceBefore - ); + withdrawalManager.addScheduledWithdrawal(creditAccount, token, delivered, tokenMask.calcIndex()); - _enableWithdrawalFlag(creditAccount); + /// @dev enables withdrawal flag + creditAccountInfo[creditAccount].flags |= WITHDRAWAL_FLAG; // We need to disable empty tokens in case they could be forbidden, to finally eliminate them - if (_balanceOf(token, creditAccount) <= 1) { + if (IERC20(token)._balanceOf(creditAccount) <= 1) { tokensToDisable = tokenMask; } } - function cancelWithdrawals(address creditAccount, CancellationType ctype) + /// @inheritdoc ICreditManagerV3 + function claimWithdrawals(address creditAccount, address to, ClaimAction action) external override creditFacadeOnly returns (uint256 tokensToEnable) { - if (hasWithdrawalValue(creditAccount)) { - return withdrawManager.cancelWithdrawals(creditAccount, ctype); + if (_hasWithdrawals(creditAccount)) { + bool hasScheduled; + (hasScheduled, tokensToEnable) = withdrawalManager.claimScheduledWithdrawals(creditAccount, to, action); + if (!hasScheduled) { + /// @dev disables withdrawal flag + creditAccountInfo[creditAccount].flags &= ~WITHDRAWAL_FLAG; + } } } + function _hasWithdrawals(address creditAccount) internal view returns (bool) { + return creditAccountInfo[creditAccount].flags & WITHDRAWAL_FLAG != 0; + } + + function _calcCancellableWithdrawalsValue(IPriceOracleV2 _priceOracle, address creditAccount, bool isForceCancel) + internal + view + returns (uint256 withdrawalsValueUSD) + { + (address token1, uint256 amount1, address token2, uint256 amount2) = + withdrawalManager.cancellableScheduledWithdrawals(creditAccount, isForceCancel); + + if (amount1 > 0) withdrawalsValueUSD += _convertToUSD(_priceOracle, amount1, token1); + if (amount2 > 0) withdrawalsValueUSD += _convertToUSD(_priceOracle, amount2, token2); + } + /// @notice Revokes allowances for specified spender/token pairs /// @param revocations Spender/token pairs to revoke allowances for function revokeAdapterAllowances(address creditAccount, RevocationPair[] calldata revocations) @@ -1604,7 +1312,7 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, } /// - function setCaForExternalCall(address creditAccount) external override creditFacadeOnly { + function setCreditAccountForExternalCall(address creditAccount) external override creditFacadeOnly { _externalCallCreditAccount = creditAccount; } @@ -1613,28 +1321,28 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, if (creditAccount == address(1)) revert ExternalCallCreditAccountNotSetException(); } - function enabledTokensMap(address creditAccount) public view override returns (uint256) { + function enabledTokensMaskOf(address creditAccount) public view override returns (uint256) { return uint256(creditAccountInfo[creditAccount].enabledTokensMask); } - function _saveEnabledTokenMask(address creditAccount, uint256 enabledTokenMask) internal { - if (enabledTokenMask > type(uint248).max) { - revert IncorrectParameterException(); - } - _checkEnabledTokenLength(enabledTokenMask); - creditAccountInfo[creditAccount].enabledTokensMask = uint248(enabledTokenMask); + function flagsOf(address creditAccount) external view override returns (uint16) { + return creditAccountInfo[creditAccount].flags; } - function hasWithdrawalValue(address creditAccount) internal view returns (bool) { - return creditAccountInfo[creditAccount].flags & WITHDRAWAL_FLAG != 0; - } - - function _enableWithdrawalFlag(address creditAccount) internal { - creditAccountInfo[creditAccount].flags |= WITHDRAWAL_FLAG; + function setFlagFor(address creditAccount, uint16 flag, bool value) external override creditFacadeOnly { + if (value) { + creditAccountInfo[creditAccount].flags |= flag; + } else { + creditAccountInfo[creditAccount].flags &= ~flag; + } } - function disableWithdrawalFlag(address creditAccount) external override withdrawManagerOnly { - creditAccountInfo[creditAccount].flags &= ~WITHDRAWAL_FLAG; + function _saveEnabledTokensMask(address creditAccount, uint256 enabledTokensMask) internal { + if (enabledTokensMask > type(uint248).max) { + revert IncorrectParameterException(); + } + _checkEnabledTokenLength(enabledTokensMask); + creditAccountInfo[creditAccount].enabledTokensMask = uint248(enabledTokensMask); } function _convertFromUSD(IPriceOracleV2 _priceOracle, uint256 amountInUSD, address token) @@ -1653,13 +1361,18 @@ contract CreditManagerV3 is ICreditManagerV3, SanityCheckTrait, ReentrancyGuard, amountInUSD = _priceOracle.convertToUSD(amountInToken, token); } - // - // FEE TOKEN SUPPORT + /// + /// FEE TOKEN SUPPORT + /// function _amountWithFee(uint256 amount) internal view virtual returns (uint256) { return amount; } + function _amountMinusFee(uint256 amount) internal view virtual returns (uint256) { + return amount; + } + // CREDIT ACCOUNTS function creditAccounts() external view returns (address[] memory) { return creditAccountsSet.values(); diff --git a/contracts/factories/CreditManagerFactory.sol b/contracts/factories/CreditManagerFactory.sol index dbf51b70..0f3812bc 100644 --- a/contracts/factories/CreditManagerFactory.sol +++ b/contracts/factories/CreditManagerFactory.sol @@ -7,7 +7,7 @@ import "@openzeppelin/contracts/utils/Create2.sol"; import {CreditManagerV3} from "../credit/CreditManagerV3.sol"; import {CreditFacadeV3} from "../credit/CreditFacadeV3.sol"; -import {CreditConfigurator, CreditManagerOpts} from "../credit/CreditConfigurator.sol"; +import {CreditConfigurator, CreditManagerOpts} from "../credit/CreditConfiguratorV3.sol"; /// @title CreditManagerFactory /// @notice Deploys 3 core interdependent contracts: CreditManage, CreditFacadeV3 and CredigConfigurator @@ -18,7 +18,7 @@ contract CreditManagerFactory { CreditConfigurator public creditConfigurator; constructor(address _pool, CreditManagerOpts memory opts, bytes32 salt) { - creditManager = new CreditManagerV3(_pool, opts.withdrawManager); + creditManager = new CreditManagerV3(_pool, opts.withdrawalManager); creditFacade = new CreditFacadeV3( address(creditManager), opts.degenNFT, diff --git a/contracts/interfaces/IAccountFactory.sol b/contracts/interfaces/IAccountFactory.sol index 0dda2106..bb104085 100644 --- a/contracts/interfaces/IAccountFactory.sol +++ b/contracts/interfaces/IAccountFactory.sol @@ -5,9 +5,20 @@ pragma solidity ^0.8.17; import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; +enum TakeAccountAction { + TAKE_USED_ONE, + DEPLOY_NEW_ONE +} + interface IAccountFactoryEvents { /// @dev Emits when a new Credit Account is created - event NewCreditAccount(address indexed account); + event DeployCreditAccount(address indexed creditAccount); + + event ReuseCreditAccount(address indexed creditAccount); + + event ReturnCreditAccount(address indexed creditAccount); + + event AddCreditManager(address indexed creditManager); } interface IAccountFactory is IAccountFactoryEvents, IVersion { diff --git a/contracts/interfaces/IControllerTimelock.sol b/contracts/interfaces/IControllerTimelock.sol new file mode 100644 index 00000000..a600c0df --- /dev/null +++ b/contracts/interfaces/IControllerTimelock.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +struct QueuedTransactionData { + bool queued; + address target; + uint40 eta; + string signature; + bytes data; +} + +interface IControllerTimelockEvents { + /// @dev Emits when the admin of the controller is updated + event SetAdmin(address indexed newAdmin); + + /// @dev Emits when the veto admin of the controller is updated + event SetVetoAdmin(address indexed newAdmin); + + /// @dev Emits when the delay is changed + event SetDelay(uint256 newDelay); + + /// @dev Emits when a transaction is queued + event QueueTransaction(bytes32 indexed txHash, address target, string signature, bytes data, uint40 eta); + + /// @dev Emits when a transaction is executed + event ExecuteTransaction(bytes32 indexed txHash); + + /// @dev Emits when a transaction is cancelled + event CancelTransaction(bytes32 indexed txHash); +} + +interface IControllerTimelockErrors { + /// @dev Thrown when the access-restricted function is called by other than the admin + error CallerNotAdminException(); + + /// @dev Thrown when the access-restricted function is called by other than the veto admin + error CallerNotVetoAdminException(); + + /// @dev Thrown when the new parameter values do not satisfy required conditions + error ParameterChecksFailedException(); + + /// @dev Thrown when attempting to execute a non-queued transaction + error TxNotQueuedException(); + + /// @dev Thrown when attempting to execute a transaction that is either immature or stale + error TxExecutedOutsideTimeWindowException(); + + /// @dev Thrown when execution of a transaction fails + error TxExecutionRevertedException(); +} + +interface IControllerTimelock is IControllerTimelockErrors, IControllerTimelockEvents { + /// @dev Queues a transaction to set a new expiration date in the Credit Facade + /// @param creditManager Adress of CM to update the expiration date for + /// @param expirationDate The new expiration date + function setExpirationDate(address creditManager, uint40 expirationDate) external; + + /// @dev Queues a transaction to set a new limiter value in a price feed + /// @param priceFeed The price feed to update the limiter in + /// @param lowerBound The new limiter lower bound value + function setLPPriceFeedLimiter(address priceFeed, uint256 lowerBound) external; + + /// @dev Queues a transaction to set a new max debt per block multiplier + /// @param creditManager Adress of CM to update the multiplier for + /// @param multiplier The new multiplier value + function setMaxDebtPerBlockMultiplier(address creditManager, uint8 multiplier) external; + + /// @dev Queues a transaction to set a new max debt per block multiplier + /// @param creditManager Adress of CM to update the limits for + /// @param minDebt The minimal debt amount + /// @param maxDebt The maximal debt amount + function setDebtLimits(address creditManager, uint128 minDebt, uint128 maxDebt) external; + + /// @dev Queues a transaction to set a new debt limit for the Credit Manager + /// @param creditManager Adress of CM to update the debt limit for + /// @param debtLimit The new debt limit + function setCreditManagerDebtLimit(address creditManager, uint256 debtLimit) external; + + /// @dev Queues a transaction to start a liquidation threshold ramp + /// @param creditManager Adress of CM to update the LT for + /// @param token Token to ramp the LT for + /// @param liquidationThresholdFinal The liquidation threshold value after the ramp + /// @param rampDuration Duration of the ramp + function rampLiquidationThreshold( + address creditManager, + address token, + uint16 liquidationThresholdFinal, + uint24 rampDuration + ) external; + + /// @dev Sets the transaction's queued status as false, effectively cancelling it + /// @param txHash Hash of the transaction to be cancelled + function cancelTransaction(bytes32 txHash) external; + + /// @dev Executes a queued transaction + /// @param txHash Hash of the transaction to be executed + function executeTransaction(bytes32 txHash) external; +} diff --git a/contracts/interfaces/ICreditAccount.sol b/contracts/interfaces/ICreditAccount.sol new file mode 100644 index 00000000..fa369ba8 --- /dev/null +++ b/contracts/interfaces/ICreditAccount.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; + +interface ICreditAccount is IVersion { + /// @dev Transfers tokens from the credit account to a provided address. Restricted to the current Credit Manager only. + /// @param token Token to be transferred from the Credit Account. + /// @param to Address of the recipient. + /// @param amount Amount to be transferred. + function safeTransfer(address token, address to, uint256 amount) external; + + /// @dev Executes a call to a 3rd party contract with provided data. Restricted to the current Credit Manager only. + /// @param destination Contract address to be called. + /// @param data Data to call the contract with. + function execute(address destination, bytes memory data) external returns (bytes memory); + + /// @dev Returns the address of the currently connected Credit Manager + function creditManager() external view returns (address); +} diff --git a/contracts/interfaces/ICreditConfigurator.sol b/contracts/interfaces/ICreditConfiguratorV3.sol similarity index 96% rename from contracts/interfaces/ICreditConfigurator.sol rename to contracts/interfaces/ICreditConfiguratorV3.sol index 92be9800..3d5e5ec2 100644 --- a/contracts/interfaces/ICreditConfigurator.sol +++ b/contracts/interfaces/ICreditConfiguratorV3.sol @@ -32,7 +32,7 @@ struct CreditManagerOpts { /// @dev Address of DegenNFT, address(0) if whitelisted mode is not used address degenNFT; /// @dev Address of BlacklistHelper, address(0) if the underlying is not blacklistable - address withdrawManager; + address withdrawalManager; /// @dev Whether the Credit Manager is connected to an expirable pool (and the CreditFacadeV3 is expirable) bool expirable; } @@ -142,6 +142,12 @@ interface ICreditConfigurator is ICreditConfiguratorEvents, IVersion { /// @param liquidationThreshold in PERCENTAGE_FORMAT (100% = 10000) function setLiquidationThreshold(address token, uint16 liquidationThreshold) external; + /// @dev Schedules an LT ramping for any token except underlying + /// @param token Token to ramp LT for + /// @param liquidationThresholdFinal Liquidation threshold after ramping + /// @param rampDuration Duration of ramping + function rampLiquidationThreshold(address token, uint16 liquidationThresholdFinal, uint24 rampDuration) external; + /// @dev Allow a known collateral token if it was forbidden before. /// @param token Address of collateral token function allowToken(address token) external; diff --git a/contracts/interfaces/ICreditFacade.sol b/contracts/interfaces/ICreditFacade.sol index c2f7cc7e..f3a2c610 100644 --- a/contracts/interfaces/ICreditFacade.sol +++ b/contracts/interfaces/ICreditFacade.sol @@ -58,7 +58,7 @@ interface ICreditFacadeEvents { event TransferAccount(address indexed creditAccount, address indexed oldOwner, address indexed newOwner); /// @dev Emits when the user changes approval for account transfers to itself from another address - event AllowAccountTransfer(address indexed from, address indexed to, bool state); + event SetAccountTransferAllowance(address indexed from, address indexed to, bool state); } interface ICreditFacade is ICreditFacadeEvents, IVersion { @@ -73,10 +73,13 @@ interface ICreditFacade is ICreditFacadeEvents, IVersion { /// @param calls The array of MultiCall structs encoding the required operations. Generally must have /// at least a call to addCollateral, as otherwise the health check at the end will fail. /// @param referralCode Referral code which is used for potential rewards. 0 if no referral code provided - function openCreditAccount(uint256 debt, address onBehalfOf, MultiCall[] calldata calls, uint16 referralCode) - external - payable - returns (address creditAccount); + function openCreditAccount( + uint256 debt, + address onBehalfOf, + MultiCall[] calldata calls, + bool deployNewAccount, + uint16 referralCode + ) external payable returns (address creditAccount); /// @dev Runs a batch of transactions within a multicall and closes the account /// - Wraps ETH to WETH and sends it msg.sender if value > 0 @@ -160,7 +163,7 @@ interface ICreditFacade is ICreditFacadeEvents, IVersion { /// @param state True is transfer is allowed, false if forbidden function approveAccountTransfer(address from, bool state) external; - // /// @dev Enables token in enabledTokenMask for the Credit Account of msg.sender + // /// @dev Enables token in enabledTokensMask for the Credit Account of msg.sender // /// @param token Address of token to enable // function enableToken(address token) external; @@ -171,6 +174,8 @@ interface ICreditFacade is ICreditFacadeEvents, IVersion { /// @param to Address to transfer the account to function transferAccountOwnership(address creditAccount, address to) external; + function claimWithdrawals(address creditAccount, address to) external; + // // GETTERS // @@ -208,4 +213,7 @@ interface ICreditFacade is ICreditFacadeEvents, IVersion { /// In the interest of fairness, emergency liquidators do not receive a premium /// And are compensated by the Gearbox DAO separately. function canLiquidateWhilePaused(address) external view returns (bool); + + /// @dev Timestamp at which accounts on an expirable CM will be liquidated + function expirationDate() external view returns (uint40); } diff --git a/contracts/interfaces/ICreditFacadeMulticall.sol b/contracts/interfaces/ICreditFacadeMulticall.sol index 43a3414a..5c36ce03 100644 --- a/contracts/interfaces/ICreditFacadeMulticall.sol +++ b/contracts/interfaces/ICreditFacadeMulticall.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.10; import {Balance} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; -import {QuotaUpdate} from "./IPoolQuotaKeeper.sol"; import {RevocationPair} from "./ICreditManagerV3.sol"; uint256 constant ADD_COLLATERAL_PERMISSION = 1; @@ -13,13 +12,13 @@ uint256 constant DECREASE_DEBT_PERMISSION = 2 ** 2; uint256 constant ENABLE_TOKEN_PERMISSION = 2 ** 3; uint256 constant DISABLE_TOKEN_PERMISSION = 2 ** 4; uint256 constant WITHDRAW_PERMISSION = 2 ** 5; -uint256 constant UPDATE_QUOTAS_PERMISSION = 2 ** 6; +uint256 constant UPDATE_QUOTA_PERMISSION = 2 ** 6; uint256 constant REVOKE_ALLOWANCES_PERMISSION = 2 ** 7; uint256 constant EXTERNAL_CALLS_PERMISSION = 2 ** 16; uint256 constant ALL_CREDIT_FACADE_CALLS_PERMISSION = ADD_COLLATERAL_PERMISSION | INCREASE_DEBT_PERMISSION | DECREASE_DEBT_PERMISSION | ENABLE_TOKEN_PERMISSION | DISABLE_TOKEN_PERMISSION | WITHDRAW_PERMISSION - | UPDATE_QUOTAS_PERMISSION | REVOKE_ALLOWANCES_PERMISSION; + | UPDATE_QUOTA_PERMISSION | REVOKE_ALLOWANCES_PERMISSION; uint256 constant ALL_PERMISSIONS = ALL_CREDIT_FACADE_CALLS_PERMISSION | EXTERNAL_CALLS_PERMISSION; @@ -38,7 +37,7 @@ interface ICreditFacadeMulticall { /// itself and can only be used within a multicall function revertIfReceivedLessThan(Balance[] memory expected) external; - /// @dev Enables token in enabledTokenMask for the Credit Account of msg.sender + /// @dev Enables token in enabledTokensMask for the Credit Account of msg.sender /// @param token Address of token to enable function enableToken(address token) external; @@ -70,9 +69,8 @@ interface ICreditFacadeMulticall { /// @param amount Amount to increase borrowed amount function decreaseDebt(uint256 amount) external; - /// @dev Update msg.sender's Credit Account quotas for multiple tokens - /// @param quotaUpdates Requested quota updates, see `QuotaUpdate` - function updateQuotas(QuotaUpdate[] memory quotaUpdates) external; + /// @dev Update msg.sender's Credit Account quota + function updateQuota(address token, int96 quotaChange) external; /// @dev Set collateral hints for a full check /// @param collateralHints Array of token mask in the desired order of checking @@ -80,7 +78,7 @@ interface ICreditFacadeMulticall { /// Cannot be lower than PERCENTAGE_FACTOR. function setFullCheckParams(uint256[] memory collateralHints, uint16 minHealthFactor) external; - function withdraw(address to, address token, uint256 amount) external; + function scheduleWithdrawal(address token, uint256 amount) external; function revokeAdapterAllowances(RevocationPair[] calldata revocations) external; } diff --git a/contracts/interfaces/ICreditManagerV3.sol b/contracts/interfaces/ICreditManagerV3.sol index cfdf9231..0618e2b8 100644 --- a/contracts/interfaces/ICreditManagerV3.sol +++ b/contracts/interfaces/ICreditManagerV3.sol @@ -4,9 +4,9 @@ pragma solidity ^0.8.10; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; -import {IPoolQuotaKeeper, QuotaUpdate, TokenLT} from "./IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper} from "./IPoolQuotaKeeper.sol"; +import {ClaimAction, IWithdrawalManager} from "./IWithdrawalManager.sol"; import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; -import {CancellationType} from "./IWithdrawManager.sol"; enum ClosureAction { CLOSE_ACCOUNT, @@ -20,16 +20,37 @@ enum ManageDebtAction { } uint8 constant WITHDRAWAL_FLAG = 1; +uint8 constant BOT_PERMISSIONS_SET_FLAG = 1 << 1; struct CreditAccountInfo { uint256 debt; - uint256 cumulativeIndexAtOpen; + uint256 cumulativeIndexLastUpdate; uint256 cumulativeQuotaInterest; - uint8 flags; - uint248 enabledTokensMask; + uint256 enabledTokensMask; + uint16 flags; address borrower; } +enum CollateralCalcTask { + DEBT_ONLY, + DEBT_COLLATERAL_WITHOUT_WITHDRAWALS, + DEBT_COLLATERAL_CANCEL_WITHDRAWALS, + DEBT_COLLATERAL_FORCE_CANCEL_WITHDRAWALS +} + +struct CollateralDebtData { + uint256 debt; + uint256 accruedInterest; + uint256 accruedFees; + uint256 totalValue; + uint256 totalValueUSD; + uint256 twvUSD; + uint16 hf; + uint256 enabledTokensMask; + address[] quotedTokens; + bool isLiquidatable; +} + struct CollateralTokenData { address token; uint16 ltInitial; @@ -62,7 +83,7 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @dev Opens credit account and borrows funds from the pool. /// @param debt Amount to be borrowed by the Credit Account /// @param onBehalfOf The owner of the newly opened Credit Account - function openCreditAccount(uint256 debt, address onBehalfOf) external returns (address); + function openCreditAccount(uint256 debt, address onBehalfOf, bool deployNew) external returns (address); /// @dev Closes a Credit Account - covers both normal closure and liquidation /// - Checks whether the contract is paused, and, if so, if the payer is an emergency liquidator. @@ -83,22 +104,19 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// - If convertWETH is true, the function converts WETH into ETH before sending /// - Returns the Credit Account back to factory /// - /// @param borrower Borrower address - /// @param closureActionType Whether the account is closed, liquidated or liquidated due to expiry - /// @param totalValue Portfolio value for liqution, 0 for ordinary closure + /// @param creditAccount Credit account address + /// @param closureAction Whether the account is closed, liquidated or liquidated due to expiry /// @param payer Address which would be charged if credit account has not enough funds to cover amountToPool /// @param to Address to which the leftover funds will be sent - /// @param skipTokenMask Tokenmask contains 1 for tokens which needed to be skipped for sending + /// @param skipTokensMask Tokenmask contains 1 for tokens which needed to be skipped for sending /// @param convertWETH If true converts WETH to ETH function closeCreditAccount( - address borrower, - ClosureAction closureActionType, - uint256 totalValue, + address creditAccount, + ClosureAction closureAction, + CollateralDebtData memory collateralDebtData, address payer, address to, - uint256 enabledTokenMask, - uint256 skipTokenMask, - uint256 debtWithInterest, + uint256 skipTokensMask, bool convertWETH ) external returns (uint256 remainingFunds, uint256 loss); @@ -117,10 +135,10 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @param creditAccount Address of the Credit Account to change debt for /// @param amount Amount to increase / decrease the principal by /// @param action Increase/decrease - /// @return newdebt The new debt principal - function manageDebt(address creditAccount, uint256 amount, uint256 _enabledTokensMask, ManageDebtAction action) + // @return newdebt The new debt principal + function manageDebt(address creditAccount, uint256 amount, uint256 enabledTokensMask, ManageDebtAction action) external - returns (uint256 newdebt, uint256 enableTokenMask); + returns (uint256 newDebt, uint256 tokensToEnable, uint256 tokensToDisable); /// @dev Adds collateral to borrower's credit account /// @param payer Address of the account which will be charged to provide additional collateral @@ -157,7 +175,7 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @param minHealthFactor Minimal health factor of the account, in PERCENTAGE format function fullCollateralCheck( address creditAccount, - uint256 enabledTokenMaskBefore, + uint256 enabledTokensMaskBefore, uint256[] memory collateralHints, uint16 minHealthFactor ) external; @@ -166,10 +184,9 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { // QUOTAS MANAGEMENT // - /// @dev Updates credit account's quotas for multiple tokens + /// @dev Updates credit account's quotas /// @param creditAccount Address of credit account - /// @param quotaUpdates Requested quota updates, see `QuotaUpdate` - function updateQuotas(address creditAccount, QuotaUpdate[] memory quotaUpdates) + function updateQuota(address creditAccount, address token, int96 quotaChange) external returns (uint256 tokensToEnable, uint256 tokensToDisable); @@ -182,41 +199,11 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @return borrower Borrower's address function getBorrowerOrRevert(address creditAccount) external view returns (address borrower); - /// @dev Computes amounts that must be sent to various addresses before closing an account - /// @param totalValue Credit Accounts total value in underlying - /// @param closureActionType Type of account closure - /// * CLOSE_ACCOUNT: The account is healthy and is closed normally - /// * LIQUIDATE_ACCOUNT: The account is unhealthy and is being liquidated to avoid bad debt - /// * LIQUIDATE_EXPIRED_ACCOUNT: The account has expired and is being liquidated (lowered liquidation premium) - /// * LIQUIDATE_PAUSED: The account is liquidated while the system is paused due to emergency (no liquidation premium) - /// @param debt Credit Account's debt principal - /// @param debtWithInterest Credit Account's debt principal + interest - /// @return amountToPool Amount of underlying to be sent to the pool - /// @return remainingFunds Amount of underlying to be sent to the borrower (only applicable to liquidations) - /// @return profit Protocol's profit from fees (if any) - /// @return loss Protocol's loss from bad debt (if any) - function calcClosePayments( - uint256 totalValue, - ClosureAction closureActionType, - uint256 debt, - uint256 debtWithInterest - ) external view returns (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss); - - /// @dev Calculates the debt accrued by a Credit Account - /// @param creditAccount Address of the Credit Account - /// @return debt The debt principal - /// @return debtWithInterest The debt principal + accrued interest - /// @return debtWithInterestAndFees The debt principal + accrued interest and protocol fees - function calcCreditAccountAccruedInterest(address creditAccount) - external - view - returns (uint256 debt, uint256 debtWithInterest, uint256 debtWithInterestAndFees); - /// @dev Maps Credit Accounts to bit masks encoding their enabled token sets /// Only enabled tokens are counted as collateral for the Credit Account /// @notice An enabled token mask encodes an enabled token by setting /// the bit at the position equal to token's index to 1 - function enabledTokensMap(address creditAccount) external view returns (uint256); + function enabledTokensMaskOf(address creditAccount) external view returns (uint256); /// @dev Returns the collateral token at requested index and its liquidation threshold /// @param id The index of token to return @@ -230,7 +217,7 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { returns (address token, uint16 liquidationThreshold); /// @dev Returns the array of quoted tokens that are enabled on the account - function getQuotedTokens(address creditAccount) external view returns (TokenLT[] memory tokens); + function getQuotedTokens(address creditAccount) external view returns (address[] memory tokens); /// @dev Total number of known collateral tokens. function collateralTokensCount() external view returns (uint8); @@ -307,16 +294,19 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @dev Address of the connected Price Oracle function priceOracle() external view returns (IPriceOracleV2); - function calcTotalValue(address creditAccount) + function calcDebtAndCollateral(address creditAccount, CollateralCalcTask task) external view - returns (uint256 enabledTokenMask, uint256 total, uint256 twv, uint256 debtWithInterest, bool canBeLiquidated); + returns (CollateralDebtData memory collateralDebtData); + + /// @dev Withdrawal manager + function withdrawalManager() external view returns (IWithdrawalManager); - function withdraw(address creditAccount, address borrower, address token, uint256 amount) + function scheduleWithdrawal(address creditAccount, address token, uint256 amount) external returns (uint256 tokensToDisable); - function cancelWithdrawals(address creditAccount, CancellationType ctype) + function claimWithdrawals(address creditAccount, address to, ClaimAction action) external returns (uint256 tokensToEnable); @@ -324,11 +314,13 @@ interface ICreditManagerV3 is ICreditManagerV3Events, IVersion { /// @param revocations Spender/token pairs to revoke allowances for function revokeAdapterAllowances(address creditAccount, RevocationPair[] calldata revocations) external; - function disableWithdrawalFlag(address creditAccount) external; - - function setCaForExternalCall(address creditAccount) external; + function setCreditAccountForExternalCall(address creditAccount) external; function externalCallCreditAccountOrRevert() external view returns (address creditAccount); function getTokenByMask(uint256 tokenMask) external view returns (address token); + + function flagsOf(address creditAccount) external view returns (uint16); + + function setFlagFor(address creditAccount, uint16 flag, bool value) external; } diff --git a/contracts/interfaces/IExceptions.sol b/contracts/interfaces/IExceptions.sol index 46124e8b..7ce8562f 100644 --- a/contracts/interfaces/IExceptions.sol +++ b/contracts/interfaces/IExceptions.sol @@ -62,7 +62,7 @@ error CallerNotControllerException(); error CallerNotPausableAdminException(); /// @dev Thrown on attempting to pause a contract as a non-Unpausable admin -error CallerNotUnPausableAdminException(); +error CallerNotUnpausableAdminException(); /// @dev Thrown when a gauge-only function is called by non-gauge error CallerNotGaugeException(); @@ -77,6 +77,9 @@ error CallerNotVoterException(); /// the connected Credit Facade, or an allowed adapter error CallerNotAdapterException(); +/// @dev Thrown if an access-restricted function is called by an address that is not withdrawal manager +error CallerNotWithdrawalManagerException(); + /// interface ICreditConfiguratorExceptions { /// @dev Thrown if the underlying's LT is set directly @@ -227,7 +230,8 @@ error LiquiditySanityCheckException(); error ZeroCallsException(); -error NoFreeQithdrawalSlotsException(); +/// @dev Thrown when attempting to schedule withdrawal from a credit account that has no free withdrawal slots +error NoFreeWithdrawalSlotsException(); error NoPermissionException(uint256 permission); diff --git a/contracts/interfaces/IPool4626.sol b/contracts/interfaces/IPool4626.sol index 28802955..b1e37317 100644 --- a/contracts/interfaces/IPool4626.sol +++ b/contracts/interfaces/IPool4626.sol @@ -2,19 +2,12 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; +pragma abicoder v1; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol"; import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; -struct Pool4626Opts { - address addressProvider; - address underlyingToken; - address interestRateModel; - uint256 expectedLiquidityLimit; - bool supportsQuotas; -} - interface IPool4626Events { /// @dev Emits on new liquidity being added to the pool event DepositWithReferral(address indexed sender, address indexed onBehalfOf, uint256 amount, uint16 referralCode); diff --git a/contracts/interfaces/IPoolQuotaKeeper.sol b/contracts/interfaces/IPoolQuotaKeeper.sol index 4137d08e..d122c845 100644 --- a/contracts/interfaces/IPoolQuotaKeeper.sol +++ b/contracts/interfaces/IPoolQuotaKeeper.sol @@ -6,19 +6,6 @@ pragma solidity ^0.8.10; import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; import {IPool4626} from "./IPool4626.sol"; -/// @notice Quota update params -/// @param token Address of the token to change the quota for -/// @param quotaChange Requested quota change in pool's underlying asset units -struct QuotaUpdate { - address token; - int96 quotaChange; -} - -struct TokenLT { - address token; - uint16 lt; -} - struct TokenQuotaParams { uint96 totalQuoted; uint96 limit; @@ -55,24 +42,21 @@ interface IPoolQuotaKeeperEvents { interface IPoolQuotaKeeper is IPoolQuotaKeeperEvents, IVersion { /// @dev Updates credit account's quotas for multiple tokens /// @param creditAccount Address of credit account - /// @param quotaUpdates Requested quota updates, see `QuotaUpdate` - function updateQuotas(address creditAccount, QuotaUpdate[] memory quotaUpdates) + /// @param token Address of the token to change the quota for + /// @param quotaChange Requested quota change in pool's underlying asset units + function updateQuota(address creditAccount, address token, int96 quotaChange) external - returns (uint256 caQuotaInterestChange, uint256 tokensToEnable, uint256 tokensToDisable); + returns (uint256 caQuotaInterestChange, bool enableToken, bool disableToken); /// @dev Updates all quotas to zero when closing a credit account, and computes the final quota interest change /// @param creditAccount Address of the Credit Account being closed - /// @param tokensLT Array of all active quoted tokens on the account - function removeQuotas(address creditAccount, TokenLT[] memory tokensLT) external; - - /// @dev Sets limits for a number of tokens to zero, preventing further quota increases - /// @notice Triggered by the Credit Manager when there is loss during liquidation - function setLimitsToZero(TokenLT[] memory tokensLT) external; + /// @param tokens Array of all active quoted tokens on the account + function removeQuotas(address creditAccount, address[] memory tokens, bool setLimitsToZero) external; /// @dev Computes the accrued quota interest and updates interest indexes /// @param creditAccount Address of the Credit Account to accrue interest for - /// @param tokensLT Array of all active quoted tokens on the account - function accrueQuotaInterest(address creditAccount, TokenLT[] memory tokensLT) + /// @param tokens Array of all active quoted tokens on the account + function accrueQuotaInterest(address creditAccount, address[] memory tokens) external returns (uint256 caQuotaInterestChange); @@ -107,21 +91,21 @@ interface IPoolQuotaKeeper is IPoolQuotaKeeperEvents, IVersion { function isQuotedToken(address token) external view returns (bool); /// @dev Returns quota parameters for a single (account, token) pair - function getQuota(address creditManager, address creditAccount, address token) + function getQuota(address creditAccount, address token) external view - returns (AccountQuota memory); + returns (uint96 quota, uint192 cumulativeIndexLU); /// @dev Computes collateral value for quoted tokens on the account, as well as accrued quota interest function computeQuotedCollateralUSD( - address creditManager, address creditAccount, address _priceOracle, - TokenLT[] memory tokens + address[] memory tokens, + uint256[] memory lts ) external view returns (uint256 totalValue, uint256 twv, uint256 totalQuotaInterest); /// @dev Computes outstanding quota interest - function outstandingQuotaInterest(address creditManager, address creditAccount, TokenLT[] memory tokens) + function outstandingQuotaInterest(address creditAccount, address[] memory tokens) external view returns (uint256 caQuotaInterestChange); diff --git a/contracts/interfaces/IWithdrawManager.sol b/contracts/interfaces/IWithdrawManager.sol deleted file mode 100644 index cc153249..00000000 --- a/contracts/interfaces/IWithdrawManager.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: MIT -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; - -enum CancellationType { - RETURN_FUNDS, - PUSH_WITHDRAWALS -} - -interface IWithdrawManagerEvents { - /// @dev Emitted when a borrower's claimable balance is increased - event IncreaseClaimableBalance(address indexed token, address indexed holder, uint256 amount); - - /// @dev Emitted when a borrower claims their tokens - event Claim(address indexed token, address indexed holder, address to, uint256 amount); - - /// @dev Emitted when a Credit Facade is added to BlacklistHelper - event CreditFacadeAdded(address indexed creditFacade); - - /// @dev Emitted when a Credit Facade is removed from BlacklistHelper - event CreditFacadeRemoved(address indexed creditFacade); - - event ScheduleDelayedWithdrawal(address indexed to, address indexed token, uint256 amount, uint256 availableAt); - - event CancelDelayedWithdrawal(address indexed to, address indexed token, uint256 amount); - - event PayDelayedWithdrawal(address indexed to, address indexed token, uint256 amount); -} - -interface IWithdrawManager is IWithdrawManagerEvents, IVersion { - /// @dev Transfers the sender's claimable balance of token to the specified address - function claim(address token, address to) external; - - function addImmediateWithdrawal( - address to, - address token, - uint256 amount // add check amount >0 - ) external; - - function addDelayedWithdrawal(address creditAccount, address to, address token, uint256 tokenMask, uint256 amount) - external; - - /// @dev Returns the amount claimable by an account - /// @param token token the get the amount for - /// @param holder Acccount to to get the amount for - function claimable(address holder, address token) external view returns (uint256); - - function cancelWithdrawals(address creditAccount, CancellationType ctype) - external - returns (uint256 tokensToEnable); - - function getWithdrawals(address creditManager, address creditAccount) - external - view - returns (uint256 tokenMask1, uint256 amount1, uint256 tokenMask2, uint256 amount2); -} diff --git a/contracts/interfaces/IWithdrawalManager.sol b/contracts/interfaces/IWithdrawalManager.sol new file mode 100644 index 00000000..7411e43e --- /dev/null +++ b/contracts/interfaces/IWithdrawalManager.sol @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {IVersion} from "@gearbox-protocol/core-v2/contracts/interfaces/IVersion.sol"; + +/// @notice Withdrawal claim type +/// - `CLAIM` only claims mature withdrawals to specified address +/// - `CANCEL` also claims mature withdrawals but cancels immature ones +/// - `FORCE_CLAIM` claims both mature and immature withdrawals +/// - `FORCE_CANCEL` cancels both mature and immature withdrawals +enum ClaimAction { + CLAIM, + CANCEL, + FORCE_CLAIM, + FORCE_CANCEL +} + +/// @notice Scheduled withdrawal data +/// @param tokenIndex Collateral index of withdrawn token in account's credit manager +/// @param maturity Timestamp after which withdrawal can be claimed +/// @param token Token to withdraw +/// @param amount Amount to withdraw +struct ScheduledWithdrawal { + uint8 tokenIndex; + uint40 maturity; + address token; + uint256 amount; +} + +interface IWithdrawalManagerEvents { + /// @notice Emitted when new immediate withdrawal is added + /// @param account Account immediate withdrawal was added for + /// @param token Token to withdraw + /// @param amount Amount to withdraw + event AddImmediateWithdrawal(address indexed account, address indexed token, uint256 amount); + + /// @notice Emitted when immediate withdrawal is claimed + /// @param account Account that claimed tokens + /// @param token Token claimed + /// @param to Token recipient + /// @param amount Amount claimed + event ClaimImmediateWithdrawal(address indexed account, address indexed token, address to, uint256 amount); + + /// @notice Emitted when new scheduled withdrawal is added + /// @param creditAccount Account to withdraw from + /// @param token Token to withdraw + /// @param amount Amount to withdraw + /// @param maturity Timestamp after which withdrawal can be claimed + event AddScheduledWithdrawal(address indexed creditAccount, address indexed token, uint256 amount, uint40 maturity); + + /// @notice Emitted when scheduled withdrawal is cancelled + /// @param creditAccount Account the token is returned to + /// @param token Token returned + /// @param amount Amount returned + event CancelScheduledWithdrawal(address indexed creditAccount, address indexed token, uint256 amount); + + /// @notice Emitted when scheduled withdrawal is claimed + /// @param creditAccount Account withdrawal was made from + /// @param token Token claimed + /// @param to Token recipient + /// @param amount Amount claimed + event ClaimScheduledWithdrawal(address indexed creditAccount, address indexed token, address to, uint256 amount); + + /// @notice Emitted when new scheduled withdrawal delay is set by configurator + /// @param delay New delay for scheduled withdrawals + event SetWithdrawalDelay(uint40 delay); + + /// @notice Emitted when new credit manager status is set by configurator + /// @param creditManager Credit manager for which the status is set + /// @param status New status of the credit manager + event SetCreditManagerStatus(address indexed creditManager, bool status); +} + +interface IWithdrawalManager is IWithdrawalManagerEvents, IVersion { + /// --------------------- /// + /// IMMEDIATE WITHDRAWALS /// + /// --------------------- /// + + /// @notice Returns amount of token claimable by the account + function immediateWithdrawals(address account, address token) external view returns (uint256); + + /// @notice Adds new immediate withdrawal for the account + /// @param account Account to add immediate withdrawal for + /// @param token Token to withdraw + /// @param amount Amount to withdraw + /// @custom:expects Credit manager transferred `amount` of `token` to this contract prior to calling this function + function addImmediateWithdrawal(address account, address token, uint256 amount) external; + + /// @notice Claims `msg.sender`'s immediate withdrawal + /// @param token Token to claim + /// @param to Token recipient + function claimImmediateWithdrawal(address token, address to) external; + + /// --------------------- /// + /// SCHEDULED WITHDRAWALS /// + /// --------------------- /// + + /// @notice Delay for scheduled withdrawals + function delay() external view returns (uint40); + + /// @notice Returns withdrawals scheduled for a given credit account + /// @param creditAccount Account to get withdrawals for + /// @return withdrawals See `ScheduledWithdrawal` + function scheduledWithdrawals(address creditAccount) + external + view + returns (ScheduledWithdrawal[2] memory withdrawals); + + /// @notice Schedules withdrawal from the credit account + /// @param creditAccount Account to withdraw from + /// @param token Token to withdraw + /// @param amount Amount to withdraw + /// @param tokenIndex Collateral index of withdrawn token in account's credit manager + /// @custom:expects Credit manager transferred `amount` of `token` to this contract prior to calling this function + function addScheduledWithdrawal(address creditAccount, address token, uint256 amount, uint8 tokenIndex) external; + + /// @notice Claims scheduled withdrawals from the credit account + /// - Withdrawals are either sent to `to` or returned to `creditAccount` based on maturity and `action` + /// - If `to` is blacklisted in claimed token, scheduled withdrawal turns into immediate + /// @param creditAccount Account withdrawal was made from + /// @param to Address to send withdrawals to + /// @param action See `ClaimAction` + /// @return hasScheduled Whether account has at least one scheduled withdrawal after claiming + /// @return tokensToEnable Bit mask of returned tokens that should be enabled as account's collateral + function claimScheduledWithdrawals(address creditAccount, address to, ClaimAction action) + external + returns (bool hasScheduled, uint256 tokensToEnable); + + /// @notice Returns scheduled withdrawals from the credit account that can be cancelled + function cancellableScheduledWithdrawals(address creditAccount, bool isForceCancel) + external + view + returns (address token1, uint256 amount1, address token2, uint256 amount2); + + /// ------------- /// + /// CONFIGURATION /// + /// ------------- /// + + /// @notice Whether given address is a supported credit manager + function creditManagerStatus(address) external view returns (bool); + + /// @notice Sets delay for scheduled withdrawals, only affects new withdrawal requests + /// @param delay New delay for scheduled withdrawals + function setWithdrawalDelay(uint40 delay) external; + + /// @notice Sets status for the credit manager + /// @param creditManager Credit manager to set the status for + /// @param status New status of the credit manager + function setCreditManagerStatus(address creditManager, bool status) external; +} diff --git a/contracts/libraries/BitMask.sol b/contracts/libraries/BitMask.sol index 41c66b6b..270af61e 100644 --- a/contracts/libraries/BitMask.sol +++ b/contracts/libraries/BitMask.sol @@ -3,35 +3,79 @@ // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.17; +import {IncorrectParameterException} from "../interfaces/IExceptions.sol"; + uint256 constant UNDERLYING_TOKEN_MASK = 1; -/// @title Quota Library +/// @title BitMask library library BitMask { function calcIndex(uint256 mask) internal pure returns (uint8) { - require(mask > 0); - uint16 lb = 0; - uint16 ub = 256; - uint16 mid = 128; + if (mask == 0) revert IncorrectParameterException(); // U:[BM-1] + uint16 lb = 0; // U:[BM-2] + uint16 ub = 256; // U:[BM-2] + uint16 mid = 128; // U:[BM-2] unchecked { - while (1 << mid & mask == 0) { - if (1 << mid > mask) ub = mid; - else lb = mid; - mid = (lb + ub) / 2; + while (true) { + uint256 newMask = 1 << mid; + if (newMask & mask != 0) return uint8(mid); // U:[BM-2] + if (1 << mid > mask) ub = mid; // U:[BM-2] + + else lb = mid; // U:[BM-2] + mid = (lb + ub) >> 1; // U:[BM-2] } } - - return uint8(mid); } /// @dev Calculates the number of `1` bits - /// @param enabledTokenMask Bit mask to compute how many bits are set - function calcEnabledTokens(uint256 enabledTokenMask) internal pure returns (uint256 totalTokensEnabled) { + /// @param enabledTokensMask Bit mask to compute how many bits are set + function calcEnabledTokens(uint256 enabledTokensMask) internal pure returns (uint256 totalTokensEnabled) { unchecked { - while (enabledTokenMask > 0) { - totalTokensEnabled += enabledTokenMask & 1; - enabledTokenMask >>= 1; + while (enabledTokensMask > 0) { + totalTokensEnabled += enabledTokensMask & 1; // U:[BM-3] + enabledTokensMask >>= 1; // U:[BM-3] } } } + + function enable(uint256 enabledTokenMask, uint256 bitsToEnable) internal pure returns (uint256) { + return enabledTokenMask | bitsToEnable; // U:[BM-4] + } + + function disable(uint256 enabledTokenMask, uint256 bitsToDisable) internal pure returns (uint256) { + return enabledTokenMask & ~bitsToDisable; // U:[BM-4] + } + + function enableDisable(uint256 enabledTokensMask, uint256 bitsToEnable, uint256 bitsToDisable) + internal + pure + returns (uint256) + { + return (enabledTokensMask | bitsToEnable) & (~bitsToDisable); // U:[BM-5] + } + + function enable(uint256 enabledTokenMask, uint256 bitsToEnable, uint256 invertedSkipMask) + internal + pure + returns (uint256) + { + return enabledTokenMask | (bitsToEnable & invertedSkipMask); // U:[BM-6] + } + + function disable(uint256 enabledTokenMask, uint256 bitsToDisable, uint256 invertedSkipMask) + internal + pure + returns (uint256) + { + return enabledTokenMask & (~(bitsToDisable & invertedSkipMask)); // U:[BM-6] + } + + function enableDisable( + uint256 enabledTokensMask, + uint256 bitsToEnable, + uint256 bitsToDisable, + uint256 invertedSkipMask + ) internal pure returns (uint256) { + return (enabledTokensMask | (bitsToEnable & invertedSkipMask)) & (~(bitsToDisable & invertedSkipMask)); // U:[BM-7] + } } diff --git a/contracts/libraries/CreditAccountHelper.sol b/contracts/libraries/CreditAccountHelper.sol new file mode 100644 index 00000000..ce34cd3f --- /dev/null +++ b/contracts/libraries/CreditAccountHelper.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC20Helper} from "./IERC20Helper.sol"; + +import {ICreditAccount} from "../interfaces/ICreditAccount.sol"; +import {AllowanceFailedException} from "../interfaces/IExceptions.sol"; +/// @title CreditAccount Helper library + +library CreditAccountHelper { + using IERC20Helper for IERC20; + + function safeApprove(ICreditAccount creditAccount, address token, address spender, uint256 amount) internal { + if (!_approve(creditAccount, token, spender, amount, false)) { + _approve(creditAccount, token, spender, 0, true); // F: + _approve(creditAccount, token, spender, amount, true); + } + } + + /// @dev Internal function used to approve token from a Credit Account + /// Uses Credit Account's execute to properly handle both ERC20-compliant and + /// non-compliant (no returned value from "approve") tokens + function _approve(ICreditAccount creditAccount, address token, address spender, uint256 amount, bool revertIfFailed) + private + returns (bool) + { + // Makes a low-level call to approve from the Credit Account + // and parses the value. If nothing or true was returned, + // assumes that the call succeeded + try creditAccount.execute(token, abi.encodeCall(IERC20.approve, (spender, amount))) returns ( + bytes memory result + ) { + if (result.length == 0 || abi.decode(result, (bool)) == true) { + return true; + } + } catch {} + + // On the first try, failure is allowed to handle tokens + // that prohibit changing allowance from non-zero value; + // After that, failure results in a revert + if (revertIfFailed) revert AllowanceFailedException(); + return false; + } + + function _safeTransfer(ICreditAccount creditAccount, address token, address to, uint256 amount) internal { + ICreditAccount(creditAccount).safeTransfer(token, to, amount); + } + + function safeTransferDeliveredBalanceControl( + ICreditAccount creditAccount, + address token, + address to, + uint256 amount + ) internal returns (uint256 delivered) { + uint256 balanceBefore = IERC20(token)._balanceOf(to); + _safeTransfer(creditAccount, token, to, amount); + delivered = IERC20(token)._balanceOf(to) - balanceBefore; + } +} diff --git a/contracts/libraries/CreditLogic.sol b/contracts/libraries/CreditLogic.sol new file mode 100644 index 00000000..70f930de --- /dev/null +++ b/contracts/libraries/CreditLogic.sol @@ -0,0 +1,359 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {BitMask} from "./BitMask.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {CollateralDebtData, CollateralTokenData} from "../interfaces/ICreditManagerV3.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; +import {Balance} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; +import "../interfaces/IExceptions.sol"; + +uint256 constant INDEX_PRECISION = 10 ** 9; + +/// @title Credit Logic Library +library CreditLogic { + using BitMask for uint256; + + function calcAccruedInterest(uint256 amount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow) + internal + pure + returns (uint256) + { + return (amount * cumulativeIndexNow) / cumulativeIndexLastUpdate - amount; + } + + function calcTotalDebt(CollateralDebtData memory collateralDebtData) internal pure returns (uint256) { + return collateralDebtData.debt + collateralDebtData.accruedInterest + collateralDebtData.accruedFees; + } + + function calcClosePayments( + CollateralDebtData memory collateralDebtData, + function (uint256) view returns (uint256) amountWithFeeFn + ) internal view returns (uint256 amountToPool, uint256 profit) { + // The amount to be paid to pool is computed with fees included + // The pool will compute the amount of Diesel tokens to treasury + // based on profit + amountToPool = amountWithFeeFn(calcTotalDebt(collateralDebtData)); + + profit = collateralDebtData.accruedFees; + } + + function calcLiquidationPayments( + CollateralDebtData memory collateralDebtData, + uint16 feeLiquidation, + uint16 liquidationDiscount, + function (uint256) view returns (uint256) amountWithFeeFn, + function (uint256) view returns (uint256) amountMinusFeeFn + ) internal view returns (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) { + // The amount to be paid to pool is computed with fees included + // The pool will compute the amount of Diesel tokens to treasury + // based on profit + amountToPool = calcTotalDebt(collateralDebtData); + + uint256 debtWithInterest = collateralDebtData.debt + collateralDebtData.accruedInterest; + + // LIQUIDATION CASE + uint256 totalValue = collateralDebtData.totalValue; + + uint256 totalFunds = totalValue * liquidationDiscount / PERCENTAGE_FACTOR; // F:[CM-43] + + amountToPool += totalValue * feeLiquidation / PERCENTAGE_FACTOR; // F:[CM-43] + + // If there are any funds left after all respective payments (this + // includes the liquidation premium, since totalFunds is already + // discounted from totalValue), they are recorded to remainingFunds + // and will later be sent to the borrower. + + // If totalFunds is not sufficient to cover the entire payment to pool, + // the Credit Manager will repay what it can. When totalFunds >= debt + interest, + // this simply means that part of protocol fees will be waived (profit is reduced). Otherwise, + // there is bad debt (loss > 0). + + // Since values are compared to each other before subtracting, + // this can be marked as unchecked to optimize gas + + uint256 amountToPoolWithFee = amountWithFeeFn(amountToPool); + unchecked { + if (totalFunds > amountToPoolWithFee) { + remainingFunds = totalFunds - amountToPoolWithFee - 1; // F:[CM-43] + } else { + amountToPool = amountMinusFeeFn(totalFunds); // F:[CM-43] + } + + if (amountToPool >= debtWithInterest) { + profit = amountToPool - debtWithInterest; // F:[CM-43] + } else { + loss = debtWithInterest - amountToPool; // F:[CM-43] + } + } + + amountToPool = amountWithFeeFn(amountToPool); + } + + function _calcAmountToPool(uint256 debt, uint256 debtWithInterest, uint16 feeInterest) + internal + pure + returns (uint256 amountToPool) + { + amountToPool = debtWithInterest + ((debtWithInterest - debt) * feeInterest) / PERCENTAGE_FACTOR; + } + + function getTokenOrRevert(CollateralTokenData storage tokenData) internal view returns (address token) { + token = tokenData.token; + + if (token == address(0)) { + revert TokenNotAllowedException(); + } + } + + function getLiquidationThreshold(CollateralTokenData storage tokenData) internal view returns (uint16) { + if (block.timestamp < tokenData.timestampRampStart) { + return tokenData.ltInitial; // F:[CM-47] + } + if (block.timestamp < tokenData.timestampRampStart + tokenData.rampDuration) { + return _getRampingLiquidationThreshold( + tokenData.ltInitial, + tokenData.ltFinal, + tokenData.timestampRampStart, + tokenData.timestampRampStart + tokenData.rampDuration + ); + } + return tokenData.ltFinal; + } + + function _getRampingLiquidationThreshold( + uint16 ltInitial, + uint16 ltFinal, + uint40 timestampRampStart, + uint40 timestampRampEnd + ) internal view returns (uint16) { + return uint16( + (ltInitial * (timestampRampEnd - block.timestamp) + ltFinal * (block.timestamp - timestampRampStart)) + / (timestampRampEnd - timestampRampStart) + ); // F: [CM-72] + } + + /// MANAGE DEBT + + /// @dev Calculates the new cumulative index when debt is updated + /// @param debt Current debt principal + /// @param delta Absolute value of total debt amount change + /// @param cumulativeIndexNow Current cumulative index of the pool + /// @param cumulativeIndexOpen Last updated cumulative index recorded for the corresponding debt position + /// @notice Handles two potential cases: + /// * Debt principal is increased by delta - in this case, the principal is changed + /// but the interest / fees have to stay the same + /// * Interest is decreased by delta - in this case, the principal stays the same, + /// but the interest changes. The delta is assumed to have fee repayment excluded. + /// The debt decrease case where delta > interest + fees is trivial and should be handled outside + /// this function. + function calcIncrease(uint256 debt, uint256 delta, uint256 cumulativeIndexNow, uint256 cumulativeIndexOpen) + internal + pure + returns (uint256 newDebt, uint256 newCumulativeIndex) + { + // In case of debt increase, the principal increases by exactly delta, but interest has to be kept unchanged + // newCumulativeIndex is proven to be the solution to + // debt * (cumulativeIndexNow / cumulativeIndexOpen - 1) == + // == (debt + delta) * (cumulativeIndexNow / newCumulativeIndex - 1) + + newDebt = debt + delta; + + newCumulativeIndex = ( + (cumulativeIndexNow * newDebt * INDEX_PRECISION) + / ((INDEX_PRECISION * cumulativeIndexNow * debt) / cumulativeIndexOpen + INDEX_PRECISION * delta) + ); + } + + function calcDescrease( + uint256 amount, + uint256 quotaInterestAccrued, + uint16 feeInterest, + uint256 debt, + uint256 cumulativeIndexNow, + uint256 cumulativeIndexLastUpdate + ) + internal + pure + returns ( + uint256 newDebt, + uint256 newCumulativeIndex, + uint256 amountToRepay, + uint256 profit, + uint256 cumulativeQuotaInterest + ) + { + amountToRepay = amount; + + if (quotaInterestAccrued > 1) { + uint256 quotaProfit = (quotaInterestAccrued * feeInterest) / PERCENTAGE_FACTOR; + + if (amountToRepay >= quotaInterestAccrued + quotaProfit) { + amountToRepay -= quotaInterestAccrued + quotaProfit; // F: [CMQ-5] + profit += quotaProfit; // F: [CMQ-5] + cumulativeQuotaInterest = 1; // F: [CMQ-5] + } else { + uint256 amountToPool = (amountToRepay * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); + + profit += amountToRepay - amountToPool; // F: [CMQ-4] + amountToRepay = 0; // F: [CMQ-4] + + cumulativeQuotaInterest = quotaInterestAccrued - amountToPool + 1; // F: [CMQ-4] + + newDebt = debt; + newCumulativeIndex = cumulativeIndexLastUpdate; + } + } + + if (amountToRepay > 0) { + // Computes the interest accrued thus far + uint256 interestAccrued = (debt * newCumulativeIndex) / cumulativeIndexLastUpdate - debt; // F:[CM-21] + + // Computes profit, taken as a percentage of the interest rate + uint256 profitFromInterest = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; // F:[CM-21] + + if (amountToRepay >= interestAccrued + profitFromInterest) { + // If the amount covers all of the interest and fees, they are + // paid first, and the remainder is used to pay the principal + + amountToRepay -= interestAccrued + profitFromInterest; + newDebt = debt - amountToRepay; // + interestAccrued + profit - amount; + + profit += profitFromInterest; + + // Since interest is fully repaid, the Credit Account's cumulativeIndexLastUpdate + // is set to the current cumulative index - which means interest starts accruing + // on the new principal from zero + newCumulativeIndex = cumulativeIndexNow; // F:[CM-21] + } else { + // If the amount is not enough to cover interest and fees, + // then the sum is split between dao fees and pool profits pro-rata. Since the fee is the percentage + // of interest, this ensures that the new fee is consistent with the + // new pending interest + + uint256 amountToPool = (amountToRepay * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); + + profit += amountToRepay - amountToPool; + amountToRepay = 0; + + // Since interest and fees are paid out first, the principal + // remains unchanged + newDebt = debt; + + // Since the interest was only repaid partially, we need to recompute the + // cumulativeIndexLastUpdate, so that "debt * (indexNow / indexAtOpenNew - 1)" + // is equal to interestAccrued - amountToInterest + + // In case of debt decrease, the principal is the same, but the interest is reduced exactly by delta + // newCumulativeIndex is proven to be the solution to + // debt * (cumulativeIndexNow / cumulativeIndexOpen - 1) - delta == + // == debt * (cumulativeIndexNow / newCumulativeIndex - 1) + + newCumulativeIndex = (INDEX_PRECISION * cumulativeIndexNow * cumulativeIndexLastUpdate) + / ( + INDEX_PRECISION * cumulativeIndexNow + - (INDEX_PRECISION * amountToPool * cumulativeIndexLastUpdate) / debt + ); + } + } + + // TODO: delete after tests or write Invaraiant test + require(debt - newDebt == amountToRepay, "Ooops, something was wring"); + } + + /// @param creditAccount Credit Account to compute balances for + /// @param callData Bytes calldata for parsing + function storeBalances(address creditAccount, bytes memory callData) + internal + view + returns (Balance[] memory expected) + { + // Retrieves the balance list from calldata + expected = abi.decode(callData, (Balance[])); // F:[FA-45] + uint256 len = expected.length; // F:[FA-45] + + for (uint256 i = 0; i < len;) { + expected[i].balance += _balanceOf(expected[i].token, creditAccount); // F:[FA-45] + unchecked { + ++i; + } + } + } + + /// @dev Compares current balances to previously saved expected balances. + /// Reverts if at least one balance is lower than expected + /// @param creditAccount Credit Account to check + /// @param expected Expected balances after all operations + + function compareBalances(address creditAccount, Balance[] memory expected) internal view { + uint256 len = expected.length; // F:[FA-45] + unchecked { + for (uint256 i = 0; i < len; ++i) { + if (_balanceOf(expected[i].token, creditAccount) < expected[i].balance) { + revert BalanceLessThanMinimumDesiredException(expected[i].token); + } // F:[FA-45] + } + } + } + + function _balanceOf(address token, address holder) internal view returns (uint256) { + return IERC20(token).balanceOf(holder); + } + + function storeForbiddenBalances( + address creditAccount, + uint256 enabledTokensMask, + uint256 forbiddenTokenMask, + function (uint256) view returns (address) getTokenByMaskFn + ) internal view returns (uint256[] memory forbiddenBalances) { + uint256 forbiddenTokensOnAccount = enabledTokensMask & forbiddenTokenMask; + + if (forbiddenTokensOnAccount != 0) { + forbiddenBalances = new uint256[](forbiddenTokensOnAccount.calcEnabledTokens()); + unchecked { + uint256 i; + for (uint256 tokenMask = 1; tokenMask < forbiddenTokensOnAccount; tokenMask <<= 1) { + if (forbiddenTokensOnAccount & tokenMask != 0) { + address token = getTokenByMaskFn(tokenMask); + forbiddenBalances[i] = _balanceOf(token, creditAccount); + ++i; + } + } + } + } + } + + function checkForbiddenBalances( + address creditAccount, + uint256 enabledTokensMaskBefore, + uint256 enabledTokensMaskAfter, + uint256[] memory forbiddenBalances, + uint256 forbiddenTokenMask, + function (uint256) view returns (address) getTokenByMaskFn + ) internal view { + uint256 forbiddenTokensOnAccount = enabledTokensMaskAfter & forbiddenTokenMask; + if (forbiddenTokensOnAccount == 0) return; + + uint256 forbiddenTokensOnAccountBefore = enabledTokensMaskBefore & forbiddenTokenMask; + if (forbiddenTokensOnAccount & ~forbiddenTokensOnAccountBefore != 0) revert ForbiddenTokensException(); + + unchecked { + uint256 i; + for (uint256 tokenMask = 1; tokenMask < forbiddenTokensOnAccountBefore; tokenMask <<= 1) { + if (forbiddenTokensOnAccountBefore & tokenMask != 0) { + if (forbiddenTokensOnAccount & tokenMask != 0) { + address token = getTokenByMaskFn(tokenMask); + uint256 balance = _balanceOf(token, creditAccount); + if (balance > forbiddenBalances[i]) { + revert ForbiddenTokensException(); + } + } + + ++i; + } + } + } + } +} diff --git a/contracts/libraries/Errors.sol b/contracts/libraries/Errors.sol deleted file mode 100644 index 987faffc..00000000 --- a/contracts/libraries/Errors.sol +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: MIT -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -/// @title Errors library -library Errors { - // - // COMMON - // - string public constant ZERO_ADDRESS_IS_NOT_ALLOWED = "Z0"; - string public constant NOT_IMPLEMENTED = "NI"; - string public constant REGISTERED_CREDIT_ACCOUNT_MANAGERS_ONLY = "CP"; - string public constant REGISTERED_POOLS_ONLY = "RP"; - - // - // ACCOUNT FACTORY - // - string public constant AF_CANT_CLOSE_CREDIT_ACCOUNT_IN_THE_SAME_BLOCK = "AF1"; - string public constant AF_MINING_IS_FINISHED = "AF2"; - string public constant AF_CREDIT_ACCOUNT_NOT_IN_STOCK = "AF3"; - string public constant AF_EXTERNAL_ACCOUNTS_ARE_FORBIDDEN = "AF4"; - - // - // ADDRESS PROVIDER - // - string public constant AS_ADDRESS_NOT_FOUND = "AP1"; - - // - // CONTRACTS REGISTER - // - string public constant CR_POOL_ALREADY_ADDED = "CR1"; - string public constant CR_CREDIT_MANAGER_ALREADY_ADDED = "CR2"; - - // - // CREDIT ACCOUNT - // - string public constant CA_CONNECTED_CREDIT_MANAGER_ONLY = "CA1"; - string public constant CA_FACTORY_ONLY = "CA2"; - - // - // ACL - // - string public constant ACL_CALLER_NOT_PAUSABLE_ADMIN = "ACL1"; - string public constant ACL_CALLER_NOT_CONFIGURATOR = "ACL2"; -} diff --git a/contracts/libraries/IERC20Helper.sol b/contracts/libraries/IERC20Helper.sol new file mode 100644 index 00000000..02564222 --- /dev/null +++ b/contracts/libraries/IERC20Helper.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: BUSL-1.1 +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/// @title IERC20HelperTrait +/// @notice Saves size by providing internal call for balanceOf +library IERC20Helper { + function _balanceOf(IERC20 token, address holder) internal view returns (uint256) { + return token.balanceOf(holder); + } + + function unsafeTransfer(IERC20 token, address to, uint256 amount) internal returns (bool success) { + return _unsafeCall(address(token), abi.encodeCall(IERC20.transfer, (to, amount))); + } + + function unsafeTransferFrom(IERC20 token, address from, address to, uint256 amount) + internal + returns (bool success) + { + return _unsafeCall(address(token), abi.encodeCall(IERC20.transferFrom, (from, to, amount))); + } + + function _unsafeCall(address addr, bytes memory data) private returns (bool) { + (bool success, bytes memory returndata) = addr.call(data); + return success && (returndata.length == 0 || abi.decode(returndata, (bool))); + } +} diff --git a/contracts/libraries/Quotas.sol b/contracts/libraries/Quotas.sol deleted file mode 100644 index f6462996..00000000 --- a/contracts/libraries/Quotas.sol +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: MIT -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.17; - -import {TokenQuotaParams} from "../interfaces/IPoolQuotaKeeper.sol"; - -import {RAY, SECONDS_PER_YEAR} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; -import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; - -uint192 constant RAY_DIVIDED_BY_PERCENTAGE = uint192(RAY / PERCENTAGE_FACTOR); - -/// @title Quota Library -library Quotas { - function isTokenRegistered(TokenQuotaParams memory q) internal pure returns (bool) { - return q.cumulativeIndexLU_RAY != 0; - } - - function cumulativeIndexSince(TokenQuotaParams memory tq, uint256 lastQuotaRateUpdate) - internal - view - returns (uint192) - { - return calcLinearCumulativeIndex(tq, tq.rate, (block.timestamp - lastQuotaRateUpdate)); - } - - function calcLinearCumulativeIndex(TokenQuotaParams memory tq, uint16 rate, uint256 deltaTimestamp) - internal - pure - returns (uint192) - { - return uint192( - ( - uint256(tq.cumulativeIndexLU_RAY) - * (RAY + (RAY_DIVIDED_BY_PERCENTAGE * (deltaTimestamp) * rate) / SECONDS_PER_YEAR) / RAY - ) - ); - } -} diff --git a/contracts/libraries/QuotasLogic.sol b/contracts/libraries/QuotasLogic.sol new file mode 100644 index 00000000..5938864e --- /dev/null +++ b/contracts/libraries/QuotasLogic.sol @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {TokenQuotaParams, AccountQuota} from "../interfaces/IPoolQuotaKeeper.sol"; +import {CreditLogic} from "./CreditLogic.sol"; + +import {RAY, SECONDS_PER_YEAR} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +import "../interfaces/IExceptions.sol"; + +uint192 constant RAY_DIVIDED_BY_PERCENTAGE = uint192(RAY / PERCENTAGE_FACTOR); + +/// @title Quota Library +library QuotasLogic { + modifier initializedQuotasOnly(TokenQuotaParams storage tokenQuotaParams) { + if (!isInitialised(tokenQuotaParams)) { + revert TokenIsNotQuotedException(); // F:[PQK-13] + } + _; + } + + function isInitialised(TokenQuotaParams storage tokenQuotaParams) internal view returns (bool) { + return tokenQuotaParams.cumulativeIndexLU_RAY != 0; + } + + function initialise(TokenQuotaParams storage tokenQuotaParams) internal { + tokenQuotaParams.cumulativeIndexLU_RAY = uint192(RAY); // F:[PQK-5] + } + + function cumulativeIndexSince(TokenQuotaParams storage tq, uint256 lastQuotaRateUpdate) + internal + view + returns (uint192) + { + return calcLinearCumulativeIndex(tq, tq.rate, (block.timestamp - lastQuotaRateUpdate)); + } + + function calcLinearCumulativeIndex(TokenQuotaParams storage tokenQuotaParams, uint16 rate, uint256 deltaTimestamp) + internal + view + returns (uint192) + { + return uint192( + ( + uint256(tokenQuotaParams.cumulativeIndexLU_RAY) + * (RAY + (RAY_DIVIDED_BY_PERCENTAGE * (deltaTimestamp) * rate) / SECONDS_PER_YEAR) / RAY + ) + ); + } + + function calcOutstandingQuotaInterest( + TokenQuotaParams storage tokenQuotaParams, + AccountQuota storage accountQuota, + uint256 lastQuotaRateUpdate + ) internal view returns (uint256 caQuotaInterestChange) { + uint96 quoted = accountQuota.quota; + if (quoted > 1) { + uint192 cumulativeIndexNow = cumulativeIndexSince(tokenQuotaParams, lastQuotaRateUpdate); + + return CreditLogic.calcAccruedInterest({ + amount: quoted, + cumulativeIndexLastUpdate: accountQuota.cumulativeIndexLU, + cumulativeIndexNow: cumulativeIndexNow + }); + } + } + + function changeQuota( + TokenQuotaParams storage tokenQuotaParams, + AccountQuota storage accountQuota, + uint256 lastQuotaRateUpdate, + int96 quotaChange + ) + internal + initializedQuotasOnly(tokenQuotaParams) + returns (uint256 caQuotaInterestChange, int128 quotaRevenueChange, bool enableToken, bool disableToken) + { + caQuotaInterestChange = accrueAccountQuotaInterest({ + tokenQuotaParams: tokenQuotaParams, + accountQuota: accountQuota, + lastQuotaRateUpdate: lastQuotaRateUpdate + }); + + uint96 change; + if (quotaChange > 0) { + uint96 maxQuotaAllowed = tokenQuotaParams.limit - tokenQuotaParams.totalQuoted; + + if (maxQuotaAllowed == 0) { + return (caQuotaInterestChange, 0, false, false); + } + + change = uint96(quotaChange); + change = change > maxQuotaAllowed ? maxQuotaAllowed : change; // F:[CMQ-08,10] + + // if quota was 0 and change > 0, we enable token + if (accountQuota.quota <= 1) { + enableToken = true; + } + + accountQuota.quota += change; + tokenQuotaParams.totalQuoted += change; + + quotaRevenueChange = int128(int16(tokenQuotaParams.rate)) * int96(change); + } else { + change = uint96(-quotaChange); + + tokenQuotaParams.totalQuoted -= change; + accountQuota.quota -= change; // F:[CMQ-03] + + if (accountQuota.quota <= 1) { + disableToken = true; + } + + quotaRevenueChange = -int128(int16(tokenQuotaParams.rate)) * int96(change); + } + } + + function accrueAccountQuotaInterest( + TokenQuotaParams storage tokenQuotaParams, + AccountQuota storage accountQuota, + uint256 lastQuotaRateUpdate + ) internal initializedQuotasOnly(tokenQuotaParams) returns (uint256 caQuotaInterestChange) { + uint192 cumulativeIndexNow = cumulativeIndexSince(tokenQuotaParams, lastQuotaRateUpdate); // F:[CMQ-03] + + uint96 quoted = accountQuota.quota; + if (quoted > 1) { + caQuotaInterestChange = CreditLogic.calcAccruedInterest({ + amount: quoted, + cumulativeIndexLastUpdate: accountQuota.cumulativeIndexLU, + cumulativeIndexNow: cumulativeIndexNow + }); + } + + accountQuota.cumulativeIndexLU = cumulativeIndexNow; + } + + /// @dev Internal function to zero the quota for a single quoted token + function removeQuota(TokenQuotaParams storage tokenQuotaParams, AccountQuota storage accountQuota) + internal + initializedQuotasOnly(tokenQuotaParams) + returns (int128 quotaRevenueChange) + { + uint96 quoted = accountQuota.quota; + + if (quoted > 1) { + quoted--; + + tokenQuotaParams.totalQuoted -= quoted; + accountQuota.quota = 1; + quotaRevenueChange = -int128(int16(tokenQuotaParams.rate)) * int96(quoted); + } + } + + function setLimit(TokenQuotaParams storage tokenQuotaParams, uint96 limit) + internal + initializedQuotasOnly(tokenQuotaParams) + returns (bool changed) + { + if (tokenQuotaParams.limit != limit) { + tokenQuotaParams.limit = limit; // F:[PQK-12] + changed = true; + } + } + + function updateRate(TokenQuotaParams storage tokenQuotaParams, uint256 timeFromLastUpdate, uint16 rate) + internal + returns (uint128 quotaRevenue) + { + tokenQuotaParams.cumulativeIndexLU_RAY = calcLinearCumulativeIndex(tokenQuotaParams, rate, timeFromLastUpdate); // F:[PQK-7] + tokenQuotaParams.rate = rate; + + return rate * tokenQuotaParams.totalQuoted; + } +} diff --git a/contracts/libraries/WithdrawalsLogic.sol b/contracts/libraries/WithdrawalsLogic.sol new file mode 100644 index 00000000..152acef1 --- /dev/null +++ b/contracts/libraries/WithdrawalsLogic.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MIT +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {ClaimAction, ScheduledWithdrawal} from "../interfaces/IWithdrawalManager.sol"; + +/// @title Withdrawals library +library WithdrawalsLogic { + /// @dev Clears withdrawal in storage + function clear(ScheduledWithdrawal storage w) internal { + w.maturity = 1; // F: [WL-1] + w.amount = 1; // F: [WL-1] + } + + /// @dev If withdrawal is scheduled, returns withdrawn token, its mask in credit manager and withdrawn amount + function tokenMaskAndAmount(ScheduledWithdrawal storage w) + internal + view + returns (address token, uint256 mask, uint256 amount) + { + uint256 amount_ = w.amount; + if (amount_ > 1) { + unchecked { + token = w.token; // F: [WL-2] + mask = 1 << w.tokenIndex; // F: [WL-2] + amount = amount_ - 1; // F: [WL-2] + } + } + } + + /// @dev Returns flag indicating whether there are free withdrawal slots and the index of first such slot + function findFreeSlot(ScheduledWithdrawal[2] storage ws) internal view returns (bool found, uint8 slot) { + if (ws[0].maturity < 2) { + found = true; // F: [WL-3] + } else if (ws[1].maturity < 2) { + found = true; // F: [WL-3] + slot = 1; // F: [WL-3] + } + } + + /// @dev Returns true if withdrawal with given maturity can be claimed under given action + function claimAllowed(ClaimAction action, uint40 maturity) internal view returns (bool) { + if (maturity < 2) return false; // F: [WL-4] + if (action == ClaimAction.FORCE_CANCEL) return false; // F: [WL-4] + if (action == ClaimAction.FORCE_CLAIM) return true; // F: [WL-4] + return block.timestamp >= maturity; // F: [WL-4] + } + + /// @dev Returns true if withdrawal with given maturity can be cancelled under given action + function cancelAllowed(ClaimAction action, uint40 maturity) internal view returns (bool) { + if (maturity < 2) return false; // F: [WL-5] + if (action == ClaimAction.FORCE_CANCEL) return true; // F: [WL-5] + if (action == ClaimAction.FORCE_CLAIM || action == ClaimAction.CLAIM) return false; // F: [WL-5] + return block.timestamp < maturity; // F: [WL-5] + } +} diff --git a/contracts/multicall/CreditFacadeCalls.sol b/contracts/multicall/CreditFacadeCalls.sol index c6e45b51..ae3118a8 100644 --- a/contracts/multicall/CreditFacadeCalls.sol +++ b/contracts/multicall/CreditFacadeCalls.sol @@ -5,7 +5,6 @@ pragma solidity ^0.8.17; import {MultiCall} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; import {Balance, BalanceOps} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; -import {QuotaUpdate} from "../interfaces/IPoolQuotaKeeper.sol"; import {ICreditFacade, ICreditFacadeMulticall} from "../interfaces/ICreditFacade.sol"; interface CreditFacadeMulticaller {} @@ -77,14 +76,14 @@ library CreditFacadeCalls { }); } - function updateQuotas(CreditFacadeMulticaller creditFacade, QuotaUpdate[] memory quotaUpdates) + function updateQuota(CreditFacadeMulticaller creditFacade, address token, int96 quotaChange) internal pure returns (MultiCall memory) { return MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, quotaUpdates) + callData: abi.encodeCall(ICreditFacadeMulticall.updateQuota, (token, quotaChange)) }); } diff --git a/contracts/pool/Gauge.sol b/contracts/pool/Gauge.sol index 8370f668..90d0b0a8 100644 --- a/contracts/pool/Gauge.sol +++ b/contracts/pool/Gauge.sol @@ -2,6 +2,7 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; +pragma abicoder v1; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/pool/LinearInterestRateModel.sol b/contracts/pool/LinearInterestRateModel.sol index c527184b..fb57dc8e 100644 --- a/contracts/pool/LinearInterestRateModel.sol +++ b/contracts/pool/LinearInterestRateModel.sol @@ -2,6 +2,7 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; +pragma abicoder v1; import {WAD, RAY} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; diff --git a/contracts/pool/Pool4626.sol b/contracts/pool/Pool4626.sol index 8f8f45eb..9bce8b6d 100644 --- a/contracts/pool/Pool4626.sol +++ b/contracts/pool/Pool4626.sol @@ -1,14 +1,14 @@ // SPDX-License-Identifier: BUSL-1.1 // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; +pragma solidity ^0.8.17; +pragma abicoder v1; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {ERC4626} from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; @@ -18,17 +18,17 @@ import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol"; +/// LIBS & TRAITS import {ACLNonReentrantTrait} from "../traits/ACLNonReentrantTrait.sol"; import {ContractsRegisterTrait} from "../traits/ContractsRegisterTrait.sol"; import {IInterestRateModel} from "../interfaces/IInterestRateModel.sol"; -import {IPool4626, Pool4626Opts} from "../interfaces/IPool4626.sol"; +import {IPool4626} from "../interfaces/IPool4626.sol"; import {ICreditManagerV3} from "../interfaces/ICreditManagerV3.sol"; import {IPoolQuotaKeeper} from "../interfaces/IPoolQuotaKeeper.sol"; import {RAY, SECONDS_PER_YEAR, MAX_WITHDRAW_FEE} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; -import {Errors} from "@gearbox-protocol/core-v2/contracts/libraries/Errors.sol"; // EXCEPTIONS import "../interfaces/IExceptions.sol"; @@ -44,7 +44,6 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister using Math for uint256; using EnumerableSet for EnumerableSet.AddressSet; using SafeERC20 for IERC20; - using Address for address payable; /// @dev Address provider AddressProvider public immutable override addressProvider; @@ -94,7 +93,7 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister uint128 internal _totalBorrowedLimit; /// @dev The limit on expected (total) liquidity - uint128 internal _expectedLiquidityLimit; + uint128 internal expectedLiquidityLimit128; // [SLOT #5]: POOL QUOTA KEEPER @@ -131,41 +130,40 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister // /// @dev Constructor - /// @param opts Core pool options - constructor(Pool4626Opts memory opts) - ACLNonReentrantTrait(opts.addressProvider) - ContractsRegisterTrait(opts.addressProvider) - ERC4626(IERC20(opts.underlyingToken)) + + constructor( + address _addressProvider, + address _underlyingToken, + address _interestRateModel, + uint256 _expectedLiquidityLimit, + bool _supportsQuotas + ) + ACLNonReentrantTrait(_addressProvider) + ContractsRegisterTrait(_addressProvider) + ERC4626(IERC20(_underlyingToken)) ERC20( string( - abi.encodePacked( - "diesel ", opts.underlyingToken != address(0) ? IERC20Metadata(opts.underlyingToken).name() : "" - ) + abi.encodePacked("diesel ", _underlyingToken != address(0) ? IERC20Metadata(_underlyingToken).name() : "") ), - string( - abi.encodePacked( - "d", opts.underlyingToken != address(0) ? IERC20Metadata(opts.underlyingToken).symbol() : "" - ) - ) + string(abi.encodePacked("d", _underlyingToken != address(0) ? IERC20Metadata(_underlyingToken).symbol() : "")) ) // F:[P4-01] - nonZeroAddress(opts.addressProvider) // F:[P4-02] - nonZeroAddress(opts.underlyingToken) // F:[P4-02] - nonZeroAddress(opts.interestRateModel) // F:[P4-02] + nonZeroAddress(_underlyingToken) // F:[P4-02] + nonZeroAddress(_interestRateModel) // F:[P4-02] { - addressProvider = AddressProvider(opts.addressProvider); // F:[P4-01] - underlyingToken = opts.underlyingToken; // F:[P4-01] + addressProvider = AddressProvider(_addressProvider); // F:[P4-01] + underlyingToken = _underlyingToken; // F:[P4-01] - treasury = AddressProvider(opts.addressProvider).getTreasuryContract(); // F:[P4-01] + treasury = AddressProvider(_addressProvider).getTreasuryContract(); // F:[P4-01] timestampLU = uint64(block.timestamp); // F:[P4-01] cumulativeIndexLU_RAY = uint128(RAY); // F:[P4-01] - interestRateModel = IInterestRateModel(opts.interestRateModel); - emit SetInterestRateModel(opts.interestRateModel); // F:[P4-03] + interestRateModel = IInterestRateModel(_interestRateModel); + emit SetInterestRateModel(_interestRateModel); // F:[P4-03] - _setExpectedLiquidityLimit(opts.expectedLiquidityLimit); // F:[P4-01, 03] - _setTotalBorrowedLimit(opts.expectedLiquidityLimit); // F:[P4-03] - supportsQuotas = opts.supportsQuotas; // F:[P4-01] + _setExpectedLiquidityLimit(_expectedLiquidityLimit); // F:[P4-01, 03] + _setTotalBorrowedLimit(_expectedLiquidityLimit); // F:[P4-03] + supportsQuotas = _supportsQuotas; // F:[P4-01] } // @@ -223,7 +221,7 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister function _deposit(address receiver, uint256 assetsSent, uint256 assetsDelivered, uint256 shares) internal { /// Interst rate calculatiuon?? - if (expectedLiquidity() + assetsDelivered > uint256(_expectedLiquidityLimit)) { + if (expectedLiquidity() + assetsDelivered > uint256(expectedLiquidityLimit128)) { revert ExpectedLiquidityLimitException(); // F:[P4-7] } @@ -344,10 +342,11 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister } /// @dev See {IERC4626-maxDeposit}. + /// TODO: add pause case (?) function maxDeposit(address) public view override(ERC4626, IERC4626) returns (uint256) { - return (_expectedLiquidityLimit == type(uint128).max) + return (expectedLiquidityLimit128 == type(uint128).max) ? type(uint256).max - : _amountWithFee(_expectedLiquidityLimit - expectedLiquidity()); + : _amountWithFee(expectedLiquidityLimit128 - expectedLiquidity()); } /// @dev See {IERC4626-previewDeposit}. @@ -357,7 +356,7 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister /// @dev See {IERC4626-maxMint}. function maxMint(address) public view override(ERC4626, IERC4626) returns (uint256) { - uint128 limit = _expectedLiquidityLimit; + uint128 limit = expectedLiquidityLimit128; return (limit == type(uint128).max) ? type(uint256).max : previewMint(limit - expectedLiquidity()); } @@ -417,13 +416,14 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister /// @dev Computes interest rate accrued from last update (LU) function _calcBaseInterestAccrued() internal view returns (uint256) { // timeDifference = blockTime - previous timeStamp - uint256 timeDifference = block.timestamp - timestampLU; // currentBorrowRate * timeDifference // interestAccrued = totalBorrow * ------------------------------------ // SECONDS_PER_YEAR // - return (uint256(_totalBorrowed) * _borrowRate * timeDifference) / RAY / SECONDS_PER_YEAR; + + // TODO: move to lib + return (uint256(_totalBorrowed) * _borrowRate * (block.timestamp - timestampLU)) / RAY / SECONDS_PER_YEAR; } function _calcOutstandingQuotaRevenue() internal view returns (uint128) { @@ -682,7 +682,7 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister } function _setExpectedLiquidityLimit(uint256 limit) internal { - _expectedLiquidityLimit = _convertToU128(limit); // F:[P4-24] + expectedLiquidityLimit128 = _convertToU128(limit); // F:[P4-24] emit SetExpectedLiquidityLimit(limit); // F:[P4-03,24] } @@ -740,9 +740,7 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister uint256 available = interestRateModel.availableToBorrow(expectedLiquidity(), availableLiquidity()); // F:[P4-27] - if (canBorrow > available) { - canBorrow = available; // F:[P4-27] - } + canBorrow = Math.max(canBorrow, available); // F:[P4-27] CreditManagerDebt memory cmDebt = creditManagersDebt[_creditManager]; if (cmDebt.totalBorrowed >= cmDebt.limit) { @@ -751,14 +749,12 @@ contract Pool4626 is ERC4626, IPool4626, ACLNonReentrantTrait, ContractsRegister unchecked { uint256 cmLimit = cmDebt.limit - cmDebt.totalBorrowed; - if (canBorrow > cmLimit) { - canBorrow = cmLimit; // F:[P4-27] - } + canBorrow = Math.max(canBorrow, cmLimit); // F:[P4-27] } } function expectedLiquidityLimit() external view override returns (uint256) { - return _convertToU256(_expectedLiquidityLimit); + return _convertToU256(expectedLiquidityLimit128); } function expectedLiquidityLU() external view returns (uint256) { diff --git a/contracts/pool/Pool4626_USDT.sol b/contracts/pool/Pool4626_USDT.sol index 0912b97f..9bd55fab 100644 --- a/contracts/pool/Pool4626_USDT.sol +++ b/contracts/pool/Pool4626_USDT.sol @@ -5,13 +5,22 @@ pragma solidity ^0.8.10; import {Pool4626} from "./Pool4626.sol"; import {USDT_Transfer} from "../traits/USDT_Transfer.sol"; -import {IPool4626, Pool4626Opts} from "../interfaces/IPool4626.sol"; +import {IPool4626} from "../interfaces/IPool4626.sol"; /// @title Core pool contract compatible with ERC4626 /// @notice Implements pool & dieselUSDT_Transferogic contract Pool4626_USDT is Pool4626, USDT_Transfer { - constructor(Pool4626Opts memory opts) Pool4626(opts) USDT_Transfer(opts.underlyingToken) { + constructor( + address _addressProvider, + address _underlyingToken, + address _interestRateModel, + uint256 _expectedLiquidityLimit, + bool _supportsQuotas + ) + Pool4626(_addressProvider, _underlyingToken, _interestRateModel, _expectedLiquidityLimit, _supportsQuotas) + USDT_Transfer(_underlyingToken) + { // Additional check that receiver is not address(0) } diff --git a/contracts/pool/PoolQuotaKeeper.sol b/contracts/pool/PoolQuotaKeeper.sol index 3ea9509c..c0e3c139 100644 --- a/contracts/pool/PoolQuotaKeeper.sol +++ b/contracts/pool/PoolQuotaKeeper.sol @@ -2,23 +2,25 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.17; +pragma abicoder v1; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol"; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; +/// LIBS & TRAITS import {ACLNonReentrantTrait} from "../traits/ACLNonReentrantTrait.sol"; import {ContractsRegisterTrait} from "../traits/ContractsRegisterTrait.sol"; +import {CreditLogic} from "../libraries/CreditLogic.sol"; -import {Quotas} from "../libraries/Quotas.sol"; +import {QuotasLogic} from "../libraries/QuotasLogic.sol"; import {IPool4626} from "../interfaces/IPool4626.sol"; -import { - IPoolQuotaKeeper, QuotaUpdate, TokenLT, TokenQuotaParams, AccountQuota -} from "../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper, TokenQuotaParams, AccountQuota} from "../interfaces/IPoolQuotaKeeper.sol"; import {IGauge} from "../interfaces/IGauge.sol"; import {ICreditManagerV3} from "../interfaces/ICreditManagerV3.sol"; @@ -35,7 +37,7 @@ uint192 constant RAY_DIVIDED_BY_PERCENTAGE = uint192(RAY / PERCENTAGE_FACTOR); /// @title Manage pool accountQuotas contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsRegisterTrait { using EnumerableSet for EnumerableSet.AddressSet; - using Quotas for TokenQuotaParams; + using QuotasLogic for TokenQuotaParams; /// @dev Address provider address public immutable underlying; @@ -52,8 +54,8 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg /// @dev Mapping from token address to its respective quota parameters mapping(address => TokenQuotaParams) public totalQuotaParams; - /// @dev Mapping from (user, token) to per-account quota parameters - mapping(address => mapping(address => mapping(address => AccountQuota))) internal accountQuotas; + /// @dev Mapping from creditAccount => token > quota parameters + mapping(address => mapping(address => AccountQuota)) internal accountQuotas; /// @dev Address of the gauge that determines quota rates address public gauge; @@ -94,129 +96,53 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg /// @dev Updates credit account's accountQuotas for multiple tokens /// @param creditAccount Address of credit account - /// @param quotaUpdates Requested quota updates, see `QuotaUpdate` - function updateQuotas(address creditAccount, QuotaUpdate[] memory quotaUpdates) + function updateQuota(address creditAccount, address token, int96 quotaChange) external override creditManagerOnly // F:[PQK-4] - returns (uint256 caQuotaInterestChange, uint256 tokensToEnable, uint256 tokensToDisable) + returns (uint256 caQuotaInterestChange, bool enableToken, bool disableToken) { - uint256 len = quotaUpdates.length; + TokenQuotaParams storage tokenQuotaParams = totalQuotaParams[token]; + AccountQuota storage accountQuota = accountQuotas[creditAccount][token]; int128 quotaRevenueChange; - int128 qic; - uint256 cap; - uint256 dTokensToEnable; - uint256 dTokensToDisable; - for (uint256 i; i < len;) { - (qic, cap, dTokensToEnable, dTokensToDisable) = - _updateQuota(msg.sender, creditAccount, quotaUpdates[i].token, quotaUpdates[i].quotaChange); // F:[CMQ-03] - - quotaRevenueChange += qic; - caQuotaInterestChange += cap; - tokensToEnable |= dTokensToEnable; - tokensToDisable |= dTokensToDisable; - unchecked { - ++i; - } - } + (caQuotaInterestChange, quotaRevenueChange, enableToken, disableToken) = QuotasLogic.changeQuota({ + tokenQuotaParams: tokenQuotaParams, + accountQuota: accountQuota, + lastQuotaRateUpdate: lastQuotaRateUpdate, + quotaChange: quotaChange + }); if (quotaRevenueChange != 0) { pool.changeQuotaRevenue(quotaRevenueChange); } } - /// @dev Update function for a single quoted token - function _updateQuota(address creditManager, address creditAccount, address token, int96 quotaChange) - internal - returns ( - int128 quotaRevenueChange, - uint256 caQuotaInterestChange, - uint256 tokensToEnable, - uint256 tokensToDisable - ) - { - TokenQuotaParams storage tq = totalQuotaParams[token]; - - if (!tq.isTokenRegistered()) { - revert TokenIsNotQuotedException(); // F:[PQK-13] - } - - AccountQuota storage accountQuota = accountQuotas[creditManager][creditAccount][token]; - - uint96 quoted = accountQuota.quota; - - caQuotaInterestChange = _updateAccountQuotaInterest(tq, accountQuota, quoted); - - uint96 change; - if (quotaChange > 0) { - uint96 maxQuotaAllowed = tq.limit - tq.totalQuoted; - - if (maxQuotaAllowed == 0) { - return (0, caQuotaInterestChange, tokensToEnable, tokensToDisable); - } - - change = uint96(quotaChange); - change = change > maxQuotaAllowed ? maxQuotaAllowed : change; // F:[CMQ-08,10] - - // if quota was 0 and change > 0, we enable token - if (quoted <= 1) { - tokensToEnable |= getTokenMask(creditManager, token); - } - - accountQuota.quota += change; - tq.totalQuoted += change; - - quotaRevenueChange = int128(int16(tq.rate)) * int96(change); - } else { - change = uint96(-quotaChange); - - tq.totalQuoted -= change; - accountQuota.quota -= change; // F:[CMQ-03] - - if (accountQuota.quota <= 1) { - tokensToDisable |= getTokenMask(creditManager, token); // F:[CMQ-03] - } - - quotaRevenueChange = -int128(int16(tq.rate)) * int96(change); - } - } - - function _updateAccountQuotaInterest(TokenQuotaParams storage tq, AccountQuota storage accountQuota, uint96 quoted) - internal - returns (uint256 caQuotaInterestChange) - { - uint192 cumulativeIndexNow = _cumulativeIndexNow(tq); // F:[CMQ-03] - - if (quoted > 1) { - caQuotaInterestChange = - _computeOutstandingQuotaInterest(quoted, cumulativeIndexNow, accountQuota.cumulativeIndexLU); // F:[CMQ-03] - } - - accountQuota.cumulativeIndexLU = cumulativeIndexNow; - } - - function getTokenMask(address creditManager, address token) internal view returns (uint256 mask) { - mask = ICreditManagerV3(creditManager).getTokenMaskOrRevert(token); - } - /// @dev Updates all accountQuotas to zero when closing a credit account, and computes the final quota interest change /// @param creditAccount Address of the Credit Account being closed - /// @param tokensLT Array of all active quoted tokens on the account - function removeQuotas(address creditAccount, TokenLT[] memory tokensLT) + /// @param tokens Array of all active quoted tokens on the account + function removeQuotas(address creditAccount, address[] memory tokens, bool setLimitsToZero) external override creditManagerOnly // F:[PQK-4] { int128 quotaRevenueChange; - uint256 len = tokensLT.length; + uint256 len = tokens.length; for (uint256 i; i < len;) { - address token = tokensLT[i].token; + address token = tokens[i]; if (token == address(0)) break; - quotaRevenueChange += _removeQuota(msg.sender, creditAccount, token); // F:[CMQ-06] + AccountQuota storage accountQuota = accountQuotas[creditAccount][token]; + TokenQuotaParams storage tokenQuotaParams = totalQuotaParams[token]; + + quotaRevenueChange += + QuotasLogic.removeQuota({tokenQuotaParams: tokenQuotaParams, accountQuota: accountQuota}); // F:[CMQ-06] + + if (setLimitsToZero) { + _setTokenLimit({tokenQuotaParams: tokenQuotaParams, token: token, limit: 1}); + } unchecked { ++i; @@ -228,61 +154,27 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg } } - /// @dev Internal function to zero the quota for a single quoted token - function _removeQuota(address creditManager, address creditAccount, address token) - internal - returns (int128 quotaRevenueChange) - { - AccountQuota storage accountQuota = accountQuotas[creditManager][creditAccount][token]; - uint96 quoted = accountQuota.quota; - - if (quoted > 1) { - quoted--; - TokenQuotaParams storage tq = totalQuotaParams[token]; - tq.totalQuoted -= quoted; - accountQuota.quota = 1; - quotaRevenueChange = -int128(int16(tq.rate)) * int96(quoted); - } - } - - /// @dev Sets limits for a number of tokens to zero, preventing further quota increases - /// @notice Triggered by the Credit Manager when there is loss during liquidation - function setLimitsToZero(TokenLT[] memory tokensLT) external creditManagerOnly { - uint256 len = tokensLT.length; - uint256 i; - - while (i < len && tokensLT[i].token != address(0)) { - address token = tokensLT[i].token; - totalQuotaParams[token].limit = 1; // F: [CMQ-12] - - unchecked { - ++i; - } - } - } - /// @dev Computes the accrued quota interest and updates interest indexes /// @param creditAccount Address of the Credit Account to accrue interest for - /// @param tokensLT Array of all active quoted tokens on the account - function accrueQuotaInterest(address creditAccount, TokenLT[] memory tokensLT) + /// @param tokens Array of all active quoted tokens on the account + function accrueQuotaInterest(address creditAccount, address[] memory tokens) external override creditManagerOnly // F:[PQK-4] returns (uint256 caQuotaInterestChange) { - uint256 len = tokensLT.length; - uint256 i; + uint256 len = tokens.length; - while (i < len && tokensLT[i].token != address(0)) { - address token = tokensLT[i].token; - AccountQuota storage accountQuota = accountQuotas[msg.sender][creditAccount][token]; + for (uint256 i; i < len;) { + address token = tokens[i]; + if (token == address(0)) break; - uint96 quoted = accountQuota.quota; - if (quoted > 1) { - TokenQuotaParams storage tq = totalQuotaParams[token]; + caQuotaInterestChange += QuotasLogic.accrueAccountQuotaInterest({ + tokenQuotaParams: totalQuotaParams[token], + accountQuota: accountQuotas[creditAccount][token], + lastQuotaRateUpdate: lastQuotaRateUpdate + }); - caQuotaInterestChange += _updateAccountQuotaInterest(tq, accountQuota, quoted); - } unchecked { ++i; } @@ -294,56 +186,45 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg // /// @dev Computes outstanding quota interest - function outstandingQuotaInterest(address creditManager, address creditAccount, TokenLT[] memory tokensLT) + function outstandingQuotaInterest(address creditAccount, address[] memory tokens) external view override returns (uint256 caQuotaInterestChange) { - uint256 len = tokensLT.length; - uint256 i; - - while (i < len && tokensLT[i].token != address(0)) { - address token = tokensLT[i].token; - AccountQuota storage accountQuota = accountQuotas[creditManager][creditAccount][token]; + uint256 len = tokens.length; + for (uint256 i; i < len;) { + address token = tokens[i]; + if (token == address(0)) break; - uint96 quoted = accountQuota.quota; - if (quoted > 1) { - TokenQuotaParams storage tq = totalQuotaParams[token]; - uint192 cumulativeIndexNow = _cumulativeIndexNow(tq); + caQuotaInterestChange += QuotasLogic.calcOutstandingQuotaInterest({ + tokenQuotaParams: totalQuotaParams[token], + accountQuota: accountQuotas[creditAccount][token], + lastQuotaRateUpdate: lastQuotaRateUpdate + }); - caQuotaInterestChange += - _computeOutstandingQuotaInterest(quoted, cumulativeIndexNow, accountQuota.cumulativeIndexLU); // F:[CMQ-10] - } unchecked { ++i; } } } - /// @dev Internal function for outstanding quota interest computation - function _computeOutstandingQuotaInterest(uint96 quoted, uint192 cumulativeIndexNow, uint192 cumulativeIndexLU) - internal - pure - returns (uint256) - { - return (quoted * cumulativeIndexNow) / cumulativeIndexLU - quoted; - } - /// @dev Computes collateral value for quoted tokens on the account, as well as accrued quota interest function computeQuotedCollateralUSD( - address creditManager, address creditAccount, address _priceOracle, - TokenLT[] memory tokens - ) external view override returns (uint256 totalValue, uint256 twv, uint256 totalQuotaInterest) { + address[] memory tokens, + uint256[] memory lts + ) external view override returns (uint256 totalValueUSD, uint256 twvUSD, uint256 totalQuotaInterest) { uint256 len = tokens.length; - for (uint256 i; i < len && tokens[i].token != address(0);) { - (uint256 currentUSD, uint256 outstandingInterest) = - _getCollateralValue(creditManager, creditAccount, tokens[i].token, _priceOracle); // F:[CMQ-8] + for (uint256 i; i < len;) { + address token = tokens[i]; + if (token == address(0)) break; + + (uint256 currentUSD, uint256 outstandingInterest) = _getCollateralValue(creditAccount, token, _priceOracle); // F:[CMQ-8] - totalValue += currentUSD; - twv += currentUSD * tokens[i].lt; // F:[CMQ-8] + totalValueUSD += currentUSD; + twvUSD += currentUSD * lts[i]; // F:[CMQ-8] totalQuotaInterest += outstandingInterest; // F:[CMQ-8] unchecked { @@ -351,18 +232,18 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg } } - twv /= PERCENTAGE_FACTOR; + twvUSD /= PERCENTAGE_FACTOR; } /// @dev Gets the effective value (i.e., value in underlying included into TWV) for a quoted token on an account - function _getCollateralValue(address creditManager, address creditAccount, address token, address _priceOracle) + function _getCollateralValue(address creditAccount, address token, address _priceOracle) internal view returns (uint256 value, uint256 interest) { - AccountQuota storage q = accountQuotas[creditManager][creditAccount][token]; + AccountQuota storage accountQuota = accountQuotas[creditAccount][token]; - uint96 quoted = q.quota; + uint96 quoted = accountQuota.quota; if (quoted > 1) { uint256 quotaValueUSD = IPriceOracleV2(_priceOracle).convertToUSD(quoted, underlying); // F:[CMQ-8] @@ -372,17 +253,17 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg if (value > quotaValueUSD) value = quotaValueUSD; // F:[CMQ-8] } - interest = _computeOutstandingQuotaInterest(quoted, cumulativeIndex(token), q.cumulativeIndexLU); // F:[CMQ-8] + interest = CreditLogic.calcAccruedInterest({ + amount: quoted, + cumulativeIndexLastUpdate: accountQuota.cumulativeIndexLU, + cumulativeIndexNow: cumulativeIndex(token) + }); // F:[CMQ-8] } } /// @dev Returns cumulative index in RAY for a quoted token. Returns 0 for non-quoted tokens. function cumulativeIndex(address token) public view override returns (uint192) { - return _cumulativeIndexNow(totalQuotaParams[token]); - } - - function _cumulativeIndexNow(TokenQuotaParams storage tq) internal view returns (uint192) { - return tq.cumulativeIndexSince(lastQuotaRateUpdate); + return totalQuotaParams[token].cumulativeIndexSince(lastQuotaRateUpdate); } /// @dev Returns quota rate in PERCENTAGE FORMAT @@ -401,12 +282,13 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg } /// @dev Returns quota parameters for a single (account, token) pair - function getQuota(address creditManager, address creditAccount, address token) + function getQuota(address creditAccount, address token) external view - returns (AccountQuota memory) + returns (uint96 quota, uint192 cumulativeIndexLU) { - return accountQuotas[creditManager][creditAccount][token]; + AccountQuota storage aq = accountQuotas[creditAccount][token]; + return (aq.quota, aq.cumulativeIndexLU); } /// @dev Returns list of connected credit managers @@ -428,9 +310,7 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg } quotaTokensSet.add(token); // F:[PQK-5] - - TokenQuotaParams storage qp = totalQuotaParams[token]; // F:[PQK-5] - qp.cumulativeIndexLU_RAY = uint192(RAY); // F:[PQK-5] + totalQuotaParams[token].initialise(); // F:[PQK-5] emit NewQuotaTokenAdded(token); // F:[PQK-5] } @@ -444,20 +324,18 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg address[] memory tokens = quotaTokensSet.values(); uint16[] memory rates = IGauge(gauge).getRates(tokens); // F:[PQK-7] - uint256 timeFromLastUpdate = block.timestamp - lastQuotaRateUpdate; - uint128 quotaRevenue; + /// TODO: add check for equal length(?) + uint128 quotaRevenue; + uint256 timeFromLastUpdate = block.timestamp - lastQuotaRateUpdate; uint256 len = tokens.length; + for (uint256 i; i < len;) { address token = tokens[i]; uint16 rate = rates[i]; - TokenQuotaParams storage tq = totalQuotaParams[token]; - - tq.cumulativeIndexLU_RAY = tq.calcLinearCumulativeIndex(rate, timeFromLastUpdate); // F:[PQK-7] - tq.rate = rate; // F:[PQK-7] - - quotaRevenue += rate * tq.totalQuoted; + TokenQuotaParams storage tokenQuotaParams = totalQuotaParams[token]; + quotaRevenue += tokenQuotaParams.updateRate(timeFromLastUpdate, rate); emit UpdateTokenQuotaRate(token, rate); // F:[PQK-7] @@ -513,15 +391,13 @@ contract PoolQuotaKeeper is IPoolQuotaKeeper, ACLNonReentrantTrait, ContractsReg external controllerOnly // F:[PQK-2] { - TokenQuotaParams storage tq = totalQuotaParams[token]; - - if (!tq.isTokenRegistered()) { - revert TokenIsNotQuotedException(); // F:[PQK-11] - } + TokenQuotaParams storage tokenQuotaParams = totalQuotaParams[token]; + _setTokenLimit(tokenQuotaParams, token, limit); + } - if (tq.limit != limit) { - tq.limit = limit; // F:[PQK-12] - emit SetTokenLimit(token, limit); // F:[PQK-12] - } + function _setTokenLimit(TokenQuotaParams storage tokenQuotaParams, address token, uint96 limit) internal { + if (tokenQuotaParams.setLimit(limit)) { + emit SetTokenLimit(token, limit); + } // F:[PQK-12] } } diff --git a/contracts/support/DataCompressor.sol b/contracts/support/DataCompressor.sol index c156e06f..617d4b53 100644 --- a/contracts/support/DataCompressor.sol +++ b/contracts/support/DataCompressor.sol @@ -12,7 +12,7 @@ import {ICreditManager as ICreditManagerV1} from "@gearbox-protocol/core-v2/cont import {ICreditManagerV3} from "../interfaces/ICreditManagerV3.sol"; import {ICreditFacade} from "../interfaces/ICreditFacade.sol"; import {ICreditFilter} from "@gearbox-protocol/core-v2/contracts/interfaces/V1/ICreditFilter.sol"; -import {ICreditConfigurator} from "../interfaces/ICreditConfigurator.sol"; +import {ICreditConfigurator} from "../interfaces/ICreditConfiguratorV3.sol"; import {ICreditAccount} from "@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol"; import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; import {IPool4626} from "../interfaces/IPool4626.sol"; @@ -159,8 +159,8 @@ contract DataCompressor is IDataCompressor, ContractsRegisterTrait { // (result.totalValue,) = creditFacade.calcTotalValue(creditAccount); // result.healthFactor = creditFacade.calcCreditAccountHealthFactor(creditAccount); - (result.borrowedAmount, result.borrowedAmountPlusInterest, result.borrowedAmountPlusInterestAndFees) = - creditManagerV2.calcCreditAccountAccruedInterest(creditAccount); + // (result.borrowedAmount, result.borrowedAmountPlusInterest, result.borrowedAmountPlusInterestAndFees) = + // creditManagerV2.calcCreditAccountAccruedInterest(creditAccount); } address pool = address((ver == 1) ? creditManager.poolService() : creditManagerV2.pool()); @@ -170,7 +170,7 @@ contract DataCompressor is IDataCompressor, ContractsRegisterTrait { (ver == 1) ? creditFilter.allowedTokensCount() : creditManagerV2.collateralTokensCount(); result.enabledTokenMask = - (ver == 1) ? creditFilter.enabledTokens(creditAccount) : creditManagerV2.enabledTokensMap(creditAccount); + (ver == 1) ? creditFilter.enabledTokens(creditAccount) : creditManagerV2.enabledTokensMaskOf(creditAccount); result.balances = new TokenBalance[](collateralTokenCount); for (uint256 i = 0; i < collateralTokenCount;) { @@ -194,7 +194,7 @@ contract DataCompressor is IDataCompressor, ContractsRegisterTrait { } } - result.cumulativeIndexAtOpen = ICreditAccount(creditAccount).cumulativeIndexAtOpen(); + // result.cumulativeIndexLastUpdate = ICreditAccount(creditAccount).cumulativeIndexLastUpdate(); result.since = ICreditAccount(creditAccount).since(); } diff --git a/contracts/support/WETHGateway.sol b/contracts/support/WETHGateway.sol index a2eaee3c..f44980a6 100644 --- a/contracts/support/WETHGateway.sol +++ b/contracts/support/WETHGateway.sol @@ -2,6 +2,7 @@ // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; +pragma abicoder v1; import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; @@ -17,7 +18,6 @@ import {IPool4626} from "../interfaces/IPool4626.sol"; import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; import {IWETHGateway} from "../interfaces/IWETHGateway.sol"; -import {Errors} from "@gearbox-protocol/core-v2/contracts/libraries/Errors.sol"; import { RegisteredPoolOnlyException, diff --git a/contracts/support/WithdrawManager.sol b/contracts/support/WithdrawManager.sol deleted file mode 100644 index 3bbcb660..00000000 --- a/contracts/support/WithdrawManager.sol +++ /dev/null @@ -1,202 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -// Gearbox. Generalized leverage protocol that allows to take leverage and then use it across other DeFi protocols and platforms in a composable way. -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; - -import {ICreditManagerV3} from "../interfaces/ICreditManagerV3.sol"; - -import {IWithdrawManager, CancellationType} from "../interfaces/IWithdrawManager.sol"; - -// LIBS & TRAITS -import {BitMask} from "../libraries/BitMask.sol"; -import {ACLNonReentrantTrait} from "../traits/ACLNonReentrantTrait.sol"; - -// EXCEPTIONS -import "../interfaces/IExceptions.sol"; - -/// We keep token index to keep 2 slots structure -struct WithdrawRequest { - uint8 tokenIndex; - address to; - uint40 availableAt; - uint256 amount; -} - -struct WithdrawPush { - address creditManager; - address creditAccount; -} - -/// @title WithdrawManager -/// @dev A contract used to enable successful liquidations when the borrower is blacklisted -/// while simultaneously allowing them to recover their funds under a different address -contract WithdrawManager is IWithdrawManager, ACLNonReentrantTrait { - using SafeERC20 for IERC20; - using BitMask for uint256; - - mapping(address => bool) public isSupportedCreditManager; - - /// @dev mapping from token => to => amount available to claim - mapping(address => mapping(address => uint256)) public claimable; - - /// @dev mapping from creditManager => creditAccount => WithdrawRequest[2] to keep 2 requests for withdraw - mapping(address => mapping(address => WithdrawRequest[2])) public delayed; - - uint40 public delay; - - /// @dev Contract version - uint256 public constant override version = 3_00; - - /// @dev Restricts calls to Credit Facades only - modifier creditManagerOnly() { - if (!isSupportedCreditManager[msg.sender]) { - revert CallerNotCreditFacadeException(); - } - _; - } - - /// TODO: add CM to list - - /// @param _addressProvider Address of the address provider - - constructor(address _addressProvider) ACLNonReentrantTrait(_addressProvider) {} - - /// @dev Increases the token balance available to claim by the account - /// @param token Underlying to increase balance for - /// @param to Account to increase balance for - /// @param amount Incremented amount - /// @notice Can only be called by Credit Facades when liquidating a blacklisted borrower - /// Expects the token to be transferred directly to this contract in the same transaction - function addImmediateWithdrawal( - address to, - address token, - uint256 amount // add check amount >0 - ) external override creditManagerOnly { - claimable[token][to] += amount; - emit IncreaseClaimableBalance(token, to, amount); - } - - function addDelayedWithdrawal(address creditAccount, address to, address token, uint256 tokenMask, uint256 amount) - external - override - creditManagerOnly - { - (bool hasFreeSlot, uint256 slot) = _push(msg.sender, creditAccount, false, false); - if (!hasFreeSlot) { - revert NoFreeQithdrawalSlotsException(); - } - - uint40 availableAt = uint40(block.timestamp) + delay; - - uint8 tokenIndex = tokenMask.calcIndex(); - - delayed[msg.sender][creditAccount][slot] = - WithdrawRequest({tokenIndex: tokenIndex, amount: amount, to: to, availableAt: availableAt}); - - emit ScheduleDelayedWithdrawal(to, token, amount, availableAt); - } - - /// @dev Transfer the sender's current claimable balance in token to a specified address - /// @param token Underlying to transfer - /// @param to Recipient address - function claim(address token, address to) external override { - uint256 amount = claimable[token][msg.sender]; - if (amount < 2) { - revert NothingToClaimException(); - } - claimable[token][msg.sender] = 0; - IERC20(token).safeTransfer(to, amount); - emit Claim(token, msg.sender, to, amount); - } - - function push(address creditManager, address creditAccount) external { - _push(creditManager, creditAccount, false, true); - } - - function _push(address creditManager, address creditAccount, bool pushBeforeDeadline, bool clearFlag) - internal - returns (bool hasFreeSlot, uint256 slot) - { - WithdrawRequest[2] storage reqs = delayed[creditManager][creditAccount]; - bool isFreeSlot1 = _pushRequest(creditManager, reqs[0], pushBeforeDeadline); - bool isFreeSlot2 = _pushRequest(creditManager, reqs[1], pushBeforeDeadline); - - hasFreeSlot = isFreeSlot1 || isFreeSlot2; - slot = isFreeSlot1 ? 0 : 1; - - if (clearFlag && isFreeSlot1 && isFreeSlot2) { - ICreditManagerV3(creditManager).disableWithdrawalFlag(creditAccount); - } - } - - function _pushRequest(address creditManager, WithdrawRequest storage req, bool pushBeforeDeadline) - internal - returns (bool free) - { - if (req.availableAt <= 1) { - return true; - } - if (pushBeforeDeadline || req.availableAt > block.timestamp) { - address token = _executeWithdrawal(creditManager, req, req.to); - emit PayDelayedWithdrawal(req.to, token, req.amount); - return true; - } - - return false; - } - - function _executeWithdrawal(address creditManager, WithdrawRequest storage req, address to) - internal - returns (address token) - { - (token,) = ICreditManagerV3(creditManager).collateralTokensByMask(1 << req.tokenIndex); - IERC20(token).safeTransfer(to, req.amount); - req.availableAt = 1; - req.amount = 1; - } - - function _returnWithdrawal(WithdrawRequest storage req, address creditManager, address creditAccount) - internal - returns (uint256 tokensToEnable) - { - if (req.availableAt > 1) { - address token = _executeWithdrawal(creditManager, req, creditAccount); - tokensToEnable = 1 << req.tokenIndex; - emit CancelDelayedWithdrawal(req.to, token, req.amount); - } - } - - function cancelWithdrawals(address creditAccount, CancellationType ctype) - external - override - creditManagerOnly - returns (uint256 tokensToEnable) - { - if (ctype == CancellationType.PUSH_WITHDRAWALS) { - _push(msg.sender, creditAccount, true, false); - } else { - WithdrawRequest[2] storage reqs = delayed[msg.sender][creditAccount]; - tokensToEnable |= _returnWithdrawal(reqs[0], msg.sender, creditAccount); - tokensToEnable |= _returnWithdrawal(reqs[1], msg.sender, creditAccount); - } - } - - function pushAndClaim(WithdrawPush[] calldata pushes) external { - uint256 len = pushes.length; - unchecked { - for (uint256 i; i < len; ++i) { - _push(pushes[i].creditManager, pushes[i].creditAccount, false, true); - } - } - } - - function getWithdrawals(address creditManager, address creditAccount) - external - view - override - returns (uint256 tokenMask1, uint256 amount1, uint256 tokenMask2, uint256 amount2) - {} -} diff --git a/contracts/support/WithdrawalManager.sol b/contracts/support/WithdrawalManager.sol new file mode 100644 index 00000000..ce27510a --- /dev/null +++ b/contracts/support/WithdrawalManager.sol @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: BUSL-1.1 +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + +import { + AmountCantBeZeroException, + CallerNotCreditManagerException, + NoFreeWithdrawalSlotsException, + NothingToClaimException +} from "../interfaces/IExceptions.sol"; +import {ClaimAction, IWithdrawalManager, IVersion, ScheduledWithdrawal} from "../interfaces/IWithdrawalManager.sol"; +import {IERC20Helper} from "../libraries/IERC20Helper.sol"; +import {WithdrawalsLogic} from "../libraries/WithdrawalsLogic.sol"; +import {ACLTrait} from "../traits/ACLTrait.sol"; + +/// @title Withdrawal manager +/// @notice Contract that handles withdrawals from credit accounts. +/// There are two kinds of withdrawals: immediate and scheduled. +/// - Immediate withdrawals can be claimed, well, immediately, and exist to support blacklistable tokens. +/// - Scheduled withdrawals can be claimed after a certain delay, and exist to support partial withdrawals +/// from credit accounts. One credit account can have up to two scheduled withdrawals at the same time. +contract WithdrawalManager is IWithdrawalManager, ACLTrait { + using SafeERC20 for IERC20; + using IERC20Helper for IERC20; + using WithdrawalsLogic for ClaimAction; + using WithdrawalsLogic for ScheduledWithdrawal; + using WithdrawalsLogic for ScheduledWithdrawal[2]; + + /// @inheritdoc IVersion + uint256 public constant override version = 3_00; + + /// @inheritdoc IWithdrawalManager + mapping(address => bool) public override creditManagerStatus; + + /// @inheritdoc IWithdrawalManager + mapping(address => mapping(address => uint256)) public override immediateWithdrawals; + + /// @inheritdoc IWithdrawalManager + uint40 public override delay; + + /// @dev Mapping credit account => scheduled withdrawals + mapping(address => ScheduledWithdrawal[2]) internal _scheduled; + + /// @notice Ensures that caller of the function is one of registered credit managers + modifier creditManagerOnly() { + if (!creditManagerStatus[msg.sender]) { + revert CallerNotCreditManagerException(); + } + _; + } + + /// @notice Constructor + /// @param _addressProvider Address of the address provider + /// @param _delay Delay for scheduled withdrawals + constructor(address _addressProvider, uint40 _delay) ACLTrait(_addressProvider) { + _setWithdrawalDelay(_delay); // F: [WM-1] + } + + /// --------------------- /// + /// IMMEDIATE WITHDRAWALS /// + /// --------------------- /// + + /// @inheritdoc IWithdrawalManager + function addImmediateWithdrawal(address account, address token, uint256 amount) + external + override + creditManagerOnly // F: [WM-2] + { + _addImmediateWithdrawal(account, token, amount); + } + + /// @inheritdoc IWithdrawalManager + function claimImmediateWithdrawal(address token, address to) + external + override + nonZeroAddress(to) // F: [WM-4A] + { + _claimImmediateWithdrawal(msg.sender, token, to); + } + + /// @dev Increases `account`'s immediately withdrawable balance of `token` by `amount` + function _addImmediateWithdrawal(address account, address token, uint256 amount) internal { + if (amount > 1) { + immediateWithdrawals[account][token] += amount; // F: [WM-3] + emit AddImmediateWithdrawal(account, token, amount); // F: [WM-3] + } + } + + /// @dev Sends all `account`'s immediately withdrawable balance of `token` to `to` + function _claimImmediateWithdrawal(address account, address token, address to) internal { + uint256 amount = immediateWithdrawals[account][token]; + if (amount < 2) revert NothingToClaimException(); // F: [WM-4B] + unchecked { + --amount; // F: [WM-4C] + } + immediateWithdrawals[account][token] = 1; // F: [WM-4C] + IERC20(token).safeTransfer(to, amount); // F: [WM-4C] + emit ClaimImmediateWithdrawal(account, token, to, amount); // F: [WM-4C] + } + + /// --------------------- /// + /// SCHEDULED WITHDRAWALS /// + /// --------------------- /// + + /// @inheritdoc IWithdrawalManager + function scheduledWithdrawals(address creditAccount) + external + view + override + returns (ScheduledWithdrawal[2] memory) + { + return _scheduled[creditAccount]; + } + + /// @inheritdoc IWithdrawalManager + function addScheduledWithdrawal(address creditAccount, address token, uint256 amount, uint8 tokenIndex) + external + override + creditManagerOnly // F: [WM-2] + { + if (amount < 2) { + revert AmountCantBeZeroException(); // F: [WM-5A] + } + ScheduledWithdrawal[2] storage withdrawals = _scheduled[creditAccount]; + (bool found, uint8 slot) = withdrawals.findFreeSlot(); // F: [WM-5B] + if (!found) revert NoFreeWithdrawalSlotsException(); // F: [WM-5B] + + uint40 maturity = uint40(block.timestamp) + delay; + withdrawals[slot] = + ScheduledWithdrawal({tokenIndex: tokenIndex, token: token, maturity: maturity, amount: amount}); // F: [WM-5B] + emit AddScheduledWithdrawal(creditAccount, token, amount, maturity); // F: [WM-5B] + } + + /// @inheritdoc IWithdrawalManager + function claimScheduledWithdrawals(address creditAccount, address to, ClaimAction action) + external + override + creditManagerOnly // F: [WM-2] + returns (bool hasScheduled, uint256 tokensToEnable) + { + ScheduledWithdrawal[2] storage withdrawals = _scheduled[creditAccount]; + + (bool scheduled0, bool claimed0, uint256 tokensToEnable0) = + _processScheduledWithdrawal(withdrawals[0], action, creditAccount, to); // F: [WM-6B] + (bool scheduled1, bool claimed1, uint256 tokensToEnable1) = + _processScheduledWithdrawal(withdrawals[1], action, creditAccount, to); // F: [WM-6B] + + if (action == ClaimAction.CLAIM && !(claimed0 || claimed1)) { + revert NothingToClaimException(); // F: [WM-6A] + } + + hasScheduled = scheduled0 || scheduled1; // F: [WM-6B] + tokensToEnable = tokensToEnable0 | tokensToEnable1; // F: [WM-6B] + } + + /// @inheritdoc IWithdrawalManager + function cancellableScheduledWithdrawals(address creditAccount, bool isForceCancel) + external + view + override + returns (address token1, uint256 amount1, address token2, uint256 amount2) + { + ScheduledWithdrawal[2] storage withdrawals = _scheduled[creditAccount]; + ClaimAction action = isForceCancel ? ClaimAction.FORCE_CANCEL : ClaimAction.CANCEL; // F: [WM-7] + if (action.cancelAllowed(withdrawals[0].maturity)) { + (token1,, amount1) = withdrawals[0].tokenMaskAndAmount(); // F: [WM-7] + } + if (action.cancelAllowed(withdrawals[1].maturity)) { + (token2,, amount2) = withdrawals[1].tokenMaskAndAmount(); // F: [WM-7] + } + } + + /// @dev Claims or cancels withdrawal based on its maturity and action type + function _processScheduledWithdrawal( + ScheduledWithdrawal storage w, + ClaimAction action, + address creditAccount, + address to + ) internal returns (bool scheduled, bool claimed, uint256 tokensToEnable) { + uint40 maturity = w.maturity; + scheduled = maturity > 1; // F: [WM-8] + if (action.claimAllowed(maturity)) { + _claimScheduledWithdrawal(w, creditAccount, to); // F: [WM-8] + scheduled = false; // F: [WM-8] + claimed = true; // F: [WM-8] + } else if (action.cancelAllowed(maturity)) { + tokensToEnable = _cancelScheduledWithdrawal(w, creditAccount); // F: [WM-8] + scheduled = false; // F: [WM-8] + } + } + + /// @dev Claims scheduled withdrawal, clears withdrawal in storage + /// @custom:expects Withdrawal is scheduled + function _claimScheduledWithdrawal(ScheduledWithdrawal storage w, address creditAccount, address to) internal { + (address token,, uint256 amount) = w.tokenMaskAndAmount(); // F: [WM-9A] + w.clear(); // F: [WM-9A] + emit ClaimScheduledWithdrawal(creditAccount, token, to, amount); // F: [WM-9A] + + bool success = IERC20(token).unsafeTransfer(to, amount); // F: [WM-9A] + if (!success) _addImmediateWithdrawal(to, token, amount); // F: [WM-9B] + } + + /// @dev Cancels withdrawal, clears withdrawal in storage + /// @custom:expects Withdrawal is scheduled + function _cancelScheduledWithdrawal(ScheduledWithdrawal storage w, address creditAccount) + internal + returns (uint256 tokensToEnable) + { + (address token, uint256 tokenMask, uint256 amount) = w.tokenMaskAndAmount(); // F: [WM-10] + w.clear(); // F: [WM-10] + emit CancelScheduledWithdrawal(creditAccount, token, amount); // F: [WM-10] + + IERC20(token).safeTransfer(creditAccount, amount); // F: [WM-10] + tokensToEnable = tokenMask; // F: [WM-10] + } + + /// ------------- /// + /// CONFIGURATION /// + /// ------------- /// + + /// @inheritdoc IWithdrawalManager + function setWithdrawalDelay(uint40 _delay) + external + override + configuratorOnly // F: [WM-2] + { + _setWithdrawalDelay(_delay); + } + + /// @dev Sets new delay for scheduled withdrawals + function _setWithdrawalDelay(uint40 _delay) internal { + if (_delay != delay) { + delay = _delay; // F: [WM-11] + emit SetWithdrawalDelay(_delay); // F: [WM-11] + } + } + + /// @inheritdoc IWithdrawalManager + function setCreditManagerStatus(address creditManager, bool status) + external + override + configuratorOnly // F: [WM-2] + { + if (creditManagerStatus[creditManager] != status) { + creditManagerStatus[creditManager] = status; // F: [WM-12] + emit SetCreditManagerStatus(creditManager, status); // F: [WM-12] + } + } +} diff --git a/contracts/support/risk-controller/ControllerTimelock.sol b/contracts/support/risk-controller/ControllerTimelock.sol new file mode 100644 index 00000000..cf9115dd --- /dev/null +++ b/contracts/support/risk-controller/ControllerTimelock.sol @@ -0,0 +1,303 @@ +// SPDX-License-Identifier: BUSL-1.1 +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {PolicyManager} from "./PolicyManager.sol"; + +import {IControllerTimelock, QueuedTransactionData} from "../../interfaces/IControllerTimelock.sol"; + +import {ICreditManagerV3} from "../../interfaces/ICreditManagerV3.sol"; +import {ICreditConfigurator} from "../../interfaces/ICreditConfiguratorV3.sol"; +import {ICreditFacade} from "../../interfaces/ICreditFacade.sol"; +import {IPool4626} from "../../interfaces/IPool4626.sol"; +import {ILPPriceFeed} from "../../interfaces/ILPPriceFeed.sol"; + +/// @dev +contract ControllerTimelock is PolicyManager, IControllerTimelock { + /// @dev Period before a mature transaction becomes stale + uint256 public constant GRACE_PERIOD = 14 days; + + /// @dev Admin address that can schedule controller transactions + address public admin; + + /// @dev Admin address that can cancel transactions + address public vetoAdmin; + + /// @dev Delay before a risk-related transaction can be executed + uint256 public delay = 1 days; + + /// @dev Mapping of transaction hashes to their data + mapping(bytes32 => QueuedTransactionData) public queuedTransactions; + + constructor(address _addressProvider, address _admin, address _vetoAdmin) PolicyManager(_addressProvider) { + admin = _admin; + vetoAdmin = _vetoAdmin; + } + + modifier adminOnly() { + if (msg.sender != admin) { + revert CallerNotAdminException(); + } + _; + } + + modifier vetoAdminOnly() { + if (msg.sender != vetoAdmin) { + revert CallerNotVetoAdminException(); + } + _; + } + + /// @dev Queues a transaction to set a new expiration date in the Credit Facade + /// @dev Requires the policy for keccak(group(creditManager), "EXPIRATION_DATE") to be enabled, otherwise auto-fails the check + /// @param creditManager Adress of CM to update the expiration date for + /// @param expirationDate The new expiration date + function setExpirationDate(address creditManager, uint40 expirationDate) + external + adminOnly // F: [RCT-01] + { + ICreditFacade creditFacade = ICreditFacade(ICreditManagerV3(creditManager).creditFacade()); + address creditConfigurator = ICreditManagerV3(creditManager).creditConfigurator(); + IPool4626 pool = IPool4626(ICreditManagerV3(creditManager).pool()); + + uint40 oldExpirationDate = creditFacade.expirationDate(); + uint256 totalBorrowed = pool.creditManagerBorrowed(address(creditManager)); + + if ( + !_checkPolicy(creditManager, "EXPIRATION_DATE", uint256(oldExpirationDate), uint256(expirationDate)) + || totalBorrowed != 0 + ) { + revert ParameterChecksFailedException(); // F: [RCT-01] + } + + _queueTransaction({ + target: creditConfigurator, + signature: "setExpirationDate(uint40)", + data: abi.encode(expirationDate) + }); // F: [RCT-01] + } + + /// @dev Queues a transaction to set a new limiter value in a price feed + /// @dev Requires the policy for keccak(group(priceFeed), "LP_PRICE_FEED_LIMITER") to be enabled, otherwise auto-fails the check + /// @param priceFeed The price feed to update the limiter in + /// @param lowerBound The new limiter lower bound value + function setLPPriceFeedLimiter(address priceFeed, uint256 lowerBound) + external + adminOnly // F: [RCT-02] + { + uint256 currentLowerBound = ILPPriceFeed(priceFeed).lowerBound(); + + if (!_checkPolicy(priceFeed, "LP_PRICE_FEED_LIMITER", currentLowerBound, lowerBound)) { + revert ParameterChecksFailedException(); // F: [RCT-02] + } + + _queueTransaction({target: priceFeed, signature: "setLimiter(uint256)", data: abi.encode(lowerBound)}); // F: [RCT-02] + } + + /// @dev Queues a transaction to set a new max debt per block multiplier + /// @dev Requires the policy for keccak(group(creditManager), "MAX_DEBT_PER_BLOCK_MULTIPLIER") to be enabled, otherwise auto-fails the check + /// @param creditManager Adress of CM to update the multiplier for + /// @param multiplier The new multiplier value + function setMaxDebtPerBlockMultiplier(address creditManager, uint8 multiplier) + external + adminOnly // F: [RCT-03] + { + ICreditFacade creditFacade = ICreditFacade(ICreditManagerV3(creditManager).creditFacade()); + address creditConfigurator = ICreditManagerV3(creditManager).creditConfigurator(); + + uint8 currentMultiplier = creditFacade.maxDebtPerBlockMultiplier(); + + if ( + !_checkPolicy( + creditManager, "MAX_DEBT_PER_BLOCK_MULTIPLIER", uint256(currentMultiplier), uint256(multiplier) + ) + ) { + revert ParameterChecksFailedException(); // F: [RCT-03] + } + + _queueTransaction({ + target: creditConfigurator, + signature: "setMaxDebtPerBlockMultiplier(uint8)", + data: abi.encode(multiplier) + }); // F: [RCT-03] + } + + /// @dev Queues a transaction to set a new max debt per block multiplier + /// @dev Requires policies for keccak(group(creditManager), "MIN_DEBT") and keccak(group(creditManager), "MAX_DEBT") to be enabled, otherwise auto-fails the check + /// @param creditManager Adress of CM to update the limits for + /// @param minDebt The minimal debt amount + /// @param maxDebt The maximal debt amount + function setDebtLimits(address creditManager, uint128 minDebt, uint128 maxDebt) + external + adminOnly // F: [RCT-04] + { + ICreditFacade creditFacade = ICreditFacade(ICreditManagerV3(creditManager).creditFacade()); + address creditConfigurator = ICreditManagerV3(creditManager).creditConfigurator(); + + (uint128 minDebtCurrent, uint128 maxDebtCurrent) = creditFacade.debtLimits(); + + if ( + !_checkPolicy(creditManager, "MIN_DEBT", uint256(minDebtCurrent), uint256(minDebt)) + || !_checkPolicy(creditManager, "MAX_DEBT", uint256(maxDebtCurrent), uint256(maxDebt)) + ) { + revert ParameterChecksFailedException(); // F: [RCT-04] + } + + _queueTransaction({ + target: creditConfigurator, + signature: "setLimits(uint128,uint128)", + data: abi.encode(minDebt, maxDebt) + }); // F: [RCT-04] + } + + /// @dev Queues a transaction to set a new debt limit for a Credit Manager + /// @dev Requires the policy for keccak(group(creditManager), "CREDIT_MANAGER_DEBT_LIMIT") to be enabled, otherwise auto-fails the check + /// @param creditManager Adress of CM to update the debt limit for + /// @param debtLimit The new debt limit + function setCreditManagerDebtLimit(address creditManager, uint256 debtLimit) + external + adminOnly // F: [RCT-05] + { + IPool4626 pool = IPool4626(ICreditManagerV3(creditManager).pool()); + + uint256 debtLimitCurrent = pool.creditManagerLimit(address(creditManager)); + + if (!_checkPolicy(creditManager, "CREDIT_MANAGER_DEBT_LIMIT", uint256(debtLimitCurrent), uint256(debtLimit))) { + revert ParameterChecksFailedException(); // F: [RCT-05] + } + + _queueTransaction({ + target: address(pool), + signature: "setCreditManagerLimit(address,uint256)", + data: abi.encode(address(creditManager), debtLimit) + }); // F: [RCT-05] + } + + /// @dev Queues a transaction to start a liquidation threshold ramp + /// @dev Requires the policy for keccak(group(contractManager), group(token), "TOKEN_LT") to be enabled, otherwise auto-fails the check + /// @param creditManager Adress of CM to update the LT for + /// @param token Token to ramp the LT for + /// @param liquidationThresholdFinal The liquidation threshold value after the ramp + /// @param rampDuration Duration of the ramp + function rampLiquidationThreshold( + address creditManager, + address token, + uint16 liquidationThresholdFinal, + uint24 rampDuration + ) + external + adminOnly // F: [RCT-06] + { + bytes32 policyHash = keccak256(abi.encode(_group[creditManager], _group[token], "TOKEN_LT")); + + address creditConfigurator = ICreditManagerV3(creditManager).creditConfigurator(); + uint256 ltCurrent = ICreditManagerV3(creditManager).liquidationThresholds(token); + + if (!_checkPolicy(policyHash, uint256(ltCurrent), uint256(liquidationThresholdFinal)) || rampDuration < 7 days) + { + revert ParameterChecksFailedException(); // F: [RCT-06] + } + + _queueTransaction({ + target: creditConfigurator, + signature: "rampLiquidationThreshold(address,uint16,uint24)", + data: abi.encode(token, liquidationThresholdFinal, rampDuration) + }); // F: [RCT-06] + } + + /// @dev Internal function that records the transaction into the queued tx map + /// @param target The contract to call + /// @param signature The signature of the called function + /// @param data The call data + function _queueTransaction(address target, string memory signature, bytes memory data) internal returns (bytes32) { + uint256 eta = block.timestamp + delay; + + bytes32 txHash = keccak256(abi.encode(target, signature, data, eta)); + + queuedTransactions[txHash] = + QueuedTransactionData({queued: true, target: target, eta: uint40(eta), signature: signature, data: data}); + + emit QueueTransaction(txHash, target, signature, data, uint40(eta)); + return txHash; + } + + /// @dev Sets the transaction's queued status as false, effectively cancelling it + /// @param txHash Hash of the transaction to be cancelled + function cancelTransaction(bytes32 txHash) + external + vetoAdminOnly // F: [RCT-07] + { + queuedTransactions[txHash].queued = false; + emit CancelTransaction(txHash); + } + + /// @dev Executes a queued transaction + /// @param txHash Hash of the transaction to be executed + function executeTransaction(bytes32 txHash) + external + adminOnly // F: [RCT-09] + { + QueuedTransactionData memory qtd = queuedTransactions[txHash]; + + if (!qtd.queued) { + revert TxNotQueuedException(); // F: [RCT-07] + } + + address target = qtd.target; + uint40 eta = qtd.eta; + string memory signature = qtd.signature; + bytes memory data = qtd.data; + + if (block.timestamp < eta || block.timestamp > eta + GRACE_PERIOD) { + revert TxExecutedOutsideTimeWindowException(); // F: [RCT-09] + } + + queuedTransactions[txHash].queued = false; + + bytes memory callData; + + if (bytes(signature).length == 0) { + callData = data; + } else { + callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data); + } + + (bool success,) = target.call(callData); + + if (!success) { + revert TxExecutionRevertedException(); // F: [RCT-09] - TODO: Uncomment test after updating forge-std + } + + emit ExecuteTransaction(txHash); // F: [RCT-09] + } + + /// CONFIGURATION + + /// @dev Sets a new risk admin address + function setAdmin(address newAdmin) + external + configuratorOnly // F: [RCT-08] + { + admin = newAdmin; // F: [RCT-08] + emit SetAdmin(newAdmin); // F: [RCT-08] + } + + /// @dev Sets a new veto admin address + function setVetoAdmin(address newAdmin) + external + configuratorOnly // F: [RCT-08] + { + vetoAdmin = newAdmin; // F: [RCT-08] + emit SetVetoAdmin(newAdmin); // F: [RCT-08] + } + + /// @dev Sets a new ops admin delay + function setDelay(uint256 newDelay) + external + configuratorOnly // F: [RCT-08] + { + delay = newDelay; // F: [RCT-08] + emit SetDelay(newDelay); // F: [RCT-08] + } +} diff --git a/contracts/support/risk-controller/PolicyManager.sol b/contracts/support/risk-controller/PolicyManager.sol new file mode 100644 index 00000000..25070332 --- /dev/null +++ b/contracts/support/risk-controller/PolicyManager.sol @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: BUSL-1.1 +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.17; + +import {ACLNonReentrantTrait} from "../../traits/ACLNonReentrantTrait.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +/// @dev Policy that determines checks performed on a parameter +/// Each policy is defined for a contract group +struct Policy { + /// @dev Determines whether the policy is enabled + /// A disabled policy will auto-fail the policy check + bool enabled; + /// @dev Bitmask of flags that determine which policy checks to apply on parameter change: + /// 0 - check exact value + /// 1 - check min value + /// 2 - check max value + /// 3 - check min change + /// 4 - check max change + /// 5 - check min pct change + /// 6 - check max pct change + uint8 flags; + /// @dev Exact value to check the incoming parameter value against, if applies + uint256 exactValue; + /// @dev Min value to check the incoming parameter value against, if applies + uint256 minValue; + /// @dev Max value to check the incoming parameter value against, if applies + uint256 maxValue; + /// @dev A reference value of a parameter to check change magnitudes against; + /// When the reference update period has elapsed since the last reference point update, + /// the reference point is updated to the 'current' value on the next parameter change + /// NB: Should not be changed manually in most cases + uint256 referencePoint; + /// @dev The minimal time period after which the RP can be updated + uint40 referencePointUpdatePeriod; + /// @dev Last timestamp at which the reference point was updated + /// NB: Should not be changed manually in most cases + uint40 referencePointTimestampLU; + /// @dev Min and max absolute percentage changes for new values, relative to reference point + uint16 minPctChange; + uint16 maxPctChange; + /// @dev Min and max absolute changes for new values, relative to reference point + uint256 minChange; + uint256 maxChange; +} + +/// @dev A contract for managing bounds and conditions for mission-critical protocol params +contract PolicyManager is ACLNonReentrantTrait { + uint256 public constant CHECK_EXACT_VALUE_FLAG = 1; + uint256 public constant CHECK_MIN_VALUE_FLAG = 1 << 1; + uint256 public constant CHECK_MAX_VALUE_FLAG = 1 << 2; + uint256 public constant CHECK_MIN_CHANGE_FLAG = 1 << 3; + uint256 public constant CHECK_MAX_CHANGE_FLAG = 1 << 4; + uint256 public constant CHECK_MIN_PCT_CHANGE_FLAG = 1 << 5; + uint256 public constant CHECK_MAX_PCT_CHANGE_FLAG = 1 << 6; + + /// @dev Mapping from parameter hashes to metaparameters + mapping(bytes32 => Policy) internal _policies; + + /// @dev Mapping from a contract address to its group + mapping(address => string) internal _group; + + constructor(address _addressProvider) ACLNonReentrantTrait(_addressProvider) {} + + /// @dev Sets the policy, using policy UID as key + /// @param policyHash A unique identifier for a policy + /// Generally, this should be a hash of (PARAMETER_NAME, GROUP_NAME) + /// @param initialPolicy The initial policy values + function setPolicy(bytes32 policyHash, Policy memory initialPolicy) + external + configuratorOnly // F: [PM-01] + { + initialPolicy.enabled = true; // F: [PM-01] + _policies[policyHash] = initialPolicy; // F: [PM-01] + } + + /// @dev Disables the policy which makes all requested checks for the passed policy hash to auto-fail + /// @param policyHash A unique identifier for a policy + function disablePolicy(bytes32 policyHash) + public + configuratorOnly // F: [PM-02] + { + _policies[policyHash].enabled = false; // F: [PM-02] + } + + /// @dev Retrieves policy from policy UID + function getPolicy(bytes32 policyHash) external view returns (Policy memory) { + return _policies[policyHash]; // F: [PM-01] + } + + /// @dev Sets the policy group of the address + function setGroup(address contractAddress, string memory group) external configuratorOnly { + _group[contractAddress] = group; + } + + /// @dev Retrieves the group associated with a contract + function getGroup(address contractAddress) external view returns (string memory) { + return _group[contractAddress]; + } + + /// @dev Performs parameter checks, with policy retrieved based on contract and parameter name + function _checkPolicy(address contractAddress, string memory paramName, uint256 oldValue, uint256 newValue) + internal + returns (bool) + { + bytes32 policyHash = keccak256(abi.encode(_group[contractAddress], paramName)); + return _checkPolicy(policyHash, oldValue, newValue); + } + + /// @dev Performs parameter checks, with policy retrieved based on policy UID + function _checkPolicy(bytes32 policyHash, uint256 oldValue, uint256 newValue) internal returns (bool) { + Policy storage policy = _policies[policyHash]; + + if (!policy.enabled) return false; // F: [PM-02] + + uint8 flags = policy.flags; + + if (flags & CHECK_EXACT_VALUE_FLAG > 0) { + if (newValue != policy.exactValue) return false; // F: [PM-03] + } + + if (flags & CHECK_MIN_VALUE_FLAG > 0) { + if (newValue < policy.minValue) return false; // F: [PM-04] + } + + if (flags & CHECK_MAX_VALUE_FLAG > 0) { + if (newValue > policy.maxValue) return false; // F: [PM-05] + } + + uint256 rp; + + if ( + flags + & (CHECK_MIN_CHANGE_FLAG | CHECK_MAX_CHANGE_FLAG | CHECK_MIN_PCT_CHANGE_FLAG | CHECK_MAX_PCT_CHANGE_FLAG) + > 0 + ) { + if (block.timestamp > policy.referencePointTimestampLU + policy.referencePointUpdatePeriod) { + policy.referencePoint = oldValue; // F: [PM-06] + policy.referencePointTimestampLU = uint40(block.timestamp); // F: [PM-06] + } + rp = policy.referencePoint; + } + + if (flags & CHECK_MIN_CHANGE_FLAG > 0) { + uint256 diff = newValue > rp ? newValue - rp : rp - newValue; + if (diff < policy.minChange) return false; // F: [PM-07] + } + + if (flags & CHECK_MAX_CHANGE_FLAG > 0) { + uint256 diff = newValue > rp ? newValue - rp : rp - newValue; + if (diff > policy.maxChange) return false; // F: [PM-08] + } + + if (flags & CHECK_MIN_PCT_CHANGE_FLAG > 0) { + uint256 diff = newValue > rp ? newValue - rp : rp - newValue; + uint256 pctDiff = diff * PERCENTAGE_FACTOR / rp; + if (pctDiff < policy.minPctChange) return false; // F: [PM-09] + } + + if (flags & CHECK_MAX_PCT_CHANGE_FLAG > 0) { + uint256 diff = newValue > rp ? newValue - rp : rp - newValue; + uint256 pctDiff = diff * PERCENTAGE_FACTOR / rp; + if (pctDiff > policy.maxPctChange) return false; // F: [PM-10] + } + + return true; + } +} diff --git a/contracts/test/config/CreditConfig.sol b/contracts/test/config/CreditConfig.sol index 057007b6..819de529 100644 --- a/contracts/test/config/CreditConfig.sol +++ b/contracts/test/config/CreditConfig.sol @@ -6,13 +6,14 @@ pragma solidity ^0.8.10; import {TokensTestSuite} from "../suites/TokensTestSuite.sol"; import {Tokens} from "./Tokens.sol"; -import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfigurator.sol"; +import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfiguratorV3.sol"; import {PriceFeedConfig} from "@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol"; import {ICreditConfig} from "../interfaces/ICreditConfig.sol"; import {ITokenTestSuite} from "../interfaces/ITokenTestSuite.sol"; import "../lib/constants.sol"; +import {Test} from "forge-std/Test.sol"; struct CollateralTokensItem { Tokens token; @@ -21,7 +22,7 @@ struct CollateralTokensItem { /// @title CreditManagerTestSuite /// @notice Deploys contract for unit testing of CreditManagerV3.sol -contract CreditConfig is DSTest, ICreditConfig { +contract CreditConfig is Test, ICreditConfig { uint128 public minBorrowedAmount; uint128 public maxBorrowedAmount; @@ -56,21 +57,21 @@ contract CreditConfig is DSTest, ICreditConfig { maxBorrowedAmount: maxBorrowedAmount, collateralTokens: getCollateralTokens(), degenNFT: address(0), - withdrawManager: address(0), + withdrawalManager: address(0), expirable: false }); } function getCollateralTokens() public override returns (CollateralToken[] memory collateralTokens) { CollateralTokensItem[8] memory collateralTokenOpts = [ - CollateralTokensItem({token: Tokens.USDC, liquidationThreshold: 9000}), - CollateralTokensItem({token: Tokens.USDT, liquidationThreshold: 8800}), - CollateralTokensItem({token: Tokens.DAI, liquidationThreshold: 8300}), - CollateralTokensItem({token: Tokens.WETH, liquidationThreshold: 8300}), - CollateralTokensItem({token: Tokens.LINK, liquidationThreshold: 7300}), - CollateralTokensItem({token: Tokens.CRV, liquidationThreshold: 7300}), - CollateralTokensItem({token: Tokens.CVX, liquidationThreshold: 7300}), - CollateralTokensItem({token: Tokens.STETH, liquidationThreshold: 7300}) + CollateralTokensItem({token: Tokens.USDC, liquidationThreshold: 90_00}), + CollateralTokensItem({token: Tokens.USDT, liquidationThreshold: 88_00}), + CollateralTokensItem({token: Tokens.DAI, liquidationThreshold: 83_00}), + CollateralTokensItem({token: Tokens.WETH, liquidationThreshold: 83_00}), + CollateralTokensItem({token: Tokens.LINK, liquidationThreshold: 73_00}), + CollateralTokensItem({token: Tokens.CRV, liquidationThreshold: 73_00}), + CollateralTokensItem({token: Tokens.CVX, liquidationThreshold: 73_00}), + CollateralTokensItem({token: Tokens.STETH, liquidationThreshold: 73_00}) ]; lt[underlyingSymbol] = DEFAULT_UNDERLYING_LT; diff --git a/contracts/test/gas/CreditFacade_Gas.t.sol b/contracts/test/gas/CreditFacade_Gas.t.sol index 8804ab75..82c0a24a 100644 --- a/contracts/test/gas/CreditFacade_Gas.t.sol +++ b/contracts/test/gas/CreditFacade_Gas.t.sol @@ -9,17 +9,14 @@ import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWE import {CreditFacadeV3} from "../../credit/CreditFacadeV3.sol"; import {CreditManagerV3} from "../../credit/CreditManagerV3.sol"; -import {CreditAccount} from "@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol"; -import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; - import {BotList} from "../../support/BotList.sol"; import {ICreditFacade, ICreditFacadeMulticall, ICreditFacadeEvents} from "../../interfaces/ICreditFacade.sol"; import {ICreditManagerV3, ICreditManagerV3Events, ClosureAction} from "../../interfaces/ICreditManagerV3.sol"; +import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; import {IDegenNFT, IDegenNFTExceptions} from "@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol"; -import {IWithdrawManager} from "../../interfaces/IWithdrawManager.sol"; -import {QuotaUpdate} from "../../interfaces/IPoolQuotaKeeper.sol"; +import {IWithdrawalManager} from "../../interfaces/IWithdrawalManager.sol"; // DATA import {MultiCall, MultiCallOps} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; @@ -54,6 +51,7 @@ import {TokensTestSuite} from "../suites/TokensTestSuite.sol"; import {Tokens} from "../config/Tokens.sol"; import {CreditFacadeTestSuite} from "../suites/CreditFacadeTestSuite.sol"; import {CreditConfig} from "../config/CreditConfig.sol"; +import {Test} from "forge-std/Test.sol"; uint256 constant WETH_TEST_AMOUNT = 5 * WAD; uint16 constant REFERRAL_CODE = 23; @@ -61,7 +59,7 @@ uint16 constant REFERRAL_CODE = 23; /// @title CreditFacadeTest /// @notice Designed for unit test purposes only contract CreditFacadeGasTest is - DSTest, + Test, BalanceHelper, CreditFacadeTestHelper, ICreditManagerV3Events, @@ -87,7 +85,11 @@ contract CreditFacadeGasTest is _underlying ); - cft = new CreditFacadeTestSuite(creditConfig, supportQuotas, withDegenNFT, withExpiration, 1); + cft = new CreditFacadeTestSuite({ _creditConfig: creditConfig, + supportQuotas: supportQuotas, + withDegenNFT: withDegenNFT, + withExpiration: withExpiration, + accountFactoryVer: 1}); // cft.testFacadeWithQuotas(); @@ -104,11 +106,11 @@ contract CreditFacadeGasTest is address(targetMock) ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(address(targetMock), address(adapterMock)); - evm.label(address(adapterMock), "AdapterMock"); - evm.label(address(targetMock), "TargetContractMock"); + vm.label(address(adapterMock), "AdapterMock"); + vm.label(address(targetMock), "TargetContractMock"); } function _zeroAllLTs() internal { @@ -117,8 +119,8 @@ contract CreditFacadeGasTest is for (uint256 i = 0; i < collateralTokensCount; ++i) { (address token,) = creditManager.collateralTokens(i); - evm.prank(address(creditConfigurator)); - CreditManagerV3(address(creditManager)).setLiquidationThreshold(token, 0); + vm.prank(address(creditConfigurator)); + CreditManagerV3(address(creditManager)).setCollateralTokenData(token, 0, 0, type(uint40).max, 0); } } @@ -143,8 +145,8 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); uint256 gasSpent = gasBefore - gasleft(); @@ -175,8 +177,8 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); uint256 gasSpent = gasBefore - gasleft(); @@ -217,8 +219,8 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); uint256 gasSpent = gasBefore - gasleft(); @@ -230,17 +232,27 @@ contract CreditFacadeGasTest is /// @dev [G-FA-5]: openCreditAccount with adding quoted collateral and updating quota function test_G_FA_05_openCreditAccountMulticall_gas_estimate_4() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + + cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.USDC), 500); + cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.USDC), type(uint96).max); + cft.gaugeMock().updateEpoch(); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.USDC)); + + cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.WETH), 500); + cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.WETH), type(uint96).max); + cft.gaugeMock().updateEpoch(); + creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.WETH)); + vm.stopPrank(); tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); - MultiCall[] memory calls = new MultiCall[](2); + MultiCall[] memory calls = new MultiCall[](4); calls[0] = MultiCall({ target: address(creditFacade), @@ -249,39 +261,49 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); + calls[1] = MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) + }); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT))}); + calls[2] = MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.WETH), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) + }); - calls[1] = MultiCall({ + calls[3] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); uint256 gasBefore = gasleft(); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); uint256 gasSpent = gasBefore - gasleft(); - emit log_string( - string( - abi.encodePacked("Gas spent - opening an account with adding quoted collateral and updating 1 quota: ") - ) - ); + emit log_string(string(abi.encodePacked("Gas spent array: "))); emit log_uint(gasSpent); } /// @dev [G-FA-6]: openCreditAccount with swapping and updating quota function test_G_FA_06_openCreditAccountMulticall_gas_estimate_5() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + vm.stopPrank(); tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); @@ -295,14 +317,12 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT))}); - calls[1] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); calls[2] = MultiCall({ @@ -315,8 +335,8 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); uint256 gasSpent = gasBefore - gasleft(); @@ -339,8 +359,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls[0] = MultiCall({ target: address(creditFacade), @@ -349,7 +369,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -371,8 +391,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls[0] = MultiCall({ target: address(creditFacade), @@ -381,7 +401,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -392,12 +412,12 @@ contract CreditFacadeGasTest is /// @dev [G-FA-9]: multicall with decreaseDebt and active quota interest function test_G_FA_09_decreaseDebt_gas_estimate_2() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + vm.stopPrank(); tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); @@ -411,20 +431,18 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT))}); - calls[1] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.warp(block.timestamp + 30 days); + vm.warp(block.timestamp + 30 days); calls[0] = MultiCall({ target: address(creditFacade), @@ -433,7 +451,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -455,8 +473,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls[0] = MultiCall({ target: address(creditFacade), @@ -465,7 +483,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -492,8 +510,8 @@ contract CreditFacadeGasTest is callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (tokenTestSuite.addressOf(Tokens.LINK))) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls[0] = MultiCall({ target: address(creditFacade), @@ -502,7 +520,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -524,8 +542,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls[0] = MultiCall({ target: address(adapterMock), @@ -537,7 +555,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -559,8 +577,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); calls = new MultiCall[](2); @@ -582,7 +600,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -593,12 +611,12 @@ contract CreditFacadeGasTest is /// @dev [G-FA-13]: multicall with a single swap into quoted token function test_G_FA_13_multicall_gas_estimate_2() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + vm.stopPrank(); tokenTestSuite.mint(underlying, USER, DAI_ACCOUNT_AMOUNT); @@ -611,8 +629,8 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); tokenTestSuite.burn(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); tokenTestSuite.mint(Tokens.LINK, creditAccount, LINK_ACCOUNT_AMOUNT * 3); @@ -627,21 +645,17 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - - quotaUpdates[0] = QuotaUpdate({ - token: tokenTestSuite.addressOf(Tokens.LINK), - quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT * 3)) - }); - calls[1] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -669,16 +683,16 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); calls = new MultiCall[](0); uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount(creditAccount, USER, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -709,16 +723,16 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); calls = new MultiCall[](0); uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount(creditAccount, USER, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -729,12 +743,12 @@ contract CreditFacadeGasTest is /// @dev [G-FA-16]: closeCreditAccount with 2 tokens and active quota interest function test_G_FA_16_closeCreditAccount_gas_estimate_3() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + vm.stopPrank(); tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); @@ -748,28 +762,26 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT))}); - calls[1] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); - evm.warp(block.timestamp + 30 days); + vm.warp(block.timestamp + 30 days); calls = new MultiCall[](0); uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount(creditAccount, USER, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -791,10 +803,10 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); calls[0] = MultiCall({ target: address(adapterMock), @@ -806,7 +818,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount(creditAccount, USER, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -828,10 +840,10 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); _zeroAllLTs(); @@ -839,7 +851,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -873,10 +885,10 @@ contract CreditFacadeGasTest is ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); - evm.roll(block.number + 1); + vm.roll(block.number + 1); _zeroAllLTs(); @@ -884,7 +896,7 @@ contract CreditFacadeGasTest is uint256 gasBefore = gasleft(); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); @@ -895,12 +907,12 @@ contract CreditFacadeGasTest is /// @dev [G-FA-20]: liquidateCreditAccount with 2 tokens and active quota interest function test_G_FA_20_liquidateCreditAccount_gas_estimate_3() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cft.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 500); cft.poolQuotaKeeper().setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), type(uint96).max); cft.gaugeMock().updateEpoch(); creditConfigurator.makeTokenQuoted(tokenTestSuite.addressOf(Tokens.LINK)); - evm.stopPrank(); + vm.stopPrank(); tokenTestSuite.mint(Tokens.LINK, USER, LINK_ACCOUNT_AMOUNT); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); @@ -917,30 +929,28 @@ contract CreditFacadeGasTest is ) }); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(LINK_ACCOUNT_AMOUNT))}); - calls[1] = MultiCall({ target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.updateQuotas, (quotaUpdates)) + callData: abi.encodeCall( + ICreditFacadeMulticall.updateQuota, + (tokenTestSuite.addressOf(Tokens.LINK), int96(int256(LINK_ACCOUNT_AMOUNT))) + ) }); - evm.prank(USER); - address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, 0); + vm.prank(USER); + address creditAccount = creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, calls, false, 0); _zeroAllLTs(); - evm.roll(block.number + 1); + vm.roll(block.number + 1); - evm.warp(block.timestamp + 30 days); + vm.warp(block.timestamp + 30 days); calls = new MultiCall[](0); uint256 gasBefore = gasleft(); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 0, false, calls); uint256 gasSpent = gasBefore - gasleft(); diff --git a/contracts/test/helpers/BalanceEngine.sol b/contracts/test/helpers/BalanceEngine.sol index 10aedc42..f4e99ef5 100644 --- a/contracts/test/helpers/BalanceEngine.sol +++ b/contracts/test/helpers/BalanceEngine.sol @@ -6,11 +6,11 @@ pragma solidity ^0.8.10; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import "../lib/test.sol"; +import {Test} from "forge-std/Test.sol"; /// @title CreditManagerTestSuite /// @notice Deploys contract for unit testing of CreditManagerV3.sol -contract BalanceEngine is DSTest { +contract BalanceEngine is Test { function expectBalance(address token, address holder, uint256 expectedBalance) internal { expectBalance(token, holder, expectedBalance, ""); } diff --git a/contracts/test/helpers/CreditFacadeTestEngine.sol b/contracts/test/helpers/CreditFacadeTestEngine.sol deleted file mode 100644 index 960cbb4e..00000000 --- a/contracts/test/helpers/CreditFacadeTestEngine.sol +++ /dev/null @@ -1,197 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {CreditFacadeV3} from "../../credit/CreditFacadeV3.sol"; -import {CreditConfigurator} from "../../credit/CreditConfigurator.sol"; -import {MultiCall} from "../../interfaces/ICreditFacade.sol"; - -import {ICreditFacadeMulticall} from "../../interfaces/ICreditFacade.sol"; -import {ICreditManagerV3, ICreditManagerV3Events} from "../../interfaces/ICreditManagerV3.sol"; - -import {CreditFacadeTestSuite} from "../suites/CreditFacadeTestSuite.sol"; -// import { TokensTestSuite, Tokens } from "../suites/TokensTestSuite.sol"; -import {LEVERAGE_DECIMALS} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; -import "../lib/constants.sol"; - -/// @title CreditManagerTestSuite -/// @notice Deploys contract for unit testing of CreditManagerV3.sol -contract CreditFacadeTestEngine is DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - - // Suites - ICreditManagerV3 public creditManager; - CreditFacadeV3 public creditFacade; - CreditConfigurator public creditConfigurator; - - CreditFacadeTestSuite public cft; - - address public underlying; - - /// - /// HELPERS - /// - - function _openCreditAccount(uint256 amount, address onBehalfOf, uint16 leverageFactor, uint16 referralCode) - internal - returns (address) - { - uint256 borrowedAmount = (amount * leverageFactor) / LEVERAGE_DECIMALS; // F:[FA-5] - - return creditFacade.openCreditAccount( - borrowedAmount, - onBehalfOf, - multicallBuilder( - MultiCall({ - target: address(creditFacade), - callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, amount)) - }) - ), - referralCode - ); - } - - function _openTestCreditAccount() internal returns (address creditAccount, uint256 balance) { - uint256 accountAmount = cft.creditAccountAmount(); - - cft.tokenTestSuite().mint(underlying, USER, accountAmount); - - evm.startPrank(USER); - creditAccount = _openCreditAccount(accountAmount, USER, 100, 0); - - evm.stopPrank(); - - balance = IERC20(underlying).balanceOf(creditAccount); - - evm.label(creditAccount, "creditAccount"); - } - - function _openExtraTestCreditAccount() internal returns (address creditAccount, uint256 balance) { - uint256 accountAmount = cft.creditAccountAmount(); - - /// TODO: FIX - // evm.prank(FRIEND); - // creditFacade.openCreditAccount(accountAmount, FRIEND, 100, 0); - - evm.startPrank(USER); - creditAccount = _openCreditAccount(accountAmount, USER, 100, 0); - - evm.stopPrank(); - - balance = IERC20(underlying).balanceOf(creditAccount); - } - - function _closeTestCreditAccount(address creditAccount) internal { - MultiCall[] memory closeCalls; - - // switch to new block to be able to close account - evm.roll(block.number + 1); - - (,, uint256 underlyingToClose) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - uint256 underlyingBalance = cft.tokenTestSuite().balanceOf(underlying, creditAccount); - - if (underlyingToClose > underlyingBalance) { - cft.tokenTestSuite().mint(underlying, USER, underlyingToClose - underlyingBalance); - - cft.tokenTestSuite().approve(underlying, USER, address(creditManager)); - } - - evm.prank(USER); - creditFacade.closeCreditAccount(creditAccount, FRIEND, 0, false, closeCalls); - } - - function expectTokenIsEnabled(address creditAccount, address token, bool expectedState) internal { - expectTokenIsEnabled(creditAccount, token, expectedState, ""); - } - - function expectTokenIsEnabled(address creditAccount, address token, bool expectedState, string memory reason) - internal - { - bool state = creditManager.getTokenMaskOrRevert(token) & creditManager.enabledTokensMap(creditAccount) != 0; - - if (state != expectedState && bytes(reason).length != 0) { - emit log_string(reason); - } - - assertTrue( - state == expectedState, - string( - abi.encodePacked( - "Token ", - IERC20Metadata(token).symbol(), - state ? " enabled as not expetcted" : " not enabled as expected " - ) - ) - ); - } - - function addCollateral(address token, uint256 amount) internal { - // tokenTestSuite.mint(t, USER, amount); - - evm.startPrank(USER); - IERC20(token).approve(address(creditManager), type(uint256).max); - - // TODO: rewrite as collateral - // creditFacade.addCollateral(USER, token, amount); - - evm.stopPrank(); - } - - function _makeAccountsLiquitable() internal { - evm.prank(CONFIGURATOR); - creditConfigurator.setFees(1000, 200, 9000, 100, 9500); - - // switch to new block to be able to close account - evm.roll(block.number + 1); - } - - function executeOneLineMulticall(address creditAccount, address targetContract, bytes memory callData) internal { - evm.prank(USER); - creditFacade.multicall(creditAccount, multicallBuilder(MultiCall({target: targetContract, callData: callData}))); - } - - function multicallBuilder() internal pure returns (MultiCall[] memory calls) {} - - function multicallBuilder(MultiCall memory call1) internal pure returns (MultiCall[] memory calls) { - calls = new MultiCall[](1); - calls[0] = call1; - } - - function multicallBuilder(MultiCall memory call1, MultiCall memory call2) - internal - pure - returns (MultiCall[] memory calls) - { - calls = new MultiCall[](2); - calls[0] = call1; - calls[1] = call2; - } - - function multicallBuilder(MultiCall memory call1, MultiCall memory call2, MultiCall memory call3) - internal - pure - returns (MultiCall[] memory calls) - { - calls = new MultiCall[](3); - calls[0] = call1; - calls[1] = call2; - calls[2] = call3; - } - - function expectSafeAllowance(address creditAccount, address target) internal { - uint256 len = creditManager.collateralTokensCount(); - for (uint256 i = 0; i < len; i++) { - (address token,) = creditManager.collateralTokens(i); - assertLe(IERC20(token).allowance(creditAccount, target), 1, "allowance is too high"); - } - } - - function arrayOf(address addr0, address addr1) internal pure returns (address[] memory result) { - result = new address[](2); - result[0] = addr0; - result[1] = addr1; - } -} diff --git a/contracts/test/helpers/CreditFacadeTestHelper.sol b/contracts/test/helpers/CreditFacadeTestHelper.sol index 2967fb49..7b032167 100644 --- a/contracts/test/helpers/CreditFacadeTestHelper.sol +++ b/contracts/test/helpers/CreditFacadeTestHelper.sol @@ -4,13 +4,190 @@ pragma solidity ^0.8.10; import {TokensTestSuite} from "../suites/TokensTestSuite.sol"; -import {CreditFacadeTestEngine} from "../helpers/CreditFacadeTestEngine.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {CreditFacadeV3} from "../../credit/CreditFacadeV3.sol"; +import {CreditConfigurator} from "../../credit/CreditConfiguratorV3.sol"; +import {MultiCall} from "../../interfaces/ICreditFacade.sol"; + +import {ICreditFacadeMulticall} from "../../interfaces/ICreditFacade.sol"; +import {ICreditManagerV3, ICreditManagerV3Events} from "../../interfaces/ICreditManagerV3.sol"; + +import {CreditFacadeTestSuite} from "../suites/CreditFacadeTestSuite.sol"; +// import { TokensTestSuite, Tokens } from "../suites/TokensTestSuite.sol"; +import {LEVERAGE_DECIMALS} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; +import "../lib/constants.sol"; + +import {TestHelper} from "../lib/helper.sol"; + import "../lib/constants.sol"; import {Tokens} from "../config/Tokens.sol"; /// @title CreditManagerTestSuite /// @notice Deploys contract for unit testing of CreditManagerV3.sol -contract CreditFacadeTestHelper is CreditFacadeTestEngine { +contract CreditFacadeTestHelper is TestHelper { + ICreditManagerV3 public creditManager; + CreditFacadeV3 public creditFacade; + CreditConfigurator public creditConfigurator; + + CreditFacadeTestSuite public cft; + + address public underlying; + + /// + /// HELPERS + /// + + function _openCreditAccount(uint256 amount, address onBehalfOf, uint16 leverageFactor, uint16 referralCode) + internal + returns (address) + { + uint256 borrowedAmount = (amount * leverageFactor) / LEVERAGE_DECIMALS; // F:[FA-5] + + return creditFacade.openCreditAccount( + borrowedAmount, + onBehalfOf, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, amount)) + }) + ), + false, + referralCode + ); + } + + function _openTestCreditAccount() internal returns (address creditAccount, uint256 balance) { + uint256 accountAmount = cft.creditAccountAmount(); + + cft.tokenTestSuite().mint(underlying, USER, accountAmount); + + vm.startPrank(USER); + creditAccount = _openCreditAccount(accountAmount, USER, 100, 0); + + vm.stopPrank(); + + balance = IERC20(underlying).balanceOf(creditAccount); + + vm.label(creditAccount, "creditAccount"); + } + + function _openExtraTestCreditAccount() internal returns (address creditAccount, uint256 balance) { + uint256 accountAmount = cft.creditAccountAmount(); + + /// TODO: FIX + // vm.prank(FRIEND); + // creditFacade.openCreditAccount(accountAmount, FRIEND, 100, 0); + + vm.startPrank(USER); + creditAccount = _openCreditAccount(accountAmount, USER, 100, 0); + + vm.stopPrank(); + + balance = IERC20(underlying).balanceOf(creditAccount); + } + + function _closeTestCreditAccount(address creditAccount) internal { + MultiCall[] memory closeCalls; + + // switch to new block to be able to close account + vm.roll(block.number + 1); + + // (,, uint256 underlyingToClose) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // uint256 underlyingBalance = cft.tokenTestSuite().balanceOf(underlying, creditAccount); + + // if (underlyingToClose > underlyingBalance) { + // cft.tokenTestSuite().mint(underlying, USER, underlyingToClose - underlyingBalance); + + // cft.tokenTestSuite().approve(underlying, USER, address(creditManager)); + // } + + vm.prank(USER); + creditFacade.closeCreditAccount(creditAccount, FRIEND, 0, false, closeCalls); + } + + function expectTokenIsEnabled(address creditAccount, address token, bool expectedState) internal { + expectTokenIsEnabled(creditAccount, token, expectedState, ""); + } + + function expectTokenIsEnabled(address creditAccount, address token, bool expectedState, string memory reason) + internal + { + bool state = creditManager.getTokenMaskOrRevert(token) & creditManager.enabledTokensMaskOf(creditAccount) != 0; + + if (state != expectedState && bytes(reason).length != 0) { + emit log_string(reason); + } + + assertTrue( + state == expectedState, + string( + abi.encodePacked( + "Token ", + IERC20Metadata(token).symbol(), + state ? " enabled as not expetcted" : " not enabled as expected " + ) + ) + ); + } + + function addCollateral(address token, uint256 amount) internal { + // tokenTestSuite.mint(t, USER, amount); + + vm.startPrank(USER); + IERC20(token).approve(address(creditManager), type(uint256).max); + + // TODO: rewrite as collateral + // creditFacade.addCollateral(USER, token, amount); + + vm.stopPrank(); + } + + function _makeAccountsLiquitable() internal { + vm.prank(CONFIGURATOR); + creditConfigurator.setFees(1000, 200, 9000, 100, 9500); + + // switch to new block to be able to close account + vm.roll(block.number + 1); + } + + function multicallBuilder() internal pure returns (MultiCall[] memory calls) {} + + function multicallBuilder(MultiCall memory call1) internal pure returns (MultiCall[] memory calls) { + calls = new MultiCall[](1); + calls[0] = call1; + } + + function multicallBuilder(MultiCall memory call1, MultiCall memory call2) + internal + pure + returns (MultiCall[] memory calls) + { + calls = new MultiCall[](2); + calls[0] = call1; + calls[1] = call2; + } + + function multicallBuilder(MultiCall memory call1, MultiCall memory call2, MultiCall memory call3) + internal + pure + returns (MultiCall[] memory calls) + { + calls = new MultiCall[](3); + calls[0] = call1; + calls[1] = call2; + calls[2] = call3; + } + + function expectSafeAllowance(address creditAccount, address target) internal { + uint256 len = creditManager.collateralTokensCount(); + for (uint256 i = 0; i < len; i++) { + (address token,) = creditManager.collateralTokens(i); + assertLe(IERC20(token).allowance(creditAccount, target), 1, "allowance is too high"); + } + } + function expectTokenIsEnabled(address creditAccount, Tokens t, bool expectedState) internal { expectTokenIsEnabled(creditAccount, t, expectedState, ""); } @@ -23,10 +200,10 @@ contract CreditFacadeTestHelper is CreditFacadeTestEngine { tokenTestSuite().mint(t, USER, amount); tokenTestSuite().approve(t, USER, address(creditManager)); - evm.startPrank(USER); + vm.startPrank(USER); // TODO: rewrite using addCollateral in mc // creditFacade.addCollateral(USER, tokenTestSuite().addressOf(t), amount); - evm.stopPrank(); + vm.stopPrank(); } function tokenTestSuite() private view returns (TokensTestSuite) { diff --git a/contracts/test/integration/credit/CreditConfigurator.t.sol b/contracts/test/integration/credit/CreditConfigurator.t.sol new file mode 100644 index 00000000..f4320fa0 --- /dev/null +++ b/contracts/test/integration/credit/CreditConfigurator.t.sol @@ -0,0 +1,1236 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; +import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; +import {WithdrawalManager} from "../../../support/WithdrawalManager.sol"; +import {CreditConfigurator, CreditManagerOpts, CollateralToken} from "../../../credit/CreditConfiguratorV3.sol"; +import {ICreditManagerV3, ICreditManagerV3Events} from "../../../interfaces/ICreditManagerV3.sol"; +import {ICreditConfiguratorEvents} from "../../../interfaces/ICreditConfiguratorV3.sol"; +import {IAdapter} from "@gearbox-protocol/core-v2/contracts/interfaces/adapters/IAdapter.sol"; + +import {BotList} from "../../../support/BotList.sol"; + +// +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; +import "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; +import {AddressList} from "@gearbox-protocol/core-v2/contracts/libraries/AddressList.sol"; + +// EXCEPTIONS + +import "../../../interfaces/IExceptions.sol"; + +// TEST +import "../../lib/constants.sol"; + +// MOCKS +import {AdapterMock} from "../../mocks/adapters/AdapterMock.sol"; +import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; + +// SUITES +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Tokens} from "../../config/Tokens.sol"; +import {CreditFacadeTestSuite} from "../../suites/CreditFacadeTestSuite.sol"; +import {CreditConfig} from "../../config/CreditConfig.sol"; + +import {CollateralTokensItem} from "../../config/CreditConfig.sol"; + +import {Test} from "forge-std/Test.sol"; + +/// @title CreditConfiguratorTest +/// @notice Designed for unit test purposes only +contract CreditConfiguratorTest is Test, ICreditManagerV3Events, ICreditConfiguratorEvents { + using AddressList for address[]; + + TokensTestSuite tokenTestSuite; + CreditFacadeTestSuite cct; + + CreditManagerV3 public creditManager; + CreditFacadeV3 public creditFacade; + CreditConfigurator public creditConfigurator; + WithdrawalManager public withdrawalManager; + address underlying; + + AdapterMock adapter1; + AdapterMock adapterDifferentCM; + + address DUMB_COMPARTIBLE_CONTRACT; + address TARGET_CONTRACT; + + function setUp() public { + _setUp(false, false, false); + } + + function _setUp(bool withDegenNFT, bool expirable, bool supportQuotas) public { + tokenTestSuite = new TokensTestSuite(); + tokenTestSuite.topUpWETH{value: 100 * WAD}(); + + CreditConfig creditConfig = new CreditConfig( + tokenTestSuite, + Tokens.DAI + ); + + cct = new CreditFacadeTestSuite(creditConfig, withDegenNFT, expirable, supportQuotas, 1); + + underlying = cct.underlying(); + creditManager = cct.creditManager(); + creditFacade = cct.creditFacade(); + creditConfigurator = cct.creditConfigurator(); + withdrawalManager = cct.withdrawalManager(); + + TARGET_CONTRACT = address(new TargetContractMock()); + + adapter1 = new AdapterMock(address(creditManager), TARGET_CONTRACT); + + adapterDifferentCM = new AdapterMock( + address(new CreditFacadeTestSuite(creditConfig, withDegenNFT, expirable, supportQuotas,1).creditManager()), TARGET_CONTRACT + ); + + DUMB_COMPARTIBLE_CONTRACT = address(adapter1); + } + + // + // HELPERS + // + function _compareParams( + uint16 feeInterest, + uint16 feeLiquidation, + uint16 liquidationDiscount, + uint16 feeLiquidationExpired, + uint16 liquidationDiscountExpired + ) internal { + ( + uint16 feeInterest2, + uint16 feeLiquidation2, + uint16 liquidationDiscount2, + uint16 feeLiquidationExpired2, + uint16 liquidationDiscountExpired2 + ) = creditManager.fees(); + + assertEq(feeInterest2, feeInterest, "Incorrect feeInterest"); + assertEq(feeLiquidation2, feeLiquidation, "Incorrect feeLiquidation"); + assertEq(liquidationDiscount2, liquidationDiscount, "Incorrect liquidationDiscount"); + assertEq(feeLiquidationExpired2, feeLiquidationExpired, "Incorrect feeLiquidationExpired"); + assertEq(liquidationDiscountExpired2, liquidationDiscountExpired, "Incorrect liquidationDiscountExpired"); + } + + function _getAddress(bytes memory bytecode, uint256 _salt) public view returns (address) { + bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))); + + // NOTE: cast last 20 bytes of hash to address + return address(uint160(uint256(hash))); + } + + function _deploy(bytes memory bytecode, uint256 _salt) public payable { + address addr; + + /* + NOTE: How to call create2 + create2(v, p, n, s) + create new contract with code at memory p to p + n + and send v wei + and return the new address + where new address = first 20 bytes of keccak256(0xff + address(this) + s + keccak256(mem[p…(p+n))) + s = big-endian 256-bit value + */ + assembly { + addr := + create2( + callvalue(), // wei sent with current call + // Actual code starts after skipping the first 32 bytes + add(bytecode, 0x20), + mload(bytecode), // Load the size of code contained in the first 32 bytes + _salt // Salt from function arguments + ) + + if iszero(extcodesize(addr)) { revert(0, 0) } + } + } + + /// + /// + /// TESTS + /// + /// + + /// @dev [CC-1]: constructor sets correct values + function test_CC_01_constructor_sets_correct_values() public { + assertEq(address(creditConfigurator.creditManager()), address(creditManager), "Incorrect creditManager"); + + assertEq(address(creditConfigurator.creditFacade()), address(creditFacade), "Incorrect creditFacade"); + + assertEq(address(creditConfigurator.underlying()), address(creditManager.underlying()), "Incorrect underlying"); + + assertEq( + address(creditConfigurator.addressProvider()), address(cct.addressProvider()), "Incorrect addressProvider" + ); + + // CREDIT MANAGER PARAMS + + ( + uint16 feeInterest, + uint16 feeLiquidation, + uint16 liquidationDiscount, + uint16 feeLiquidationExpired, + uint16 liquidationDiscountExpired + ) = creditManager.fees(); + + assertEq(feeInterest, DEFAULT_FEE_INTEREST, "Incorrect feeInterest"); + + assertEq(feeLiquidation, DEFAULT_FEE_LIQUIDATION, "Incorrect feeLiquidation"); + + assertEq(liquidationDiscount, PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM, "Incorrect liquidationDiscount"); + + assertEq(feeLiquidationExpired, DEFAULT_FEE_LIQUIDATION_EXPIRED, "Incorrect feeLiquidationExpired"); + + assertEq( + liquidationDiscountExpired, + PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM_EXPIRED, + "Incorrect liquidationDiscountExpired" + ); + + assertEq( + address(creditConfigurator.addressProvider()), address(cct.addressProvider()), "Incorrect address provider" + ); + + CollateralTokensItem[8] memory collateralTokenOpts = [ + CollateralTokensItem({token: Tokens.DAI, liquidationThreshold: DEFAULT_UNDERLYING_LT}), + CollateralTokensItem({token: Tokens.USDC, liquidationThreshold: 9000}), + CollateralTokensItem({token: Tokens.USDT, liquidationThreshold: 8800}), + CollateralTokensItem({token: Tokens.WETH, liquidationThreshold: 8300}), + CollateralTokensItem({token: Tokens.LINK, liquidationThreshold: 7300}), + CollateralTokensItem({token: Tokens.CRV, liquidationThreshold: 7300}), + CollateralTokensItem({token: Tokens.CVX, liquidationThreshold: 7300}), + CollateralTokensItem({token: Tokens.STETH, liquidationThreshold: 7300}) + ]; + + uint256 len = collateralTokenOpts.length; + + // Allowed Tokens + assertEq(creditManager.collateralTokensCount(), len, "Incorrect quantity of allowed tokens"); + + for (uint256 i = 0; i < len; i++) { + (address token, uint16 lt) = creditManager.collateralTokens(i); + + assertEq(token, tokenTestSuite.addressOf(collateralTokenOpts[i].token), "Incorrect token address"); + + assertEq(lt, collateralTokenOpts[i].liquidationThreshold, "Incorrect liquidation threshold"); + } + + assertEq(address(creditManager.creditFacade()), address(creditFacade), "Incorrect creditFacade"); + + assertEq(address(creditManager.priceOracle()), address(cct.priceOracle()), "Incorrect creditFacade"); + + // CREDIT FACADE PARAMS + (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + assertEq(minBorrowedAmount, cct.minBorrowedAmount(), "Incorrect minBorrowedAmount"); + + assertEq(maxBorrowedAmount, cct.maxBorrowedAmount(), "Incorrect maxBorrowedAmount"); + + uint8 maxBorrowedAmountPerBlock = creditFacade.maxDebtPerBlockMultiplier(); + + uint40 expirationDate = creditFacade.expirationDate(); + + assertEq(maxBorrowedAmountPerBlock, DEFAULT_LIMIT_PER_BLOCK_MULTIPLIER, "Incorrect maxBorrowedAmountPerBlock"); + + assertEq(expirationDate, 0, "Incorrect expiration date"); + } + + /// @dev [CC-1A]: constructor emits all events + function test_CC_01A_constructor_emits_all_events() public { + CollateralToken[] memory cTokens = new CollateralToken[](1); + + cTokens[0] = CollateralToken({token: tokenTestSuite.addressOf(Tokens.USDC), liquidationThreshold: 6000}); + + CreditManagerOpts memory creditOpts = CreditManagerOpts({ + minBorrowedAmount: uint128(50 * WAD), + maxBorrowedAmount: uint128(150000 * WAD), + collateralTokens: cTokens, + degenNFT: address(0), + withdrawalManager: address(0), + expirable: false + }); + + creditManager = new CreditManagerV3(address(cct.poolMock()), address(withdrawalManager)); + creditFacade = new CreditFacadeV3( + address(creditManager), + creditOpts.degenNFT, + + creditOpts.expirable + ); + + address priceOracleAddress = address(creditManager.priceOracle()); + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + + bytes memory configuratorByteCode = + abi.encodePacked(type(CreditConfigurator).creationCode, abi.encode(creditManager, creditFacade, creditOpts)); + + address creditConfiguratorAddr = _getAddress(configuratorByteCode, 0); + + creditManager.setCreditConfigurator(creditConfiguratorAddr); + + vm.expectEmit(true, false, false, true); + emit SetTokenLiquidationThreshold(underlying, DEFAULT_UNDERLYING_LT); + + vm.expectEmit(false, false, false, false); + emit FeesUpdated( + DEFAULT_FEE_INTEREST, + DEFAULT_FEE_LIQUIDATION, + DEFAULT_LIQUIDATION_PREMIUM, + DEFAULT_FEE_LIQUIDATION_EXPIRED, + DEFAULT_LIQUIDATION_PREMIUM_EXPIRED + ); + + vm.expectEmit(true, false, false, false); + emit AllowToken(usdcToken); + + vm.expectEmit(true, false, false, true); + emit SetTokenLiquidationThreshold(usdcToken, 6000); + + vm.expectEmit(true, false, false, false); + emit SetCreditFacade(address(creditFacade)); + + vm.expectEmit(true, false, false, false); + emit SetPriceOracle(priceOracleAddress); + + /// todo: change + // vm.expectEmit(false, false, false, true); + // emit SetMaxDebtPerBlockMultiplier(uint128(150000 * WAD * DEFAULT_LIMIT_PER_BLOCK_MULTIPLIER)); + + vm.expectEmit(false, false, false, true); + emit SetBorrowingLimits(uint128(50 * WAD), uint128(150000 * WAD)); + + _deploy(configuratorByteCode, 0); + } + + /// @dev [CC-2]: all functions revert if called non-configurator + function test_CC_02_all_functions_revert_if_called_non_configurator() public { + vm.startPrank(USER); + + // Token mgmt + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.addCollateralToken(DUMB_ADDRESS, 1); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.allowToken(DUMB_ADDRESS); + + // Contract mgmt + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.allowContract(DUMB_ADDRESS, DUMB_ADDRESS); + + // Credit manager mgmt + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.setFees(0, 0, 0, 0, 0); + + // Upgrades + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.setPriceOracle(); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.setCreditFacade(DUMB_ADDRESS, false); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.upgradeCreditConfigurator(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.setBotList(FRIEND); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.setMaxCumulativeLoss(0); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.resetCumulativeLoss(); + + vm.stopPrank(); + } + + function test_CC_02A_forbidBorrowing_on_non_pausable_admin() public { + vm.expectRevert(CallerNotPausableAdminException.selector); + creditConfigurator.forbidBorrowing(); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidBorrowing(); + } + + function test_CC_02B_controllerOnly_functions_revert_on_non_controller() public { + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.setLiquidationThreshold(DUMB_ADDRESS, uint16(0)); + + vm.expectRevert(CallerNotPausableAdminException.selector); + creditConfigurator.forbidToken(DUMB_ADDRESS); + + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.forbidContract(DUMB_ADDRESS); + + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.setLimits(0, 0); + + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.setMaxDebtPerBlockMultiplier(0); + + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.setMaxEnabledTokens(1); + + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.rampLiquidationThreshold(DUMB_ADDRESS, 0, 0, 0); + } + + // + // TOKEN MANAGEMENT + // + + /// @dev [CC-3]: addCollateralToken reverts for zero address or in priceFeed + function test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.addCollateralToken(address(0), 9300); + + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + creditConfigurator.addCollateralToken(DUMB_ADDRESS, 9300); + + vm.expectRevert(IncorrectTokenContractException.selector); + creditConfigurator.addCollateralToken(address(this), 9300); + + address unknownPricefeedToken = address(new ERC20("TWPF", "Token without priceFeed")); + + vm.expectRevert(IncorrectPriceFeedException.selector); + creditConfigurator.addCollateralToken(unknownPricefeedToken, 9300); + + vm.stopPrank(); + } + + /// @dev [CC-4]: addCollateralToken adds new token to creditManager + function test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt() public { + uint256 tokensCountBefore = creditManager.collateralTokensCount(); + + address cLINKToken = tokenTestSuite.addressOf(Tokens.LUNA); + + vm.expectEmit(true, false, false, false); + emit AllowToken(cLINKToken); + + vm.prank(CONFIGURATOR); + creditConfigurator.addCollateralToken(cLINKToken, 8800); + + assertEq(creditManager.collateralTokensCount(), tokensCountBefore + 1, "Incorrect tokens count"); + + (address token,) = creditManager.collateralTokens(tokensCountBefore); + + assertEq(token, cLINKToken, "Token is not added to list"); + + assertTrue(creditManager.getTokenMaskOrRevert(cLINKToken) > 0, "Incorrect token mask"); + + assertEq(creditManager.liquidationThresholds(cLINKToken), 8800, "Threshold wasn't set"); + } + + /// @dev [CC-5]: setLiquidationThreshold reverts for underling token and incorrect values + function test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(SetLTForUnderlyingException.selector); + creditConfigurator.setLiquidationThreshold(underlying, 1); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + + uint16 maxAllowedLT = creditManager.liquidationThresholds(underlying); + vm.expectRevert(IncorrectLiquidationThresholdException.selector); + creditConfigurator.setLiquidationThreshold(usdcToken, maxAllowedLT + 1); + + vm.stopPrank(); + } + + /// @dev [CC-6]: setLiquidationThreshold sets liquidation threshold in creditManager + function test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager() public { + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + uint16 newLT = 24; + + vm.expectEmit(true, false, false, true); + emit SetTokenLiquidationThreshold(usdcToken, newLT); + + vm.prank(CONFIGURATOR); + creditConfigurator.setLiquidationThreshold(usdcToken, newLT); + + assertEq(creditManager.liquidationThresholds(usdcToken), newLT); + } + + /// @dev [CC-7]: allowToken and forbidToken reverts for unknown or underlying token + function test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(TokenNotAllowedException.selector); + creditConfigurator.allowToken(DUMB_ADDRESS); + + vm.expectRevert(TokenNotAllowedException.selector); + creditConfigurator.allowToken(underlying); + + vm.expectRevert(TokenNotAllowedException.selector); + creditConfigurator.forbidToken(DUMB_ADDRESS); + + vm.expectRevert(TokenNotAllowedException.selector); + creditConfigurator.forbidToken(underlying); + + vm.stopPrank(); + } + + /// @dev [CC-8]: allowToken doesn't change forbidden mask if its already allowed + function test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed() public { + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + uint256 forbiddenMask = creditFacade.forbiddenTokenMask(); + + vm.prank(CONFIGURATOR); + creditConfigurator.allowToken(usdcToken); + + assertEq(creditFacade.forbiddenTokenMask(), forbiddenMask, "Incorrect forbidden mask"); + } + + // TODO: change tests + + // /// @dev [CC-9]: allowToken allows token if it was forbidden + // function test_CC_09_allows_token_if_it_was_forbidden() public { + // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); + + // vm.prank(address(creditConfigurator)); + // creditManager.setForbidMask(tokenMask); + + // vm.expectEmit(true, false, false, false); + // emit AllowToken(usdcToken); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.allowToken(usdcToken); + + // assertEq(creditManager.forbiddenTokenMask(), 0, "Incorrect forbidden mask"); + // } + + // /// @dev [CC-10]: forbidToken doesn't change forbidden mask if its already forbidden + // function test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden() public { + // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); + + // vm.prank(address(creditConfigurator)); + // creditManager.setForbidMask(tokenMask); + + // uint256 forbiddenMask = creditManager.forbiddenTokenMask(); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.forbidToken(usdcToken); + + // assertEq(creditManager.forbiddenTokenMask(), forbiddenMask, "Incorrect forbidden mask"); + // } + + // /// @dev [CC-11]: forbidToken forbids token and enable IncreaseDebtForbidden mode if it was allowed + // function test_CC_11_forbidToken_forbids_token_if_it_was_allowed() public { + // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); + + // vm.prank(address(creditConfigurator)); + // creditManager.setForbidMask(0); + + // vm.expectEmit(true, false, false, false); + // emit ForbidToken(usdcToken); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.forbidToken(usdcToken); + + // assertEq(creditManager.forbiddenTokenMask(), tokenMask, "Incorrect forbidden mask"); + // } + + // + // CONFIGURATION: CONTRACTS & ADAPTERS MANAGEMENT + // + + /// @dev [CC-12]: allowContract and forbidContract reverts for zero address + function test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.allowContract(address(0), address(this)); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.allowContract(address(this), address(0)); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.forbidContract(address(0)); + + vm.stopPrank(); + } + + /// @dev [CC-12A]: allowContract reverts for non contract addresses + function test_CC_12A_allowContract_reverts_for_non_contract_addresses() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + creditConfigurator.allowContract(address(this), DUMB_ADDRESS); + + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + creditConfigurator.allowContract(DUMB_ADDRESS, address(this)); + + vm.stopPrank(); + } + + /// @dev [CC-12B]: allowContract reverts for non compartible adapter contract + function test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract() public { + vm.startPrank(CONFIGURATOR); + + // Should be reverted, cause undelring token has no .creditManager() method + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.allowContract(address(this), underlying); + + // Should be reverted, cause it's conncted to another creditManager + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.allowContract(address(this), address(adapterDifferentCM)); + + vm.stopPrank(); + } + + /// @dev [CC-13]: allowContract reverts for creditManager and creditFacade contracts + function test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(TargetContractNotAllowedException.selector); + creditConfigurator.allowContract(address(creditManager), DUMB_COMPARTIBLE_CONTRACT); + + vm.expectRevert(TargetContractNotAllowedException.selector); + creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(creditFacade)); + + vm.expectRevert(TargetContractNotAllowedException.selector); + creditConfigurator.allowContract(address(creditFacade), DUMB_COMPARTIBLE_CONTRACT); + + vm.stopPrank(); + } + + /// @dev [CC-14]: allowContract: adapter could not be used twice + function test_CC_14_allowContract_adapter_cannot_be_used_twice() public { + vm.startPrank(CONFIGURATOR); + + creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(adapter1)); + + vm.expectRevert(AdapterUsedTwiceException.selector); + creditConfigurator.allowContract(address(adapterDifferentCM), address(adapter1)); + + vm.stopPrank(); + } + + /// @dev [CC-15]: allowContract allows targetContract <-> adapter and emits event + function test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event() public { + address[] memory allowedContracts = creditConfigurator.allowedContracts(); + uint256 allowedContractCount = allowedContracts.length; + + vm.prank(CONFIGURATOR); + + vm.expectEmit(true, true, false, false); + emit AllowContract(TARGET_CONTRACT, address(adapter1)); + + assertTrue(!allowedContracts.includes(TARGET_CONTRACT), "Contract already added"); + + creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); + + assertEq( + creditManager.adapterToContract(address(adapter1)), TARGET_CONTRACT, "adapterToContract wasn't udpated" + ); + + assertEq( + creditManager.contractToAdapter(TARGET_CONTRACT), address(adapter1), "contractToAdapter wasn't udpated" + ); + + allowedContracts = creditConfigurator.allowedContracts(); + + assertEq(allowedContracts.length, allowedContractCount + 1, "Incorrect allowed contracts count"); + + assertTrue(allowedContracts.includes(TARGET_CONTRACT), "Target contract wasnt found"); + } + + // /// @dev [CC-15A]: allowContract allows universal adapter for universal contract + // function test_CC_15A_allowContract_allows_universal_contract() public { + // vm.prank(CONFIGURATOR); + + // vm.expectEmit(true, true, false, false); + // emit AllowContract(UNIVERSAL_CONTRACT, address(adapter1)); + + // creditConfigurator.allowContract(UNIVERSAL_CONTRACT, address(adapter1)); + + // assertEq(creditManager.universalAdapter(), address(adapter1), "Universal adapter wasn't updated"); + // } + + /// @dev [CC-15A]: allowContract removes existing adapter + function test_CC_15A_allowContract_removes_old_adapter_if_it_exists() public { + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); + + AdapterMock adapter2 = new AdapterMock( + address(creditManager), + TARGET_CONTRACT + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter2)); + + assertEq(creditManager.contractToAdapter(TARGET_CONTRACT), address(adapter2), "Incorrect adapter"); + + assertEq( + creditManager.adapterToContract(address(adapter2)), + TARGET_CONTRACT, + "Incorrect target contract for new adapter" + ); + + assertEq(creditManager.adapterToContract(address(adapter1)), address(0), "Old adapter was not removed"); + } + + /// @dev [CC-16]: forbidContract reverts for unknown contract + function test_CC_16_forbidContract_reverts_for_unknown_contract() public { + vm.expectRevert(ContractIsNotAnAllowedAdapterException.selector); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidContract(TARGET_CONTRACT); + } + + /// @dev [CC-17]: forbidContract forbids contract and emits event + function test_CC_17_forbidContract_forbids_contract_and_emits_event() public { + vm.startPrank(CONFIGURATOR); + creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(adapter1)); + + address[] memory allowedContracts = creditConfigurator.allowedContracts(); + + uint256 allowedContractCount = allowedContracts.length; + + assertTrue(allowedContracts.includes(DUMB_COMPARTIBLE_CONTRACT), "Target contract wasnt found"); + + vm.expectEmit(true, false, false, false); + emit ForbidContract(DUMB_COMPARTIBLE_CONTRACT); + + creditConfigurator.forbidContract(DUMB_COMPARTIBLE_CONTRACT); + + // + allowedContracts = creditConfigurator.allowedContracts(); + + assertEq(creditManager.adapterToContract(address(adapter1)), address(0), "CreditManagerV3 wasn't udpated"); + + assertEq( + creditManager.contractToAdapter(DUMB_COMPARTIBLE_CONTRACT), address(0), "CreditFacadeV3 wasn't udpated" + ); + + assertEq(allowedContracts.length, allowedContractCount - 1, "Incorrect allowed contracts count"); + + assertTrue(!allowedContracts.includes(DUMB_COMPARTIBLE_CONTRACT), "Target contract wasn't removed"); + + vm.stopPrank(); + } + + // + // CREDIT MANAGER MGMT + // + + /// @dev [CC-18]: setLimits reverts if minAmount > maxAmount + function test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount() public { + (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + vm.expectRevert(IncorrectLimitsException.selector); + + vm.prank(CONFIGURATOR); + creditConfigurator.setLimits(maxBorrowedAmount, minBorrowedAmount); + } + + /// @dev [CC-19]: setLimits sets limits + function test_CC_19_setLimits_sets_limits() public { + (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + uint128 newMinBorrowedAmount = minBorrowedAmount + 1000; + uint128 newMaxBorrowedAmount = maxBorrowedAmount + 1000; + + vm.expectEmit(false, false, false, true); + emit SetBorrowingLimits(newMinBorrowedAmount, newMaxBorrowedAmount); + vm.prank(CONFIGURATOR); + creditConfigurator.setLimits(newMinBorrowedAmount, newMaxBorrowedAmount); + (minBorrowedAmount, maxBorrowedAmount) = creditFacade.debtLimits(); + assertEq(minBorrowedAmount, newMinBorrowedAmount, "Incorrect minBorrowedAmount"); + assertEq(maxBorrowedAmount, newMaxBorrowedAmount, "Incorrect maxBorrowedAmount"); + } + + /// @dev [CC-23]: setFees reverts for incorrect fees + function test_CC_23_setFees_reverts_for_incorrect_fees() public { + (, uint16 feeLiquidation,, uint16 feeLiquidationExpired,) = creditManager.fees(); + + vm.expectRevert(IncorrectParameterException.selector); + + vm.prank(CONFIGURATOR); + creditConfigurator.setFees(PERCENTAGE_FACTOR, feeLiquidation, 0, 0, 0); + + vm.expectRevert(IncorrectParameterException.selector); + + vm.prank(CONFIGURATOR); + creditConfigurator.setFees(PERCENTAGE_FACTOR - 1, feeLiquidation, PERCENTAGE_FACTOR - feeLiquidation, 0, 0); + + vm.expectRevert(IncorrectParameterException.selector); + + vm.prank(CONFIGURATOR); + creditConfigurator.setFees( + PERCENTAGE_FACTOR - 1, + feeLiquidation, + PERCENTAGE_FACTOR - feeLiquidation - 1, + feeLiquidationExpired, + PERCENTAGE_FACTOR - feeLiquidationExpired + ); + } + + /// @dev [CC-25]: setFees updates LT for underlying and for all tokens which bigger than new LT + function test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT() public { + vm.startPrank(CONFIGURATOR); + + (uint16 feeInterest,,,,) = creditManager.fees(); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + address wethToken = tokenTestSuite.addressOf(Tokens.WETH); + creditConfigurator.setLiquidationThreshold(usdcToken, creditManager.liquidationThresholds(underlying)); + + uint256 expectedLT = PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM - 2 * DEFAULT_FEE_LIQUIDATION; + + uint256 wethLTBefore = creditManager.liquidationThresholds(wethToken); + + vm.expectEmit(true, false, false, true); + emit SetTokenLiquidationThreshold(usdcToken, uint16(expectedLT)); + + vm.expectEmit(true, false, false, true); + emit SetTokenLiquidationThreshold(underlying, uint16(expectedLT)); + + creditConfigurator.setFees( + feeInterest, + 2 * DEFAULT_FEE_LIQUIDATION, + DEFAULT_LIQUIDATION_PREMIUM, + DEFAULT_FEE_LIQUIDATION_EXPIRED, + DEFAULT_LIQUIDATION_PREMIUM_EXPIRED + ); + + assertEq(creditManager.liquidationThresholds(underlying), expectedLT, "Incorrect LT for underlying token"); + + assertEq(creditManager.liquidationThresholds(usdcToken), expectedLT, "Incorrect USDC for underlying token"); + + assertEq(creditManager.liquidationThresholds(wethToken), wethLTBefore, "Incorrect WETH for underlying token"); + } + + /// @dev [CC-26]: setFees sets fees and doesn't change others + function test_CC_26_setFees_sets_fees_and_doesnt_change_others() public { + ( + uint16 feeInterest, + uint16 feeLiquidation, + uint16 liquidationDiscount, + uint16 feeLiquidationExpired, + uint16 liquidationDiscountExpired + ) = creditManager.fees(); + + uint16 newFeeInterest = (feeInterest * 3) / 2; + uint16 newFeeLiquidation = feeLiquidation * 2; + uint16 newLiquidationPremium = (PERCENTAGE_FACTOR - liquidationDiscount) * 2; + uint16 newFeeLiquidationExpired = feeLiquidationExpired * 2; + uint16 newLiquidationPremiumExpired = (PERCENTAGE_FACTOR - liquidationDiscountExpired) * 2; + + vm.expectEmit(false, false, false, true); + emit FeesUpdated( + newFeeInterest, + newFeeLiquidation, + newLiquidationPremium, + newFeeLiquidationExpired, + newLiquidationPremiumExpired + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.setFees( + newFeeInterest, + newFeeLiquidation, + newLiquidationPremium, + newFeeLiquidationExpired, + newLiquidationPremiumExpired + ); + + _compareParams( + newFeeInterest, + newFeeLiquidation, + PERCENTAGE_FACTOR - newLiquidationPremium, + newFeeLiquidationExpired, + PERCENTAGE_FACTOR - newLiquidationPremiumExpired + ); + } + + // + // CONTRACT UPGRADES + // + + /// @dev [CC-28]: setPriceOracle upgrades priceOracleCorrectly and doesnt change facade + function test_CC_28_setPriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade() public { + vm.startPrank(CONFIGURATOR); + cct.addressProvider().setPriceOracle(DUMB_ADDRESS); + + vm.expectEmit(true, false, false, false); + emit SetPriceOracle(DUMB_ADDRESS); + + creditConfigurator.setPriceOracle(); + + assertEq(address(creditManager.priceOracle()), DUMB_ADDRESS); + vm.stopPrank(); + } + + /// @dev [CC-29]: setPriceOracle upgrades priceOracleCorrectly and doesnt change facade + function test_CC_29_setCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.setCreditFacade(address(0), false); + + vm.expectRevert(ZeroAddressException.selector); + creditConfigurator.upgradeCreditConfigurator(address(0)); + + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + creditConfigurator.setCreditFacade(DUMB_ADDRESS, false); + + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + creditConfigurator.upgradeCreditConfigurator(DUMB_ADDRESS); + + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.setCreditFacade(underlying, false); + + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.upgradeCreditConfigurator(underlying); + + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.setCreditFacade(address(adapterDifferentCM), false); + + vm.expectRevert(IncompatibleContractException.selector); + creditConfigurator.upgradeCreditConfigurator(address(adapterDifferentCM)); + } + + /// @dev [CC-30]: setCreditFacade upgrades creditFacade and doesnt change priceOracle + function test_CC_30_setCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle() public { + for (uint256 ex = 0; ex < 2; ex++) { + bool isExpirable = ex != 0; + for (uint256 ms = 0; ms < 2; ms++) { + bool migrateSettings = ms != 0; + + setUp(); + + if (isExpirable) { + CreditFacadeV3 initialCf = new CreditFacadeV3( + address(creditManager), + address(0), + + true + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.setCreditFacade(address(initialCf), migrateSettings); + + vm.prank(CONFIGURATOR); + creditConfigurator.setExpirationDate(uint40(block.timestamp + 1)); + + creditFacade = initialCf; + } + + CreditFacadeV3 cf = new CreditFacadeV3( + address(creditManager), + address(0), + isExpirable + ); + + uint8 maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); + + uint40 expirationDate = creditFacade.expirationDate(); + (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + vm.expectEmit(true, false, false, false); + emit SetCreditFacade(address(cf)); + + vm.prank(CONFIGURATOR); + creditConfigurator.setCreditFacade(address(cf), migrateSettings); + + assertEq(address(creditManager.priceOracle()), cct.addressProvider().getPriceOracle()); + + assertEq(address(creditManager.creditFacade()), address(cf)); + assertEq(address(creditConfigurator.creditFacade()), address(cf)); + + uint8 maxDebtPerBlockMultiplier2 = cf.maxDebtPerBlockMultiplier(); + + uint40 expirationDate2 = cf.expirationDate(); + + (uint128 minBorrowedAmount2, uint128 maxBorrowedAmount2) = cf.debtLimits(); + + assertEq( + maxDebtPerBlockMultiplier2, + migrateSettings ? maxDebtPerBlockMultiplier : 0, + "Incorrwect limitPerBlock" + ); + assertEq(minBorrowedAmount2, migrateSettings ? minBorrowedAmount : 0, "Incorrwect minBorrowedAmount"); + assertEq(maxBorrowedAmount2, migrateSettings ? maxBorrowedAmount : 0, "Incorrwect maxBorrowedAmount"); + + assertEq(expirationDate2, migrateSettings ? expirationDate : 0, "Incorrect expirationDate"); + } + } + } + + /// @dev [CC-30A]: usetCreditFacade transfers bot list + function test_CC_30A_botList_is_transferred_on_CreditFacade_upgrade() public { + for (uint256 ms = 0; ms < 2; ms++) { + bool migrateSettings = ms != 0; + + setUp(); + + address botList = address(new BotList(address(cct.addressProvider()))); + + vm.prank(CONFIGURATOR); + creditConfigurator.setBotList(botList); + + CreditFacadeV3 cf = new CreditFacadeV3( + address(creditManager), + address(0), + false + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.setCreditFacade(address(cf), migrateSettings); + + address botList2 = cf.botList(); + + assertEq(botList2, migrateSettings ? botList : address(0), "Bot list was not transferred"); + } + } + + /// @dev [CC-31]: uupgradeCreditConfigurator upgrades creditConfigurator + function test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator() public { + vm.expectEmit(true, false, false, false); + emit CreditConfiguratorUpgraded(DUMB_COMPARTIBLE_CONTRACT); + + vm.prank(CONFIGURATOR); + creditConfigurator.upgradeCreditConfigurator(DUMB_COMPARTIBLE_CONTRACT); + + assertEq(address(creditManager.creditConfigurator()), DUMB_COMPARTIBLE_CONTRACT); + } + + /// @dev [CC-32]: setBorrowingAllowance sets IncreaseDebtForbidden + function test_CC_32_setBorrowingAllowance_sets_IncreaseDebtForbidden() public { + /// TODO: Change test + // for (uint256 id = 0; id < 2; id++) { + // bool isIDF = id != 0; + // for (uint256 ii = 0; ii < 2; ii++) { + // bool initialIDF = ii != 0; + + // setUp(); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.setBorrowingAllowance(initialIDF); + + // (, bool isIncreaseDebtFobidden,) = creditFacade.params(); + + // if (isIncreaseDebtFobidden != isIDF) { + // vm.expectEmit(false, false, false, true); + // emit SetIncreaseDebtForbiddenMode(isIDF); + // } + + // vm.prank(CONFIGURATOR); + // creditConfigurator.setBorrowingAllowance(isIDF); + + // (, isIncreaseDebtFobidden,) = creditFacade.params(); + + // assertTrue(isIncreaseDebtFobidden == isIDF, "Incorrect isIncreaseDebtFobidden"); + // } + // } + } + + /// @dev [CC-33]: setMaxDebtLimitPerBlock reverts if it lt maxLimit otherwise sets limitPerBlock + function test_CC_33_setMaxDebtLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock() public { + // (, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + // vm.prank(CONFIGURATOR); + // vm.expectRevert(IncorrectLimitsException.selector); + // creditConfigurator.setMaxDebtLimitPerBlock(maxBorrowedAmount - 1); + + // uint128 newLimitBlock = (maxBorrowedAmount * 12) / 10; + + // vm.expectEmit(false, false, false, true); + // emit SetMaxDebtPerBlockMultiplier(newLimitBlock); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.setMaxDebtLimitPerBlock(newLimitBlock); + + // (uint128 maxBorrowedAmountPerBlock,,) = creditFacade.params(); + + // assertEq(maxBorrowedAmountPerBlock, newLimitBlock, "Incorrect new limits block"); + } + + /// @dev [CC-34]: setExpirationDate reverts if the new expiration date is stale, otherwise sets it + function test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets() public { + // cct.testFacadeWithExpiration(); + // creditFacade = cct.creditFacade(); + + _setUp({withDegenNFT: false, expirable: true, supportQuotas: true}); + + uint40 expirationDate = creditFacade.expirationDate(); + + vm.prank(CONFIGURATOR); + vm.expectRevert(IncorrectExpirationDateException.selector); + creditConfigurator.setExpirationDate(expirationDate); + + vm.warp(block.timestamp + 10); + + vm.prank(CONFIGURATOR); + vm.expectRevert(IncorrectExpirationDateException.selector); + creditConfigurator.setExpirationDate(expirationDate + 1); + + uint40 newExpirationDate = uint40(block.timestamp + 1); + + vm.expectEmit(false, false, false, true); + emit SetExpirationDate(newExpirationDate); + + vm.prank(CONFIGURATOR); + creditConfigurator.setExpirationDate(newExpirationDate); + + expirationDate = creditFacade.expirationDate(); + + assertEq(expirationDate, newExpirationDate, "Incorrect new expirationDate"); + } + + /// @dev [CC-37]: setMaxEnabledTokens works correctly and emits event + function test_CC_37_setMaxEnabledTokens_works_correctly() public { + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.setMaxEnabledTokens(255); + + vm.expectEmit(false, false, false, true); + emit SetMaxEnabledTokens(255); + + vm.prank(CONFIGURATOR); + creditConfigurator.setMaxEnabledTokens(255); + + assertEq(creditManager.maxAllowedEnabledTokenLength(), 255, "Credit manager max enabled tokens incorrect"); + } + + /// @dev [CC-38]: addEmergencyLiquidator works correctly and emits event + function test_CC_38_addEmergencyLiquidator_works_correctly() public { + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); + + vm.expectEmit(false, false, false, true); + emit AddEmergencyLiquidator(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); + + assertTrue( + creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Credit manager emergency liquidator status incorrect" + ); + } + + /// @dev [CC-39]: removeEmergencyLiquidator works correctly and emits event + function test_CC_39_removeEmergencyLiquidator_works_correctly() public { + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.removeEmergencyLiquidator(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); + + vm.expectEmit(false, false, false, true); + emit RemoveEmergencyLiquidator(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + creditConfigurator.removeEmergencyLiquidator(DUMB_ADDRESS); + + assertTrue( + !creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Credit manager emergency liquidator status incorrect" + ); + } + + /// @dev [CC-40]: forbidAdapter works correctly and emits event + function test_CC_40_forbidAdapter_works_correctly() public { + vm.expectRevert(CallerNotConfiguratorException.selector); + creditConfigurator.forbidAdapter(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); + + vm.expectEmit(true, false, false, false); + emit ForbidAdapter(address(adapter1)); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidAdapter(address(adapter1)); + + assertEq( + creditManager.adapterToContract(address(adapter1)), address(0), "Adapter to contract link was not removed" + ); + + assertEq( + creditManager.contractToAdapter(TARGET_CONTRACT), address(adapter1), "Contract to adapter link was removed" + ); + } + + /// @dev [CC-41]: allowedContracts migrate correctly + function test_CC_41_allowedContracts_are_migrated_correctly_for_new_CC() public { + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); + + CollateralToken[] memory cTokens; + + CreditManagerOpts memory creditOpts = CreditManagerOpts({ + minBorrowedAmount: uint128(50 * WAD), + maxBorrowedAmount: uint128(150000 * WAD), + collateralTokens: cTokens, + degenNFT: address(0), + withdrawalManager: address(0), + expirable: false + }); + + CreditConfigurator newCC = new CreditConfigurator( + creditManager, + creditFacade, + creditOpts + ); + + assertEq( + creditConfigurator.allowedContracts().length, + newCC.allowedContracts().length, + "Incorrect new allowed contracts array" + ); + + uint256 len = newCC.allowedContracts().length; + + for (uint256 i = 0; i < len;) { + assertEq( + creditConfigurator.allowedContracts()[i], + newCC.allowedContracts()[i], + "Allowed contracts migrated incorrectly" + ); + + unchecked { + ++i; + } + } + } + + function test_CC_42_rampLiquidationThreshold_works_correctly() public { + address dai = tokenTestSuite.addressOf(Tokens.DAI); + address usdc = tokenTestSuite.addressOf(Tokens.USDC); + + vm.expectRevert(SetLTForUnderlyingException.selector); + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(dai, 9000, uint40(block.timestamp), 1); + + vm.expectRevert(IncorrectLiquidationThresholdException.selector); + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(usdc, 9999, uint40(block.timestamp), 1); + + uint16 initialLT = creditManager.liquidationThresholds(usdc); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall(CreditManagerV3.rampLiquidationThreshold, (usdc, 8900, uint40(block.timestamp + 5), 1000)) + // ); + + vm.expectEmit(true, false, false, true); + emit ScheduleTokenLiquidationThresholdRamp( + usdc, initialLT, 8900, uint40(block.timestamp + 5), uint40(block.timestamp + 1005) + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(usdc, 8900, uint40(block.timestamp + 5), 1000); + } +} diff --git a/contracts/test/integration/credit/CreditFacade.t.sol b/contracts/test/integration/credit/CreditFacade.t.sol new file mode 100644 index 00000000..05d2de0f --- /dev/null +++ b/contracts/test/integration/credit/CreditFacade.t.sol @@ -0,0 +1,2182 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; + +import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; +import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; + +import {BotList} from "../../../support/BotList.sol"; +import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; + +import "../../../interfaces/IAccountFactory.sol"; +import "../../../interfaces/ICreditAccount.sol"; +import "../../../interfaces/ICreditFacade.sol"; +import { + ICreditManagerV3, + ICreditManagerV3Events, + ClosureAction, + ManageDebtAction +} from "../../../interfaces/ICreditManagerV3.sol"; +import {AllowanceAction} from "../../../interfaces/ICreditConfiguratorV3.sol"; +import {ICreditFacadeEvents} from "../../../interfaces/ICreditFacade.sol"; +import {IDegenNFT, IDegenNFTExceptions} from "@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol"; +import {IWithdrawalManager} from "../../../interfaces/IWithdrawalManager.sol"; + +// DATA +import {MultiCall, MultiCallOps} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; +import {Balance} from "@gearbox-protocol/core-v2/contracts/libraries/Balances.sol"; + +import {CreditFacadeMulticaller, CreditFacadeCalls} from "../../../multicall/CreditFacadeCalls.sol"; + +// CONSTANTS + +import {LEVERAGE_DECIMALS} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +// TESTS + +import "../../lib/constants.sol"; +import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; +import {CreditFacadeTestHelper} from "../../helpers/CreditFacadeTestHelper.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +// MOCKS +import {AdapterMock} from "../../mocks/adapters/AdapterMock.sol"; +import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; +import {ERC20BlacklistableMock} from "../../mocks/token/ERC20Blacklistable.sol"; + +// SUITES +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Tokens} from "../../config/Tokens.sol"; +import {CreditFacadeTestSuite} from "../../suites/CreditFacadeTestSuite.sol"; +import {CreditConfig} from "../../config/CreditConfig.sol"; + +import {Test} from "forge-std/Test.sol"; +import "forge-std/console.sol"; + +uint256 constant WETH_TEST_AMOUNT = 5 * WAD; +uint16 constant REFERRAL_CODE = 23; + +/// @title CreditFacadeTest +/// @notice Designed for unit test purposes only +contract CreditFacadeIntegrationTest is + Test, + BalanceHelper, + CreditFacadeTestHelper, + ICreditManagerV3Events, + ICreditFacadeEvents +{ + using CreditFacadeCalls for CreditFacadeMulticaller; + + AccountFactory accountFactory; + + TargetContractMock targetMock; + AdapterMock adapterMock; + + function setUp() public { + _setUp(Tokens.DAI); + } + + function _setUp(Tokens _underlying) internal { + _setUp(_underlying, false, false, false, 1); + } + + function _setUp( + Tokens _underlying, + bool withDegenNFT, + bool withExpiration, + bool supportQuotas, + uint8 accountFactoryVer + ) internal { + tokenTestSuite = new TokensTestSuite(); + tokenTestSuite.topUpWETH{value: 100 * WAD}(); + + CreditConfig creditConfig = new CreditConfig( + tokenTestSuite, + _underlying + ); + + cft = new CreditFacadeTestSuite({ _creditConfig: creditConfig, + supportQuotas: supportQuotas, + withDegenNFT: withDegenNFT, + withExpiration: withExpiration, + accountFactoryVer: accountFactoryVer}); + + underlying = tokenTestSuite.addressOf(_underlying); + creditManager = cft.creditManager(); + creditFacade = cft.creditFacade(); + creditConfigurator = cft.creditConfigurator(); + + accountFactory = cft.af(); + + targetMock = new TargetContractMock(); + adapterMock = new AdapterMock( + address(creditManager), + address(targetMock) + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(address(targetMock), address(adapterMock)); + + vm.label(address(adapterMock), "AdapterMock"); + vm.label(address(targetMock), "TargetContractMock"); + } + + /// + /// + /// HELPERS + /// + /// + + function _prepareForWETHTest() internal { + _prepareForWETHTest(USER); + } + + function _prepareForWETHTest(address tester) internal { + address weth = tokenTestSuite.addressOf(Tokens.WETH); + + vm.startPrank(tester); + if (tester.balance > 0) { + IWETH(weth).deposit{value: tester.balance}(); + } + + IERC20(weth).transfer(address(this), tokenTestSuite.balanceOf(Tokens.WETH, tester)); + + vm.stopPrank(); + expectBalance(Tokens.WETH, tester, 0); + + vm.deal(tester, WETH_TEST_AMOUNT); + } + + function _checkForWETHTest() internal { + _checkForWETHTest(USER); + } + + function _checkForWETHTest(address tester) internal { + expectBalance(Tokens.WETH, tester, WETH_TEST_AMOUNT); + + expectEthBalance(tester, 0); + } + + function _prepareMockCall() internal returns (bytes memory callData) { + vm.prank(CONFIGURATOR); + creditConfigurator.allowContract(address(targetMock), address(adapterMock)); + + callData = abi.encodeWithSignature("hello(string)", "world"); + } + + /// + /// + /// TESTS + /// + /// + + // TODO: ideas how to revert with ZA? + + // /// @dev [FA-1]: constructor reverts for zero address + // function test_FA_01_constructor_reverts_for_zero_address() public { + // vm.expectRevert(ZeroAddressException.selector); + // new CreditFacadeV3(address(0), address(0), address(0), false); + // } + + /// @dev [FA-1A]: constructor sets correct values + function test_FA_01A_constructor_sets_correct_values() public { + assertEq(address(creditFacade.creditManager()), address(creditManager), "Incorrect creditManager"); + assertEq(creditFacade.underlying(), underlying, "Incorrect underlying token"); + + assertEq(creditFacade.wethAddress(), creditManager.wethAddress(), "Incorrect wethAddress token"); + + assertEq(creditFacade.degenNFT(), address(0), "Incorrect degenNFT"); + + assertTrue(creditFacade.whitelisted() == false, "Incorrect whitelisted"); + + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); + creditFacade = cft.creditFacade(); + + assertEq(creditFacade.degenNFT(), address(cft.degenNFT()), "Incorrect degenNFT"); + + assertTrue(creditFacade.whitelisted() == true, "Incorrect whitelisted"); + } + + // + // ALL FUNCTIONS REVERTS IF USER HAS NO ACCOUNT + // + + /// @dev [FA-2]: functions reverts if borrower has no account + function test_FA_02_functions_reverts_if_borrower_has_no_account() public { + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); + creditFacade.closeCreditAccount(DUMB_ADDRESS, FRIEND, 0, false, multicallBuilder()); + + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); + creditFacade.closeCreditAccount( + DUMB_ADDRESS, + FRIEND, + 0, + false, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ) + ); + + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); + creditFacade.liquidateCreditAccount(DUMB_ADDRESS, DUMB_ADDRESS, 0, false, multicallBuilder()); + + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); + creditFacade.multicall( + DUMB_ADDRESS, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ) + ); + + // vm.prank(CONFIGURATOR); + // creditConfigurator.allowContract(address(targetMock), address(adapterMock)); + + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); + creditFacade.transferAccountOwnership(DUMB_ADDRESS, FRIEND); + } + + // + // ETH => WETH TESTS + // + function test_FA_03B_openCreditAccountMulticall_correctly_wraps_ETH() public { + /// - openCreditAccount + + _prepareForWETHTest(); + + vm.prank(USER); + creditFacade.openCreditAccount{value: WETH_TEST_AMOUNT}( + DAI_ACCOUNT_AMOUNT, + USER, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ), + false, + 0 + ); + _checkForWETHTest(); + } + + function test_FA_03C_closeCreditAccount_correctly_wraps_ETH() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.roll(block.number + 1); + + _prepareForWETHTest(); + vm.prank(USER); + creditFacade.closeCreditAccount{value: WETH_TEST_AMOUNT}(creditAccount, USER, 0, false, multicallBuilder()); + _checkForWETHTest(); + } + + function test_FA_03D_liquidate_correctly_wraps_ETH() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.roll(block.number + 1); + + tokenTestSuite.burn(Tokens.DAI, creditAccount, tokenTestSuite.balanceOf(Tokens.DAI, creditAccount)); + + _prepareForWETHTest(LIQUIDATOR); + + tokenTestSuite.approve(Tokens.DAI, LIQUIDATOR, address(creditManager)); + + tokenTestSuite.mint(Tokens.DAI, LIQUIDATOR, DAI_ACCOUNT_AMOUNT); + + vm.prank(LIQUIDATOR); + creditFacade.liquidateCreditAccount{value: WETH_TEST_AMOUNT}( + creditAccount, LIQUIDATOR, 0, false, multicallBuilder() + ); + _checkForWETHTest(LIQUIDATOR); + } + + function test_FA_03F_multicall_correctly_wraps_ETH() public { + (address creditAccount,) = _openTestCreditAccount(); + + // MULTICALL + _prepareForWETHTest(); + + vm.prank(USER); + creditFacade.multicall{value: WETH_TEST_AMOUNT}( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ) + ); + _checkForWETHTest(); + } + + // + // OPEN CREDIT ACCOUNT + // + + /// @dev [FA-4A]: openCreditAccount reverts for using addresses which is not allowed by transfer allowance + function test_FA_04A_openCreditAccount_reverts_for_using_addresses_which_is_not_allowed_by_transfer_allowance() + public + { + (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); + + vm.startPrank(USER); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ); + vm.expectRevert(AccountTransferNotAllowedException.selector); + creditFacade.openCreditAccount(minBorrowedAmount, FRIEND, calls, false, 0); + + vm.stopPrank(); + } + + /// @dev [FA-4B]: openCreditAccount reverts if user has no NFT for degen mode + function test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account() public { + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); + + (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); + + vm.expectRevert(IDegenNFTExceptions.InsufficientBalanceException.selector); + + vm.prank(FRIEND); + creditFacade.openCreditAccount( + minBorrowedAmount, + FRIEND, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ), + false, + 0 + ); + } + + /// @dev [FA-4C]: openCreditAccount opens account and burns token + function test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode() public { + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); + + IDegenNFT degenNFT = IDegenNFT(creditFacade.degenNFT()); + + vm.prank(CONFIGURATOR); + degenNFT.mint(USER, 2); + + expectBalance(address(degenNFT), USER, 2); + + (address creditAccount,) = _openTestCreditAccount(); + + expectBalance(address(degenNFT), USER, 1); + + _closeTestCreditAccount(creditAccount); + + tokenTestSuite.mint(Tokens.DAI, USER, DAI_ACCOUNT_AMOUNT); + + vm.prank(USER); + creditFacade.openCreditAccount( + DAI_ACCOUNT_AMOUNT, + USER, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT)) + }) + ), + false, + 0 + ); + + expectBalance(address(degenNFT), USER, 0); + } + + // /// @dev [FA-5]: openCreditAccount sets correct values + // function test_FA_05_openCreditAccount_sets_correct_values() public { + // uint16 LEVERAGE = 300; // x3 + + // address expectedCreditAccountAddress = accountFactory.head(); + + // vm.prank(FRIEND); + // creditFacade.approveAccountTransfer(USER, true); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // "openCreditAccount(uint256,address)", (DAI_ACCOUNT_AMOUNT * LEVERAGE) / LEVERAGE_DECIMALS, FRIEND + // ) + // ); + + // vm.expectEmit(true, true, false, true); + // emit OpenCreditAccount( + // FRIEND, expectedCreditAccountAddress, (DAI_ACCOUNT_AMOUNT * LEVERAGE) / LEVERAGE_DECIMALS, REFERRAL_CODE + // ); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // "addCollateral(address,address,address,uint256)", + // USER, + // expectedCreditAccountAddress, + // underlying, + // DAI_ACCOUNT_AMOUNT + // ) + // ); + + // vm.expectEmit(true, true, false, true); + // emit AddCollateral(creditAccount, FRIEND, underlying, DAI_ACCOUNT_AMOUNT); + + // vm.prank(USER); + // creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, FRIEND, LEVERAGE, REFERRAL_CODE); + // } + + /// @dev [FA-7]: openCreditAccount and openCreditAccount reverts when debt increase is forbidden + function test_FA_07_openCreditAccountMulticall_reverts_if_borrowing_forbidden() public { + (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidBorrowing(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ); + + vm.expectRevert(BorrowedBlockLimitException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(minBorrowedAmount, USER, calls, false, 0); + } + + /// @dev [FA-8]: openCreditAccount runs operations in correct order + function test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order() public { + vm.prank(FRIEND); + creditFacade.approveAccountTransfer(USER, true); + + RevocationPair[] memory revocations = new RevocationPair[](1); + + revocations[0] = RevocationPair({spender: address(this), token: underlying}); + + // tokenTestSuite.mint(Tokens.DAI, USER, WAD); + // tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); + + address expectedCreditAccountAddress = accountFactory.head(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT)) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.revokeAdapterAllowances, (revocations)) + }) + ); + + // EXPECTED STACK TRACE & EVENTS + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.openCreditAccount, (DAI_ACCOUNT_AMOUNT, FRIEND, false)) + ); + + vm.expectEmit(true, true, false, true); + emit OpenCreditAccount(expectedCreditAccountAddress, FRIEND, USER, DAI_ACCOUNT_AMOUNT, REFERRAL_CODE); + + vm.expectEmit(true, false, false, false); + emit StartMultiCall(expectedCreditAccountAddress); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.addCollateral, (USER, expectedCreditAccountAddress, underlying, DAI_ACCOUNT_AMOUNT) + ) + ); + + vm.expectEmit(true, true, false, true); + emit AddCollateral(expectedCreditAccountAddress, underlying, DAI_ACCOUNT_AMOUNT); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.revokeAdapterAllowances, (expectedCreditAccountAddress, revocations)) + ); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, + (expectedCreditAccountAddress, 1, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, FRIEND, calls, false, REFERRAL_CODE); + } + + /// @dev [FA-9]: openCreditAccount cant open credit account with hf <1; + function test_FA_09_openCreditAccountMulticall_cant_open_credit_account_with_hf_less_one( + uint256 amount, + uint8 token1 + ) public { + vm.assume(amount > 10000 && amount < DAI_ACCOUNT_AMOUNT); + vm.assume(token1 > 0 && token1 < creditManager.collateralTokensCount()); + + tokenTestSuite.mint(Tokens.DAI, address(creditManager.poolService()), type(uint96).max); + + vm.prank(CONFIGURATOR); + creditConfigurator.setMaxDebtPerBlockMultiplier(type(uint8).max); + + vm.prank(CONFIGURATOR); + creditConfigurator.setLimits(1, type(uint96).max); + + (address collateral,) = creditManager.collateralTokens(token1); + + tokenTestSuite.mint(collateral, USER, type(uint96).max); + + tokenTestSuite.approve(collateral, USER, address(creditManager)); + + uint256 lt = creditManager.liquidationThresholds(collateral); + + uint256 twvUSD = cft.priceOracle().convertToUSD(amount * lt, collateral) + + cft.priceOracle().convertToUSD(DAI_ACCOUNT_AMOUNT * DEFAULT_UNDERLYING_LT, underlying); + + uint256 borrowedAmountUSD = cft.priceOracle().convertToUSD(DAI_ACCOUNT_AMOUNT * PERCENTAGE_FACTOR, underlying); + + console.log("T:", twvUSD); + console.log("T:", borrowedAmountUSD); + + bool shouldRevert = twvUSD < borrowedAmountUSD; + + if (shouldRevert) { + vm.expectRevert(NotEnoughCollateralException.selector); + } + + vm.prank(USER); + creditFacade.openCreditAccount( + DAI_ACCOUNT_AMOUNT, + USER, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (collateral, amount)) + }) + ), + false, + REFERRAL_CODE + ); + } + + /// @dev [FA-10]: decrease debt during openCreditAccount + function test_FA_10_decrease_debt_forbidden_during_openCreditAccount() public { + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); + + vm.prank(USER); + + creditFacade.openCreditAccount( + DAI_ACCOUNT_AMOUNT, + USER, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, 812) + }) + ), + false, + REFERRAL_CODE + ); + } + + /// @dev [FA-11A]: openCreditAccount reverts if met borrowed limit per block + function test_FA_11A_openCreditAccount_reverts_if_met_borrowed_limit_per_block() public { + (uint128 _minDebt, uint128 _maxDebt) = creditFacade.debtLimits(); + + tokenTestSuite.mint(Tokens.DAI, address(cft.poolMock()), _maxDebt * 2); + + tokenTestSuite.mint(Tokens.DAI, USER, DAI_ACCOUNT_AMOUNT); + tokenTestSuite.mint(Tokens.DAI, FRIEND, DAI_ACCOUNT_AMOUNT); + + tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); + tokenTestSuite.approve(Tokens.DAI, FRIEND, address(creditManager)); + + vm.roll(2); + + vm.prank(CONFIGURATOR); + creditConfigurator.setMaxDebtPerBlockMultiplier(1); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT)) + }) + ); + + vm.prank(FRIEND); + creditFacade.openCreditAccount(_maxDebt - _minDebt, FRIEND, calls, false, 0); + + vm.expectRevert(BorrowedBlockLimitException.selector); + + vm.prank(USER); + creditFacade.openCreditAccount(_minDebt + 1, USER, calls, false, 0); + } + + /// @dev [FA-11B]: openCreditAccount reverts if amount < minAmount or amount > maxAmount + function test_FA_11B_openCreditAccount_reverts_if_amount_less_minBorrowedAmount_or_bigger_than_maxBorrowedAmount() + public + { + (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ); + + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(minBorrowedAmount - 1, USER, calls, false, 0); + + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(maxBorrowedAmount + 1, USER, calls, false, 0); + } + + // + // CLOSE CREDIT ACCOUNT + // + + /// @dev [FA-12]: closeCreditAccount runs multicall operations in correct order + function test_FA_12_closeCreditAccount_runs_operations_in_correct_order() public { + (address creditAccount, uint256 balance) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); + + vm.expectEmit(true, false, false, false); + emit StartMultiCall(creditAccount); + + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + + vm.expectEmit(true, false, false, true); + emit ExecuteOrder(address(targetMock)); + + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + + vm.expectCall(address(targetMock), DUMB_CALLDATA); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // ICreditManagerV3.closeCreditAccount, + // (creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, FRIEND, 1, 10, DAI_ACCOUNT_AMOUNT, true) + // ) + // ); + + vm.expectEmit(true, true, false, false); + emit CloseCreditAccount(creditAccount, USER, FRIEND); + + // increase block number, cause it's forbidden to close ca in the same block + vm.roll(block.number + 1); + + vm.prank(USER); + creditFacade.closeCreditAccount(creditAccount, FRIEND, 10, true, calls); + + assertEq0(targetMock.callData(), DUMB_CALLDATA, "Incorrect calldata"); + } + + /// @dev [FA-13]: closeCreditAccount reverts on internal calls in multicall + function test_FA_13_closeCreditAccount_reverts_on_internal_call_in_multicall_on_closure() public { + /// TODO: CHANGE TEST + // bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); + + // _openTestCreditAccount(); + + // vm.roll(block.number + 1); + + // vm.expectRevert(ForbiddenDuringClosureException.selector); + + // // It's used dumb calldata, cause all calls to creditFacade are forbidden + + // vm.prank(USER); + // creditFacade.closeCreditAccount( + // FRIEND, 0, true, multicallBuilder(MultiCall({target: address(creditFacade), callData: DUMB_CALLDATA})) + // ); + } + + // + // LIQUIDATE CREDIT ACCOUNT + // + + /// @dev [FA-14]: liquidateCreditAccount reverts if hf > 1 + function test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.expectRevert(CreditAccountNotLiquidatableException.selector); + + vm.prank(LIQUIDATOR); + creditFacade.liquidateCreditAccount(creditAccount, LIQUIDATOR, 0, true, multicallBuilder()); + } + + /// @dev [FA-15]: liquidateCreditAccount executes needed calls and emits events + function test_FA_15_liquidateCreditAccount_executes_needed_calls_and_emits_events() public { + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + _makeAccountsLiquitable(); + + // EXPECTED STACK TRACE & EVENTS + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); + + vm.expectEmit(true, false, false, false); + emit StartMultiCall(creditAccount); + + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + + vm.expectEmit(true, false, false, false); + emit ExecuteOrder(address(targetMock)); + + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + + vm.expectCall(address(targetMock), DUMB_CALLDATA); + + vm.expectEmit(false, false, false, false); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); + + // Total value = 2 * DAI_ACCOUNT_AMOUNT, cause we have x2 leverage + uint256 totalValue = 2 * DAI_ACCOUNT_AMOUNT; + uint256 debtWithInterest = DAI_ACCOUNT_AMOUNT; + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // ICreditManagerV3.closeCreditAccount, + // ( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // 1, + // 10, + // debtWithInterest, + // true + // ) + // ) + // ); + + vm.expectEmit(true, true, true, true); + emit LiquidateCreditAccount(creditAccount, USER, LIQUIDATOR, FRIEND, ClosureAction.LIQUIDATE_ACCOUNT, 0); + + vm.prank(LIQUIDATOR); + creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + } + + /// @dev [FA-15A]: Borrowing is prohibited after a liquidation with loss + function test_FA_15A_liquidateCreditAccount_prohibits_borrowing_on_loss() public { + (address creditAccount,) = _openTestCreditAccount(); + + uint8 maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); + + assertGt(maxDebtPerBlockMultiplier, 0, "SETUP: Increase debt is already enabled"); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + _makeAccountsLiquitable(); + + vm.prank(LIQUIDATOR); + creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + + maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); + + assertEq(maxDebtPerBlockMultiplier, 0, "Increase debt wasn't forbidden after loss"); + } + + /// @dev [FA-15B]: CreditFacade is paused after too much cumulative loss from liquidations + function test_FA_15B_liquidateCreditAccount_pauses_CreditFacade_on_too_much_loss() public { + vm.prank(CONFIGURATOR); + creditConfigurator.setMaxCumulativeLoss(1); + + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + _makeAccountsLiquitable(); + + vm.prank(LIQUIDATOR); + creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + + assertTrue(creditFacade.paused(), "Credit manager was not paused"); + } + + function test_FA_16_liquidateCreditAccount_reverts_on_internal_call_in_multicall_on_closure() public { + /// TODO: Add all cases with different permissions! + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ); + + (address creditAccount,) = _openTestCreditAccount(); + + _makeAccountsLiquitable(); + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, ADD_COLLATERAL_PERMISSION)); + + vm.prank(LIQUIDATOR); + + // It's used dumb calldata, cause all calls to creditFacade are forbidden + creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + } + + // [FA-16A]: liquidateCreditAccount reverts when zero address is passed as to + function test_FA_16A_liquidateCreditAccount_reverts_on_zero_to_address() public { + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + _openTestCreditAccount(); + + _makeAccountsLiquitable(); + vm.expectRevert(ZeroAddressException.selector); + + vm.prank(LIQUIDATOR); + + // It's used dumb calldata, cause all calls to creditFacade are forbidden + creditFacade.liquidateCreditAccount(USER, address(0), 10, true, calls); + } + + // + // INCREASE & DECREASE DEBT + // + + /// @dev [FA-17]: increaseDebt executes function as expected + function test_FA_17_increaseDebt_executes_actions_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.manageDebt, (creditAccount, 512, 1, ManageDebtAction.INCREASE_DEBT)) + ); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.expectEmit(true, false, false, true); + emit IncreaseDebt(creditAccount, 512); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (512)) + }) + ) + ); + } + + /// @dev [FA-18A]: increaseDebt revets if more than block limit + function test_FA_18A_increaseDebt_revets_if_more_than_block_limit() public { + (address creditAccount,) = _openTestCreditAccount(); + + uint8 maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); + (, uint128 maxDebt) = creditFacade.debtLimits(); + + vm.expectRevert(BorrowedBlockLimitException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (maxDebt * maxDebtPerBlockMultiplier + 1)) + }) + ) + ); + } + + /// @dev [FA-18B]: increaseDebt revets if more than maxBorrowedAmount + function test_FA_18B_increaseDebt_revets_if_more_than_block_limit() public { + (address creditAccount,) = _openTestCreditAccount(); + + (, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); + + uint256 amount = maxBorrowedAmount - DAI_ACCOUNT_AMOUNT + 1; + + tokenTestSuite.mint(Tokens.DAI, address(cft.poolMock()), amount); + + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (amount)) + }) + ) + ); + } + + /// @dev [FA-18C]: increaseDebt revets isIncreaseDebtForbidden is enabled + function test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidBorrowing(); + + vm.expectRevert(BorrowedBlockLimitException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (1)) + }) + ) + ); + } + + /// @dev [FA-18D]: increaseDebt reverts if there is a forbidden token on account + function test_FA_18D_increaseDebt_reverts_with_forbidden_tokens() public { + (address creditAccount,) = _openTestCreditAccount(); + + address link = tokenTestSuite.addressOf(Tokens.LINK); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (link)) + }) + ) + ); + + vm.prank(CONFIGURATOR); + creditConfigurator.forbidToken(link); + + vm.expectRevert(ForbiddenTokensException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (1)) + }) + ) + ); + } + + /// @dev [FA-19]: decreaseDebt executes function as expected + function test_FA_19_decreaseDebt_executes_actions_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.manageDebt, (creditAccount, 512, 1, ManageDebtAction.DECREASE_DEBT)) + ); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.expectEmit(true, false, false, true); + emit DecreaseDebt(creditAccount, 512); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, (512)) + }) + ) + ); + } + + /// @dev [FA-20]:decreaseDebt revets if less than minBorrowedAmount + function test_FA_20_decreaseDebt_revets_if_less_than_minBorrowedAmount() public { + (address creditAccount,) = _openTestCreditAccount(); + + (uint128 minBorrowedAmount,) = creditFacade.debtLimits(); + + uint256 amount = DAI_ACCOUNT_AMOUNT - minBorrowedAmount + 1; + + tokenTestSuite.mint(Tokens.DAI, address(cft.poolMock()), amount); + + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, (amount)) + }) + ) + ); + } + + // + // ADD COLLATERAL + // + + /// @dev [FA-21]: addCollateral executes function as expected + function test_FA_21_addCollateral_executes_actions_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + + tokenTestSuite.mint(Tokens.USDC, USER, 512); + tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, 512)) + ); + + vm.expectEmit(true, true, false, true); + emit AddCollateral(creditAccount, usdcToken, 512); + + // TODO: change test + + MultiCall[] memory calls = multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (usdcToken, 512)) + }) + ); + + vm.prank(USER); + creditFacade.multicall(creditAccount, calls); + + expectBalance(Tokens.USDC, creditAccount, 512); + expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + } + + /// @dev [FA-21C]: addCollateral calls checkEnabledTokensLength + function test_FA_21C_addCollateral_optimizes_enabled_tokens() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.prank(USER); + creditFacade.approveAccountTransfer(FRIEND, true); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + + tokenTestSuite.mint(Tokens.USDC, FRIEND, 512); + tokenTestSuite.approve(Tokens.USDC, FRIEND, address(creditManager)); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall(ICreditManagerV3.checkEnabledTokensLength.selector, creditAccount) + // ); + + // vm.prank(FRIEND); + // creditFacade.addCollateral(USER, usdcToken, 512); + } + + // + // MULTICALL + // + + /// @dev [FA-22]: multicall reverts if calldata length is less than 4 bytes + function test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.expectRevert(IncorrectCallDataException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, multicallBuilder(MultiCall({target: address(creditFacade), callData: bytes("123")})) + ); + } + + /// @dev [FA-23]: multicall reverts for unknown methods + function test_FA_23_multicall_reverts_for_unknown_methods() public { + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); + + vm.expectRevert(UnknownMethodException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, multicallBuilder(MultiCall({target: address(creditFacade), callData: DUMB_CALLDATA})) + ); + } + + /// @dev [FA-24]: multicall reverts for creditManager address + function test_FA_24_multicall_reverts_for_creditManager_address() public { + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); + + vm.expectRevert(TargetContractNotAllowedException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, multicallBuilder(MultiCall({target: address(creditManager), callData: DUMB_CALLDATA})) + ); + } + + /// @dev [FA-25]: multicall reverts on non-adapter targets + function test_FA_25_multicall_reverts_for_non_adapters() public { + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); + vm.expectRevert(TargetContractNotAllowedException.selector); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, multicallBuilder(MultiCall({target: DUMB_ADDRESS, callData: DUMB_CALLDATA})) + ); + } + + /// @dev [FA-26]: multicall addCollateral and oncreaseDebt works with creditFacade calls as expected + function test_FA_26_multicall_addCollateral_and_increase_debt_works_with_creditFacade_calls_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + tokenTestSuite.mint(Tokens.USDC, USER, USDC_EXCHANGE_AMOUNT); + tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + + uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); + + vm.expectEmit(true, true, false, true); + emit StartMultiCall(creditAccount); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT)) + ); + + vm.expectEmit(true, true, false, true); + emit AddCollateral(creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.manageDebt, (creditAccount, 256, usdcMask | 1, ManageDebtAction.INCREASE_DEBT) + ) + ); + + vm.expectEmit(true, false, false, true); + emit IncreaseDebt(creditAccount, 256); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 3, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (usdcToken, USDC_EXCHANGE_AMOUNT)) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (256)) + }) + ) + ); + } + + /// @dev [FA-27]: multicall addCollateral and decreaseDebt works with creditFacade calls as expected + function test_FA_27_multicall_addCollateral_and_decreaseDebt_works_with_creditFacade_calls_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + tokenTestSuite.mint(Tokens.USDC, USER, USDC_EXCHANGE_AMOUNT); + tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); + + uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); + + vm.expectEmit(true, true, false, true); + emit StartMultiCall(creditAccount); + + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT)) + ); + + vm.expectEmit(true, true, false, true); + emit AddCollateral(creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.manageDebt, (creditAccount, 256, usdcMask | 1, ManageDebtAction.DECREASE_DEBT) + ) + ); + + vm.expectEmit(true, false, false, true); + emit DecreaseDebt(creditAccount, 256); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 3, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (usdcToken, USDC_EXCHANGE_AMOUNT)) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, 256) + }) + ) + ); + } + + /// @dev [FA-28]: multicall reverts for decrease opeartion after increase one + function test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, 256) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, 256) + }) + ) + ); + } + + /// @dev [FA-29]: multicall works with adapters calls as expected + function test_FA_29_multicall_works_with_adapters_calls_as_expected() public { + (address creditAccount,) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + // TODO: add enable / disable cases + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); + + vm.expectEmit(true, true, false, true); + emit StartMultiCall(creditAccount); + + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + + vm.expectEmit(true, false, false, true); + emit ExecuteOrder(address(targetMock)); + + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + + vm.expectCall(address(targetMock), DUMB_CALLDATA); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.prank(USER); + creditFacade.multicall(creditAccount, calls); + } + + // + // TRANSFER ACCOUNT OWNERSHIP + // + + // /// @dev [FA-32]: transferAccountOwnership reverts if "to" user doesn't provide allowance + /// TODO: CHANGE TO ALLOWANCE METHOD + // function test_FA_32_transferAccountOwnership_reverts_if_whitelisted_enabled() public { + // cft.testFacadeWithDegenNFT(); + // creditFacade = cft.creditFacade(); + + // vm.expectRevert(AccountTransferNotAllowedException.selector); + // vm.prank(USER); + // creditFacade.transferAccountOwnership(DUMB_ADDRESS); + // } + + /// @dev [FA-33]: transferAccountOwnership reverts if "to" user doesn't provide allowance + function test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance() public { + (address creditAccount,) = _openTestCreditAccount(); + vm.expectRevert(AccountTransferNotAllowedException.selector); + + vm.prank(USER); + creditFacade.transferAccountOwnership(creditAccount, DUMB_ADDRESS); + } + + /// @dev [FA-34]: transferAccountOwnership reverts if hf less 1 + function test_FA_34_transferAccountOwnership_reverts_if_hf_less_1() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.prank(FRIEND); + creditFacade.approveAccountTransfer(USER, true); + + _makeAccountsLiquitable(); + + vm.expectRevert(CantTransferLiquidatableAccountException.selector); + + vm.prank(USER); + creditFacade.transferAccountOwnership(creditAccount, FRIEND); + } + + /// @dev [FA-35]: transferAccountOwnership transfers account if it's allowed + function test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed() public { + (address creditAccount,) = _openTestCreditAccount(); + + vm.prank(FRIEND); + creditFacade.approveAccountTransfer(USER, true); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.transferAccountOwnership, (creditAccount, FRIEND)) + ); + + vm.expectEmit(true, true, false, false); + emit TransferAccount(creditAccount, USER, FRIEND); + + vm.prank(USER); + creditFacade.transferAccountOwnership(creditAccount, FRIEND); + + // assertEq( + // creditManager.getCreditAccountOrRevert(FRIEND), creditAccount, "Credit account was not properly transferred" + // ); + } + + /// @dev [FA-36]: checkAndUpdateBorrowedBlockLimit doesn't change block limit if maxBorrowedAmountPerBlock = type(uint128).max + function test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max() public { + // vm.prank(CONFIGURATOR); + // creditConfigurator.setMaxDebtLimitPerBlock(type(uint128).max); + + // (uint64 blockLastUpdate, uint128 borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + // assertEq(blockLastUpdate, 0, "Incorrect currentBlockLimit"); + // assertEq(borrowedInBlock, 0, "Incorrect currentBlockLimit"); + + // _openTestCreditAccount(); + + // (blockLastUpdate, borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + // assertEq(blockLastUpdate, 0, "Incorrect currentBlockLimit"); + // assertEq(borrowedInBlock, 0, "Incorrect currentBlockLimit"); + } + + /// @dev [FA-37]: checkAndUpdateBorrowedBlockLimit doesn't change block limit if maxBorrowedAmountPerBlock = type(uint128).max + function test_FA_37_checkAndUpdateBorrowedBlockLimit_updates_block_limit_properly() public { + // (uint64 blockLastUpdate, uint128 borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + + // assertEq(blockLastUpdate, 0, "Incorrect blockLastUpdate"); + // assertEq(borrowedInBlock, 0, "Incorrect borrowedInBlock"); + + // _openTestCreditAccount(); + + // (blockLastUpdate, borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + + // assertEq(blockLastUpdate, block.number, "blockLastUpdate"); + // assertEq(borrowedInBlock, DAI_ACCOUNT_AMOUNT, "Incorrect borrowedInBlock"); + + // vm.prank(USER); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(creditFacade), + // callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (DAI_EXCHANGE_AMOUNT)) + // }) + // ) + // ); + + // (blockLastUpdate, borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + + // assertEq(blockLastUpdate, block.number, "blockLastUpdate"); + // assertEq(borrowedInBlock, DAI_ACCOUNT_AMOUNT + DAI_EXCHANGE_AMOUNT, "Incorrect borrowedInBlock"); + + // // switch to new block + // vm.roll(block.number + 1); + + // vm.prank(USER); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(creditFacade), + // callData: abi.encodeCall(ICreditFacadeMulticall.increaseDebt, (DAI_EXCHANGE_AMOUNT)) + // }) + // ) + // ); + + // (blockLastUpdate, borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); + + // assertEq(blockLastUpdate, block.number, "blockLastUpdate"); + // assertEq(borrowedInBlock, DAI_EXCHANGE_AMOUNT, "Incorrect borrowedInBlock"); + } + + // + // APPROVE ACCOUNT TRANSFER + // + + /// @dev [FA-38]: approveAccountTransfer changes transfersAllowed + function test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account() public { + assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == false, "Transfer is unexpectedly allowed "); + + vm.expectEmit(true, true, false, true); + emit SetAccountTransferAllowance(USER, FRIEND, true); + + vm.prank(FRIEND); + creditFacade.approveAccountTransfer(USER, true); + + assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == true, "Transfer is unexpectedly not allowed "); + + vm.expectEmit(true, true, false, true); + emit SetAccountTransferAllowance(USER, FRIEND, false); + + vm.prank(FRIEND); + creditFacade.approveAccountTransfer(USER, false); + assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == false, "Transfer is unexpectedly allowed "); + } + + // + // ENABLE TOKEN + // + + /// @dev [FA-39]: enable token works as expected + function test_FA_39_enable_token_is_correct() public { + (address creditAccount,) = _openTestCreditAccount(); + + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + + tokenTestSuite.mint(Tokens.USDC, creditAccount, 100); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (usdcToken)) + }) + ) + ); + + expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + } + + // + // GETTERS + // + + /// @dev [FA-41]: calcTotalValue computes correctly + function test_FA_41_calcTotalValue_computes_correctly() public { + (address creditAccount,) = _openTestCreditAccount(); + + // AFTER OPENING CREDIT ACCOUNT + uint256 expectedTV = DAI_ACCOUNT_AMOUNT * 2; + uint256 expectedTWV = (DAI_ACCOUNT_AMOUNT * 2 * DEFAULT_UNDERLYING_LT) / PERCENTAGE_FACTOR; + + // (uint256 tv, uint256 tvw) = creditFacade.calcTotalValue(creditAccount); + + // assertEq(tv, expectedTV, "Incorrect total value for 1 asset"); + + // assertEq(tvw, expectedTWV, "Incorrect Threshold weighthed value for 1 asset"); + + // ADDS USDC BUT NOT ENABLES IT + address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + tokenTestSuite.mint(Tokens.USDC, creditAccount, 10 * 10 ** 6); + + // (tv, tvw) = creditFacade.calcTotalValue(creditAccount); + + // // tv and tvw shoul be the same until we deliberately enable USDC token + // assertEq(tv, expectedTV, "Incorrect total value for 1 asset"); + + // assertEq(tvw, expectedTWV, "Incorrect Threshold weighthed value for 1 asset"); + + // ENABLES USDC + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (usdcToken)) + }) + ) + ); + + expectedTV += 10 * WAD; + expectedTWV += (10 * WAD * 9000) / PERCENTAGE_FACTOR; + + // (tv, tvw) = creditFacade.calcTotalValue(creditAccount); + + // assertEq(tv, expectedTV, "Incorrect total value for 2 asset"); + + // assertEq(tvw, expectedTWV, "Incorrect Threshold weighthed value for 2 asset"); + + // 3 ASSET TEST: 10 DAI + 10 USDC + 0.01 WETH (3200 $/ETH) + addCollateral(Tokens.WETH, WAD / 100); + + expectedTV += (WAD / 100) * DAI_WETH_RATE; + expectedTWV += ((WAD / 100) * DAI_WETH_RATE * 8300) / PERCENTAGE_FACTOR; + + // (tv, tvw) = creditFacade.calcTotalValue(creditAccount); + + // assertEq(tv, expectedTV, "Incorrect total value for 3 asset"); + + // assertEq(tvw, expectedTWV, "Incorrect Threshold weighthed value for 3 asset"); + } + + /// @dev [FA-42]: calcCreditAccountHealthFactor computes correctly + function test_FA_42_calcCreditAccountHealthFactor_computes_correctly() public { + (address creditAccount,) = _openTestCreditAccount(); + + // AFTER OPENING CREDIT ACCOUNT + + uint256 expectedTV = DAI_ACCOUNT_AMOUNT * 2; + uint256 expectedTWV = (DAI_ACCOUNT_AMOUNT * 2 * DEFAULT_UNDERLYING_LT) / PERCENTAGE_FACTOR; + + uint256 expectedHF = (expectedTWV * PERCENTAGE_FACTOR) / DAI_ACCOUNT_AMOUNT; + + // assertEq(creditFacade.calcCreditAccountHealthFactor(creditAccount), expectedHF, "Incorrect health factor"); + + // ADDING USDC AS COLLATERAL + + addCollateral(Tokens.USDC, 10 * 10 ** 6); + + expectedTV += 10 * WAD; + expectedTWV += (10 * WAD * 9000) / PERCENTAGE_FACTOR; + + expectedHF = (expectedTWV * PERCENTAGE_FACTOR) / DAI_ACCOUNT_AMOUNT; + + // assertEq(creditFacade.calcCreditAccountHealthFactor(creditAccount), expectedHF, "Incorrect health factor"); + + // 3 ASSET: 10 DAI + 10 USDC + 0.01 WETH (3200 $/ETH) + addCollateral(Tokens.WETH, WAD / 100); + + expectedTV += (WAD / 100) * DAI_WETH_RATE; + expectedTWV += ((WAD / 100) * DAI_WETH_RATE * 8300) / PERCENTAGE_FACTOR; + + expectedHF = (expectedTWV * PERCENTAGE_FACTOR) / DAI_ACCOUNT_AMOUNT; + + // assertEq(creditFacade.calcCreditAccountHealthFactor(creditAccount), expectedHF, "Incorrect health factor"); + } + + /// CHECK IS ACCOUNT LIQUIDATABLE + + /// @dev [FA-44]: setContractToAdapter reverts if called non-configurator + function test_FA_44_config_functions_revert_if_called_non_configurator() public { + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + creditFacade.setDebtLimits(100, 100, 100); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + creditFacade.setBotList(FRIEND); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.ALLOW); + } + + /// CHECK SLIPPAGE PROTECTION + + /// [TODO]: add new test + + /// @dev [FA-45]: rrevertIfGetLessThan during multicalls works correctly + function test_FA_45_revertIfGetLessThan_works_correctly() public { + (address creditAccount,) = _openTestCreditAccount(); + + uint256 expectedDAI = 1000; + uint256 expectedLINK = 2000; + + address tokenLINK = tokenTestSuite.addressOf(Tokens.LINK); + + Balance[] memory expectedBalances = new Balance[](2); + expectedBalances[0] = Balance({token: underlying, balance: expectedDAI}); + + expectedBalances[1] = Balance({token: tokenLINK, balance: expectedLINK}); + + // TOKEN PREPARATION + tokenTestSuite.mint(Tokens.DAI, USER, expectedDAI * 3); + tokenTestSuite.mint(Tokens.LINK, USER, expectedLINK * 3); + + tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); + tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + CreditFacadeMulticaller(address(creditFacade)).revertIfReceivedLessThan(expectedBalances), + CreditFacadeMulticaller(address(creditFacade)).addCollateral(underlying, expectedDAI), + CreditFacadeMulticaller(address(creditFacade)).addCollateral(tokenLINK, expectedLINK) + ) + ); + + for (uint256 i = 0; i < 2; i++) { + vm.prank(USER); + vm.expectRevert( + abi.encodeWithSelector( + BalanceLessThanMinimumDesiredException.selector, ((i == 0) ? underlying : tokenLINK) + ) + ); + + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.revertIfReceivedLessThan, (expectedBalances)) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall( + ICreditFacadeMulticall.addCollateral, (underlying, (i == 0) ? expectedDAI - 1 : expectedDAI) + ) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall( + ICreditFacadeMulticall.addCollateral, (tokenLINK, (i == 0) ? expectedLINK : expectedLINK - 1) + ) + }) + ) + ); + } + } + + /// @dev [FA-45A]: rrevertIfGetLessThan everts if called twice + function test_FA_45A_revertIfGetLessThan_reverts_if_called_twice() public { + uint256 expectedDAI = 1000; + + Balance[] memory expectedBalances = new Balance[](1); + expectedBalances[0] = Balance({token: underlying, balance: expectedDAI}); + + (address creditAccount,) = _openTestCreditAccount(); + vm.prank(USER); + vm.expectRevert(ExpectedBalancesAlreadySetException.selector); + + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.revertIfReceivedLessThan, (expectedBalances)) + }), + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.revertIfReceivedLessThan, (expectedBalances)) + }) + ) + ); + } + + /// CREDIT FACADE WITH EXPIRATION + + /// @dev [FA-46]: openCreditAccount and openCreditAccount no longer work if the CreditFacadeV3 is expired + function test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade() public { + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); + + vm.warp(block.timestamp + 1); + + vm.expectRevert(NotAllowedAfterExpirationException.selector); + + vm.prank(USER); + creditFacade.openCreditAccount( + DAI_ACCOUNT_AMOUNT, + USER, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + }) + ), + false, + 0 + ); + } + + /// @dev [FA-47]: liquidateExpiredCreditAccount should not work before the CreditFacadeV3 is expired + function test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration() public { + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); + + _openTestCreditAccount(); + + // vm.expectRevert(CantLiquidateNonExpiredException.selector); + + // vm.prank(LIQUIDATOR); + // creditFacade.liquidateExpiredCreditAccount(USER, LIQUIDATOR, 0, false, multicallBuilder()); + } + + /// @dev [FA-48]: liquidateExpiredCreditAccount should not work when expiration is set to zero (i.e. CreditFacadeV3 is non-expiring) + function test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration() public { + _openTestCreditAccount(); + + // vm.expectRevert(CantLiquidateNonExpiredException.selector); + + // vm.prank(LIQUIDATOR); + // creditFacade.liquidateExpiredCreditAccount(USER, LIQUIDATOR, 0, false, multicallBuilder()); + } + + /// @dev [FA-49]: liquidateExpiredCreditAccount works correctly and emits events + function test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration() public { + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); + (address creditAccount, uint256 balance) = _openTestCreditAccount(); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + vm.warp(block.timestamp + 1); + vm.roll(block.number + 1); + + // (uint256 borrowedAmount, uint256 borrowedAmountWithInterest,) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // (, uint256 remainingFunds,,) = creditManager.calcClosePayments( + // balance, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, borrowedAmount, borrowedAmountWithInterest + // ); + + // // EXPECTED STACK TRACE & EVENTS + + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount))); + + // vm.expectEmit(true, false, false, false); + // emit StartMultiCall(creditAccount); + + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + + // vm.expectEmit(true, false, false, false); + // emit ExecuteOrder(address(targetMock)); + + // vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + + // vm.expectCall(address(targetMock), DUMB_CALLDATA); + + // vm.expectEmit(false, false, false, false); + // emit FinishMultiCall(); + + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1)))); + // // Total value = 2 * DAI_ACCOUNT_AMOUNT, cause we have x2 leverage + // uint256 totalValue = balance; + + // // vm.expectCall( + // // address(creditManager), + // // abi.encodeCall( + // // ICreditManagerV3.closeCreditAccount, + // // ( + // // creditAccount, + // // ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // // totalValue, + // // LIQUIDATOR, + // // FRIEND, + // // 1, + // // 10, + // // DAI_ACCOUNT_AMOUNT, + // // true + // // ) + // // ) + // // ); + + // vm.expectEmit(true, true, false, true); + // emit LiquidateCreditAccount( + // creditAccount, USER, LIQUIDATOR, FRIEND, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, remainingFunds + // ); + + // vm.prank(LIQUIDATOR); + // creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + } + + /// + /// ENABLE TOKEN + /// + + /// @dev [FA-53]: enableToken works as expected in a multicall + function test_FA_53_enableToken_works_as_expected_multicall() public { + (address creditAccount,) = _openTestCreditAccount(); + + address token = tokenTestSuite.addressOf(Tokens.USDC); + + // vm.expectCall( + // address(creditManager), abi.encodeCall(ICreditManagerV3.checkAndEnableToken.selector, token) + // ); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (token)) + }) + ) + ); + + expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + } + + /// @dev [FA-54]: disableToken works as expected in a multicall + function test_FA_54_disableToken_works_as_expected_multicall() public { + (address creditAccount,) = _openTestCreditAccount(); + + address token = tokenTestSuite.addressOf(Tokens.USDC); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.enableToken, (token)) + }) + ) + ); + + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.disableToken.selector, token)); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.disableToken, (token)) + }) + ) + ); + + expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + } + + // /// @dev [FA-56]: liquidateCreditAccount correctly uses BlacklistHelper during liquidations + // function test_FA_56_liquidateCreditAccount_correctly_handles_blacklisted_borrowers() public { + // _setUp(Tokens.USDC); + + // cft.testFacadeWithBlacklistHelper(); + + // creditFacade = cft.creditFacade(); + + // address usdc = tokenTestSuite.addressOf(Tokens.USDC); + + // address blacklistHelper = creditFacade.blacklistHelper(); + + // _openTestCreditAccount(); + + // uint256 expectedAmount = ( + // 2 * USDC_ACCOUNT_AMOUNT * (PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM - DEFAULT_FEE_LIQUIDATION) + // ) / PERCENTAGE_FACTOR - USDC_ACCOUNT_AMOUNT - 1 - 1; // second -1 because we add 1 to helper balance + + // vm.roll(block.number + 1); + + // vm.prank(address(creditConfigurator)); + // CreditManagerV3(address(creditManager)).setLiquidationThreshold(usdc, 1); + + // ERC20BlacklistableMock(usdc).setBlacklisted(USER, true); + + // vm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawalManager.isBlacklisted, (usdc, USER))); + + // vm.expectCall( + // address(creditManager), abi.encodeCall(ICreditManagerV3.transferAccountOwnership, (USER, blacklistHelper)) + // ); + + // vm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawalManager.addWithdrawal, (usdc, USER, expectedAmount))); + + // vm.expectEmit(true, false, false, true); + // emit UnderlyingSentToBlacklistHelper(USER, expectedAmount); + + // vm.prank(LIQUIDATOR); + // creditFacade.liquidateCreditAccount(USER, FRIEND, 0, true, multicallBuilder()); + + // assertEq(IWithdrawalManager(blacklistHelper).claimable(usdc, USER), expectedAmount, "Incorrect claimable amount"); + + // vm.prank(USER); + // IWithdrawalManager(blacklistHelper).claim(usdc, FRIEND2); + + // assertEq(tokenTestSuite.balanceOf(Tokens.USDC, FRIEND2), expectedAmount, "Transferred amount incorrect"); + // } + + // /// @dev [FA-57]: openCreditAccount reverts when the borrower is blacklisted on a blacklistable underlying + // function test_FA_57_openCreditAccount_reverts_on_blacklisted_borrower() public { + // _setUp(Tokens.USDC); + + // cft.testFacadeWithBlacklistHelper(); + + // creditFacade = cft.creditFacade(); + + // address usdc = tokenTestSuite.addressOf(Tokens.USDC); + + // ERC20BlacklistableMock(usdc).setBlacklisted(USER, true); + + // vm.expectRevert(NotAllowedForBlacklistedAddressException.selector); + + // vm.prank(USER); + // creditFacade.openCreditAccount( + // USDC_ACCOUNT_AMOUNT, + // USER, + // multicallBuilder( + // MultiCall({ + // target: address(creditFacade), + // callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) + // }) + // ), + // 0 + // ); + // } + + /// @dev [FA-58]: botMulticall works correctly + function test_FA_58_botMulticall_works_correctly() public { + (address creditAccount,) = _openTestCreditAccount(); + + BotList botList = new BotList(address(cft.addressProvider())); + + vm.prank(CONFIGURATOR); + creditConfigurator.setBotList(address(botList)); + + /// ???? + address bot = address(new TargetContractMock()); + + vm.prank(USER); + botList.setBotPermissions(bot, type(uint192).max); + + bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); + + MultiCall[] memory calls = multicallBuilder( + MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) + ); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); + + vm.expectEmit(true, true, false, true); + emit StartMultiCall(creditAccount); + + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + + vm.expectEmit(true, false, false, true); + emit ExecuteOrder(address(targetMock)); + + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + + vm.expectCall(address(targetMock), DUMB_CALLDATA); + + vm.expectEmit(false, false, false, true); + emit FinishMultiCall(); + + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) + ) + ); + + vm.prank(bot); + creditFacade.botMulticall(creditAccount, calls); + + vm.expectRevert(NotApprovedBotException.selector); + creditFacade.botMulticall( + creditAccount, multicallBuilder(MultiCall({target: address(adapterMock), callData: DUMB_CALLDATA})) + ); + + vm.prank(CONFIGURATOR); + botList.setBotForbiddenStatus(bot, true); + + vm.expectRevert(NotApprovedBotException.selector); + vm.prank(bot); + creditFacade.botMulticall(creditAccount, calls); + } + + /// @dev [FA-59]: setFullCheckParams performs correct full check after multicall + function test_FA_59_setFullCheckParams_correctly_passes_params_to_fullCollateralCheck() public { + (address creditAccount,) = _openTestCreditAccount(); + + uint256[] memory collateralHints = new uint256[](1); + collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + + uint256 enabledTokensMap = creditManager.enabledTokensMaskOf(creditAccount); + + vm.expectCall( + address(creditManager), + abi.encodeCall( + ICreditManagerV3.fullCollateralCheck, (creditAccount, enabledTokensMap, collateralHints, 10001) + ) + ); + + vm.prank(USER); + creditFacade.multicall( + creditAccount, + multicallBuilder( + MultiCall({ + target: address(creditFacade), + callData: abi.encodeCall(ICreditFacadeMulticall.setFullCheckParams, (collateralHints, 10001)) + }) + ) + ); + } + + // + // EMERGENCY LIQUIDATIONS + // + + /// @dev [FA-62]: addEmergencyLiquidator correctly sets value + function test_FA_62_setEmergencyLiquidator_works_correctly() public { + vm.prank(address(creditConfigurator)); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.ALLOW); + + assertTrue(creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Value was not set"); + + vm.prank(address(creditConfigurator)); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.FORBID); + + assertTrue(!creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Value was is still set"); + } +} diff --git a/contracts/test/integration/credit/CreditManager.t.sol b/contracts/test/integration/credit/CreditManager.t.sol new file mode 100644 index 00000000..19caca46 --- /dev/null +++ b/contracts/test/integration/credit/CreditManager.t.sol @@ -0,0 +1,2444 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol"; +import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; + +import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; +import {ICreditAccount} from "@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol"; +import { + ICreditManagerV3, + ICreditManagerV3Events, + ClosureAction, + CollateralTokenData, + ManageDebtAction +} from "../../../interfaces/ICreditManagerV3.sol"; + +import {IPriceOracleV2, IPriceOracleV2Ext} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; +import {IWETHGateway} from "../../../interfaces/IWETHGateway.sol"; +import {IWithdrawalManager} from "../../../interfaces/IWithdrawalManager.sol"; + +import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; + +import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; + +import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {ERC20Mock} from "@gearbox-protocol/core-v2/contracts/test/mocks/token/ERC20Mock.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +// LIBS & TRAITS +import {BitMask} from "../../../libraries/BitMask.sol"; +// TESTS + +import "../../lib/constants.sol"; +import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; + +// EXCEPTIONS +import {TokenAlreadyAddedException} from "../../../interfaces/IExceptions.sol"; + +// MOCKS +import {PriceFeedMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/oracles/PriceFeedMock.sol"; +import {PoolServiceMock} from "../../mocks/pool/PoolServiceMock.sol"; +import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; +import { + ERC20ApproveRestrictedRevert, + ERC20ApproveRestrictedFalse +} from "@gearbox-protocol/core-v2/contracts/test/mocks/token/ERC20ApproveRestricted.sol"; + +// SUITES +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Tokens} from "../../config/Tokens.sol"; +import {CreditManagerTestSuite} from "../../suites/CreditManagerTestSuite.sol"; + +import {CreditManagerTestInternal} from "../../mocks/credit/CreditManagerTestInternal.sol"; + +import {CreditConfig} from "../../config/CreditConfig.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +import {Test} from "forge-std/Test.sol"; +import "forge-std/console.sol"; + +/// @title AddressRepository +/// @notice Stores addresses of deployed contracts +contract CreditManagerTest is Test, ICreditManagerV3Events, BalanceHelper { + using BitMask for uint256; + + CreditManagerTestSuite cms; + + IAddressProvider addressProvider; + IWETH wethToken; + + AccountFactory af; + CreditManagerV3 creditManager; + PoolServiceMock poolMock; + IPriceOracleV2 priceOracle; + IWETHGateway wethGateway; + IWithdrawalManager withdrawalManager; + ACL acl; + address underlying; + + CreditConfig creditConfig; + + function setUp() public { + tokenTestSuite = new TokensTestSuite(); + + tokenTestSuite.topUpWETH{value: 100 * WAD}(); + _connectCreditManagerSuite(Tokens.DAI, false); + } + + /// + /// HELPERS + + function _connectCreditManagerSuite(Tokens t, bool internalSuite) internal { + creditConfig = new CreditConfig(tokenTestSuite, t); + cms = new CreditManagerTestSuite(creditConfig, internalSuite, false, 1); + + acl = cms.acl(); + + addressProvider = cms.addressProvider(); + af = cms.af(); + + poolMock = cms.poolMock(); + withdrawalManager = cms.withdrawalManager(); + + creditManager = cms.creditManager(); + + priceOracle = creditManager.priceOracle(); + underlying = creditManager.underlying(); + wethGateway = IWETHGateway(creditManager.wethGateway()); + } + + /// @dev Opens credit account for testing management functions + function _openCreditAccount() + internal + returns ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) + { + return cms.openCreditAccount(); + } + + function expectTokenIsEnabled(address creditAccount, Tokens t, bool expectedState) internal { + bool state = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(t)) + & creditManager.enabledTokensMaskOf(creditAccount) != 0; + assertTrue( + state == expectedState, + string( + abi.encodePacked( + "Token ", + tokenTestSuite.symbols(t), + state ? " enabled as not expected" : " not enabled as expected " + ) + ) + ); + } + + function mintBalance(address creditAccount, Tokens t, uint256 amount, bool enable) internal { + tokenTestSuite.mint(t, creditAccount, amount); + // if (enable) { + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(t)); + // } + } + + function _addAndEnableTokens(address creditAccount, uint256 numTokens, uint256 balance) internal { + for (uint256 i = 0; i < numTokens; i++) { + ERC20Mock t = new ERC20Mock("new token", "nt", 18); + PriceFeedMock pf = new PriceFeedMock(10**8, 8); + + vm.startPrank(CONFIGURATOR); + creditManager.addToken(address(t)); + IPriceOracleV2Ext(address(priceOracle)).addPriceFeed(address(t), address(pf)); + creditManager.setCollateralTokenData(address(t), 8000, 8000, type(uint40).max, 0); + vm.stopPrank(); + + t.mint(creditAccount, balance); + + // creditManager.checkAndEnableToken(address(t)); + } + } + + function _getRandomBits(uint256 ones, uint256 zeros, uint256 randomValue) + internal + pure + returns (bool[] memory result, uint256 breakPoint) + { + if ((ones + zeros) == 0) { + result = new bool[](0); + breakPoint = 0; + return (result, breakPoint); + } + + uint256 onesCurrent = ones; + uint256 zerosCurrent = zeros; + + result = new bool[](ones + zeros); + uint256 i = 0; + + while (onesCurrent + zerosCurrent > 0) { + uint256 rand = uint256(keccak256(abi.encodePacked(randomValue))) % (onesCurrent + zerosCurrent); + if (rand < onesCurrent) { + result[i] = true; + onesCurrent--; + } else { + result[i] = false; + zerosCurrent--; + } + + i++; + } + + if (ones > 0) { + uint256 breakpointCounter = (uint256(keccak256(abi.encodePacked(randomValue))) % (ones)) + 1; + + for (uint256 j = 0; j < result.length; j++) { + if (result[j]) { + breakpointCounter--; + } + + if (breakpointCounter == 0) { + breakPoint = j; + break; + } + } + } + } + + function enableTokensMoreThanLimit(address creditAccount) internal { + uint256 maxAllowedEnabledTokenLength = creditManager.maxAllowedEnabledTokenLength(); + _addAndEnableTokens(creditAccount, maxAllowedEnabledTokenLength, 2); + } + + function _openAccountAndTransferToCF() internal returns (address creditAccount) { + (,,, creditAccount) = _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + } + + function _baseFullCollateralCheck(address creditAccount) internal { + // TODO: CHANGE + creditManager.fullCollateralCheck(creditAccount, 0, new uint256[](0), 10000); + } + + /// + /// + /// TESTS + /// + /// + /// @dev [CM-1]: credit manager reverts if were called non-creditFacade + function test_CM_01_constructor_sets_correct_values() public { + creditManager = new CreditManagerV3(address(poolMock), address(withdrawalManager)); + + assertEq(address(creditManager.poolService()), address(poolMock), "Incorrect poolSerivice"); + + assertEq(address(creditManager.pool()), address(poolMock), "Incorrect pool"); + + assertEq(creditManager.underlying(), tokenTestSuite.addressOf(Tokens.DAI), "Incorrect underlying"); + + (address token, uint16 lt) = creditManager.collateralTokens(0); + + assertEq(token, tokenTestSuite.addressOf(Tokens.DAI), "Incorrect underlying"); + + assertEq( + creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)), + 1, + "Incorrect token mask for underlying token" + ); + + assertEq(lt, 0, "Incorrect LT for underlying"); + + assertEq(creditManager.wethAddress(), addressProvider.getWethToken(), "Incorrect WETH token"); + + assertEq(address(creditManager.wethGateway()), addressProvider.getWETHGateway(), "Incorrect WETH Gateway"); + + assertEq(address(creditManager.priceOracle()), addressProvider.getPriceOracle(), "Incorrect Price oracle"); + + assertEq(address(creditManager.creditConfigurator()), address(this), "Incorrect creditConfigurator"); + } + + /// @dev [CM-2]:credit account management functions revert if were called non-creditFacade + /// Functions list: + /// - openCreditAccount + /// - closeCreditAccount + /// - manadgeDebt + /// - addCollateral + /// - transferOwnership + /// All these functions have creditFacadeOnly modifier + function test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall() public { + assertEq(creditManager.creditFacade(), address(this)); + + vm.startPrank(USER); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.openCreditAccount(200000, address(this), false); + + // vm.expectRevert(CallerNotCreditFacadeException.selector); + // creditManager.closeCreditAccount( + // DUMB_ADDRESS, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false + // ); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.manageDebt(DUMB_ADDRESS, 100, 0, ManageDebtAction.INCREASE_DEBT); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.addCollateral(DUMB_ADDRESS, DUMB_ADDRESS, DUMB_ADDRESS, 100); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.transferAccountOwnership(DUMB_ADDRESS, DUMB_ADDRESS); + + vm.stopPrank(); + } + + /// @dev [CM-3]:credit account execution functions revert if were called non-creditFacade & non-adapters + /// Functions list: + /// - approveCreditAccount + /// - executeOrder + /// - checkAndEnableToken + /// - fullCollateralCheck + /// - disableToken + /// - changeEnabledTokens + function test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade_or_adapters() public { + assertEq(creditManager.creditFacade(), address(this)); + + vm.startPrank(USER); + + vm.expectRevert(CallerNotAdapterException.selector); + creditManager.approveCreditAccount(DUMB_ADDRESS, 100); + + vm.expectRevert(CallerNotAdapterException.selector); + creditManager.executeOrder(bytes("0")); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.fullCollateralCheck(DUMB_ADDRESS, 0, new uint256[](0), 10000); + + vm.stopPrank(); + } + + /// @dev [CM-4]:credit account configuration functions revert if were called non-configurator + /// Functions list: + /// - addToken + /// - setParams + /// - setLiquidationThreshold + /// - setForbidMask + /// - setContractAllowance + /// - upgradeContracts + /// - setCreditConfigurator + /// - addEmergencyLiquidator + /// - removeEmergenceLiquidator + function test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditConfigurator() public { + assertEq(creditManager.creditFacade(), address(this)); + + vm.startPrank(USER); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.addToken(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setParams(0, 0, 0, 0, 0); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setCollateralTokenData(DUMB_ADDRESS, 0, 0, 0, 0); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setContractAllowance(DUMB_ADDRESS, DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setCreditFacade(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setPriceOracle(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setCreditConfigurator(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setMaxEnabledTokens(255); + + vm.stopPrank(); + } + + // TODO: REMOVE OUTDATED + // /// @dev [CM-5]:credit account management+execution functions revert if were called non-creditFacade + // /// Functions list: + // /// - openCreditAccount + // /// - closeCreditAccount + // /// - manadgeDebt + // /// - addCollateral + // /// - transferOwnership + // /// All these functions have whenNotPaused modifier + // function test_CM_05_pause_pauses_management_functions() public { + // address root = acl.owner(); + // vm.prank(root); + + // acl.addPausableAdmin(root); + + // vm.prank(root); + // creditManager.pause(); + + // assertEq(creditManager.creditFacade(), address(this)); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.openCreditAccount(200000, address(this)); + + // // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // // creditManager.closeCreditAccount( + // // DUMB_ADDRESS, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false + // // ); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.manageDebt(DUMB_ADDRESS, 100, ManageDebtAction.INCREASE_DEBT); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.addCollateral(DUMB_ADDRESS, DUMB_ADDRESS, DUMB_ADDRESS, 100); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.transferAccountOwnership(DUMB_ADDRESS, DUMB_ADDRESS); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.approveCreditAccount(DUMB_ADDRESS, DUMB_ADDRESS, 100); + + // vm.expectRevert(bytes(PAUSABLE_ERROR)); + // creditManager.executeOrder(DUMB_ADDRESS, bytes("dd")); + // } + + // + // REVERTS IF CREDIT ACCOUNT NOT EXISTS + // + + /// @dev [CM-6A]: management function reverts if account not exists + /// Functions list: + /// - getCreditAccountOrRevert + /// - closeCreditAccount + /// - transferOwnership + + function test_CM_06A_management_functions_revert_if_account_does_not_exist() public { + // vm.expectRevert(CreditAccountNotExistsException.selector); + // creditManager.getCreditAccountOrRevert(USER); + + // vm.expectRevert(CreditAccountNotExistsException.selector); + // creditManager.closeCreditAccount( + // USER, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false + // ); + + vm.expectRevert(CreditAccountNotExistsException.selector); + creditManager.transferAccountOwnership(USER, DUMB_ADDRESS); + } + + /// @dev [CM-6A]: external call functions revert when the Credit Facade has no account + /// Functions list: + /// - executeOrder + /// - approveCreditAccount + function test_CM_06B_extenrnal_ca_only_functions_revert_when_ec_is_not_set() public { + address token = tokenTestSuite.addressOf(Tokens.DAI); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + vm.prank(ADAPTER); + vm.expectRevert(ExternalCallCreditAccountNotSetException.selector); + creditManager.approveCreditAccount(token, 100); + + // / TODO: decide about test + vm.prank(ADAPTER); + vm.expectRevert(ExternalCallCreditAccountNotSetException.selector); + creditManager.executeOrder(bytes("dd")); + } + + /// + /// OPEN CREDIT ACCOUNT + /// + + /// @dev [CM-7]: openCreditAccount reverts if zero address or address exists + function test_CM_07_openCreditAccount_reverts_if_address_exists() public { + // // Existing address case + // creditManager.openCreditAccount(1, USER); + // vm.expectRevert(UserAlreadyHasAccountException.selector); + // creditManager.openCreditAccount(1, USER); + } + + /// @dev [CM-8]: openCreditAccount sets correct values and transfers tokens from pool + function test_CM_08_openCreditAccount_sets_correct_values_and_transfers_tokens_from_pool() public { + address expectedCreditAccount = AccountFactory(addressProvider.getAccountFactory()).head(); + + uint256 blockAtOpen = block.number; + uint256 cumulativeAtOpen = 1012; + poolMock.setCumulative_RAY(cumulativeAtOpen); + + // Existing address case + address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, false); + assertEq(creditAccount, expectedCreditAccount, "Incorrecct credit account address"); + + (uint256 debt, uint256 cumulativeIndexLastUpdate,,,,) = creditManager.creditAccountInfo(creditAccount); + + assertEq(debt, DAI_ACCOUNT_AMOUNT, "Incorrect borrowed amount set in CA"); + assertEq(cumulativeIndexLastUpdate, cumulativeAtOpen, "Incorrect cumulativeIndexLastUpdate set in CA"); + + assertEq(ICreditAccount(creditAccount).since(), blockAtOpen, "Incorrect since set in CA"); + + expectBalance(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT); + assertEq(poolMock.lendAmount(), DAI_ACCOUNT_AMOUNT, "Incorrect DAI_ACCOUNT_AMOUNT in Pool call"); + assertEq(poolMock.lendAccount(), creditAccount, "Incorrect credit account in lendCreditAccount call"); + // assertEq(creditManager.creditAccounts(USER), creditAccount, "Credit account is not associated with user"); + assertEq(creditManager.enabledTokensMaskOf(creditAccount), 0, "Incorrect enabled token mask"); + } + + // + // CLOSE CREDIT ACCOUNT + // + + /// @dev [CM-9]: closeCreditAccount returns credit account to factory and + /// remove borrower from creditAccounts mapping + function test_CM_09_close_credit_account_returns_credit_account_and_remove_borrower_from_map() public { + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + + assertTrue( + creditAccount != AccountFactory(addressProvider.getAccountFactory()).tail(), + "credit account is already in tail!" + ); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + + // Increase block number cause it's forbidden to close credit account in the same block + vm.roll(block.number + 1); + + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 0, 0, DAI_ACCOUNT_AMOUNT, false + // ); + + assertEq( + creditAccount, + AccountFactory(addressProvider.getAccountFactory()).tail(), + "credit account is not in accountFactory tail!" + ); + + // vm.expectRevert(CreditAccountNotExistsException.selector); + // creditManager.getCreditAccountOrRevert(USER); + } + + /// @dev [CM-10]: closeCreditAccount returns undelying tokens if credit account balance > amounToPool + /// + /// This test covers the case: + /// Closure type: CLOSURE + /// Underlying balance: > amountToPool + /// Send all assets: false + /// + function test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated() public { + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); + + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; + + (uint16 feeInterest,,,,) = creditManager.fees(); + + uint256 profit = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; + + uint256 amountToPool = borrowedAmount + interestAccrued + profit; + + vm.expectCall( + address(poolMock), + abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) + ); + + // (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // 1, + // 0, + // DAI_ACCOUNT_AMOUNT + interestAccrued, + // false + // ); + + // assertEq(remainingFunds, 0, "Remaining funds is not zero!"); + + // assertEq(loss, 0, "Loss is not zero"); + + expectBalance(Tokens.DAI, creditAccount, 1); + + expectBalance(Tokens.DAI, address(poolMock), poolBalanceBefore + amountToPool); + + expectBalance(Tokens.DAI, FRIEND, 2 * borrowedAmount - amountToPool - 1, "Incorrect amount were paid back"); + } + + /// @dev [CM-11]: closeCreditAccount sets correct values and transfers tokens from pool + /// + /// This test covers the case: + /// Closure type: CLOSURE + /// Underlying balance: < amountToPool + /// Send all assets: false + /// + function test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough() public { + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); + + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); + + // Transfer funds to USER account to be able to cover extra cost + tokenTestSuite.mint(Tokens.DAI, USER, borrowedAmount); + + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; + + (uint16 feeInterest,,,,) = creditManager.fees(); + + uint256 profit = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; + + uint256 amountToPool = borrowedAmount + interestAccrued + profit; + + vm.expectCall( + address(poolMock), + abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) + ); + + // (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // 1, + // 0, + // DAI_ACCOUNT_AMOUNT + interestAccrued, + // false + // ); + // assertEq(remainingFunds, 0, "Remaining funds is not zero!"); + + // assertEq(loss, 0, "Loss is not zero"); + + expectBalance(Tokens.DAI, creditAccount, 1, "Credit account balance != 1"); + + expectBalance(Tokens.DAI, address(poolMock), poolBalanceBefore + amountToPool); + + expectBalance(Tokens.DAI, USER, 2 * borrowedAmount - amountToPool - 1, "Incorrect amount were paid back"); + + expectBalance(Tokens.DAI, FRIEND, 0, "Incorrect amount were paid back"); + } + + /// @dev [CM-12]: closeCreditAccount sets correct values and transfers tokens from pool + /// + /// This test covers the case: + /// Closure type: LIQUIDATION / LIQUIDATION_EXPIRED + /// Underlying balance: > amountToPool + /// Send all assets: false + /// Remaining funds: 0 + /// + function test_CM_12_close_credit_account_charges_caller_if_underlying_token_not_enough() public { + for (uint256 i = 0; i < 2; i++) { + uint256 friendBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, FRIEND); + + ClosureAction action = i == 1 ? ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT : ClosureAction.LIQUIDATE_ACCOUNT; + uint256 interestAccrued; + uint256 borrowedAmount; + address creditAccount; + + { + uint256 cumulativeIndexLastUpdate; + uint256 cumulativeIndexAtClose; + (borrowedAmount, cumulativeIndexLastUpdate, cumulativeIndexAtClose, creditAccount) = + _openCreditAccount(); + + interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; + } + + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); + uint256 discount; + + { + (,, uint16 liquidationDiscount,, uint16 liquidationDiscountExpired) = creditManager.fees(); + discount = action == ClosureAction.LIQUIDATE_ACCOUNT ? liquidationDiscount : liquidationDiscountExpired; + } + + // uint256 totalValue = borrowedAmount; + uint256 amountToPool = (borrowedAmount * discount) / PERCENTAGE_FACTOR; + + { + uint256 loss = borrowedAmount + interestAccrued - amountToPool; + + vm.expectCall( + address(poolMock), + abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, 0, loss) + ); + } + { + uint256 a = borrowedAmount + interestAccrued; + + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, action, borrowedAmount, LIQUIDATOR, FRIEND, 1, 0, a, false + // ); + } + + expectBalance(Tokens.DAI, creditAccount, 1, "Credit account balance != 1"); + + expectBalance(Tokens.DAI, address(poolMock), poolBalanceBefore + amountToPool); + + expectBalance( + Tokens.DAI, + FRIEND, + friendBalanceBefore + (borrowedAmount * (PERCENTAGE_FACTOR - discount)) / PERCENTAGE_FACTOR + - (i == 2 ? 0 : 1), + "Incorrect amount were paid to liqiudator friend address" + ); + } + } + + /// @dev [CM-13]: openCreditAccount sets correct values and transfers tokens from pool + /// + /// This test covers the case: + /// Closure type: LIQUIDATION / LIQUIDATION_EXPIRED + /// Underlying balance: < amountToPool + /// Send all assets: false + /// Remaining funds: >0 + /// + + function test_CM_13_close_credit_account_charges_caller_if_underlying_token_not_enough() public { + for (uint256 i = 0; i < 2; i++) { + setUp(); + uint256 borrowedAmount; + address creditAccount; + + uint256 expectedRemainingFunds = 100 * WAD; + + uint256 profit; + uint256 amountToPool; + uint256 totalValue; + uint256 interestAccrued; + { + uint256 cumulativeIndexLastUpdate; + uint256 cumulativeIndexAtClose; + (borrowedAmount, cumulativeIndexLastUpdate, cumulativeIndexAtClose, creditAccount) = + _openCreditAccount(); + + interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; + + uint16 feeInterest; + uint16 feeLiquidation; + uint16 liquidationDiscount; + + { + (feeInterest,,,,) = creditManager.fees(); + } + + { + uint16 feeLiquidationNormal; + uint16 feeLiquidationExpired; + + (, feeLiquidationNormal,, feeLiquidationExpired,) = creditManager.fees(); + + feeLiquidation = (i == 0 || i == 2) ? feeLiquidationNormal : feeLiquidationExpired; + } + + { + uint16 liquidationDiscountNormal; + uint16 liquidationDiscountExpired; + + (feeInterest,, liquidationDiscountNormal,, liquidationDiscountExpired) = creditManager.fees(); + + liquidationDiscount = i == 1 ? liquidationDiscountExpired : liquidationDiscountNormal; + } + + uint256 profitInterest = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; + + amountToPool = borrowedAmount + interestAccrued + profitInterest; + + totalValue = ((amountToPool + expectedRemainingFunds) * PERCENTAGE_FACTOR) + / (liquidationDiscount - feeLiquidation); + + uint256 profitLiquidation = (totalValue * feeLiquidation) / PERCENTAGE_FACTOR; + + amountToPool += profitLiquidation; + + profit = profitInterest + profitLiquidation; + } + + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); + + tokenTestSuite.mint(Tokens.DAI, LIQUIDATOR, totalValue); + expectBalance(Tokens.DAI, USER, 0, "USER has non-zero balance"); + expectBalance(Tokens.DAI, FRIEND, 0, "FRIEND has non-zero balance"); + expectBalance(Tokens.DAI, LIQUIDATOR, totalValue, "LIQUIDATOR has incorrect initial balance"); + + expectBalance(Tokens.DAI, creditAccount, borrowedAmount, "creditAccount has incorrect initial balance"); + + vm.expectCall( + address(poolMock), + abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) + ); + + uint256 remainingFunds; + + { + uint256 loss; + + uint256 a = borrowedAmount + interestAccrued; + // (remainingFunds, loss) = creditManager.closeCreditAccount( + // creditAccount, + // i == 1 ? ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT : ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // 1, + // 0, + // a, + // false + // ); + + assertLe(expectedRemainingFunds - remainingFunds, 2, "Incorrect remaining funds"); + + assertEq(loss, 0, "Loss can't be positive with remaining funds"); + } + + { + expectBalance(Tokens.DAI, creditAccount, 1, "Credit account balance != 1"); + expectBalance(Tokens.DAI, USER, remainingFunds, "USER get incorrect amount as remaning funds"); + + expectBalance(Tokens.DAI, address(poolMock), poolBalanceBefore + amountToPool, "INCORRECT POOL BALANCE"); + } + + expectBalance( + Tokens.DAI, + LIQUIDATOR, + totalValue + borrowedAmount - amountToPool - remainingFunds - 1, + "Incorrect amount were paid to lqiudaidator" + ); + } + } + + /// @dev [CM-14]: closeCreditAccount sends assets depends on sendAllAssets flag + /// + /// This test covers the case: + /// Closure type: LIQUIDATION + /// Underlying balance: < amountToPool + /// Send all assets: false + /// Remaining funds: >0 + /// + + function test_CM_14_close_credit_account_with_nonzero_skipTokenMask_sends_correct_tokens() public { + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + tokenTestSuite.mint(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.WETH)); + + tokenTestSuite.mint(Tokens.USDC, creditAccount, USDC_EXCHANGE_AMOUNT); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.USDC)); + + tokenTestSuite.mint(Tokens.LINK, creditAccount, LINK_EXCHANGE_AMOUNT); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.LINK)); + + uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + uint256 usdcTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + uint256 linkTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + + creditManager.transferAccountOwnership(creditAccount, USER); + + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // wethTokenMask | usdcTokenMask | linkTokenMask, + // wethTokenMask | usdcTokenMask, + // DAI_ACCOUNT_AMOUNT, + // false + // ); + + expectBalance(Tokens.WETH, FRIEND, 0); + expectBalance(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + + expectBalance(Tokens.USDC, FRIEND, 0); + expectBalance(Tokens.USDC, creditAccount, USDC_EXCHANGE_AMOUNT); + + expectBalance(Tokens.LINK, FRIEND, LINK_EXCHANGE_AMOUNT - 1); + } + + /// @dev [CM-16]: closeCreditAccount sends ETH for WETH creditManger to borrower + /// CASE: CLOSURE + /// Underlying token: WETH + function test_CM_16_close_weth_credit_account_sends_eth_to_borrower() public { + // It takes "clean" address which doesn't holds any assets + + _connectCreditManagerSuite(Tokens.WETH, false); + + /// CLOSURE CASE + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.WETH, creditAccount, borrowedAmount); + + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; + + // creditManager.closeCreditAccount(USER, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 0, true); + + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 1, 0, borrowedAmount + interestAccrued, true + // ); + + expectBalance(Tokens.WETH, creditAccount, 1); + + (uint16 feeInterest,,,,) = creditManager.fees(); + + uint256 profit = (interestAccrued * feeInterest) / PERCENTAGE_FACTOR; + + uint256 amountToPool = borrowedAmount + interestAccrued + profit; + + assertEq( + wethGateway.balanceOf(USER), + 2 * borrowedAmount - amountToPool - 1, + "Incorrect amount deposited on wethGateway" + ); + } + + /// @dev [CM-17]: closeCreditAccount sends ETH for WETH creditManger to borrower + /// CASE: CLOSURE + /// Underlying token: DAI + function test_CM_17_close_dai_credit_account_sends_eth_to_borrower() public { + /// CLOSURE CASE + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + + // Adds WETH to test how it would be converted + tokenTestSuite.mint(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + + uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); + + creditManager.transferAccountOwnership(creditAccount, USER); + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // USER, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); + + expectBalance(Tokens.WETH, creditAccount, 1); + + assertEq(wethGateway.balanceOf(USER), WETH_EXCHANGE_AMOUNT - 1, "Incorrect amount deposited on wethGateway"); + } + + /// @dev [CM-18]: closeCreditAccount sends ETH for WETH creditManger to borrower + /// CASE: LIQUIDATION + function test_CM_18_close_credit_account_sends_eth_to_liquidator_and_weth_to_borrower() public { + /// Store USER ETH balance + + uint256 userBalanceBefore = tokenTestSuite.balanceOf(Tokens.WETH, USER); + + (,, uint16 liquidationDiscount,,) = creditManager.fees(); + + // It takes "clean" address which doesn't holds any assets + + _connectCreditManagerSuite(Tokens.WETH, false); + + /// CLOSURE CASE + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.WETH, creditAccount, borrowedAmount); + + uint256 totalValue = borrowedAmount * 2; + + uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); + + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); + + // checks that no eth were sent to USER account + expectEthBalance(USER, 0); + + expectBalance(Tokens.WETH, creditAccount, 1, "Credit account balance != 1"); + + // expectBalance(Tokens.WETH, USER, userBalanceBefore + remainingFunds, "Incorrect amount were paid back"); + + assertEq( + wethGateway.balanceOf(FRIEND), + (totalValue * (PERCENTAGE_FACTOR - liquidationDiscount)) / PERCENTAGE_FACTOR, + "Incorrect amount were paid to liqiudator friend address" + ); + } + + /// @dev [CM-19]: closeCreditAccount sends ETH for WETH creditManger to borrower + /// CASE: LIQUIDATION + /// Underlying token: DAI + function test_CM_19_close_dai_credit_account_sends_eth_to_liquidator() public { + /// CLOSURE CASE + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + + // Adds WETH to test how it would be converted + tokenTestSuite.mint(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + + creditManager.transferAccountOwnership(creditAccount, USER); + uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); + + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount, + // LIQUIDATOR, + // FRIEND, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); + + expectBalance(Tokens.WETH, creditAccount, 1); + + assertEq( + wethGateway.balanceOf(FRIEND), + WETH_EXCHANGE_AMOUNT - 1, + "Incorrect amount were paid to liqiudator friend address" + ); + } + + // + // MANAGE DEBT + // + + /// @dev [CM-20]: manageDebt correctly increases debt + function test_CM_20_manageDebt_correctly_increases_debt(uint128 amount) public { + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate,, address creditAccount) = cms.openCreditAccount(1); + + tokenTestSuite.mint(Tokens.DAI, address(poolMock), amount); + + poolMock.setCumulative_RAY(cumulativeIndexLastUpdate * 2); + + uint256 expectedNewCulumativeIndex = + (2 * cumulativeIndexLastUpdate * (borrowedAmount + amount)) / (2 * borrowedAmount + amount); + + (uint256 newBorrowedAmount,,) = + creditManager.manageDebt(creditAccount, amount, 1, ManageDebtAction.INCREASE_DEBT); + + assertEq(newBorrowedAmount, borrowedAmount + amount, "Incorrect returned newBorrowedAmount"); + + // assertLe( + // (ICreditAccount(creditAccount).cumulativeIndexLastUpdate() * (10 ** 6)) / expectedNewCulumativeIndex, + // 10 ** 6, + // "Incorrect cumulative index" + // ); + + (uint256 debt,,,,,) = creditManager.creditAccountInfo(creditAccount); + assertEq(debt, newBorrowedAmount, "Incorrect borrowedAmount"); + + expectBalance(Tokens.DAI, creditAccount, newBorrowedAmount, "Incorrect balance on credit account"); + + assertEq(poolMock.lendAmount(), amount, "Incorrect lend amount"); + + assertEq(poolMock.lendAccount(), creditAccount, "Incorrect lend account"); + } + + /// @dev [CM-21]: manageDebt correctly decreases debt + function test_CM_21_manageDebt_correctly_decreases_debt(uint128 amount) public { + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), (uint256(type(uint128).max) * 14) / 10); + + // (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = + // cms.openCreditAccount((uint256(type(uint128).max) * 14) / 10); + + // (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // uint256 expectedInterestAndFees; + // uint256 expectedBorrowAmount; + // if (amount >= totalDebt - borrowedAmount) { + // expectedInterestAndFees = 0; + // expectedBorrowAmount = totalDebt - amount; + // } else { + // expectedInterestAndFees = totalDebt - borrowedAmount - amount; + // expectedBorrowAmount = borrowedAmount; + // } + + // (uint256 newBorrowedAmount,) = + // creditManager.manageDebt(creditAccount, amount, 1, ManageDebtAction.DECREASE_DEBT); + + // assertEq(newBorrowedAmount, expectedBorrowAmount, "Incorrect returned newBorrowedAmount"); + + // if (amount >= totalDebt - borrowedAmount) { + // (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // assertEq(newTotalDebt, newBorrowedAmount, "Incorrect new interest"); + // } else { + // (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // assertLt( + // (RAY * (newTotalDebt - newBorrowedAmount)) / expectedInterestAndFees - RAY, + // 10000, + // "Incorrect new interest" + // ); + // } + // uint256 cumulativeIndexLastUpdateAfter; + // { + // uint256 debt; + // (debt, cumulativeIndexLastUpdateAfter,,,,) = creditManager.creditAccountInfo(creditAccount); + + // assertEq(debt, newBorrowedAmount, "Incorrect borrowedAmount"); + // } + + // expectBalance(Tokens.DAI, creditAccount, borrowedAmount - amount, "Incorrect balance on credit account"); + + // if (amount >= totalDebt - borrowedAmount) { + // assertEq(cumulativeIndexLastUpdateAfter, cumulativeIndexNow, "Incorrect cumulativeIndexLastUpdate"); + // } else { + // CreditManagerTestInternal cmi = new CreditManagerTestInternal( + // creditManager.poolService(), address(withdrawalManager) + // ); + + // { + // (uint256 feeInterest,,,,) = creditManager.fees(); + // amount = uint128((uint256(amount) * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest)); + // } + + // assertEq( + // cumulativeIndexLastUpdateAfter, + // cmi.calcNewCumulativeIndex(borrowedAmount, amount, cumulativeIndexNow, cumulativeIndexLastUpdate, false), + // "Incorrect cumulativeIndexLastUpdate" + // ); + // } + } + + // + // ADD COLLATERAL + // + + /// @dev [CM-22]: add collateral transfers money and returns token mask + + function test_CM_22_add_collateral_transfers_money_and_returns_token_mask() public { + (,,, address creditAccount) = _openCreditAccount(); + + tokenTestSuite.mint(Tokens.WETH, FRIEND, WETH_EXCHANGE_AMOUNT); + tokenTestSuite.approve(Tokens.WETH, FRIEND, address(creditManager)); + + expectBalance(Tokens.WETH, creditAccount, 0, "Non-zero WETH balance"); + + expectTokenIsEnabled(creditAccount, Tokens.WETH, false); + + uint256 tokenMask = creditManager.addCollateral( + FRIEND, creditAccount, tokenTestSuite.addressOf(Tokens.WETH), WETH_EXCHANGE_AMOUNT + ); + + expectBalance(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT, "Non-zero WETH balance"); + + expectBalance(Tokens.WETH, FRIEND, 0, "Incorrect FRIEND balance"); + + assertEq( + tokenMask, + creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)), + "Incorrect return result" + ); + + // expectTokenIsEnabled(creditAccount, Tokens.WETH, true); + } + + // + // TRANSFER ACCOUNT OWNERSHIP + // + + /// @dev [CM-23]: transferAccountOwnership reverts if to equals 0 or creditAccount is linked with "to" address + + function test_CM_23_transferAccountOwnership_reverts_if_account_exists() public { + // _openCreditAccount(); + + // creditManager.openCreditAccount(1, FRIEND); + + // // Existing account case + // vm.expectRevert(UserAlreadyHasAccountException.selector); + // creditManager.transferAccountOwnership(FRIEND, USER); + } + + /// @dev [CM-24]: transferAccountOwnership changes creditAccounts map properly + + function test_CM_24_transferAccountOwnership_changes_creditAccounts_map_properly() public { + (,,, address creditAccount) = _openCreditAccount(); + + creditManager.transferAccountOwnership(creditAccount, FRIEND); + + // assertEq(creditManager.creditAccounts(USER), address(0), "From account wasn't deleted"); + + // assertEq(creditManager.creditAccounts(FRIEND), creditAccount, "To account isn't correct"); + + // vm.expectRevert(CreditAccountNotExistsException.selector); + // creditManager.getCreditAccountOrRevert(USER); + } + + // + // APPROVE CREDIT ACCOUNT + // + + /// @dev [CM-25A]: approveCreditAccount reverts if the token is not added + function test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added() public { + (,,, address creditAccount) = _openCreditAccount(); + creditManager.setCreditAccountForExternalCall(creditAccount); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + vm.expectRevert(TokenNotAllowedException.selector); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(DUMB_ADDRESS, 100); + } + + /// @dev [CM-26]: approveCreditAccount approves with desired allowance + function test_CM_26_approveCreditAccount_approves_with_desired_allowance() public { + (,,, address creditAccount) = _openCreditAccount(); + creditManager.setCreditAccountForExternalCall(creditAccount); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + // Case, when current allowance > Allowance_THRESHOLD + tokenTestSuite.approve(Tokens.DAI, creditAccount, DUMB_ADDRESS, 200); + + address dai = tokenTestSuite.addressOf(Tokens.DAI); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(dai, DAI_EXCHANGE_AMOUNT); + + expectAllowance(Tokens.DAI, creditAccount, DUMB_ADDRESS, DAI_EXCHANGE_AMOUNT); + } + + /// @dev [CM-27A]: approveCreditAccount works for ERC20 that revert if allowance > 0 before approve + function test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions() public { + (,,, address creditAccount) = _openCreditAccount(); + creditManager.setCreditAccountForExternalCall(creditAccount); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + address approveRevertToken = address(new ERC20ApproveRestrictedRevert()); + + vm.prank(CONFIGURATOR); + creditManager.addToken(approveRevertToken); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(approveRevertToken, DAI_EXCHANGE_AMOUNT); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(approveRevertToken, 2 * DAI_EXCHANGE_AMOUNT); + + expectAllowance(approveRevertToken, creditAccount, DUMB_ADDRESS, 2 * DAI_EXCHANGE_AMOUNT); + } + + // /// @dev [CM-27B]: approveCreditAccount works for ERC20 that returns false if allowance > 0 before approve + function test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions() public { + (,,, address creditAccount) = _openCreditAccount(); + creditManager.setCreditAccountForExternalCall(creditAccount); + + address approveFalseToken = address(new ERC20ApproveRestrictedFalse()); + + vm.prank(CONFIGURATOR); + creditManager.addToken(approveFalseToken); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(approveFalseToken, DAI_EXCHANGE_AMOUNT); + + vm.prank(ADAPTER); + creditManager.approveCreditAccount(approveFalseToken, 2 * DAI_EXCHANGE_AMOUNT); + + expectAllowance(approveFalseToken, creditAccount, DUMB_ADDRESS, 2 * DAI_EXCHANGE_AMOUNT); + } + + // + // EXECUTE ORDER + // + + /// @dev [CM-29]: executeOrder calls credit account method and emit event + function test_CM_29_executeOrder_calls_credit_account_method_and_emit_event() public { + (,,, address creditAccount) = _openCreditAccount(); + creditManager.setCreditAccountForExternalCall(creditAccount); + + TargetContractMock targetMock = new TargetContractMock(); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, address(targetMock)); + + bytes memory callData = bytes("Hello, world!"); + + // we emit the event we expect to see. + vm.expectEmit(true, false, false, false); + emit ExecuteOrder(address(targetMock)); + + // stack trace check + vm.expectCall(creditAccount, abi.encodeWithSignature("execute(address,bytes)", address(targetMock), callData)); + vm.expectCall(address(targetMock), callData); + + vm.prank(ADAPTER); + creditManager.executeOrder(callData); + + assertEq0(targetMock.callData(), callData, "Incorrect calldata"); + } + + // + // FULL COLLATERAL CHECK + // + + /// @dev [CM-38]: fullCollateralCheck skips tokens is they are not enabled + function test_CM_38_fullCollateralCheck_skips_tokens_is_they_are_not_enabled() public { + address creditAccount = _openAccountAndTransferToCF(); + + tokenTestSuite.mint(Tokens.USDC, creditAccount, USDC_ACCOUNT_AMOUNT); + + vm.expectRevert(NotEnoughCollateralException.selector); + _baseFullCollateralCheck(creditAccount); + + // fullCollateralCheck doesn't revert when token is enabled + uint256 usdcTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); + + creditManager.fullCollateralCheck(creditAccount, usdcTokenMask | daiTokenMask, new uint256[](0), 10000); + } + + /// @dev [CM-39]: fullCollateralCheck diables tokens if they have zero balance + function test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance() public { + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = + _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + (uint256 feeInterest,,,,) = creditManager.fees(); + + /// TODO: CHANGE COMPUTATION + + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; + uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; + + uint256 amountToRepayInLINK = ( + ((borrowAmountWithInterest + interestAccured * feeInterest / PERCENTAGE_FACTOR) * (10 ** 8)) + * PERCENTAGE_FACTOR / tokenTestSuite.prices(Tokens.LINK) + / creditManager.liquidationThresholds(tokenTestSuite.addressOf(Tokens.LINK)) + ) + 1000000000; + + tokenTestSuite.mint(Tokens.LINK, creditAccount, amountToRepayInLINK); + + uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); + uint256 linkTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + // Enable WETH and LINK token. WETH should be disabled adter fullCollateralCheck + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.LINK)); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.WETH)); + + creditManager.fullCollateralCheck( + creditAccount, wethTokenMask | linkTokenMask | daiTokenMask, new uint256[](0), 10000 + ); + + expectTokenIsEnabled(creditAccount, Tokens.LINK, true); + expectTokenIsEnabled(creditAccount, Tokens.WETH, false); + } + + /// @dev [CM-40]: fullCollateralCheck breaks loop if total >= borrowAmountPlusInterestRateUSD and pass the check + function test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( + ) public { + vm.startPrank(CONFIGURATOR); + + CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(withdrawalManager)); + cms.cr().addCreditManager(address(cm)); + + cm.setCreditFacade(address(this)); + cm.setPriceOracle(address(priceOracle)); + + vm.stopPrank(); + + address creditAccount = cm.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, false); + cm.transferAccountOwnership(creditAccount, address(this)); + + address revertToken = DUMB_ADDRESS; + address linkToken = tokenTestSuite.addressOf(Tokens.LINK); + + // We add "revert" token - DUMB address which would revert if balanceOf method would be called + // If (total >= borrowAmountPlusInterestRateUSD) doesn't break the loop, it would be called + // cause we enable this token using checkAndEnableToken. + // If fullCollateralCheck doesn't revert, it means that the break works + vm.startPrank(CONFIGURATOR); + + cm.addToken(linkToken); + cm.addToken(revertToken); + cm.setCollateralTokenData( + linkToken, creditConfig.lt(Tokens.LINK), creditConfig.lt(Tokens.LINK), type(uint40).max, 0 + ); + + vm.stopPrank(); + + // cm.checkAndEnableToken(revertToken); + // cm.checkAndEnableToken(linkToken); + + // We add WAD for rounding compensation + uint256 amountToRepayInLINK = ((DAI_ACCOUNT_AMOUNT + WAD) * PERCENTAGE_FACTOR * (10 ** 8)) + / creditConfig.lt(Tokens.LINK) / tokenTestSuite.prices(Tokens.LINK); + + tokenTestSuite.mint(Tokens.LINK, creditAccount, amountToRepayInLINK); + + uint256 revertTokenMask = cm.getTokenMaskOrRevert(revertToken); + uint256 linkTokenMask = cm.getTokenMaskOrRevert(linkToken); + + uint256 enabledTokensMap = revertTokenMask | linkTokenMask; + + cm.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), 10000); + } + + /// @dev [CM-41]: fullCollateralCheck reverts if CA has more than allowed enabled tokens + function test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens() public { + vm.startPrank(CONFIGURATOR); + + // We use clean CreditManagerV3 to have only one underlying token for testing + creditManager = new CreditManagerV3(address(poolMock), address(withdrawalManager)); + cms.cr().addCreditManager(address(creditManager)); + + creditManager.setCreditFacade(address(this)); + creditManager.setPriceOracle(address(priceOracle)); + + creditManager.setCollateralTokenData(poolMock.underlyingToken(), 9300, 9300, type(uint40).max, 0); + vm.stopPrank(); + + address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, address(this), false); + tokenTestSuite.mint(Tokens.DAI, creditAccount, 2 * DAI_ACCOUNT_AMOUNT); + + enableTokensMoreThanLimit(creditAccount); + vm.expectRevert(TooManyEnabledTokensException.selector); + + creditManager.fullCollateralCheck(creditAccount, 2 ** 13 - 1, new uint256[](0), 10000); + } + + /// @dev [CM-41A]: fullCollateralCheck correctly disables the underlying when needed + function test_CM_41A_fullCollateralCheck_correctly_dfisables_the_underlying_when_needed() public { + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = + _openCreditAccount(); + + uint256 daiBalance = tokenTestSuite.balanceOf(Tokens.DAI, creditAccount); + + tokenTestSuite.burn(Tokens.DAI, creditAccount, daiBalance); + + _addAndEnableTokens(creditAccount, 200, 0); + + uint256 totalTokens = creditManager.collateralTokensCount(); + + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; + uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; + + (uint256 feeInterest,,,,) = creditManager.fees(); + + uint256 amountToRepayInLINK = ( + ((borrowAmountWithInterest + interestAccured * feeInterest / PERCENTAGE_FACTOR) * (10 ** 8)) + * PERCENTAGE_FACTOR / tokenTestSuite.prices(Tokens.DAI) + / creditManager.liquidationThresholds(tokenTestSuite.addressOf(Tokens.DAI)) + ) + WAD; + + tokenTestSuite.mint(Tokens.DAI, creditAccount, amountToRepayInLINK); + + uint256[] memory hints = new uint256[](totalTokens); + unchecked { + for (uint256 i; i < totalTokens; ++i) { + hints[i] = 2 ** (totalTokens - i - 1); + } + } + + creditManager.fullCollateralCheck(creditAccount, 2 ** (totalTokens) - 1, hints, 10000); + + assertEq( + creditManager.enabledTokensMaskOf(creditAccount).calcEnabledTokens(), + 1, + "Incorrect number of tokens enabled" + ); + } + + /// @dev [CM-42]: fullCollateralCheck fuzzing test + function test_CM_42_fullCollateralCheck_fuzzing_test( + uint128 borrowedAmount, + uint128 daiBalance, + uint128 usdcBalance, + uint128 linkBalance, + uint128 wethBalance, + bool enableUSDC, + bool enableLINK, + bool enableWETH, + uint16 minHealthFactor + ) public { + // vm.assume(borrowedAmount > WAD); + + // vm.assume(minHealthFactor > 10_000 && minHealthFactor < 50_000); + + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); + + // (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); + // creditManager.transferAccountOwnership(creditAccount, address(this)); + + // if (daiBalance > borrowedAmount) { + // tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); + // } else { + // tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); + // } + + // expectBalance(Tokens.DAI, creditAccount, daiBalance); + + // mintBalance(creditAccount, Tokens.USDC, usdcBalance, enableUSDC); + // mintBalance(creditAccount, Tokens.LINK, linkBalance, enableLINK); + // mintBalance(creditAccount, Tokens.WETH, wethBalance, enableWETH); + + // uint256 twvUSD = ( + // tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) + // * creditConfig.lt(Tokens.DAI) + // ) / WAD; + + // twvUSD += !enableUSDC + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC) + // * creditConfig.lt(Tokens.USDC) + // ) / (10 ** 6); + + // twvUSD += !enableLINK + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK) + // * creditConfig.lt(Tokens.LINK) + // ) / WAD; + + // twvUSD += !enableWETH + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) + // * creditConfig.lt(Tokens.WETH) + // ) / WAD; + + // (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // uint256 debtUSD = borrowedAmountWithInterestAndFees * tokenTestSuite.prices(Tokens.DAI) * minHealthFactor / WAD; + + // bool shouldRevert = twvUSD < debtUSD; + + // uint256 enabledTokensMap = 1; + + // if (enableUSDC) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + // } + + // if (enableLINK) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + // } + + // if (enableWETH) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + // } + + // if (shouldRevert) { + // vm.expectRevert(NotEnoughCollateralException.selector); + // } + + // creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); + } + + // + // CALC CLOSE PAYMENT PURE + // + struct CalcClosePaymentsPureTestCase { + string name; + uint256 totalValue; + ClosureAction closureActionType; + uint256 borrowedAmount; + uint256 borrowedAmountWithInterest; + uint256 amountToPool; + uint256 remainingFunds; + uint256 profit; + uint256 loss; + } + + /// @dev [CM-43]: calcClosePayments computes + function test_CM_43_calcClosePayments_test() public { + // vm.prank(CONFIGURATOR); + + // creditManager.setParams( + // 1000, // feeInterest: 10% , it doesn't matter this test + // 200, // feeLiquidation: 2%, it doesn't matter this test + // 9500, // liquidationPremium: 5%, it doesn't matter this test + // 100, // feeLiquidationExpired: 1% + // 9800 // liquidationPremiumExpired: 2% + // ); + + // CalcClosePaymentsPureTestCase[7] memory cases = [ + // CalcClosePaymentsPureTestCase({ + // name: "CLOSURE", + // totalValue: 0, + // closureActionType: ClosureAction.CLOSE_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1110, // amountToPool = 1100 + 100 * 10% = 1110 + // remainingFunds: 0, + // profit: 10, // profit: 100 (interest) * 10% = 10 + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH PROFIT & REMAINING FUNDS", + // totalValue: 2000, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 + // remainingFunds: 749, //remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 + // profit: 50, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH PROFIT & ZERO REMAINING FUNDS", + // totalValue: 2100, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 1995, // amountToPool = 1900 + 1000 * 10% + 2100 * 2% = 2042, totalFunds = 2100 * 95% = 1995, so, amount to pool would be 1995 + // remainingFunds: 0, // remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 + // profit: 95, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH LOSS", + // totalValue: 1000, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 950, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 95% = 950, So, amount to pool would be 950 + // remainingFunds: 0, // 0, cause it's loss + // profit: 0, + // loss: 950 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH PROFIT & REMAINING FUNDS", + // totalValue: 2000, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1130, // amountToPool = 1100 + 100 * 10% + 2000 * 1% = 1130 + // remainingFunds: 829, //remainingFunds: 2000 * (100% - 2%) - 1130 - 1 = 829 + // profit: 30, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH PROFIT & ZERO REMAINING FUNDS", + // totalValue: 2100, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 2000, + // amountToPool: 2058, // amountToPool = 2000 + 1100 * 10% + 2100 * 1% = 2131, totalFunds = 2100 * 98% = 2058, so, amount to pool would be 2058 + // remainingFunds: 0, + // profit: 58, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH LOSS", + // totalValue: 1000, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 980, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 + // remainingFunds: 0, // 0, cause it's loss + // profit: 0, + // loss: 920 + // }) + // // CalcClosePaymentsPureTestCase({ + // // name: "LIQUIDATION WHILE PAUSED WITH REMAINING FUNDS", + // // totalValue: 2000, + // // closureActionType: ClosureAction.LIQUIDATE_PAUSED, + // // borrowedAmount: 1000, + // // borrowedAmountWithInterest: 1100, + // // amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 + // // remainingFunds: 849, //remainingFunds: 2000 - 1150 - 1 = 869 + // // profit: 50, + // // loss: 0 + // // }), + // // CalcClosePaymentsPureTestCase({ + // // name: "LIQUIDATION OF EXPIRED WITH LOSS", + // // totalValue: 1000, + // // closureActionType: ClosureAction.LIQUIDATE_PAUSED, + // // borrowedAmount: 900, + // // borrowedAmountWithInterest: 1900, + // // amountToPool: 1000, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 + // // remainingFunds: 0, // 0, cause it's loss + // // profit: 0, + // // loss: 900 + // // }) + // ]; + + // for (uint256 i = 0; i < cases.length; i++) { + // (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) = creditManager + // .calcClosePayments( + // cases[i].totalValue, + // cases[i].closureActionType, + // cases[i].borrowedAmount, + // cases[i].borrowedAmountWithInterest + // ); + + // assertEq(amountToPool, cases[i].amountToPool, string(abi.encodePacked(cases[i].name, ": amountToPool"))); + // assertEq( + // remainingFunds, cases[i].remainingFunds, string(abi.encodePacked(cases[i].name, ": remainingFunds")) + // ); + // assertEq(profit, cases[i].profit, string(abi.encodePacked(cases[i].name, ": profit"))); + // assertEq(loss, cases[i].loss, string(abi.encodePacked(cases[i].name, ": loss"))); + // } + } + + // + // TRASNFER ASSETS TO + // + + /// @dev [CM-44]: _transferAssetsTo sends all tokens except underlying one and not-enabled to provided address + function test_CM_44_transferAssetsTo_sends_all_tokens_except_underlying_one_to_provided_address() public { + // It enables CreditManagerTestInternal for some test cases + _connectCreditManagerSuite(Tokens.DAI, true); + + address[2] memory friends = [FRIEND, FRIEND2]; + + // CASE 0: convertToETH = false + // CASE 1: convertToETH = true + for (uint256 i = 0; i < 2; i++) { + bool convertToETH = i > 0; + + address friend = friends[i]; + (uint256 borrowedAmount,,, address creditAccount) = _openCreditAccount(); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); + + tokenTestSuite.mint(Tokens.USDC, creditAccount, USDC_EXCHANGE_AMOUNT); + tokenTestSuite.mint(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + tokenTestSuite.mint(Tokens.LINK, creditAccount, LINK_EXCHANGE_AMOUNT); + + address wethTokenAddr = tokenTestSuite.addressOf(Tokens.WETH); + // creditManager.checkAndEnableToken(wethTokenAddr); + + uint256 enabledTokensMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)) + | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + + cmi.transferAssetsTo(creditAccount, friend, convertToETH, enabledTokensMask); + + expectBalance(Tokens.DAI, creditAccount, borrowedAmount, "Underlying assets were transffered!"); + + expectBalance(Tokens.DAI, friend, 0); + + expectBalance(Tokens.USDC, creditAccount, USDC_EXCHANGE_AMOUNT); + + expectBalance(Tokens.USDC, friend, 0); + + expectBalance(Tokens.WETH, creditAccount, 1); + + if (convertToETH) { + assertEq( + wethGateway.balanceOf(friend), + WETH_EXCHANGE_AMOUNT - 1, + "Incorrect amount were sent to friend address" + ); + } else { + expectBalance(Tokens.WETH, friend, WETH_EXCHANGE_AMOUNT - 1); + } + + expectBalance(Tokens.LINK, creditAccount, LINK_EXCHANGE_AMOUNT); + + expectBalance(Tokens.LINK, friend, 0); + + creditManager.transferAccountOwnership(creditAccount, USER); + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // 0, + // LIQUIDATOR, + // friend, + // enabledTokensMask, + // 0, + // DAI_ACCOUNT_AMOUNT, + // false + // ); + } + } + + // + // SAFE TOKEN TRANSFER + // + + /// @dev [CM-45]: _safeTokenTransfer transfers tokens + function test_CM_45_safeTokenTransfer_transfers_tokens() public { + // It enables CreditManagerTestInternal for some test cases + _connectCreditManagerSuite(Tokens.DAI, true); + + uint256 WETH_TRANSFER = WETH_EXCHANGE_AMOUNT / 4; + + address[2] memory friends = [FRIEND, FRIEND2]; + + // CASE 0: convertToETH = false + // CASE 1: convertToETH = true + for (uint256 i = 0; i < 2; i++) { + bool convertToETH = i > 0; + + address friend = friends[i]; + (,,, address creditAccount) = _openCreditAccount(); + + CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); + + tokenTestSuite.mint(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); + + cmi.safeTokenTransfer( + creditAccount, tokenTestSuite.addressOf(Tokens.WETH), friend, WETH_TRANSFER, convertToETH + ); + + expectBalance(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT - WETH_TRANSFER); + + if (convertToETH) { + assertEq(wethGateway.balanceOf(friend), WETH_TRANSFER, "Incorrect amount were sent to friend address"); + } else { + expectBalance(Tokens.WETH, friend, WETH_TRANSFER); + } + + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.LIQUIDATE_ACCOUNT, 0, LIQUIDATOR, friend, 1, 0, DAI_ACCOUNT_AMOUNT, false + // ); + } + } + + // + // DISABLE TOKEN + // + + // /// @dev [CM-46]: _disableToken disabale tokens and do not enable it if called twice + // function test_CM_46__disableToken_disabale_tokens_and_do_not_enable_it_if_called_twice() public { + // // It enables CreditManagerTestInternal for some test cases + // _connectCreditManagerSuite(Tokens.DAI, true); + + // address creditAccount = _openAccountAndTransferToCF(); + + // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); + // // creditManager.checkAndEnableToken(usdcToken); + + // expectTokenIsEnabled(creditAccount, Tokens.USDC, true); + + // CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); + + // cmi.disableToken(usdcToken); + // expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + + // cmi.disableToken(usdcToken); + // expectTokenIsEnabled(creditAccount, Tokens.USDC, false); + // } + + /// @dev [CM-47]: collateralTokens works as expected + function test_CM_47_collateralTokens_works_as_expected(address newToken, uint16 newLT) public { + // vm.assume(newToken != underlying && newToken != address(0)); + + // vm.startPrank(CONFIGURATOR); + + // // reset connected tokens + // CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(0)); + + // cm.setLiquidationThreshold(underlying, 9200); + + // (address token, uint16 lt) = cm.collateralTokens(0); + // assertEq(token, underlying, "incorrect underlying token"); + // assertEq(lt, 9200, "incorrect lt for underlying token"); + + // uint16 ltAlt = cm.liquidationThresholds(underlying); + // assertEq(ltAlt, 9200, "incorrect lt for underlying token"); + + // assertEq(cm.collateralTokensCount(), 1, "Incorrect length"); + + // cm.addToken(newToken); + // assertEq(cm.collateralTokensCount(), 2, "Incorrect length"); + // (token, lt) = cm.collateralTokens(1); + + // assertEq(token, newToken, "incorrect newToken token"); + // assertEq(lt, 0, "incorrect lt for newToken token"); + + // cm.setLiquidationThreshold(newToken, newLT); + // (token, lt) = cm.collateralTokens(1); + + // assertEq(token, newToken, "incorrect newToken token"); + // assertEq(lt, newLT, "incorrect lt for newToken token"); + + // ltAlt = cm.liquidationThresholds(newToken); + + // assertEq(ltAlt, newLT, "incorrect lt for newToken token"); + + // vm.stopPrank(); + } + + // + // GET CREDIT ACCOUNT OR REVERT + // + + /// @dev [CM-48]: getCreditAccountOrRevert reverts if borrower has no account + // function test_CM_48_getCreditAccountOrRevert_reverts_if_borrower_has_no_account() public { + // (,,, address creditAccount) = _openCreditAccount(); + + // assertEq(creditManager.getCreditAccountOrRevert(USER), creditAccount, "Incorrect credit account"); + + // vm.expectRevert(CreditAccountNotExistsException.selector); + // creditManager.getCreditAccountOrRevert(DUMB_ADDRESS); + // } + + // + // CALC CREDIT ACCOUNT ACCRUED INTEREST + // + + /// @dev [CM-49]: calcCreditAccountAccruedInterest computes correctly + function test_CM_49_calcCreditAccountAccruedInterest_computes_correctly(uint128 amount) public { + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), amount); + // (,,, address creditAccount) = cms.openCreditAccount(amount); + + // uint256 expectedBorrowedAmount = amount; + + // (, uint256 cumulativeIndexLastUpdate,,,,) = creditManager.creditAccountInfo(creditAccount); + + // uint256 cumulativeIndexNow = poolMock._cumulativeIndex_RAY(); + // uint256 expectedBorrowedAmountWithInterest = + // (expectedBorrowedAmount * cumulativeIndexNow) / cumulativeIndexLastUpdate; + + // (uint256 feeInterest,,,,) = creditManager.fees(); + + // uint256 expectedFee = + // ((expectedBorrowedAmountWithInterest - expectedBorrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; + + // (uint256 borrowedAmount, uint256 borrowedAmountWithInterest, uint256 borrowedAmountWithInterestAndFees) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // assertEq(borrowedAmount, expectedBorrowedAmount, "Incorrect borrowed amount"); + // assertEq( + // borrowedAmountWithInterest, expectedBorrowedAmountWithInterest, "Incorrect borrowed amount with interest" + // ); + // assertEq( + // borrowedAmountWithInterestAndFees, + // expectedBorrowedAmountWithInterest + expectedFee, + // "Incorrect borrowed amount with interest and fees" + // ); + } + + // + // GET CREDIT ACCOUNT PARAMETERS + // + + /// @dev [CM-50]: getCreditAccountParameters return correct values + function test_CM_50_getCreditAccountParameters_return_correct_values() public { + // It enables CreditManagerTestInternal for some test cases + _connectCreditManagerSuite(Tokens.DAI, true); + + (,,, address creditAccount) = _openCreditAccount(); + + (uint256 expectedDebt, uint256 expectedcumulativeIndexLastUpdate,,,,) = + creditManager.creditAccountInfo(creditAccount); + + CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); + + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate,) = cmi.getCreditAccountParameters(creditAccount); + + assertEq(borrowedAmount, expectedDebt, "Incorrect borrowed amount"); + assertEq(cumulativeIndexLastUpdate, expectedcumulativeIndexLastUpdate, "Incorrect cumulativeIndexLastUpdate"); + + assertEq(cumulativeIndexLastUpdate, expectedcumulativeIndexLastUpdate, "cumulativeIndexLastUpdate"); + } + + // + // SET PARAMS + // + + /// @dev [CM-51]: setParams sets configuration properly + function test_CM_51_setParams_sets_configuration_properly() public { + uint16 s_feeInterest = 8733; + uint16 s_feeLiquidation = 1233; + uint16 s_liquidationPremium = 1220; + uint16 s_feeLiquidationExpired = 1221; + uint16 s_liquidationPremiumExpired = 7777; + + vm.prank(CONFIGURATOR); + creditManager.setParams( + s_feeInterest, s_feeLiquidation, s_liquidationPremium, s_feeLiquidationExpired, s_liquidationPremiumExpired + ); + ( + uint16 feeInterest, + uint16 feeLiquidation, + uint16 liquidationDiscount, + uint16 feeLiquidationExpired, + uint16 liquidationPremiumExpired + ) = creditManager.fees(); + + assertEq(feeInterest, s_feeInterest, "Incorrect feeInterest"); + assertEq(feeLiquidation, s_feeLiquidation, "Incorrect feeLiquidation"); + assertEq(liquidationDiscount, s_liquidationPremium, "Incorrect liquidationDiscount"); + assertEq(feeLiquidationExpired, s_feeLiquidationExpired, "Incorrect feeLiquidationExpired"); + assertEq(liquidationPremiumExpired, s_liquidationPremiumExpired, "Incorrect liquidationPremiumExpired"); + } + + // + // ADD TOKEN + // + + /// @dev [CM-52]: addToken reverts if token exists and if collateralTokens > 256 + function test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256() public { + vm.startPrank(CONFIGURATOR); + + vm.expectRevert(TokenAlreadyAddedException.selector); + creditManager.addToken(underlying); + + for (uint256 i = creditManager.collateralTokensCount(); i < 248; i++) { + creditManager.addToken(address(uint160(uint256(keccak256(abi.encodePacked(i)))))); + } + + vm.expectRevert(TooManyTokensException.selector); + creditManager.addToken(DUMB_ADDRESS); + + vm.stopPrank(); + } + + /// @dev [CM-53]: addToken adds token and set tokenMaskMap correctly + function test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly() public { + uint256 count = creditManager.collateralTokensCount(); + + vm.prank(CONFIGURATOR); + creditManager.addToken(DUMB_ADDRESS); + + assertEq(creditManager.collateralTokensCount(), count + 1, "collateralTokensCount want incremented"); + + assertEq(creditManager.getTokenMaskOrRevert(DUMB_ADDRESS), 1 << count, "tokenMaskMap was set incorrectly"); + } + + // + // SET LIQUIDATION THRESHOLD + // + + /// @dev [CM-54]: setLiquidationThreshold reverts for unknown token + function test_CM_54_setLiquidationThreshold_reverts_for_unknown_token() public { + vm.prank(CONFIGURATOR); + vm.expectRevert(TokenNotAllowedException.selector); + creditManager.setCollateralTokenData(DUMB_ADDRESS, 8000, 8000, type(uint40).max, 0); + } + + // // + // // SET FORBID MASK + // // + // /// @dev [CM-55]: setForbidMask sets forbidMask correctly + // function test_CM_55_setForbidMask_sets_forbidMask_correctly() public { + // uint256 expectedForbidMask = 244; + + // assertTrue(creditManager.forbiddenTokenMask() != expectedForbidMask, "expectedForbidMask is already the same"); + + // vm.prank(CONFIGURATOR); + // creditManager.setForbidMask(expectedForbidMask); + + // assertEq(creditManager.forbiddenTokenMask(), expectedForbidMask, "ForbidMask is not set correctly"); + // } + + // + // CHANGE CONTRACT AllowanceAction + // + + /// @dev [CM-56]: setContractAllowance updates adapterToContract + function test_CM_56_setContractAllowance_updates_adapterToContract() public { + assertTrue( + creditManager.adapterToContract(ADAPTER) != DUMB_ADDRESS, "adapterToContract(ADAPTER) is already the same" + ); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + assertEq(creditManager.adapterToContract(ADAPTER), DUMB_ADDRESS, "adapterToContract is not set correctly"); + + assertEq(creditManager.contractToAdapter(DUMB_ADDRESS), ADAPTER, "adapterToContract is not set correctly"); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, address(0)); + + assertEq(creditManager.adapterToContract(ADAPTER), address(0), "adapterToContract is not set correctly"); + + assertEq(creditManager.contractToAdapter(address(0)), address(0), "adapterToContract is not set correctly"); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + creditManager.setContractAllowance(address(0), DUMB_ADDRESS); + + assertEq(creditManager.adapterToContract(address(0)), address(0), "adapterToContract is not set correctly"); + + assertEq(creditManager.contractToAdapter(DUMB_ADDRESS), address(0), "adapterToContract is not set correctly"); + + // vm.prank(CONFIGURATOR); + // creditManager.setContractAllowance(ADAPTER, UNIVERSAL_CONTRACT); + + // assertEq(creditManager.universalAdapter(), ADAPTER, "Universal adapter is not correctly set"); + + // vm.prank(CONFIGURATOR); + // creditManager.setContractAllowance(address(0), UNIVERSAL_CONTRACT); + + // assertEq(creditManager.universalAdapter(), address(0), "Universal adapter is not correctly set"); + } + + // + // UPGRADE CONTRACTS + // + + /// @dev [CM-57A]: setCreditFacade updates Credit Facade correctly + function test_CM_57A_setCreditFacade_updates_contract_correctly() public { + assertTrue(creditManager.creditFacade() != DUMB_ADDRESS, "creditFacade( is already the same"); + + vm.prank(CONFIGURATOR); + creditManager.setCreditFacade(DUMB_ADDRESS); + + assertEq(creditManager.creditFacade(), DUMB_ADDRESS, "creditFacade is not set correctly"); + } + + /// @dev [CM-57B]: setPriceOracle updates contract correctly + function test_CM_57_setPriceOracle_updates_contract_correctly() public { + assertTrue(address(creditManager.priceOracle()) != DUMB_ADDRESS2, "priceOracle is already the same"); + + vm.prank(CONFIGURATOR); + creditManager.setPriceOracle(DUMB_ADDRESS2); + + assertEq(address(creditManager.priceOracle()), DUMB_ADDRESS2, "priceOracle is not set correctly"); + } + + // + // SET CONFIGURATOR + // + + /// @dev [CM-58]: setCreditConfigurator sets creditConfigurator correctly and emits event + function test_CM_58_setCreditConfigurator_sets_creditConfigurator_correctly_and_emits_event() public { + assertTrue(creditManager.creditConfigurator() != DUMB_ADDRESS, "creditConfigurator is already the same"); + + vm.prank(CONFIGURATOR); + + vm.expectEmit(true, false, false, false); + emit SetCreditConfigurator(DUMB_ADDRESS); + + creditManager.setCreditConfigurator(DUMB_ADDRESS); + + assertEq(creditManager.creditConfigurator(), DUMB_ADDRESS, "creditConfigurator is not set correctly"); + } + + // /// @dev [CM-59]: _getTokenIndexByAddress works properly + // function test_CM_59_getMaxIndex_works_properly(uint256 noise) public { + // CreditManagerTestInternal cm = new CreditManagerTestInternal( + // address(poolMock) + // ); + + // for (uint256 i = 0; i < 256; i++) { + // uint256 mask = 1 << i; + // if (mask > noise) mask |= noise; + // uint256 value = cm.getMaxIndex(mask); + // assertEq(i, value, "Incorrect result"); + // } + // } + + // /// @dev [CM-60]: CreditManagerV3 allows approveCreditAccount and executeOrder for universal adapter + // function test_CM_60_universal_adapter_can_call_adapter_restricted_functions() public { + // TargetContractMock targetMock = new TargetContractMock(); + + // vm.prank(CONFIGURATOR); + // creditManager.setContractAllowance(ADAPTER, UNIVERSAL_CONTRACT_ADDRESS); + + // _openAccountAndTransferToCF(); + + // vm.prank(ADAPTER); + // creditManager.approveCreditAccount(DUMB_ADDRESS, underlying, type(uint256).max); + + // bytes memory callData = bytes("Hello"); + + // vm.prank(ADAPTER); + // creditManager.executeOrder(address(targetMock), callData); + // } + + /// @dev [CM-61]: setMaxEnabledToken correctly sets value + function test_CM_61_setMaxEnabledTokens_works_correctly() public { + vm.prank(CONFIGURATOR); + creditManager.setMaxEnabledTokens(255); + + assertEq(creditManager.maxAllowedEnabledTokenLength(), 255, "Incorrect max enabled tokens"); + } + + // /// @dev [CM-64]: closeCreditAccount reverts when attempting to liquidate while paused, + // /// and the payer is not set as emergency liquidator + + // function test_CM_64_closeCreditAccount_reverts_when_paused_and_liquidator_not_privileged() public { + // vm.prank(CONFIGURATOR); + // creditManager.pause(); + + // vm.expectRevert("Pausable: paused"); + // // creditManager.closeCreditAccount(USER, ClosureAction.LIQUIDATE_ACCOUNT, 0, LIQUIDATOR, FRIEND, 0, false); + // } + + // /// @dev [CM-65]: Emergency liquidator can't close an account instead of liquidating + + // function test_CM_65_closeCreditAccount_reverts_when_paused_and_liquidator_tries_to_close() public { + // vm.startPrank(CONFIGURATOR); + // creditManager.pause(); + // creditManager.addEmergencyLiquidator(LIQUIDATOR); + // vm.stopPrank(); + + // vm.expectRevert("Pausable: paused"); + // // creditManager.closeCreditAccount(USER, ClosureAction.CLOSE_ACCOUNT, 0, LIQUIDATOR, FRIEND, 0, false); + // } + + /// @dev [CM-66]: calcNewCumulativeIndex works correctly for various values + function test_CM_66_calcNewCumulativeIndex_is_correct( + uint128 borrowedAmount, + uint256 indexAtOpen, + uint256 indexNow, + uint128 delta, + bool isIncrease + ) public { + // vm.assume(borrowedAmount > 100); + // vm.assume(uint256(borrowedAmount) + uint256(delta) <= 2 ** 128 - 1); + + // indexNow = indexNow < RAY ? indexNow + RAY : indexNow; + // indexAtOpen = indexAtOpen < RAY ? indexAtOpen + RAY : indexNow; + + // vm.assume(indexNow <= 100 * RAY); + // vm.assume(indexNow >= indexAtOpen); + // vm.assume(indexNow - indexAtOpen < 10 * RAY); + + // uint256 interest = uint256((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); + + // vm.assume(interest > 1); + + // if (!isIncrease && (delta > interest)) delta %= uint128(interest); + + // CreditManagerTestInternal cmi = new CreditManagerTestInternal( + // creditManager.poolService(), address(withdrawalManager) + // ); + + // if (isIncrease) { + // uint256 newIndex = CreditLogic.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, true); + + // uint256 newInterestError = ((borrowedAmount + delta) * indexNow) / newIndex - (borrowedAmount + delta) + // - ((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); + + // uint256 newTotalDebt = ((borrowedAmount + delta) * indexNow) / newIndex; + + // assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); + // } else { + // uint256 newIndex = cmi.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, false); + + // uint256 newTotalDebt = ((borrowedAmount * indexNow) / newIndex); + // uint256 newInterestError = newTotalDebt - borrowedAmount - (interest - delta); + + // emit log_uint(indexNow); + // emit log_uint(indexAtOpen); + // emit log_uint(interest); + // emit log_uint(delta); + // emit log_uint(interest - delta); + // emit log_uint(newTotalDebt); + // emit log_uint(borrowedAmount); + // emit log_uint(newInterestError); + + // assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); + // } + } + + // /// @dev [CM-67]: checkEmergencyPausable returns pause state and enable emergencyLiquidation if needed + // function test_CM_67_checkEmergencyPausable_returns_pause_state_and_enable_emergencyLiquidation_if_needed() public { + // bool p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); + // assertTrue(!p, "Incorrect paused() value for non-paused state"); + // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); + + // vm.prank(CONFIGURATOR); + // creditManager.pause(); + + // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); + // assertTrue(p, "Incorrect paused() value for paused state"); + // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); + + // vm.prank(CONFIGURATOR); + // creditManager.unpause(); + + // vm.prank(CONFIGURATOR); + // creditManager.addEmergencyLiquidator(DUMB_ADDRESS); + // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); + // assertTrue(!p, "Incorrect paused() value for non-paused state"); + // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); + + // vm.prank(CONFIGURATOR); + // creditManager.pause(); + + // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); + // assertTrue(p, "Incorrect paused() value for paused state"); + // assertTrue(creditManager.emergencyLiquidation(), "Emergency liquidation flase when expected true"); + + // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, false); + // assertTrue(p, "Incorrect paused() value for paused state"); + // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); + // } + + /// @dev [CM-68]: fullCollateralCheck checks tokens in correct order + function test_CM_68_fullCollateralCheck_is_evaluated_in_order_of_hints() public { + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = + _openCreditAccount(); + + uint256 daiBalance = tokenTestSuite.balanceOf(Tokens.DAI, creditAccount); + + tokenTestSuite.burn(Tokens.DAI, creditAccount, daiBalance); + + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; + uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; + + (uint256 feeInterest,,,,) = creditManager.fees(); + + uint256 amountToRepay = ( + ((borrowAmountWithInterest + interestAccured * feeInterest / PERCENTAGE_FACTOR) * (10 ** 8)) + * PERCENTAGE_FACTOR / tokenTestSuite.prices(Tokens.DAI) + / creditManager.liquidationThresholds(tokenTestSuite.addressOf(Tokens.DAI)) + ) + WAD; + + tokenTestSuite.mint(Tokens.DAI, creditAccount, amountToRepay); + + tokenTestSuite.mint(Tokens.USDC, creditAccount, USDC_ACCOUNT_AMOUNT); + tokenTestSuite.mint(Tokens.USDT, creditAccount, 10); + tokenTestSuite.mint(Tokens.LINK, creditAccount, 10); + + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.USDC)); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.USDT)); + // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.LINK)); + + uint256[] memory collateralHints = new uint256[](2); + collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)); + collateralHints[1] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + + vm.expectCall(tokenTestSuite.addressOf(Tokens.USDT), abi.encodeCall(IERC20.balanceOf, (creditAccount))); + vm.expectCall(tokenTestSuite.addressOf(Tokens.LINK), abi.encodeCall(IERC20.balanceOf, (creditAccount))); + + uint256 enabledTokensMap = 1 | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)) + | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)) + | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + + creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, collateralHints, PERCENTAGE_FACTOR); + + // assertEq(cmi.fullCheckOrder(0), tokenTestSuite.addressOf(Tokens.USDT), "Token order incorrect"); + + // assertEq(cmi.fullCheckOrder(1), tokenTestSuite.addressOf(Tokens.LINK), "Token order incorrect"); + + // assertEq(cmi.fullCheckOrder(2), tokenTestSuite.addressOf(Tokens.DAI), "Token order incorrect"); + + // assertEq(cmi.fullCheckOrder(3), tokenTestSuite.addressOf(Tokens.USDC), "Token order incorrect"); + } + + /// @dev [CM-70]: fullCollateralCheck reverts when an illegal mask is passed in collateralHints + function test_CM_70_fullCollateralCheck_reverts_for_illegal_mask_in_hints() public { + (,,, address creditAccount) = _openCreditAccount(); + + vm.expectRevert(TokenNotAllowedException.selector); + + uint256[] memory ch = new uint256[](1); + ch[0] = 3; + + uint256 enabledTokensMap = 1; + + creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, ch, PERCENTAGE_FACTOR); + } + + /// @dev [CM-71]: rampLiquidationThreshold correctly updates the internal struct + function test_CM_71_rampLiquidationThreshold_correctly_updates_parameters() public { + _connectCreditManagerSuite(Tokens.DAI, true); + + address usdc = tokenTestSuite.addressOf(Tokens.USDC); + + CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); + + vm.prank(CONFIGURATOR); + cmi.setCollateralTokenData(usdc, 8500, 9000, uint40(block.timestamp), 3600 * 24 * 7); + + CollateralTokenData memory cd = cmi.collateralTokensDataExt(cmi.getTokenMaskOrRevert(usdc)); + + assertEq(uint256(cd.ltInitial), creditConfig.lt(Tokens.USDC), "Incorrect initial LT"); + + assertEq(uint256(cd.ltFinal), 8500, "Incorrect final LT"); + + assertEq(uint256(cd.timestampRampStart), block.timestamp, "Incorrect timestamp start"); + + assertEq(uint256(cd.rampDuration), 3600 * 24 * 7, "Incorrect ramp duration"); + } + + /// @dev [CM-72]: Ramping liquidation threshold fuzzing + function test_CM_72_liquidation_ramping_fuzzing( + uint16 initialLT, + uint16 newLT, + uint24 duration, + uint256 timestampCheck + ) public { + // initialLT = 1000 + (initialLT % (DEFAULT_UNDERLYING_LT - 999)); + // newLT = 1000 + (newLT % (DEFAULT_UNDERLYING_LT - 999)); + // duration = 3600 + (duration % (3600 * 24 * 90 - 3600)); + + // timestampCheck = block.timestamp + (timestampCheck % (duration + 1)); + + // address usdc = tokenTestSuite.addressOf(Tokens.USDC); + + // uint256 timestampStart = block.timestamp; + + // vm.startPrank(CONFIGURATOR); + // creditManager.setCollateralTokenData(usdc, initialLT); + // creditManager.rampLiquidationThreshold(usdc, newLT, uint40(block.timestamp), duration); + + // assertEq(creditManager.liquidationThresholds(usdc), initialLT, "LT at ramping start incorrect"); + + // uint16 expectedLT; + // if (newLT >= initialLT) { + // expectedLT = uint16( + // uint256(initialLT) + // + (uint256(newLT - initialLT) * (timestampCheck - timestampStart)) / uint256(duration) + // ); + // } else { + // expectedLT = uint16( + // uint256(initialLT) + // - (uint256(initialLT - newLT) * (timestampCheck - timestampStart)) / uint256(duration) + // ); + // } + + // vm.warp(timestampCheck); + // uint16 actualLT = creditManager.liquidationThresholds(usdc); + // uint16 diff = actualLT > expectedLT ? actualLT - expectedLT : expectedLT - actualLT; + + // assertLe(diff, 1, "LT off by more than 1"); + + // vm.warp(timestampStart + duration + 1); + + // assertEq(creditManager.liquidationThresholds(usdc), newLT, "LT at ramping end incorrect"); + } +} diff --git a/contracts/test/integration/credit/CreditManager_Quotas.t.sol b/contracts/test/integration/credit/CreditManager_Quotas.t.sol new file mode 100644 index 00000000..a50108fb --- /dev/null +++ b/contracts/test/integration/credit/CreditManager_Quotas.t.sol @@ -0,0 +1,705 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {IAddressProvider} from "@gearbox-protocol/core-v2/contracts/interfaces/IAddressProvider.sol"; +import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; + +import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; +import {ICreditAccount} from "@gearbox-protocol/core-v2/contracts/interfaces/ICreditAccount.sol"; +import { + ICreditManagerV3, + ICreditManagerV3Events, + ClosureAction, + CollateralTokenData, + ManageDebtAction +} from "../../../interfaces/ICreditManagerV3.sol"; +import {IPoolQuotaKeeper, AccountQuota} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPriceOracleV2, IPriceOracleV2Ext} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; + +import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; +import {UNDERLYING_TOKEN_MASK} from "../../../libraries/BitMask.sol"; + +import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; + +import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {ERC20Mock} from "@gearbox-protocol/core-v2/contracts/test/mocks/token/ERC20Mock.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +// TESTS +import "../../lib/constants.sol"; + +import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; + +// MOCKS +import {PriceFeedMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/oracles/PriceFeedMock.sol"; +import {PoolServiceMock} from "../../mocks/pool/PoolServiceMock.sol"; +import {PoolQuotaKeeper} from "../../../pool/PoolQuotaKeeper.sol"; +import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; + +// SUITES +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Tokens} from "../../config/Tokens.sol"; +import {CreditManagerTestSuite} from "../../suites/CreditManagerTestSuite.sol"; +import {CreditManagerTestInternal} from "../../mocks/credit/CreditManagerTestInternal.sol"; + +import {CreditConfig} from "../../config/CreditConfig.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +import {Test} from "forge-std/Test.sol"; +import "forge-std/console.sol"; + +contract CreditManagerQuotasTest is Test, ICreditManagerV3Events, BalanceHelper { + CreditManagerTestSuite cms; + + IAddressProvider addressProvider; + IWETH wethToken; + + AccountFactory af; + CreditManagerV3 creditManager; + PoolServiceMock poolMock; + PoolQuotaKeeper poolQuotaKeeper; + IPriceOracleV2 priceOracle; + ACL acl; + address underlying; + + CreditConfig creditConfig; + + function setUp() public { + tokenTestSuite = new TokensTestSuite(); + + tokenTestSuite.topUpWETH{value: 100 * WAD}(); + _connectCreditManagerSuite(Tokens.DAI, false); + } + + /// + /// HELPERS + + function _connectCreditManagerSuite(Tokens t, bool internalSuite) internal { + creditConfig = new CreditConfig(tokenTestSuite, t); + cms = new CreditManagerTestSuite(creditConfig, internalSuite, true, 1); + + acl = cms.acl(); + + addressProvider = cms.addressProvider(); + af = cms.af(); + + poolMock = cms.poolMock(); + poolQuotaKeeper = cms.poolQuotaKeeper(); + + creditManager = cms.creditManager(); + + priceOracle = creditManager.priceOracle(); + underlying = creditManager.underlying(); + } + + function _addQuotedToken(address token, uint16 rate, uint96 limit) internal { + cms.makeTokenQuoted(token, rate, limit); + } + + // function _addManyLimitedTokens(uint256 numTokens, uint96 quota) + // internal + // returns (QuotaUpdate[] memory quotaChanges) + // { + // quotaChanges = new QuotaUpdate[](numTokens); + + // for (uint256 i = 0; i < numTokens; i++) { + // ERC20Mock t = new ERC20Mock("new token", "nt", 18); + // PriceFeedMock pf = new PriceFeedMock(10**8, 8); + + // vm.startPrank(CONFIGURATOR); + // creditManager.addToken(address(t)); + // IPriceOracleV2Ext(address(priceOracle)).addPriceFeed(address(t), address(pf)); + // creditManager.setCollateralTokenData(address(t), 8000, 8000, type(uint40).max, 0); + // vm.stopPrank(); + + // _addQuotedToken(address(t), 100, type(uint96).max); + + // quotaChanges[i] = QuotaUpdate({token: address(t), quotaChange: int96(quota)}); + // } + // } + + /// + /// + /// TESTS + /// + /// + + /// @dev [CMQ-1]: constructor correctly sets supportsQuotas based on pool + function test_CMQ_01_constructor_correctly_sets_quota_related_params() public { + assertTrue(creditManager.supportsQuotas(), "Credit Manager does not support quotas"); + } + + /// @dev [CMQ-2]: setQuotedMask works correctly + function test_CMQ_02_setQuotedMask_works_correctly() public { + _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + + uint256 usdcMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + uint256 linkMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + + uint256 quotedTokenMask = creditManager.quotedTokenMask(); + + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setQuotedMask(quotedTokenMask | usdcMask); + + vm.prank(CONFIGURATOR); + creditManager.setQuotedMask(quotedTokenMask | usdcMask); + + assertEq(creditManager.quotedTokenMask(), usdcMask | linkMask, "New limited mask is incorrect"); + } + + /// @dev [CMQ-3]: updateQuotas works correctly + function test_CMQ_03_updateQuotas_works_correctly() public { + _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + + (,,, address creditAccount) = cms.openCreditAccount(); + + (,, uint256 cumulativeQuotaInterest,,,) = creditManager.creditAccountInfo(creditAccount); + + assertEq(cumulativeQuotaInterest, 1, "SETUP: Cumulative quota interest was not updated correctly"); + + vm.expectRevert(CallerNotCreditFacadeException.selector); + vm.prank(FRIEND); + creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: 100_000 + }); + + vm.expectCall( + address(poolQuotaKeeper), + abi.encodeCall( + IPoolQuotaKeeper.updateQuota, (creditAccount, tokenTestSuite.addressOf(Tokens.LINK), 100_000) + ) + ); + + uint256 linkMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + + (uint256 tokensToEnable, uint256 tokensToDisable) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: 100_000 + }); + + assertEq(tokensToEnable, linkMask, "Incorrect tokensToEnble"); + assertEq(tokensToDisable, 0, "Incorrect tokensToDisable"); + + vm.warp(block.timestamp + 365 days); + + (tokensToEnable, tokensToDisable) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: -100_000 + }); + assertEq(tokensToEnable, 0, "Incorrect tokensToEnable"); + assertEq(tokensToDisable, linkMask, "Incorrect tokensToDisable"); + + (,, cumulativeQuotaInterest,,,) = creditManager.creditAccountInfo(creditAccount); + + assertEq( + cumulativeQuotaInterest, + (100000 * 1000 + 200000 * 500) / PERCENTAGE_FACTOR + 1, + "Cumulative quota interest was not updated correctly" + ); + + vm.expectRevert(TokenIsNotQuotedException.selector); + creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDC), + quotaChange: 100_000 + }); + } + + /// @dev [CMQ-4]: Quotas are handled correctly on debt decrease: amount < quota interest case + function test_CMQ_04_quotas_are_handled_correctly_at_repayment_partial_case() public { + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + + // (,,, address creditAccount) = cms.openCreditAccount(); + // tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); + + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); + + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + + // /// We use fullCollateralCheck to update enabledTokensMask + + // creditManager.fullCollateralCheck( + // creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 + // ); + + // vm.warp(block.timestamp + 365 days); + + // (uint16 feeInterest,,,,) = creditManager.fees(); + + // uint256 amountRepaid = (PERCENTAGE_FACTOR + feeInterest) * WAD / 1_000; + + // uint256 expectedQuotaInterestRepaid = (amountRepaid * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); + + // (, uint256 totalDebtBefore, uint256 totalDebtBeforeFee) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // creditManager.manageDebt( + // creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT + // ); + + // (, uint256 totalDebtAfter, uint256 totalDebtAfterFee) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // assertEq(totalDebtAfter, totalDebtBefore - expectedQuotaInterestRepaid, "Debt updated incorrectly"); + + // assertEq(totalDebtAfterFee, totalDebtBeforeFee - amountRepaid, "Debt updated incorrectly"); + } + + /// @dev [CMQ-5]: Quotas are handled correctly on debt decrease: amount >= quota interest case + function test_CMQ_05_quotas_are_handled_correctly_at_repayment_full_case() public { + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 1000, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + + // (,,, address creditAccount) = cms.openCreditAccount(); + // tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); + + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); + + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + + // creditManager.fullCollateralCheck( + // creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 + // ); + + // vm.warp(block.timestamp + 365 days); + + // uint256 amountRepaid = 35 * WAD; + + // (,, uint256 totalDebtBefore) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // creditManager.manageDebt( + // creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT + // ); + + // (,, uint256 cumulativeQuotaInterest,,,) = creditManager.creditAccountInfo(creditAccount); + + // assertEq(cumulativeQuotaInterest, 1, "Cumulative quota interest was not updated correctly"); + + // (,, uint256 totalDebtAfter) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // assertEq(totalDebtAfter, totalDebtBefore - amountRepaid, "Debt updated incorrectly"); + } + + /// @dev [CMQ-6]: Quotas are disabled on closing an account + function test_CMQ_06_quotas_are_disabled_on_close_account_and_all_quota_fees_are_repaid() public { + _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 5_00, uint96(1_000_000 * WAD)); + + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = cms.openCreditAccount(); + + tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + + uint256 enabledTokensMask = UNDERLYING_TOKEN_MASK; + (uint256 tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(100 * WAD)) + }); + enabledTokensMask |= tokensToEnable; + + (tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDT), + quotaChange: int96(uint96(200 * WAD)) + }); + enabledTokensMask |= tokensToEnable; + + creditManager.fullCollateralCheck(creditAccount, enabledTokensMask, new uint256[](0), 10_000); + + (uint16 feeInterest,,,,) = creditManager.fees(); + + uint256 interestAccured = (borrowedAmount * cumulativeIndexAtClose / cumulativeIndexLastUpdate - borrowedAmount) + * (PERCENTAGE_FACTOR + feeInterest) / PERCENTAGE_FACTOR; + + uint256 expectedQuotasInterest = (100 * WAD * 10_00 / PERCENTAGE_FACTOR + 200 * WAD * 5_00 / PERCENTAGE_FACTOR) + * (PERCENTAGE_FACTOR + feeInterest) / PERCENTAGE_FACTOR; + + vm.warp(block.timestamp + 365 days); + + tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); + + uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); + + /// address borrower, + // ClosureAction closureActionType, + // uint256 totalValue, + // address payer, + // address to, + // uint256 enabledTokensMask, + // uint256 skipTokensMask, + // uint256 borrowedAmountWithInterest, + // bool convertWETH + + // (, uint256 borrowedAmountWithInterest,) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // USER, + // tokensToEnable | UNDERLYING_TOKEN_MASK, + // 0, + // borrowedAmountWithInterest, + // false + // ); + + expectBalance( + Tokens.DAI, + address(poolMock), + poolBalanceBefore + borrowedAmount + interestAccured + expectedQuotasInterest, + "Incorrect pool balance" + ); + + (uint96 quota, uint192 cumulativeIndexLU) = + poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.LINK)); + + assertEq(uint256(quota), 1, "Quota was not set to 0"); + assertEq(uint256(cumulativeIndexLU), 0, "Cumulative index was not updated"); + + (quota, cumulativeIndexLU) = poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.USDT)); + assertEq(uint256(quota), 1, "Quota was not set to 0"); + assertEq(uint256(cumulativeIndexLU), 0, "Cumulative index was not updated"); + } + + // /// @dev [CMQ-7] enableToken, disableToken and changeEnabledTokens do nothing for limited tokens + // function test_CMQ_07_enable_disable_changeEnabled_do_nothing_for_limited_tokens() public { + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // (,,, address creditAccount) = cms.openCreditAccount(); + // creditManager.transferAccountOwnership(USER, address(this)); + + // // creditManager.checkAndEnableToken(tokenTestSuite.addressOf(Tokens.LINK)); + // expectTokenIsEnabled(creditAccount, Tokens.LINK, false); + + // creditManager.changeEnabledTokens(creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)), 0); + // expectTokenIsEnabled(creditAccount, Tokens.LINK, false); + + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); + + // creditManager.updateQuotas(creditAccount, quotaUpdates); + + // creditManager.disableToken(tokenTestSuite.addressOf(Tokens.LINK)); + // expectTokenIsEnabled(creditAccount, Tokens.LINK, true); + + // creditManager.changeEnabledTokens(0, creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK))); + // expectTokenIsEnabled(creditAccount, Tokens.LINK, true); + // } + + /// @dev [CMQ-8]: fullCollateralCheck fuzzing test with quotas + function test_CMQ_08_fullCollateralCheck_fuzzing_test_quotas( + uint128 borrowedAmount, + uint128 daiBalance, + uint128 usdcBalance, + uint128 linkBalance, + uint128 wethBalance, + uint96 usdcQuota, + uint96 linkQuota, + bool enableWETH, + uint16 minHealthFactor + ) public { + // _connectCreditManagerSuite(Tokens.DAI, true); + + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDC), 500, uint96(1_000_000 * WAD)); + + // vm.assume(borrowedAmount > WAD); + // vm.assume(usdcQuota < type(uint96).max / 2); + // vm.assume(linkQuota < type(uint96).max / 2); + // vm.assume(minHealthFactor >= 10_000); + + // console.log("ba", borrowedAmount); + // // uint128 daiBalance, + // // uint128 usdcBalance, + // // uint128 linkBalance, + // // uint128 wethBalance, + // // uint96 usdcQuota, + // // uint96 linkQuota, + // // bool enableWETH, + // // uint16 minHealthFactor) + + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); + + // (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); + // creditManager.transferAccountOwnership(creditAccount, address(this)); + + // if (daiBalance > borrowedAmount) { + // tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); + // } else { + // tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); + // } + + // expectBalance(Tokens.DAI, creditAccount, daiBalance); + + // uint256 tokensToEnable; + + // { + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(linkQuota))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDC), quotaChange: int96(uint96(usdcQuota))}); + + // (tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + // } + + // uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; + // if (enableWETH) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + // } + + // CreditManagerTestInternal(address(creditManager)).setenabledTokensMask(creditAccount, enabledTokensMap); + + // tokenTestSuite.mint(Tokens.WETH, creditAccount, wethBalance); + // tokenTestSuite.mint(Tokens.USDC, creditAccount, usdcBalance); + // tokenTestSuite.mint(Tokens.LINK, creditAccount, linkBalance); + + // uint256 twvUSD = ( + // tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) + // * creditConfig.lt(Tokens.DAI) + // ) / WAD; + + // { + // uint256 valueUsdc = + // (tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC)) / (10 ** 6); + + // uint256 quotaUsdc = usdcQuota > 1_000_000 * WAD ? 1_000_000 * WAD : usdcQuota; + + // quotaUsdc = (quotaUsdc * tokenTestSuite.prices(Tokens.DAI)) / WAD; + + // uint256 tvIncrease = valueUsdc < quotaUsdc ? valueUsdc : quotaUsdc; + + // twvUSD += tvIncrease * creditConfig.lt(Tokens.USDC); + // } + + // { + // uint256 valueLink = + // (tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK)) / WAD; + + // uint256 quotaLink = linkQuota > 1_000_000 * WAD ? 1_000_000 * WAD : linkQuota; + + // quotaLink = (quotaLink * tokenTestSuite.prices(Tokens.DAI)) / WAD; + + // uint256 tvIncrease = valueLink < quotaLink ? valueLink : quotaLink; + + // twvUSD += tvIncrease * creditConfig.lt(Tokens.LINK); + // } + + // twvUSD += !enableWETH + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) + // * creditConfig.lt(Tokens.WETH) + // ) / WAD; + + // (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // uint256 debtUSD = (borrowedAmountWithInterestAndFees * minHealthFactor * tokenTestSuite.prices(Tokens.DAI)) + // / PERCENTAGE_FACTOR / WAD; + + // twvUSD /= PERCENTAGE_FACTOR; + + // bool shouldRevert = twvUSD < debtUSD; + + // if (shouldRevert) { + // vm.expectRevert(NotEnoughCollateralException.selector); + // } + + // creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); + } + + /// @dev [CMQ-9]: fullCollateralCheck does not check non-limited tokens if limited are enough to cover debt + function test_CMQ_09_fullCollateralCheck_skips_normal_tokens_if_limited_tokens_cover_debt() public { + _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDC), 500, uint96(1_000_000 * WAD)); + + tokenTestSuite.mint(Tokens.DAI, address(poolMock), 1_250_000 * WAD); + + (,,, address creditAccount) = cms.openCreditAccount(1_250_000 * WAD); + creditManager.transferAccountOwnership(creditAccount, address(this)); + + uint256 tokenToEnable; + + { + (uint256 tokenToEnable1,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(1_000_000 * WAD)) + }); + + tokenToEnable |= tokenToEnable1; + + (tokenToEnable1,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDC), + quotaChange: int96(uint96(1_000_000 * WAD)) + }); + tokenToEnable |= tokenToEnable1; + } + + tokenTestSuite.mint(Tokens.USDC, creditAccount, RAY); + tokenTestSuite.mint(Tokens.LINK, creditAccount, RAY); + + vm.prank(CONFIGURATOR); + creditManager.addToken(DUMB_ADDRESS); + + // creditManager.checkAndEnableToken(DUMB_ADDRESS); + + uint256 revertMask = creditManager.getTokenMaskOrRevert(DUMB_ADDRESS); + + uint256[] memory collateralHints = new uint256[](1); + collateralHints[0] = revertMask; + + uint256 enableTokenMask = tokenToEnable | revertMask | UNDERLYING_TOKEN_MASK; + + creditManager.fullCollateralCheck(creditAccount, enableTokenMask, collateralHints, 10000); + } + + /// @dev [CMQ-10]: calcCreditAccountAccruedInterest correctly counts quota interest + function test_CMQ_10_calcCreditAccountAccruedInterest_correctly_includes_quota_interest( + uint96 quotaLink, + uint96 quotaUsdt + ) public { + // _connectCreditManagerSuite(Tokens.DAI, true); + + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + + // (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexAtClose, address creditAccount) = + // cms.openCreditAccount(); + + // vm.assume(quotaLink < type(uint96).max / 2); + // vm.assume(quotaUsdt < type(uint96).max / 2); + + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(quotaLink))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(quotaUsdt))}); + + // quotaLink = quotaLink > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaLink; + // quotaUsdt = quotaUsdt > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaUsdt; + + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); + + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + + // uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; + + // CreditManagerTestInternal(address(creditManager)).setenabledTokensMask(creditAccount, enabledTokensMap); + + // vm.warp(block.timestamp + 60 * 60 * 24 * 365); + + // (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // uint256 expectedTotalDebt = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate; + // expectedTotalDebt += (quotaLink * 1000 + quotaUsdt * 500) / PERCENTAGE_FACTOR; + + // (uint16 feeInterest,,,,) = creditManager.fees(); + + // expectedTotalDebt += ((expectedTotalDebt - borrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; + + // uint256 diff = expectedTotalDebt > totalDebt ? expectedTotalDebt - totalDebt : totalDebt - expectedTotalDebt; + + // assertLe(diff, 2, "Total debt not equal"); + } + + // [DEPRECIATED]: We test that after full collateral + // /// @dev [CMQ-11]: updateQuotas reverts on too many enabled tokens + // function test_CMQ_11_updateQuotas_reverts_on_too_many_tokens_enabled() public { + // (,,, address creditAccount) = cms.openCreditAccount(); + + // uint256 maxTokens = creditManager.maxAllowedEnabledTokenLength(); + + // QuotaUpdate[] memory quotaUpdates = _addManyLimitedTokens(maxTokens + 1, 100); + + // vm.expectRevert(TooManyEnabledTokensException.selector); + // creditManager.updateQuotas(creditAccount, quotaUpdates); + // } + + /// @dev [CMQ-12]: Credit Manager zeroes limits on quoted tokens upon incurring a loss + function test_CMQ_12_creditManager_triggers_limit_zeroing_on_loss() public { + _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + + (,,, address creditAccount) = cms.openCreditAccount(); + + uint256 enabledTokensMap = UNDERLYING_TOKEN_MASK; + + (uint256 tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(100 * WAD)) + }); + enabledTokensMap |= tokensToEnable; + + (tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDT), + quotaChange: int96(uint96(200 * WAD)) + }); + enabledTokensMap |= tokensToEnable; + + address[] memory quotedTokens = new address[](creditManager.maxAllowedEnabledTokenLength() + 1); + + quotedTokens[0] = tokenTestSuite.addressOf(Tokens.LINK); + quotedTokens[1] = tokenTestSuite.addressOf(Tokens.USDT); + + // vm.expectCall(address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.setLimitsToZero, (quotedTokens))); + + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // DAI_ACCOUNT_AMOUNT, + // USER, + // USER, + // enabledTokensMap, + // 0, + // DAI_ACCOUNT_AMOUNT, + // false + // ); + + for (uint256 i = 0; i < quotedTokens.length; ++i) { + if (quotedTokens[i] == address(0)) continue; + + (, uint96 limit,,) = poolQuotaKeeper.totalQuotaParams(quotedTokens[i]); + + assertEq(limit, 1, "Limit was not zeroed"); + } + } +} diff --git a/contracts/test/integration/pool/Pool4626.t.sol b/contracts/test/integration/pool/Pool4626.t.sol new file mode 100644 index 00000000..fcadd129 --- /dev/null +++ b/contracts/test/integration/pool/Pool4626.t.sol @@ -0,0 +1,1924 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; +import {IPoolQuotaKeeper} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {LinearInterestRateModel} from "../../../pool/LinearInterestRateModel.sol"; + +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; + +import {Pool4626} from "../../../pool/Pool4626.sol"; +import {IPool4626Events} from "../../../interfaces/IPool4626.sol"; +import {IERC4626Events} from "../../interfaces/IERC4626.sol"; + +import {IInterestRateModel} from "../../../interfaces/IInterestRateModel.sol"; + +import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; +import {CreditManagerMockForPoolTest} from "../../mocks/pool/CreditManagerMockForPoolTest.sol"; +import { + liquidityProviderInitBalance, + addLiquidity, + removeLiquidity, + referral, + PoolServiceTestSuite +} from "../../suites/PoolServiceTestSuite.sol"; + +import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Tokens} from "../../config/Tokens.sol"; +import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; +import {ERC20FeeMock} from "../../mocks/token/ERC20FeeMock.sol"; +import {PoolQuotaKeeper} from "../../../pool/PoolQuotaKeeper.sol"; + +// TEST +import {TestHelper} from "../../lib/helper.sol"; +import "forge-std/console.sol"; + +import "../../lib/constants.sol"; + +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +uint256 constant fee = 6000; + +/// @title pool +/// @notice Business logic for borrowing liquidity pools +contract Pool4626Test is TestHelper, BalanceHelper, IPool4626Events, IERC4626Events { + using Math for uint256; + + PoolServiceTestSuite psts; + PoolQuotaKeeper pqk; + + /* + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + ACL acl; + Pool4626 pool; + address underlying; + CreditManagerMockForPoolTest cmMock; + IInterestRateModel irm; + + function setUp() public { + _setUp(Tokens.DAI, false); + } + + function _setUp(Tokens t, bool supportQuotas) public { + tokenTestSuite = new TokensTestSuite(); + psts = new PoolServiceTestSuite( + tokenTestSuite, + tokenTestSuite.addressOf(t), + true, + supportQuotas + ); + + pool = psts.pool4626(); + irm = psts.linearIRModel(); + underlying = address(psts.underlying()); + cmMock = psts.cmMock(); + acl = psts.acl(); + pqk = psts.poolQuotaKeeper(); + } + + // + // HELPERS + // + function _setUpTestCase( + Tokens t, + uint256 feeToken, + uint16 utilisation, + uint256 availableLiquidity, + uint256 dieselRate, + uint16 withdrawFee, + bool supportQuotas + ) internal { + _setUp(t, supportQuotas); + if (t == Tokens.USDT) { + // set 50% fee if fee token + ERC20FeeMock(pool.asset()).setMaximumFee(type(uint256).max); + ERC20FeeMock(pool.asset()).setBasisPointsRate(feeToken); + } + + _initPoolLiquidity(availableLiquidity, dieselRate); + _connectAndSetLimit(); + + if (utilisation > 0) _borrowToUtilisation(utilisation); + + vm.prank(CONFIGURATOR); + pool.setWithdrawFee(withdrawFee); + } + + function _connectAndSetLimit() internal { + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), type(uint128).max); + } + + function _borrowToUtilisation(uint16 utilisation) internal { + cmMock.lendCreditAccount(pool.expectedLiquidity() / 2, DUMB_ADDRESS); + + assertEq(pool.borrowRate(), irm.calcBorrowRate(PERCENTAGE_FACTOR, utilisation, false)); + } + + function _mulFee(uint256 amount, uint256 _fee) internal pure returns (uint256) { + return (amount * (PERCENTAGE_FACTOR - _fee)) / PERCENTAGE_FACTOR; + } + + function _divFee(uint256 amount, uint256 _fee) internal pure returns (uint256) { + return (amount * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR - _fee); + } + + function _updateBorrowrate() internal { + vm.prank(CONFIGURATOR); + pool.updateInterestRateModel(address(irm)); + } + + function _initPoolLiquidity() internal { + _initPoolLiquidity(addLiquidity, 2 * RAY); + } + + function _initPoolLiquidity(uint256 availableLiquidity, uint256 dieselRate) internal { + assertEq(pool.convertToAssets(RAY), RAY, "Incorrect diesel rate!"); + + vm.prank(INITIAL_LP); + pool.mint(availableLiquidity, INITIAL_LP); + + vm.prank(INITIAL_LP); + pool.burn((availableLiquidity * (dieselRate - RAY)) / dieselRate); + + // assertEq(pool.expectedLiquidityLU(), availableLiquidity * dieselRate / RAY, "ExpectedLU is not correct!"); + assertEq(pool.convertToAssets(RAY), dieselRate, "Incorrect diesel rate!"); + } + + // + // TESTS + // + + // [P4-1]: getDieselRate_RAY=RAY, withdrawFee=0 and expectedLiquidityLimit as expected at start + function test_P4_01_start_parameters_correct() public { + assertEq(pool.name(), "diesel DAI", "Symbol incorrectly set up"); + assertEq(pool.symbol(), "dDAI", "Symbol incorrectly set up"); + assertEq(address(pool.addressProvider()), address(psts.addressProvider()), "Incorrect address provider"); + + assertEq(pool.asset(), underlying, "Incorrect underlying provider"); + assertEq(pool.underlyingToken(), underlying, "Incorrect underlying provider"); + + assertEq(pool.decimals(), IERC20Metadata(address(psts.underlying())).decimals(), "Incorrect decimals"); + + assertEq(pool.treasury(), psts.addressProvider().getTreasuryContract(), "Incorrect treasury"); + + assertEq(pool.convertToAssets(RAY), RAY, "Incorrect diesel rate!"); + + assertEq(address(pool.interestRateModel()), address(psts.linearIRModel()), "Incorrect interest rate model"); + + assertEq(pool.expectedLiquidityLimit(), type(uint256).max); + + assertEq(pool.totalBorrowedLimit(), type(uint256).max); + } + + // [P4-2]: constructor reverts for zero addresses + function test_P4_02_constructor_reverts_for_zero_addresses() public { + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider: address(0), + _underlyingToken: underlying, + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false + }); + + // opts.addressProvider = address(psts.addressProvider()); + // opts.interestRateModel = address(0); + + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider:address(psts.addressProvider()), + _underlyingToken: underlying, + _interestRateModel: address(0), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false + }); + + // opts.interestRateModel = address(psts.linearIRModel()); + // opts.underlyingToken = address(0); + + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: address(0), + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false + }); + } + + // [P4-3]: constructor emits events + function test_P4_03_constructor_emits_events() public { + uint256 limit = 15890; + + vm.expectEmit(true, false, false, false); + emit SetInterestRateModel(address(psts.linearIRModel())); + + vm.expectEmit(true, false, false, true); + emit SetExpectedLiquidityLimit(limit); + + vm.expectEmit(false, false, false, true); + emit SetTotalBorrowedLimit(limit); + + new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: underlying, + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: limit, + _supportsQuotas: false + }); + } + + // [P4-4]: addLiquidity, removeLiquidity, lendCreditAccount, repayCreditAccount reverts if contract is paused + function test_P4_04_cannot_be_used_while_paused() public { + vm.startPrank(CONFIGURATOR); + acl.addPausableAdmin(CONFIGURATOR); + pool.pause(); + vm.stopPrank(); + + vm.startPrank(USER); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.deposit(addLiquidity, FRIEND); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.depositReferral(addLiquidity, FRIEND, referral); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.mint(addLiquidity, FRIEND); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.withdraw(removeLiquidity, FRIEND, FRIEND); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.redeem(removeLiquidity, FRIEND, FRIEND); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.lendCreditAccount(1, FRIEND); + + vm.expectRevert(bytes(PAUSABLE_ERROR)); + pool.repayCreditAccount(1, 0, 0); + + vm.stopPrank(); + } + + struct DepositTestCase { + string name; + /// SETUP + Tokens asset; + uint256 tokenFee; + uint256 initialLiquidity; + uint256 dieselRate; + uint16 utilisation; + uint16 withdrawFee; + /// PARAMS + uint256 amountToDeposit; + /// EXPECTED VALUES + uint256 expectedShares; + uint256 expectedAvailableLiquidity; + uint256 expectedLiquidityAfter; + } + + // [P4-5]: deposit adds liquidity correctly + function test_P4_05_deposit_adds_liquidity_correctly() public { + // adds liqudity to mint initial diesel tokens to change 1:1 rate + + DepositTestCase[2] memory cases = [ + DepositTestCase({ + name: "Normal token", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + amountToDeposit: addLiquidity, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedShares: addLiquidity / 2, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity, + expectedLiquidityAfter: addLiquidity * 2 + }), + DepositTestCase({ + name: "Fee token", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + /// PARAMS + amountToDeposit: addLiquidity, + /// EXPECTED VALUES + expectedShares: ((addLiquidity * 40) / 100) / 2, + expectedAvailableLiquidity: addLiquidity / 2 + (addLiquidity * 40) / 100, + expectedLiquidityAfter: addLiquidity + (addLiquidity * 40) / 100 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + DepositTestCase memory testCase = cases[i]; + for (uint256 rc; rc < 2; ++rc) { + bool withReferralCode = rc == 0; + + _setUpTestCase( + testCase.asset, + testCase.tokenFee, + testCase.utilisation, + testCase.initialLiquidity, + testCase.dieselRate, + testCase.withdrawFee, + false + ); + + vm.expectEmit(true, true, false, true); + emit Transfer(address(0), FRIEND, testCase.expectedShares); + + vm.expectEmit(true, true, false, true); + emit Deposit(USER, FRIEND, testCase.amountToDeposit, testCase.expectedShares); + + if (withReferralCode) { + vm.expectEmit(true, true, false, true); + emit DepositWithReferral(USER, FRIEND, testCase.amountToDeposit, referral); + } + + vm.prank(USER); + uint256 shares = withReferralCode + ? pool.depositReferral(testCase.amountToDeposit, FRIEND, referral) + : pool.deposit(testCase.amountToDeposit, FRIEND); + + expectBalance( + address(pool), + FRIEND, + testCase.expectedShares, + _testCaseErr(testCase.name, "Incorrect diesel tokens on FRIEND account") + ); + expectBalance(underlying, USER, liquidityProviderInitBalance - addLiquidity); + assertEq( + pool.expectedLiquidity(), + testCase.expectedLiquidityAfter, + _testCaseErr(testCase.name, "Incorrect expected liquidity") + ); + assertEq( + pool.availableLiquidity(), + testCase.expectedAvailableLiquidity, + _testCaseErr(testCase.name, "Incorrect available liquidity") + ); + assertEq(shares, testCase.expectedShares); + + assertEq( + pool.borrowRate(), + irm.calcBorrowRate(pool.expectedLiquidity(), pool.availableLiquidity(), false), + _testCaseErr(testCase.name, "Borrow rate wasn't update correcty") + ); + } + } + } + + struct MintTestCase { + string name; + /// SETUP + Tokens asset; + uint256 tokenFee; + uint256 initialLiquidity; + uint256 dieselRate; + uint16 utilisation; + uint16 withdrawFee; + /// PARAMS + uint256 desiredShares; + /// EXPECTED VALUES + uint256 expectedAssetsWithdrawal; + uint256 expectedAvailableLiquidity; + uint256 expectedLiquidityAfter; + } + + // [P4-6]: deposit adds liquidity correctly + function test_P4_06_mint_adds_liquidity_correctly() public { + MintTestCase[2] memory cases = [ + MintTestCase({ + name: "Normal token", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + desiredShares: addLiquidity / 2, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedAssetsWithdrawal: addLiquidity, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity, + expectedLiquidityAfter: addLiquidity * 2 + }), + MintTestCase({ + name: "Fee token", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + /// PARAMS + desiredShares: addLiquidity / 2, + /// EXPECTED VALUES + /// fee token makes impact on how much tokens will be wiotdrawn from user + expectedAssetsWithdrawal: (addLiquidity * 100) / 40, + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity, + expectedLiquidityAfter: addLiquidity * 2 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + MintTestCase memory testCase = cases[i]; + + _setUpTestCase( + testCase.asset, + testCase.tokenFee, + testCase.utilisation, + testCase.initialLiquidity, + testCase.dieselRate, + testCase.withdrawFee, + false + ); + + vm.expectEmit(true, true, false, true); + emit Transfer(address(0), FRIEND, testCase.desiredShares); + + vm.expectEmit(true, true, false, true); + emit Deposit(USER, FRIEND, testCase.expectedAssetsWithdrawal, testCase.desiredShares); + + vm.prank(USER); + uint256 assets = pool.mint(testCase.desiredShares, FRIEND); + + expectBalance( + address(pool), FRIEND, testCase.desiredShares, _testCaseErr(testCase.name, "Incorrect shares ") + ); + expectBalance( + underlying, + USER, + liquidityProviderInitBalance - testCase.expectedAssetsWithdrawal, + _testCaseErr(testCase.name, "Incorrect USER balance") + ); + assertEq( + pool.expectedLiquidity(), + testCase.expectedLiquidityAfter, + _testCaseErr(testCase.name, "Incorrect expected liquidity") + ); + assertEq( + pool.availableLiquidity(), + testCase.expectedAvailableLiquidity, + _testCaseErr(testCase.name, "Incorrect available liquidity") + ); + assertEq( + assets, testCase.expectedAssetsWithdrawal, _testCaseErr(testCase.name, "Incorrect assets return value") + ); + + assertEq( + pool.borrowRate(), + irm.calcBorrowRate(pool.expectedLiquidity(), pool.availableLiquidity(), false), + _testCaseErr(testCase.name, "Borrow rate wasn't update correcty") + ); + } + } + + // [P4-7]: deposit and mint if assets more than limit + function test_P4_07_deposit_and_mint_if_assets_more_than_limit() public { + for (uint256 j; j < 2; ++j) { + for (uint256 i; i < 2; ++i) { + bool feeToken = i == 1; + + Tokens asset = feeToken ? Tokens.USDT : Tokens.DAI; + + _setUpTestCase(asset, feeToken ? 60_00 : 0, 50_00, addLiquidity, 2 * RAY, 0, false); + + vm.prank(CONFIGURATOR); + pool.setExpectedLiquidityLimit(1237882323 * WAD); + + uint256 assetsToReachLimit = pool.expectedLiquidityLimit() - pool.expectedLiquidity(); + + uint256 sharesToReachLimit = assetsToReachLimit / 2; + + if (feeToken) { + assetsToReachLimit = _divFee(assetsToReachLimit, fee); + } + + tokenTestSuite.mint(asset, USER, assetsToReachLimit + 1); + + if (j == 0) { + // DEPOSIT CASE + vm.prank(USER); + pool.deposit(assetsToReachLimit, FRIEND); + } else { + // MINT CASE + vm.prank(USER); + pool.mint(sharesToReachLimit, FRIEND); + } + } + } + } + + // + // WITHDRAW + // + struct WithdrawTestCase { + string name; + /// SETUP + Tokens asset; + uint256 tokenFee; + uint256 initialLiquidity; + uint256 dieselRate; + uint16 utilisation; + uint16 withdrawFee; + /// PARAMS + uint256 sharesToMint; + uint256 assetsToWithdraw; + /// EXPECTED VALUES + uint256 expectedSharesBurnt; + uint256 expectedAvailableLiquidity; + uint256 expectedLiquidityAfter; + uint256 expectedTreasury; + } + + // [P4-8]: deposit and mint if assets more than limit + function test_P4_08_withdraw_works_as_expected() public { + WithdrawTestCase[4] memory cases = [ + WithdrawTestCase({ + name: "Normal token with 0 withdraw fee", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + sharesToMint: addLiquidity / 2, + assetsToWithdraw: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedSharesBurnt: addLiquidity / 8, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - addLiquidity / 4, + expectedLiquidityAfter: addLiquidity * 2 - addLiquidity / 4, + expectedTreasury: 0 + }), + WithdrawTestCase({ + name: "Normal token with 1% withdraw fee", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 1_00, + // PARAMS + sharesToMint: addLiquidity / 2, + assetsToWithdraw: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedSharesBurnt: ((addLiquidity / 8) * 100) / 99, + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - ((addLiquidity / 4) * 100) / 99, + expectedLiquidityAfter: addLiquidity * 2 - ((addLiquidity / 4) * 100) / 99, + expectedTreasury: ((addLiquidity / 4) * 1) / 99 + }), + WithdrawTestCase({ + name: "Fee token with 0 withdraw fee", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + sharesToMint: addLiquidity / 2, + assetsToWithdraw: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedSharesBurnt: ((addLiquidity / 8) * 100) / 40, + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - ((addLiquidity / 4) * 100) / 40, + expectedLiquidityAfter: addLiquidity * 2 - ((addLiquidity / 4) * 100) / 40, + expectedTreasury: 0 + }), + WithdrawTestCase({ + name: "Fee token with 1% withdraw fee", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 1_00, + // PARAMS + sharesToMint: addLiquidity / 2, + assetsToWithdraw: addLiquidity / 4, + // EXPECTED VALUES: + // + // addLiquidity /2 * 1/2 (rate) * 1 / (100%-1%) / feeToken + expectedSharesBurnt: ((((addLiquidity / 8) * 100) / 99) * 100) / 40 + 1, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - ((((addLiquidity / 4) * 100) / 40) * 100) / 99 - 1, + expectedLiquidityAfter: addLiquidity * 2 - ((((addLiquidity / 4) * 100) / 40) * 100) / 99 - 1, + expectedTreasury: ((addLiquidity / 4) * 1) / 99 + 1 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + WithdrawTestCase memory testCase = cases[i]; + /// @dev a represents allowance, 0 means required amount +1, 1 means inlimited allowance + for (uint256 approveCase; approveCase < 2; ++approveCase) { + _setUpTestCase( + testCase.asset, + testCase.tokenFee, + testCase.utilisation, + testCase.initialLiquidity, + testCase.dieselRate, + testCase.withdrawFee, + false + ); + + vm.prank(USER); + pool.mint(testCase.sharesToMint, FRIEND); + + vm.prank(FRIEND); + pool.approve(USER, approveCase == 0 ? testCase.expectedSharesBurnt + 1 : type(uint256).max); + + vm.expectEmit(true, true, false, true); + emit Transfer(FRIEND, address(0), testCase.expectedSharesBurnt); + + vm.expectEmit(true, true, false, true); + emit Withdraw(USER, FRIEND2, FRIEND, testCase.assetsToWithdraw, testCase.expectedSharesBurnt); + + vm.prank(USER); + uint256 shares = pool.withdraw(testCase.assetsToWithdraw, FRIEND2, FRIEND); + + expectBalance( + underlying, + FRIEND2, + testCase.assetsToWithdraw, + _testCaseErr(testCase.name, "Incorrect assets on FRIEND2 account") + ); + + expectBalance( + underlying, + pool.treasury(), + testCase.expectedTreasury, + _testCaseErr(testCase.name, "Incorrect DAO fee") + ); + assertEq( + shares, testCase.expectedSharesBurnt, _testCaseErr(testCase.name, "Incorrect shares return value") + ); + + expectBalance( + address(pool), + FRIEND, + testCase.sharesToMint - testCase.expectedSharesBurnt, + _testCaseErr(testCase.name, "Incorrect FRIEND balance") + ); + + assertEq( + pool.expectedLiquidity(), + testCase.expectedLiquidityAfter, + _testCaseErr(testCase.name, "Incorrect expected liquidity") + ); + assertEq( + pool.availableLiquidity(), + testCase.expectedAvailableLiquidity, + _testCaseErr(testCase.name, "Incorrect available liquidity") + ); + + assertEq( + pool.allowance(FRIEND, USER), + approveCase == 0 ? 1 : type(uint256).max, + _testCaseErr(testCase.name, "Incorrect allowance after operation") + ); + + assertEq( + pool.borrowRate(), + irm.calcBorrowRate(pool.expectedLiquidity(), pool.availableLiquidity(), false), + _testCaseErr(testCase.name, "Borrow rate wasn't update correcty") + ); + } + } + } + + // + // REDEEM + // + struct RedeemTestCase { + string name; + /// SETUP + Tokens asset; + uint256 tokenFee; + uint256 initialLiquidity; + uint256 dieselRate; + uint16 utilisation; + uint16 withdrawFee; + /// PARAMS + uint256 sharesToMint; + uint256 sharesToRedeem; + /// EXPECTED VALUES + uint256 expectedAssetsDelivered; + uint256 expectedAvailableLiquidity; + uint256 expectedLiquidityAfter; + uint256 expectedTreasury; + } + + // [P4-9]: deposit and mint if assets more than limit + function test_P4_09_redeem_works_as_expected() public { + RedeemTestCase[4] memory cases = [ + RedeemTestCase({ + name: "Normal token with 0 withdraw fee", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + sharesToMint: addLiquidity / 2, + sharesToRedeem: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedAssetsDelivered: addLiquidity / 2, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - addLiquidity / 2, + expectedLiquidityAfter: addLiquidity * 2 - addLiquidity / 2, + expectedTreasury: 0 + }), + RedeemTestCase({ + name: "Normal token with 1% withdraw fee", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 1_00, + // PARAMS + sharesToMint: addLiquidity / 2, + sharesToRedeem: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedAssetsDelivered: ((addLiquidity / 2) * 99) / 100, + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - addLiquidity / 2, + expectedLiquidityAfter: addLiquidity * 2 - addLiquidity / 2, + expectedTreasury: ((addLiquidity / 2) * 1) / 100 + }), + RedeemTestCase({ + name: "Fee token with 0 withdraw fee", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 0, + // PARAMS + sharesToMint: addLiquidity / 2, + sharesToRedeem: addLiquidity / 4, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedAssetsDelivered: ((addLiquidity / 2) * 40) / 100, + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - addLiquidity / 2, + expectedLiquidityAfter: addLiquidity * 2 - addLiquidity / 2, + expectedTreasury: 0 + }), + RedeemTestCase({ + name: "Fee token with 1% withdraw fee", + /// SETUP + asset: Tokens.USDT, + // transfer fee: 60%, so 40% will be transfer to account + tokenFee: 60_00, + initialLiquidity: addLiquidity, + // 1 dUSDT = 2 USDT + dieselRate: 2 * RAY, + // 50% of available liquidity is borrowed + utilisation: 50_00, + withdrawFee: 1_00, + // PARAMS + sharesToMint: addLiquidity / 2, + sharesToRedeem: addLiquidity / 4, + // EXPECTED VALUES: + // + // addLiquidity /2 * 1/2 (rate) * 1 / (100%-1%) / feeToken + expectedAssetsDelivered: ((((addLiquidity / 2) * 99) / 100) * 40) / 100, + // availableLiquidityBefore: addLiqudity /2 (cause 50% utilisation) + expectedAvailableLiquidity: addLiquidity / 2 + addLiquidity - addLiquidity / 2, + expectedLiquidityAfter: addLiquidity * 2 - addLiquidity / 2, + expectedTreasury: ((((addLiquidity / 2) * 40) / 100) * 1) / 100 + }) + ]; + /// @dev a represents allowance, 0 means required amount +1, 1 means inlimited allowance + + for (uint256 i; i < cases.length; ++i) { + RedeemTestCase memory testCase = cases[i]; + for (uint256 approveCase; approveCase < 2; ++approveCase) { + _setUpTestCase( + testCase.asset, + testCase.tokenFee, + testCase.utilisation, + testCase.initialLiquidity, + testCase.dieselRate, + testCase.withdrawFee, + false + ); + + vm.prank(USER); + pool.mint(testCase.sharesToMint, FRIEND); + + vm.prank(FRIEND); + pool.approve(USER, approveCase == 0 ? testCase.sharesToRedeem + 1 : type(uint256).max); + + vm.expectEmit(true, true, false, true); + emit Transfer(FRIEND, address(0), testCase.sharesToRedeem); + + vm.expectEmit(true, true, false, true); + emit Withdraw(USER, FRIEND2, FRIEND, testCase.expectedAssetsDelivered, testCase.sharesToRedeem); + + vm.prank(USER); + uint256 assets = pool.redeem(testCase.sharesToRedeem, FRIEND2, FRIEND); + + expectBalance( + underlying, + FRIEND2, + testCase.expectedAssetsDelivered, + _testCaseErr(testCase.name, "Incorrect assets on FRIEND2 account ") + ); + + expectBalance( + underlying, + pool.treasury(), + testCase.expectedTreasury, + _testCaseErr(testCase.name, "Incorrect treasury fee") + ); + assertEq( + assets, + testCase.expectedAssetsDelivered, + _testCaseErr(testCase.name, "Incorrect assets return value") + ); + expectBalance( + address(pool), + FRIEND, + testCase.sharesToMint - testCase.sharesToRedeem, + _testCaseErr(testCase.name, "Incorrect FRIEND balance") + ); + + assertEq( + pool.expectedLiquidity(), + testCase.expectedLiquidityAfter, + _testCaseErr(testCase.name, "Incorrect expected liquidity") + ); + assertEq( + pool.availableLiquidity(), + testCase.expectedAvailableLiquidity, + _testCaseErr(testCase.name, "Incorrect available liquidity") + ); + + assertEq( + pool.allowance(FRIEND, USER), + approveCase == 0 ? 1 : type(uint256).max, + _testCaseErr(testCase.name, "Incorrect allowance after operation") + ); + + assertEq( + pool.borrowRate(), + irm.calcBorrowRate(pool.expectedLiquidity(), pool.availableLiquidity(), false), + _testCaseErr(testCase.name, "Borrow rate wasn't update correcty") + ); + } + } + } + + // [P4-10]: burn works as expected + function test_P4_10_burn_works_as_expected() public { + _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, false); + + vm.prank(USER); + pool.mint(addLiquidity, USER); + + expectBalance(address(pool), USER, addLiquidity, "SETUP: Incorrect USER balance"); + + /// Initial lp provided 1/2 AL + 1AL from USER + assertEq(pool.totalSupply(), (addLiquidity * 3) / 2, "SETUP: Incorrect total supply"); + + uint256 borrowRate = pool.borrowRate(); + uint256 dieselRate = pool.convertToAssets(RAY); + uint256 availableLiquidity = pool.availableLiquidity(); + uint256 expectedLiquidity = pool.expectedLiquidity(); + + vm.prank(USER); + pool.burn(addLiquidity / 4); + + expectBalance(address(pool), USER, (addLiquidity * 3) / 4, "Incorrect USER balance"); + + assertEq(pool.borrowRate(), borrowRate, "Incorrect borrow rate"); + /// Before burn totalSupply was 150% * AL, after 125% * LP + assertEq(pool.convertToAssets(RAY), (dieselRate * 150) / 125, "Incorrect diesel rate"); + assertEq(pool.availableLiquidity(), availableLiquidity, "Incorrect available liquidity"); + assertEq(pool.expectedLiquidity(), expectedLiquidity, "Incorrect expected liquidity"); + } + + /// + /// LEND CREDIT ACCOUNT + // [P4-11]: lendCreditAccount works as expected + function test_P4_11_lendCreditAccount_works_as_expected() public { + _setUpTestCase(Tokens.DAI, 0, 0, addLiquidity, 2 * RAY, 0, false); + + address creditAccount = DUMB_ADDRESS; + uint256 borrowAmount = addLiquidity / 5; + + expectBalance(pool.asset(), creditAccount, 0, "SETUP: incorrect CA balance"); + assertEq(pool.borrowRate(), irm.R_base_RAY(), "SETUP: incorrect borrowRate"); + assertEq(pool.totalBorrowed(), 0, "SETUP: incorrect totalBorrowed"); + assertEq(pool.creditManagerBorrowed(address(cmMock)), 0, "SETUP: incorrect CM limit"); + + uint256 availableLiquidityBefore = pool.availableLiquidity(); + uint256 expectedLiquidityBefore = pool.expectedLiquidity(); + + vm.expectEmit(true, true, false, true); + emit Transfer(address(pool), creditAccount, borrowAmount); + + vm.expectEmit(true, true, false, true); + emit Borrow(address(cmMock), creditAccount, borrowAmount); + + cmMock.lendCreditAccount(borrowAmount, creditAccount); + + assertEq(pool.availableLiquidity(), availableLiquidityBefore - borrowAmount, "Incorrect available liquidity"); + assertEq(pool.expectedLiquidity(), expectedLiquidityBefore, "Incorrect expected liquidity"); + assertEq(pool.totalBorrowed(), borrowAmount, "Incorrect borrowAmount"); + + assertEq( + pool.borrowRate(), + irm.calcBorrowRate(pool.expectedLiquidity(), pool.availableLiquidity(), false), + "Borrow rate wasn't update correcty" + ); + + assertEq(pool.creditManagerBorrowed(address(cmMock)), borrowAmount, "Incorrect CM limit"); + } + + // [P4-12]: lendCreditAccount reverts if it breaches limits + function test_P4_12_lendCreditAccount_reverts_if_breach_limits() public { + address creditAccount = DUMB_ADDRESS; + + _setUpTestCase(Tokens.DAI, 0, 0, addLiquidity, 2 * RAY, 0, false); + + vm.expectRevert(CreditManagerCantBorrowException.selector); + cmMock.lendCreditAccount(0, creditAccount); + + vm.startPrank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), type(uint128).max); + pool.setTotalBorrowedLimit(addLiquidity); + vm.stopPrank(); + + vm.expectRevert(CreditManagerCantBorrowException.selector); + cmMock.lendCreditAccount(addLiquidity + 1, creditAccount); + + vm.startPrank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), addLiquidity); + pool.setTotalBorrowedLimit(type(uint128).max); + vm.stopPrank(); + + vm.expectRevert(CreditManagerCantBorrowException.selector); + cmMock.lendCreditAccount(addLiquidity + 1, creditAccount); + } + + // + // REPAY + // + + // [P4-13]: repayCreditAccount reverts for incorrect credit managers + function test_P4_13_repayCreditAccount_reverts_for_incorrect_credit_managers() public { + _setUpTestCase(Tokens.DAI, 0, 0, addLiquidity, 2 * RAY, 0, false); + + /// Case for unknown CM + vm.expectRevert(CallerNotCreditManagerException.selector); + vm.prank(USER); + pool.repayCreditAccount(1, 0, 0); + + /// Case for CM with zero debt + assertEq(pool.creditManagerBorrowed(address(cmMock)), 0, "SETUP: Incorrect CM limit"); + + vm.expectRevert(CallerNotCreditManagerException.selector); + cmMock.repayCreditAccount(1, 0, 0); + } + + struct RepayTestCase { + string name; + /// SETUP + Tokens asset; + uint256 tokenFee; + uint256 initialLiquidity; + uint256 dieselRate; + uint256 sharesInTreasury; + uint256 borrowBefore; + /// PARAMS + uint256 borrowAmount; + uint256 profit; + uint256 loss; + /// EXPECTED VALUES + uint256 expectedTotalSupply; + uint256 expectedAvailableLiquidity; + uint256 expectedLiquidityAfter; + uint256 expectedTreasury; + uint256 uncoveredLoss; + } + + // [P4-14]: repayCreditAccount works as expected + function test_P4_14_repayCreditAccount_works_as_expected() public { + address creditAccount = DUMB_ADDRESS; + RepayTestCase[5] memory cases = [ + RepayTestCase({ + name: "profit: 0, loss: 0", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: 2 * addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // No borrowing on start + borrowBefore: addLiquidity, + sharesInTreasury: addLiquidity / 4, + // PARAMS + borrowAmount: addLiquidity / 2, + profit: 0, + loss: 0, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedTotalSupply: addLiquidity, + expectedAvailableLiquidity: 2 * addLiquidity - addLiquidity + addLiquidity / 2, + expectedLiquidityAfter: 2 * addLiquidity, + expectedTreasury: 0, + uncoveredLoss: 0 + }), + RepayTestCase({ + name: "profit: 10%, loss: 0", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: 2 * addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // No borrowing on start + borrowBefore: addLiquidity, + sharesInTreasury: addLiquidity / 4, + // PARAMS + borrowAmount: addLiquidity / 2, + profit: (addLiquidity * 1) / 10, + loss: 0, + // EXPECTED VALUES: + // + // addLiqudity + new minted diesel tokens for 10% with rate 2:1 + expectedTotalSupply: addLiquidity + (addLiquidity * 1) / 10 / 2, + expectedAvailableLiquidity: 2 * addLiquidity - addLiquidity + addLiquidity / 2 + (addLiquidity * 1) / 10, + // added profit here + expectedLiquidityAfter: 2 * addLiquidity + (addLiquidity * 1) / 10, + expectedTreasury: 0, + uncoveredLoss: 0 + }), + RepayTestCase({ + name: "profit: 0, loss: 10% (covered)", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: 2 * addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // No borrowing on start + borrowBefore: addLiquidity, + sharesInTreasury: addLiquidity / 4, + // PARAMS + borrowAmount: addLiquidity / 2, + profit: 0, + loss: (addLiquidity * 1) / 10, + // EXPECTED VALUES: + // + // with covered loss, the system should burn DAO shares based on current rate + expectedTotalSupply: addLiquidity - (addLiquidity * 1) / 10 / 2, + expectedAvailableLiquidity: 2 * addLiquidity - addLiquidity + addLiquidity / 2 - (addLiquidity * 1) / 10, + expectedLiquidityAfter: 2 * addLiquidity - (addLiquidity * 1) / 10, + expectedTreasury: 0, + uncoveredLoss: 0 + }), + RepayTestCase({ + name: "profit: 0, loss: 10% (uncovered)", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: 2 * addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // No borrowing on start + borrowBefore: addLiquidity, + sharesInTreasury: 0, + // PARAMS + borrowAmount: addLiquidity / 2, + profit: 0, + loss: (addLiquidity * 1) / 10, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedTotalSupply: addLiquidity, + expectedAvailableLiquidity: 2 * addLiquidity - addLiquidity + addLiquidity / 2 - (addLiquidity * 1) / 10, + expectedLiquidityAfter: 2 * addLiquidity - (addLiquidity * 1) / 10, + expectedTreasury: 0, + uncoveredLoss: (addLiquidity * 1) / 10 + }), + RepayTestCase({ + name: "profit: 0, loss: 20% (partially covered)", + // POOL SETUP + asset: Tokens.DAI, + tokenFee: 0, + initialLiquidity: 2 * addLiquidity, + // 1 dDAI = 2 DAI + dieselRate: 2 * RAY, + // No borrowing on start + borrowBefore: addLiquidity, + sharesInTreasury: (addLiquidity * 1) / 10 / 2, + // PARAMS + borrowAmount: addLiquidity / 2, + profit: 0, + loss: (addLiquidity * 2) / 10, + // EXPECTED VALUES: + // + // Depends on dieselRate + expectedTotalSupply: addLiquidity - (addLiquidity * 1) / 10 / 2, + expectedAvailableLiquidity: 2 * addLiquidity - addLiquidity + addLiquidity / 2 - (addLiquidity * 2) / 10, + expectedLiquidityAfter: 2 * addLiquidity - (addLiquidity * 2) / 10, + expectedTreasury: 0, + uncoveredLoss: (addLiquidity * 1) / 10 + }) + ]; + for (uint256 i; i < cases.length; ++i) { + RepayTestCase memory testCase = cases[i]; + + _setUpTestCase( + testCase.asset, + testCase.tokenFee, + // sets utilisation to 0 + 0, + testCase.initialLiquidity, + testCase.dieselRate, + // sets withdrawFee to 0 + 0, + false + ); + + address treasury = pool.treasury(); + + vm.prank(INITIAL_LP); + pool.transfer(treasury, testCase.sharesInTreasury); + + cmMock.lendCreditAccount(testCase.borrowBefore, creditAccount); + + assertEq(pool.totalBorrowed(), testCase.borrowBefore, "SETUP: incorrect totalBorrowed"); + assertEq(pool.creditManagerBorrowed(address(cmMock)), testCase.borrowBefore, "SETUP: Incorrect CM limit"); + + vm.startPrank(creditAccount); + IERC20(pool.asset()).transfer(address(pool), testCase.borrowAmount + testCase.profit - testCase.loss); + vm.stopPrank(); + + if (testCase.uncoveredLoss > 0) { + vm.expectEmit(true, false, false, true); + emit ReceiveUncoveredLoss(address(cmMock), testCase.uncoveredLoss); + } + + vm.expectEmit(true, true, false, true); + emit Repay(address(cmMock), testCase.borrowAmount, testCase.profit, testCase.loss); + + uint256 dieselRate = pool.convertToAssets(RAY); + + cmMock.repayCreditAccount(testCase.borrowAmount, testCase.profit, testCase.loss); + + if (testCase.uncoveredLoss == 0) { + assertEq(dieselRate, pool.convertToAssets(RAY), "Unexpceted change in borrow rate"); + } + + assertEq( + pool.totalSupply(), testCase.expectedTotalSupply, _testCaseErr(testCase.name, "Incorrect total supply") + ); + + assertEq( + pool.totalBorrowed(), + testCase.borrowBefore - testCase.borrowAmount, + _testCaseErr(testCase.name, "incorrect totalBorrowed") + ); + + assertEq( + pool.creditManagerBorrowed(address(cmMock)), + testCase.borrowBefore - testCase.borrowAmount, + "SETUP: Incorrect CM limit" + ); + + expectBalance( + underlying, + pool.treasury(), + testCase.expectedTreasury, + _testCaseErr(testCase.name, "Incorrect treasury fee") + ); + + assertEq( + pool.expectedLiquidity(), + testCase.expectedLiquidityAfter, + _testCaseErr(testCase.name, "Incorrect expected liquidity") + ); + assertEq( + pool.availableLiquidity(), + testCase.expectedAvailableLiquidity, + _testCaseErr(testCase.name, "Incorrect available liquidity") + ); + } + } + + /// + /// CALC LINEAR CUMULATIVE + /// + + // [P4-15]: calcLinearCumulative_RAY computes correctly + function test_P4_15_calcLinearCumulative_RAY_correct() public { + _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, false); + + uint256 timeWarp = 180 days; + + vm.warp(block.timestamp + timeWarp); + + uint256 borrowRate = pool.borrowRate(); + + uint256 expectedLinearRate = RAY + (borrowRate * timeWarp) / 365 days; + + assertEq(pool.calcLinearCumulative_RAY(), expectedLinearRate, "Index value was not updated correctly"); + } + + // [P4-16]: updateBorrowRate correctly updates parameters + function test_P4_16_updateBorrowRate_correct() public { + uint256 quotaInterestPerYear = addLiquidity / 4; + for (uint256 i; i < 2; ++i) { + bool supportQuotas = i == 1; + string memory testName = supportQuotas ? "Test with supportQuotas=true" : "Test with supportQuotas=false"; + + _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, supportQuotas); + + if (supportQuotas) { + vm.startPrank(CONFIGURATOR); + psts.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 100_00); + + pqk.addCreditManager(address(cmMock)); + + cmMock.addToken(tokenTestSuite.addressOf(Tokens.LINK), 2); + + pqk.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), uint96(WAD * 100_000)); + + cmMock.updateQuota({ + _creditAccount: DUMB_ADDRESS, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(int256(quotaInterestPerYear)) + }); + + psts.gaugeMock().updateEpoch(); + + vm.stopPrank(); + } + + uint256 borrowRate = pool.borrowRate(); + uint256 timeWarp = 365 days; + + vm.warp(block.timestamp + timeWarp); + + uint256 expectedInterest = ((addLiquidity / 2) * borrowRate) / RAY; + uint256 expectedLiquidity = addLiquidity + expectedInterest + (supportQuotas ? quotaInterestPerYear : 0); + + uint256 expectedBorrowRate = psts.linearIRModel().calcBorrowRate(expectedLiquidity, addLiquidity / 2); + + _updateBorrowrate(); + + assertEq( + pool.expectedLiquidity(), + expectedLiquidity, + _testCaseErr(testName, "Expected liquidity was not updated correctly") + ); + + // should not take quota interest + + assertEq( + pool.expectedLiquidityLU(), + addLiquidity + expectedInterest, + _testCaseErr(testName, "ExpectedLU liquidity was not updated correctly") + ); + + assertEq( + uint256(pool.timestampLU()), + block.timestamp, + _testCaseErr(testName, "Timestamp was not updated correctly") + ); + + assertEq( + pool.borrowRate(), expectedBorrowRate, _testCaseErr(testName, "Borrow rate was not updated correctly") + ); + + assertEq( + pool.calcLinearCumulative_RAY(), + pool.cumulativeIndexLU_RAY(), + _testCaseErr(testName, "Index value was not updated correctly") + ); + } + } + + // [P4-17]: updateBorrowRate correctly updates parameters + function test_P4_17_changeQuotaRevenue_and_updateQuotaRevenue_updates_quotaRevenue_correctly() public { + _setUp(Tokens.DAI, true); + address POOL_QUOTA_KEEPER = address(pqk); + + uint96 qu1 = uint96(WAD * 10); + + assertEq(pool.lastQuotaRevenueUpdate(), 0, "SETUP: Incorrect lastQuotaRevenuUpdate"); + + assertEq(pool.quotaRevenue(), 0, "SETUP: Incorrect quotaRevenue"); + assertEq(pool.expectedLiquidityLU(), 0, "SETUP: Incorrect expectedLiquidityLU"); + + vm.prank(POOL_QUOTA_KEEPER); + pool.updateQuotaRevenue(qu1); + + assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#1: Incorrect lastQuotaRevenuUpdate"); + assertEq(pool.quotaRevenue(), qu1, "#1: Incorrect quotaRevenue"); + + assertEq(pool.expectedLiquidityLU(), 0, "#1: Incorrect expectedLiquidityLU"); + + uint256 year = 365 days; + + vm.warp(block.timestamp + year); + + uint96 qu2 = uint96(WAD * 15); + + vm.prank(POOL_QUOTA_KEEPER); + pool.updateQuotaRevenue(qu2); + + assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#2: Incorrect lastQuotaRevenuUpdate"); + assertEq(pool.quotaRevenue(), qu2, "#2: Incorrect quotaRevenue"); + + assertEq(pool.expectedLiquidityLU(), qu1 / PERCENTAGE_FACTOR, "#2: Incorrect expectedLiquidityLU"); + + vm.warp(block.timestamp + year); + + uint96 dqu = uint96(WAD * 5); + + vm.prank(POOL_QUOTA_KEEPER); + pool.changeQuotaRevenue(-int96(dqu)); + + assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#3: Incorrect lastQuotaRevenuUpdate"); + assertEq(pool.quotaRevenue(), qu2 - dqu, "#3: Incorrect quotaRevenue"); + + assertEq(pool.expectedLiquidityLU(), (qu1 + qu2) / PERCENTAGE_FACTOR, "#3: Incorrect expectedLiquidityLU"); + } + + // [P4-18]: connectCreditManager, forbidCreditManagerToBorrow, newInterestRateModel, setExpecetedLiquidityLimit reverts if called with non-configurator + function test_P4_18_admin_functions_revert_on_non_admin() public { + vm.startPrank(USER); + + vm.expectRevert(CallerNotControllerException.selector); + pool.setCreditManagerLimit(DUMB_ADDRESS, 1); + + vm.expectRevert(CallerNotConfiguratorException.selector); + pool.updateInterestRateModel(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + pool.connectPoolQuotaManager(DUMB_ADDRESS); + + vm.expectRevert(CallerNotControllerException.selector); + pool.setExpectedLiquidityLimit(0); + + vm.expectRevert(CallerNotControllerException.selector); + pool.setTotalBorrowedLimit(0); + + vm.expectRevert(CallerNotControllerException.selector); + pool.setWithdrawFee(0); + + vm.stopPrank(); + } + + // [P4-19]: setCreditManagerLimit reverts if not in register + function test_P4_19_connectCreditManager_reverts_if_not_in_register() public { + vm.expectRevert(RegisteredCreditManagerOnlyException.selector); + + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(DUMB_ADDRESS, 1); + } + + // [P4-20]: setCreditManagerLimit reverts if another pool is setup in CreditManagerV3 + function test_P4_20_connectCreditManager_fails_on_incompatible_CM() public { + cmMock.changePoolService(DUMB_ADDRESS); + + vm.expectRevert(IncompatibleCreditManagerException.selector); + + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), 1); + } + + // [P4-21]: setCreditManagerLimit connects manager first time, then update limit only + function test_P4_21_setCreditManagerLimit_connects_manager_first_time_then_update_limit_only() public { + address[] memory cms = pool.creditManagers(); + assertEq(cms.length, 0, "Credit manager is already connected!"); + + vm.expectEmit(true, true, false, false); + emit AddCreditManager(address(cmMock)); + + vm.expectEmit(true, true, false, true); + emit BorrowLimitChanged(address(cmMock), 230); + + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), 230); + + cms = pool.creditManagers(); + assertEq(cms.length, 1, "#1: Credit manager is already connected!"); + assertEq(cms[0], address(cmMock), "#1: Credit manager is not connected!"); + + assertEq(pool.creditManagerLimit(address(cmMock)), 230, "#1: Incorrect CM limit"); + + vm.expectEmit(true, true, false, true); + emit BorrowLimitChanged(address(cmMock), 150); + + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), 150); + + cms = pool.creditManagers(); + assertEq(cms.length, 1, "#2: Credit manager is already connected!"); + assertEq(cms[0], address(cmMock), "#2: Credit manager is not connected!"); + assertEq(pool.creditManagerLimit(address(cmMock)), 150, "#2: Incorrect CM limit"); + + vm.prank(CONFIGURATOR); + pool.setCreditManagerLimit(address(cmMock), type(uint256).max); + + assertEq(pool.creditManagerLimit(address(cmMock)), type(uint256).max, "#3: Incorrect CM limit"); + } + + // [P4-22]: updateInterestRateModel changes interest rate model & emit event + function test_P4_22_updateInterestRateModel_works_correctly_and_emits_event() public { + _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, false); + + uint256 expectedLiquidity = pool.expectedLiquidity(); + uint256 availableLiquidity = pool.availableLiquidity(); + + LinearInterestRateModel newIR = new LinearInterestRateModel( + 8000, + 9000, + 200, + 500, + 4000, + 7500, + false + ); + + vm.expectEmit(true, false, false, false); + emit SetInterestRateModel(address(newIR)); + + vm.prank(CONFIGURATOR); + pool.updateInterestRateModel(address(newIR)); + + assertEq(address(pool.interestRateModel()), address(newIR), "Interest rate model was not set correctly"); + + // Add elUpdate + + vm.prank(CONFIGURATOR); + pool.updateInterestRateModel(address(newIR)); + + assertEq( + newIR.calcBorrowRate(expectedLiquidity, availableLiquidity), pool.borrowRate(), "Borrow rate does not match" + ); + } + + // [P4-23]: connectPoolQuotaManager updates quotaRevenue and emits event + + function test_P4_23_connectPoolQuotaManager_updates_quotaRevenue_and_emits_event() public { + pool = new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: tokenTestSuite.addressOf(Tokens.DAI), + _interestRateModel: address(irm), + _expectedLiquidityLimit: type(uint256).max, + _supportsQuotas: true + }); + + pqk = new PoolQuotaKeeper(address(pool)); + + address POOL_QUOTA_KEEPER = address(pqk); + + vm.expectEmit(true, true, false, false); + emit SetPoolQuotaKeeper(POOL_QUOTA_KEEPER); + + vm.prank(CONFIGURATOR); + pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); + + uint96 qu = uint96(WAD * 10); + + assertEq(pool.poolQuotaKeeper(), POOL_QUOTA_KEEPER, "Incorrect Pool QuotaKeeper"); + + vm.prank(POOL_QUOTA_KEEPER); + pool.updateQuotaRevenue(qu); + + uint256 year = 365 days; + + vm.warp(block.timestamp + year); + + PoolQuotaKeeper pqk2 = new PoolQuotaKeeper(address(pool)); + + address POOL_QUOTA_KEEPER2 = address(pqk2); + + vm.expectEmit(true, true, false, false); + emit SetPoolQuotaKeeper(POOL_QUOTA_KEEPER2); + + vm.prank(CONFIGURATOR); + pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER2); + + assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "Incorrect lastQuotaRevenuUpdate"); + assertEq(pool.quotaRevenue(), qu, "#1: Incorrect quotaRevenue"); + + assertEq(pool.expectedLiquidityLU(), qu / PERCENTAGE_FACTOR, "Incorrect expectedLiquidityLU"); + } + + // [P4-24]: setExpectedLiquidityLimit() sets limit & emits event + function test_P4_24_setExpectedLiquidityLimit_correct_and_emits_event() public { + vm.expectEmit(false, false, false, true); + emit SetExpectedLiquidityLimit(10005); + + vm.prank(CONFIGURATOR); + pool.setExpectedLiquidityLimit(10005); + + assertEq(pool.expectedLiquidityLimit(), 10005, "expectedLiquidityLimit not set correctly"); + } + + // [P4-25]: setTotalBorrowedLimit sets limit & emits event + function test_P4_25_setTotalBorrowedLimit_correct_and_emits_event() public { + vm.expectEmit(false, false, false, true); + emit SetTotalBorrowedLimit(10005); + + vm.prank(CONFIGURATOR); + pool.setTotalBorrowedLimit(10005); + + assertEq(pool.totalBorrowedLimit(), 10005, "totalBorrowedLimit not set correctly"); + } + + // [P4-26]: setWithdrawFee works correctly + function test_P4_26_setWithdrawFee_works_correctly() public { + vm.expectRevert(IncorrectParameterException.selector); + + vm.prank(CONFIGURATOR); + pool.setWithdrawFee(101); + + vm.expectEmit(false, false, false, true); + emit SetWithdrawFee(50); + + vm.prank(CONFIGURATOR); + pool.setWithdrawFee(50); + + assertEq(pool.withdrawFee(), 50, "withdrawFee not set correctly"); + } + + struct CreditManagerBorrowTestCase { + string name; + /// SETUP + uint16 u2; + bool isBorrowingMoreU2Forbidden; + uint256 borrowBefore1; + uint256 borrowBefore2; + /// PARAMS + uint256 totalBorrowLimit; + uint256 cmBorrowLimit; + /// EXPECTED VALUES + uint256 expectedCanBorrow; + } + + // [P4-27]: creditManagerCanBorrow computes availabel borrow correctly + function test_P4_27_creditManagerCanBorrow_computes_available_borrow_amount_correctly() public { + uint256 initialLiquidity = 10 * addLiquidity; + CreditManagerBorrowTestCase[5] memory cases = [ + CreditManagerBorrowTestCase({ + name: "Non-limit linear model, totalBorrowed > totalLimit", + // POOL SETUP + u2: 9000, + isBorrowingMoreU2Forbidden: false, + borrowBefore1: addLiquidity, + borrowBefore2: addLiquidity, + totalBorrowLimit: addLiquidity, + cmBorrowLimit: 5 * addLiquidity, + /// EXPECTED VALUES + expectedCanBorrow: 0 + }), + CreditManagerBorrowTestCase({ + name: "Non-limit linear model, cmBorrowLimit < totalLimit", + // POOL SETUP + u2: 9000, + isBorrowingMoreU2Forbidden: false, + borrowBefore1: addLiquidity, + borrowBefore2: addLiquidity, + totalBorrowLimit: 10 * addLiquidity, + cmBorrowLimit: 5 * addLiquidity, + /// EXPECTED VALUES + expectedCanBorrow: 4 * addLiquidity + }), + CreditManagerBorrowTestCase({ + name: "Non-limit linear model, cmBorrowLimit > totalLimit", + // POOL SETUP + u2: 9000, + isBorrowingMoreU2Forbidden: false, + borrowBefore1: addLiquidity, + borrowBefore2: addLiquidity, + totalBorrowLimit: 4 * addLiquidity, + cmBorrowLimit: 5 * addLiquidity, + /// EXPECTED VALUES + expectedCanBorrow: 2 * addLiquidity + }), + CreditManagerBorrowTestCase({ + name: "Limit linear model", + // POOL SETUP + u2: 6000, + isBorrowingMoreU2Forbidden: true, + borrowBefore1: 4 * addLiquidity, + borrowBefore2: addLiquidity, + totalBorrowLimit: 8 * addLiquidity, + cmBorrowLimit: 5 * addLiquidity, + /// EXPECTED VALUES + expectedCanBorrow: addLiquidity + }), + CreditManagerBorrowTestCase({ + name: "Non-limit linear model, cmBorrowed < cmBorrowLimit", + // POOL SETUP + u2: 9000, + isBorrowingMoreU2Forbidden: false, + borrowBefore1: addLiquidity, + borrowBefore2: 5 * addLiquidity, + totalBorrowLimit: 10 * addLiquidity, + cmBorrowLimit: addLiquidity, + /// EXPECTED VALUES + expectedCanBorrow: 0 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + CreditManagerBorrowTestCase memory testCase = cases[i]; + + _setUp(Tokens.DAI, false); + + _initPoolLiquidity(initialLiquidity, RAY); + + LinearInterestRateModel newIR = new LinearInterestRateModel( + 5000, + testCase.u2, + 200, + 500, + 4000, + 7500, + testCase.isBorrowingMoreU2Forbidden + ); + + CreditManagerMockForPoolTest cmMock2 = new CreditManagerMockForPoolTest( + address(pool) + ); + + vm.startPrank(CONFIGURATOR); + psts.cr().addCreditManager(address(cmMock2)); + + pool.updateInterestRateModel(address(newIR)); + pool.setTotalBorrowedLimit(type(uint256).max); + pool.setCreditManagerLimit(address(cmMock), type(uint128).max); + pool.setCreditManagerLimit(address(cmMock2), type(uint128).max); + + cmMock.lendCreditAccount(testCase.borrowBefore1, DUMB_ADDRESS); + cmMock2.lendCreditAccount(testCase.borrowBefore2, DUMB_ADDRESS); + + pool.setTotalBorrowedLimit(testCase.totalBorrowLimit); + + pool.setCreditManagerLimit(address(cmMock2), testCase.cmBorrowLimit); + + vm.stopPrank(); + + assertEq( + pool.creditManagerCanBorrow(address(cmMock2)), + testCase.expectedCanBorrow, + _testCaseErr(testCase.name, "Incorrect creditManagerCanBorrow return value") + ); + } + } + + struct SupplyRateTestCase { + string name; + /// SETUP + uint256 initialLiquidity; + uint16 utilisation; + uint16 withdrawFee; + // supportQuotas is true of quotaRevenue >0 + uint128 quotaRevenue; + uint256 expectedSupplyRate; + } + + // [P4-28]: supplyRate computes rates correctly + function test_P4_28_supplyRate_computes_rates_correctly() public { + SupplyRateTestCase[5] memory cases = [ + SupplyRateTestCase({ + name: "normal pool with zero debt and zero supply", + /// SETUP + initialLiquidity: 0, + utilisation: 0, + withdrawFee: 0, + quotaRevenue: 0, + expectedSupplyRate: irm.calcBorrowRate(0, 0, false) + }), + SupplyRateTestCase({ + name: "normal pool with zero debt and non-zero supply", + /// SETUP + initialLiquidity: addLiquidity, + utilisation: 0, + withdrawFee: 0, + quotaRevenue: 0, + expectedSupplyRate: 0 + }), + SupplyRateTestCase({ + name: "normal pool with 50% utilisation debt", + /// SETUP + initialLiquidity: addLiquidity, + utilisation: 50_00, + withdrawFee: 0, + quotaRevenue: 0, + // borrow rate will be distributed to all LPs (dieselRate =1), so supply is a half + expectedSupplyRate: irm.calcBorrowRate(200, 100, false) / 2 + }), + SupplyRateTestCase({ + name: "normal pool with 50% utilisation debt and withdrawFee", + /// SETUP + initialLiquidity: addLiquidity, + utilisation: 50_00, + withdrawFee: 50, + quotaRevenue: 0, + // borrow rate will be distributed to all LPs (dieselRate =1), so supply is a half and -1% for withdrawFee + expectedSupplyRate: ((irm.calcBorrowRate(200, 100, false) / 2) * 995) / 1000 + }), + SupplyRateTestCase({ + name: "normal pool with 50% utilisation debt, withdrawFee and quotas", + /// SETUP + initialLiquidity: addLiquidity, + utilisation: 50_00, + withdrawFee: 1_00, + quotaRevenue: uint128(addLiquidity) * 45_50, + // borrow rate will be distributed to all LPs (dieselRate =1), so supply is a half and -1% for withdrawFee + expectedSupplyRate: (((irm.calcBorrowRate(200, 100, false) / 2 + (45_50 * RAY) / PERCENTAGE_FACTOR)) * 99) / 100 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + SupplyRateTestCase memory testCase = cases[i]; + + bool supportQuotas = testCase.quotaRevenue > 0; + _setUpTestCase( + Tokens.DAI, 0, testCase.utilisation, testCase.initialLiquidity, RAY, testCase.withdrawFee, supportQuotas + ); + + if (supportQuotas) { + address POOL_QUOTA_KEEPER = address(pqk); + + vm.prank(CONFIGURATOR); + pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); + + vm.prank(CONFIGURATOR); + pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); + + vm.prank(POOL_QUOTA_KEEPER); + pool.updateQuotaRevenue(testCase.quotaRevenue); + } + + assertEq( + pool.supplyRate(), testCase.expectedSupplyRate, _testCaseErr(testCase.name, "Incorrect supply rate") + ); + + if (pool.totalSupply() > 0) { + uint256 depositAmount = addLiquidity / 10; + uint256 sharesGot = pool.previewDeposit(depositAmount); + + vm.warp(block.timestamp + 365 days); + + uint256 depositInAYear = pool.previewRedeem(sharesGot); + + assertEq( + pool.supplyRate(), testCase.expectedSupplyRate, _testCaseErr(testCase.name, "Incorrect supply rate") + ); + + uint256 expectedDepositInAYear = (depositAmount * (PERCENTAGE_FACTOR - testCase.withdrawFee)) + / PERCENTAGE_FACTOR + (depositAmount * testCase.expectedSupplyRate) / RAY; + + assertEq( + depositInAYear, expectedDepositInAYear, _testCaseErr(testCase.name, "Incorrect deposit growth") + ); + } + } + } + + // 10000000000000000 + // // [P4-23]: fromDiesel / toDiesel works correctly + // function test_PX_23_diesel_conversion_is_correct() public { + // _connectAndSetLimit(); + + // vm.prank(USER); + // pool.deposit(addLiquidity, USER); + + // address ca = cmMock.getCreditAccountOrRevert(DUMB_ADDRESS); + + // cmMock.lendCreditAccount(addLiquidity / 2, ca); + + // uint256 timeWarp = 365 days; + + // vm.warp(block.timestamp + timeWarp); + + // uint256 dieselRate = pool.getDieselRate_RAY(); + + // assertEq( + // pool.convertToShares(addLiquidity), (addLiquidity * RAY) / dieselRate, "ToDiesel does not compute correctly" + // ); + + // assertEq( + // pool.convertToAssets(addLiquidity), (addLiquidity * dieselRate) / RAY, "ToDiesel does not compute correctly" + // ); + // } + + // // [P4-28]: expectedLiquidity() computes correctly + // function test_PX_28_expectedLiquidity_correct() public { + // _connectAndSetLimit(); + + // vm.prank(USER); + // pool.deposit(addLiquidity, USER); + + // address ca = cmMock.getCreditAccountOrRevert(DUMB_ADDRESS); + + // cmMock.lendCreditAccount(addLiquidity / 2, ca); + + // uint256 borrowRate = pool.borrowRate(); + // uint256 timeWarp = 365 days; + + // vm.warp(block.timestamp + timeWarp); + + // uint256 expectedInterest = ((addLiquidity / 2) * borrowRate) / RAY; + // uint256 expectedLiquidity = pool.expectedLiquidityLU() + expectedInterest; + + // assertEq(pool.expectedLiquidity(), expectedLiquidity, "Index value was not updated correctly"); + // } + + // // [P4-35]: updateInterestRateModel reverts on zero address + // function test_PX_35_updateInterestRateModel_reverts_on_zero_address() public { + // vm.expectRevert(ZeroAddressException.selector); + // vm.prank(CONFIGURATOR); + // pool.updateInterestRateModel(address(0)); + // } +} diff --git a/contracts/test/interfaces/ICreditConfig.sol b/contracts/test/interfaces/ICreditConfig.sol index 22717ccd..fef485f9 100644 --- a/contracts/test/interfaces/ICreditConfig.sol +++ b/contracts/test/interfaces/ICreditConfig.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.10; import {ITokenTestSuite} from "./ITokenTestSuite.sol"; import {PriceFeedConfig} from "@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol"; -import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfigurator.sol"; +import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfiguratorV3.sol"; interface ICreditConfig { function getCreditOpts() external returns (CreditManagerOpts memory); diff --git a/contracts/interfaces/IERC4626.sol b/contracts/test/interfaces/IERC4626.sol similarity index 93% rename from contracts/interfaces/IERC4626.sol rename to contracts/test/interfaces/IERC4626.sol index 45b17f80..7f4ae535 100644 --- a/contracts/interfaces/IERC4626.sol +++ b/contracts/test/interfaces/IERC4626.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // Gearbox Protocol. Generalized leverage for DeFi protocols // (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; +pragma solidity ^0.8.17; interface IERC4626Events { event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); diff --git a/contracts/test/lib/ParseLib.sol b/contracts/test/lib/ParseLib.sol deleted file mode 100644 index f55dd8b2..00000000 --- a/contracts/test/lib/ParseLib.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; -import {StringUtils} from "./StringUtils.sol"; -import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; - -/// @notice Designed for test purposes only -library ParseLib { - using Strings for uint256; - using StringUtils for string; - - function add(string memory init, string memory name, address addr) internal pure returns (string memory) { - return init.concat(name, uint256(uint160(addr)).toHexString(20)); - } - - function add(string memory init, string memory name, uint256 value) internal pure returns (string memory) { - return init.concat(name, value.toString()); - } - - function add_amount_decimals(string memory init, string memory name, uint256 value, uint8 decimals) - internal - pure - returns (string memory) - { - return init.concat(name, toFixString(value, decimals)); - } - - function add_amount_token(string memory init, string memory name, uint256 value, address token) - internal - view - returns (string memory) - { - return add_amount_decimals(init, name, value, IERC20Metadata(token).decimals()); - } - - function add_token(string memory init, string memory name, address addr) internal view returns (string memory) { - return init.concat(name, IERC20Metadata(addr).symbol()); - } - - function toFixString(uint256 value, uint8 decimals) internal pure returns (string memory) { - uint8 divider = (decimals > 4) ? 4 : decimals; - uint256 biggerPart = value / (10 ** (decimals)); - uint256 smallerPart = value * (10 ** divider) - biggerPart * (10 ** (decimals + divider)); - return biggerPart.toString().concat(".", smallerPart.toString()); - } -} diff --git a/contracts/test/lib/StringUtils.sol b/contracts/test/lib/StringUtils.sol deleted file mode 100644 index ffd6bfca..00000000 --- a/contracts/test/lib/StringUtils.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -/// @notice Designed for test purposes only -library StringUtils { - function memcmp(bytes memory a, bytes memory b) internal pure returns (bool) { - return (a.length == b.length) && (keccak256(a) == keccak256(b)); - } - - function eq(string memory a, string memory b) internal pure returns (bool) { - return memcmp(bytes(a), bytes(b)); - } - - function concat(string memory s1, string memory s2) internal pure returns (string memory res) { - res = string(abi.encodePacked(bytes(s1), bytes(s2))); - } - - function concat(string memory s1, string memory s2, string memory s3) internal pure returns (string memory res) { - res = string(abi.encodePacked(bytes(s1), bytes(s2), bytes(s3))); - } -} diff --git a/contracts/test/lib/cheatCodes.sol b/contracts/test/lib/cheatCodes.sol deleted file mode 100644 index 4793dc01..00000000 --- a/contracts/test/lib/cheatCodes.sol +++ /dev/null @@ -1,299 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.10; - -address constant HEVM_ADDRESS = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - -interface CheatCodes { - // This allows us to getRecordedLogs() - struct Log { - bytes32[] topics; - bytes data; - } - - // Set block.timestamp (newTimestamp) - - function warp(uint256) external; - - // Set block.difficulty (newDifficulty) - function difficulty(uint256) external; - - // Set block.height (newHeight) - function roll(uint256) external; - - // Set block.basefee (newBasefee) - function fee(uint256) external; - - // Set block.coinbase (who) - function coinbase(address) external; - - // Loads a storage slot from an address (who, slot) - function load(address, bytes32) external returns (bytes32); - - // Stores a value to an address' storage slot, (who, slot, value) - function store(address, bytes32, bytes32) external; - - // Signs data, (privateKey, digest) => (v, r, s) - function sign(uint256, bytes32) external returns (uint8, bytes32, bytes32); - - // Gets address for a given private key, (privateKey) => (address) - function addr(uint256) external returns (address); - - // Derive a private key from a provided mnemonic string (or mnemonic file path) at the derivation path m/44'/60'/0'/0/{index} - function deriveKey(string calldata, uint32) external returns (uint256); - - // Derive a private key from a provided mnemonic string (or mnemonic file path) at the derivation path {path}{index} - function deriveKey(string calldata, string calldata, uint32) external returns (uint256); - - // Performs a foreign function call via terminal, (stringInputs) => (result) - function ffi(string[] calldata) external returns (bytes memory); - - // Set environment variables, (name, value) - function setEnv(string calldata, string calldata) external; - - // Read environment variables, (name) => (value) - function envBool(string calldata) external returns (bool); - - function envUint(string calldata) external returns (uint256); - - function envInt(string calldata) external returns (int256); - - function envAddress(string calldata) external returns (address); - - function envBytes32(string calldata) external returns (bytes32); - - function envString(string calldata) external returns (string memory); - - function envBytes(string calldata) external returns (bytes memory); - - // Read environment variables as arrays, (name, delim) => (value[]) - function envBool(string calldata, string calldata) external returns (bool[] memory); - - function envUint(string calldata, string calldata) external returns (uint256[] memory); - - function envInt(string calldata, string calldata) external returns (int256[] memory); - - function envAddress(string calldata, string calldata) external returns (address[] memory); - - function envBytes32(string calldata, string calldata) external returns (bytes32[] memory); - - function envString(string calldata, string calldata) external returns (string[] memory); - - function envBytes(string calldata, string calldata) external returns (bytes[] memory); - - // Sets the *next* call's msg.sender to be the input address - function prank(address) external; - - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called - function startPrank(address) external; - - // Sets the *next* call's msg.sender to be the input address, and the tx.origin to be the second input - function prank(address, address) external; - - // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called, and the tx.origin to be the second input - function startPrank(address, address) external; - - // Resets subsequent calls' msg.sender to be `address(this)` - function stopPrank() external; - - // Sets an address' balance, (who, newBalance) - function deal(address, uint256) external; - - // Sets an address' code, (who, newCode) - function etch(address, bytes calldata) external; - - // Expects an error on next call - function expectRevert() external; - - function expectRevert(bytes calldata) external; - - function expectRevert(bytes4) external; - - // Record all storage reads and writes - function record() external; - - // Gets all accessed reads and write slot from a recording session, for a given address - function accesses(address) external returns (bytes32[] memory reads, bytes32[] memory writes); - - // Record all the transaction logs - function recordLogs() external; - - // Gets all the recorded logs - function getRecordedLogs() external returns (Log[] memory); - - // Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData). - // Call this function, then emit an event, then call a function. Internally after the call, we check if - // logs were emitted in the expected order with the expected topics and data (as specified by the booleans). - // Second form also checks supplied address against emitting contract. - function expectEmit(bool, bool, bool, bool) external; - - function expectEmit(bool, bool, bool, bool, address) external; - - // Mocks a call to an address, returning specified data. - // Calldata can either be strict or a partial match, e.g. if you only - // pass a Solidity selector to the expected calldata, then the entire Solidity - // function will be mocked. - function mockCall(address, bytes calldata, bytes calldata) external; - - // Mocks a call to an address with a specific msg.value, returning specified data. - // Calldata match takes precedence over msg.value in case of ambiguity. - function mockCall(address, uint256, bytes calldata, bytes calldata) external; - - // Clears all mocked calls - function clearMockedCalls() external; - - // Expect a call to an address with the specified calldata. - // Calldata can either be strict or a partial match - function expectCall(address, bytes calldata) external; - - // Expect a call to an address with the specified msg.value and calldata - function expectCall(address, uint256, bytes calldata) external; - - // Gets the code from an artifact file. Takes in the relative path to the json file - function getCode(string calldata) external returns (bytes memory); - - // Labels an address in call traces - function label(address, string calldata) external; - - // If the condition is false, discard this run's fuzz inputs and generate new ones - function assume(bool) external; - - // Set nonce for an account - function setNonce(address, uint64) external; - - // Get nonce for an account - function getNonce(address) external returns (uint64); - - // Set block.chainid (newChainId) - function chainId(uint256) external; - - // Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain - function broadcast() external; - - // Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain - function broadcast(address) external; - - // Using the address that calls the test contract, has the all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain - function startBroadcast() external; - - // Has the all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain - function startBroadcast(address) external; - - // Stops collecting onchain transactions - function stopBroadcast() external; - - // Reads the entire content of file to string. Path is relative to the project root. (path) => (data) - function readFile(string calldata) external returns (string memory); - - // Get the path of the current project root - function projectRoot() external returns (string memory); - - // Reads next line of file to string, (path) => (line) - function readLine(string calldata) external returns (string memory); - - // Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. - // Path is relative to the project root. (path, data) => () - function writeFile(string calldata, string calldata) external; - - // Writes line to file, creating a file if it does not exist. - // Path is relative to the project root. (path, data) => () - function writeLine(string calldata, string calldata) external; - - // Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. - // Path is relative to the project root. (path) => () - function closeFile(string calldata) external; - - // Removes file. This cheatcode will revert in the following situations, but is not limited to just these cases: - // - Path points to a directory. - // - The file doesn't exist. - // - The user lacks permissions to remove the file. - // Path is relative to the project root. (path) => () - function removeFile(string calldata) external; - - function toString(address) external returns (string memory); - - function toString(bytes calldata) external returns (string memory); - - function toString(bytes32) external returns (string memory); - - function toString(bool) external returns (string memory); - - function toString(uint256) external returns (string memory); - - function toString(int256) external returns (string memory); - - function parseBytes(string memory) external returns (bytes memory); - - function parseAddress(string memory) external returns (address); - - function parseUint(string memory) external returns (uint256); - - function parseInt(string memory) external returns (int256); - - function parseBytes32(string memory) external returns (bytes32); - - function parseBool(string memory) external returns (bool); - - // Snapshot the current state of the evm. - // Returns the id of the snapshot that was created. - // To revert a snapshot use `revertTo` - function snapshot() external returns (uint256); - - // Revert the state of the evm to a previous snapshot - // Takes the snapshot id to revert to. - // This deletes the snapshot and all snapshots taken after the given snapshot id. - function revertTo(uint256) external returns (bool); - - // Creates a new fork with the given endpoint and block and returns the identifier of the fork - function createFork(string calldata, uint256) external returns (uint256); - - // Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork - function createFork(string calldata) external returns (uint256); - - // Creates _and_ also selects a new fork with the given endpoint and block and returns the identifier of the fork - function createSelectFork(string calldata, uint256) external returns (uint256); - - // Creates _and_ also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork - function createSelectFork(string calldata) external returns (uint256); - - // Takes a fork identifier created by `createFork` and sets the corresponding forked state as active. - function selectFork(uint256) external; - - // Returns the currently active fork - // Reverts if no fork is currently active - function activeFork() external returns (uint256); - - // Marks that the account(s) should use persistent storage across fork swaps. - // Meaning, changes made to the state of this account will be kept when switching forks - function makePersistent(address) external; - - function makePersistent(address, address) external; - - function makePersistent(address, address, address) external; - - function makePersistent(address[] calldata) external; - - // Revokes persistent status from the address, previously added via `makePersistent` - function revokePersistent(address) external; - - function revokePersistent(address[] calldata) external; - - // Returns true if the account is marked as persistent - function isPersistent(address) external returns (bool); - - // Updates the currently active fork to given block number - // This is similar to `roll` but for the currently active fork - function rollFork(uint256) external; - - // Updates the given fork to given block number - function rollFork(uint256 forkId, uint256 blockNumber) external; - - /// Returns the RPC url for the given alias - function rpcUrl(string calldata) external returns (string memory); - - /// Returns all rpc urls and their aliases `[alias, url][]` - function rpcUrls() external returns (string[2][] memory); - - function parseJson(string calldata, string calldata) external returns (bytes memory); - - function parseJson(string calldata) external returns (bytes memory); -} diff --git a/contracts/test/lib/constants.sol b/contracts/test/lib/constants.sol index 470a22e4..448d2e37 100644 --- a/contracts/test/lib/constants.sol +++ b/contracts/test/lib/constants.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.10; +pragma solidity ^0.8.17; import { WAD, @@ -7,8 +7,7 @@ import { DEFAULT_FEE_LIQUIDATION, DEFAULT_LIQUIDATION_PREMIUM } from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; -import "../lib/test.sol"; -import {CheatCodes, HEVM_ADDRESS} from "../lib/cheatCodes.sol"; +import {Test} from "forge-std/Test.sol"; uint16 constant DEFAULT_UNDERLYING_LT = 10000 - DEFAULT_FEE_LIQUIDATION - DEFAULT_LIQUIDATION_PREMIUM; @@ -28,13 +27,9 @@ address constant FRIEND2 = 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65; address constant ADAPTER = 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc; -address constant UNIVERSAL_CONTRACT_ADDRESS = 0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC; - string constant PAUSABLE_ERROR = "Pausable: paused"; string constant OWNABLE_ERROR = "Ownable: caller is not the owner"; -uint256 constant UNDERLYING_TOKEN_MASK = 1; - uint128 constant DAI_MIN_BORROWED_AMOUNT = uint128(1000 * WAD); uint128 constant DAI_MAX_BORROWED_AMOUNT = uint128(10000 * WAD); @@ -58,16 +53,13 @@ uint256 constant WETH_EXCHANGE_AMOUNT = 3 * WAD; uint256 constant STETH_ACCOUNT_AMOUNT = 150 * WAD; uint256 constant wstETH_ACCOUNT_AMOUNT = 50 * WAD; -contract Roles is DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract Roles is Test { constructor() { - evm.label(USER, "USER"); - evm.label(FRIEND, "FRIEND"); - evm.label(LIQUIDATOR, "LIQUIDATOR"); - evm.label(INITIAL_LP, "INITIAL_LP"); - - evm.label(DUMB_ADDRESS, "DUMB_ADDRESS"); - evm.label(ADAPTER, "ADAPTER"); + vm.label(USER, "USER"); + vm.label(FRIEND, "FRIEND"); + vm.label(LIQUIDATOR, "LIQUIDATOR"); + vm.label(INITIAL_LP, "INITIAL_LP"); + vm.label(DUMB_ADDRESS, "DUMB_ADDRESS"); + vm.label(ADAPTER, "ADAPTER"); } } diff --git a/contracts/test/lib/helper.sol b/contracts/test/lib/helper.sol new file mode 100644 index 00000000..94bc0f22 --- /dev/null +++ b/contracts/test/lib/helper.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import "./constants.sol"; +import {Test} from "forge-std/Test.sol"; + +contract TestHelper is Test { + constructor() { + vm.label(USER, "USER"); + vm.label(FRIEND, "FRIEND"); + vm.label(LIQUIDATOR, "LIQUIDATOR"); + vm.label(INITIAL_LP, "INITIAL_LP"); + vm.label(DUMB_ADDRESS, "DUMB_ADDRESS"); + vm.label(ADAPTER, "ADAPTER"); + } + + function _testCaseErr(string memory caseName, string memory err) internal pure returns (string memory) { + return string.concat("\nCase: ", caseName, "\nError: ", err); + } +} diff --git a/contracts/test/lib/stdStorage.sol b/contracts/test/lib/stdStorage.sol deleted file mode 100644 index fbf09f35..00000000 --- a/contracts/test/lib/stdStorage.sol +++ /dev/null @@ -1,252 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.6.0 <0.9.0; - -pragma experimental ABIEncoderV2; - -import {CheatCodes, HEVM_ADDRESS} from "./cheatCodes.sol"; - -/*////////////////////////////////////////////////////////////////////////// - STD-STORAGE -//////////////////////////////////////////////////////////////////////////*/ - -struct StdStorage { - mapping(address => mapping(bytes4 => mapping(bytes32 => uint256))) slots; - mapping(address => mapping(bytes4 => mapping(bytes32 => bool))) finds; - bytes32[] _keys; - bytes4 _sig; - uint256 _depth; - address _target; - bytes32 _set; -} - -library stdStorage { - event SlotFound(address who, bytes4 fsig, bytes32 keysHash, uint256 slot); - event WARNING_UninitedSlot(address who, uint256 slot); - - uint256 private constant UINT256_MAX = - 115792089237316195423570985008687907853269984665640564039457584007913129639935; - int256 private constant INT256_MAX = 57896044618658097711785492504343953926634992332820282019728792003956564819967; - - CheatCodes private constant vm_std_store = CheatCodes(HEVM_ADDRESS); - - function sigs(string memory sigStr) internal pure returns (bytes4) { - return bytes4(keccak256(bytes(sigStr))); - } - - /// @notice find an arbitrary storage slot given a function sig, input data, address of the contract and a value to check against - // slot complexity: - // if flat, will be bytes32(uint256(uint)); - // if map, will be keccak256(abi.encode(key, uint(slot))); - // if deep map, will be keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot))))); - // if map struct, will be bytes32(uint256(keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot)))))) + structFieldDepth); - function find(StdStorage storage self) internal returns (uint256) { - address who = self._target; - bytes4 fsig = self._sig; - uint256 field_depth = self._depth; - bytes32[] memory ins = self._keys; - - // calldata to test against - if (self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { - return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; - } - bytes memory cald = abi.encodePacked(fsig, flatten(ins)); - vm_std_store.record(); - bytes32 fdat; - { - (, bytes memory rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - - (bytes32[] memory reads,) = vm_std_store.accesses(address(who)); - if (reads.length == 1) { - bytes32 curr = vm_std_store.load(who, reads[0]); - if (curr == bytes32(0)) { - emit WARNING_UninitedSlot(who, uint256(reads[0])); - } - if (fdat != curr) { - require( - false, - "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." - ); - } - emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[0])); - self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[0]); - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; - } else if (reads.length > 1) { - for (uint256 i = 0; i < reads.length; i++) { - bytes32 prev = vm_std_store.load(who, reads[i]); - if (prev == bytes32(0)) { - emit WARNING_UninitedSlot(who, uint256(reads[i])); - } - // store - vm_std_store.store(who, reads[i], bytes32(hex"1337")); - bool success; - bytes memory rdat; - { - (success, rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - - if (success && fdat == bytes32(hex"1337")) { - // we found which of the slots is the actual one - emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[i])); - self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[i]); - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; - vm_std_store.store(who, reads[i], prev); - break; - } - vm_std_store.store(who, reads[i], prev); - } - } else { - require(false, "stdStorage find(StdStorage): No storage use detected for target."); - } - - require( - self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))], - "stdStorage find(StdStorage): Slot(s) not found." - ); - - delete self._target; - delete self._sig; - delete self._keys; - delete self._depth; - - return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; - } - - function target(StdStorage storage self, address _target) internal returns (StdStorage storage) { - self._target = _target; - return self; - } - - function sig(StdStorage storage self, bytes4 _sig) internal returns (StdStorage storage) { - self._sig = _sig; - return self; - } - - function sig(StdStorage storage self, string memory _sig) internal returns (StdStorage storage) { - self._sig = sigs(_sig); - return self; - } - - function with_key(StdStorage storage self, address who) internal returns (StdStorage storage) { - self._keys.push(bytes32(uint256(uint160(who)))); - return self; - } - - function with_key(StdStorage storage self, uint256 amt) internal returns (StdStorage storage) { - self._keys.push(bytes32(amt)); - return self; - } - - function with_key(StdStorage storage self, bytes32 key) internal returns (StdStorage storage) { - self._keys.push(key); - return self; - } - - function depth(StdStorage storage self, uint256 _depth) internal returns (StdStorage storage) { - self._depth = _depth; - return self; - } - - function checked_write(StdStorage storage self, address who) internal { - checked_write(self, bytes32(uint256(uint160(who)))); - } - - function checked_write(StdStorage storage self, uint256 amt) internal { - checked_write(self, bytes32(amt)); - } - - function checked_write(StdStorage storage self, bool write) internal { - bytes32 t; - /// @solidity memory-safe-assembly - assembly { - t := write - } - checked_write(self, t); - } - - function checked_write(StdStorage storage self, bytes32 set) internal { - address who = self._target; - bytes4 fsig = self._sig; - uint256 field_depth = self._depth; - bytes32[] memory ins = self._keys; - - bytes memory cald = abi.encodePacked(fsig, flatten(ins)); - if (!self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { - find(self); - } - bytes32 slot = bytes32(self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]); - - bytes32 fdat; - { - (, bytes memory rdat) = who.staticcall(cald); - fdat = bytesToBytes32(rdat, 32 * field_depth); - } - bytes32 curr = vm_std_store.load(who, slot); - - if (fdat != curr) { - require( - false, - "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." - ); - } - vm_std_store.store(who, slot, set); - delete self._target; - delete self._sig; - delete self._keys; - delete self._depth; - } - - function read(StdStorage storage self) private returns (bytes memory) { - address t = self._target; - uint256 s = find(self); - return abi.encode(vm_std_store.load(t, bytes32(s))); - } - - function read_bytes32(StdStorage storage self) internal returns (bytes32) { - return abi.decode(read(self), (bytes32)); - } - - function read_bool(StdStorage storage self) internal returns (bool) { - int256 v = read_int(self); - if (v == 0) return false; - if (v == 1) return true; - revert("stdStorage read_bool(StdStorage): Cannot decode. Make sure you are reading a bool."); - } - - function read_address(StdStorage storage self) internal returns (address) { - return abi.decode(read(self), (address)); - } - - function read_uint(StdStorage storage self) internal returns (uint256) { - return abi.decode(read(self), (uint256)); - } - - function read_int(StdStorage storage self) internal returns (int256) { - return abi.decode(read(self), (int256)); - } - - function bytesToBytes32(bytes memory b, uint256 offset) public pure returns (bytes32) { - bytes32 out; - - uint256 max = b.length > 32 ? 32 : b.length; - for (uint256 i = 0; i < max; i++) { - out |= bytes32(b[offset + i] & 0xFF) >> (i * 8); - } - return out; - } - - function flatten(bytes32[] memory b) private pure returns (bytes memory) { - bytes memory result = new bytes(b.length * 32); - for (uint256 i = 0; i < b.length; i++) { - bytes32 k = b[i]; - /// @solidity memory-safe-assembly - assembly { - mstore(add(result, add(32, mul(32, i))), k) - } - } - - return result; - } -} diff --git a/contracts/test/lib/test.sol b/contracts/test/lib/test.sol deleted file mode 100644 index 6c2498f1..00000000 --- a/contracts/test/lib/test.sol +++ /dev/null @@ -1,555 +0,0 @@ -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.5.0; - -import {StdStorage, stdStorage} from "./stdStorage.sol"; - -/*////////////////////////////////////////////////////////////////////////// - STD-ERRORS -//////////////////////////////////////////////////////////////////////////*/ - -library stdError { - bytes public constant assertionError = abi.encodeWithSignature("Panic(uint256)", 0x01); - bytes public constant arithmeticError = abi.encodeWithSignature("Panic(uint256)", 0x11); - bytes public constant divisionError = abi.encodeWithSignature("Panic(uint256)", 0x12); - bytes public constant enumConversionError = abi.encodeWithSignature("Panic(uint256)", 0x21); - bytes public constant encodeStorageError = abi.encodeWithSignature("Panic(uint256)", 0x22); - bytes public constant popError = abi.encodeWithSignature("Panic(uint256)", 0x31); - bytes public constant indexOOBError = abi.encodeWithSignature("Panic(uint256)", 0x32); - bytes public constant memOverflowError = abi.encodeWithSignature("Panic(uint256)", 0x41); - bytes public constant zeroVarError = abi.encodeWithSignature("Panic(uint256)", 0x51); -} - -contract DSTest { - using stdStorage for StdStorage; - - event log(string); - event logs(bytes); - - event log_address(address); - event log_bytes32(bytes32); - event log_int(int256); - event log_uint(uint256); - event log_bytes(bytes); - event log_string(string); - - event log_named_address(string key, address val); - event log_named_bytes32(string key, bytes32 val); - event log_named_decimal_int(string key, int256 val, uint256 decimals); - event log_named_decimal_uint(string key, uint256 val, uint256 decimals); - event log_named_int(string key, int256 val); - event log_named_uint(string key, uint256 val); - event log_named_bytes(string key, bytes val); - event log_named_string(string key, string val); - - bool public IS_TEST = true; - bool private _failed; - - address constant HEVM_ADDRESS = address(bytes20(uint160(uint256(keccak256("hevm cheat code"))))); - - StdStorage internal stdstore; - - modifier mayRevert() { - _; - } - - modifier testopts(string memory) { - _; - } - - function failed() public returns (bool) { - if (_failed) { - return _failed; - } else { - bool globalFailed = false; - if (hasHEVMContext()) { - (, bytes memory retdata) = HEVM_ADDRESS.call( - abi.encodePacked( - bytes4(keccak256("load(address,bytes32)")), abi.encode(HEVM_ADDRESS, bytes32("failed")) - ) - ); - globalFailed = abi.decode(retdata, (bool)); - } - return globalFailed; - } - } - - function fail() internal { - if (hasHEVMContext()) { - (bool status,) = HEVM_ADDRESS.call( - abi.encodePacked( - bytes4(keccak256("store(address,bytes32,bytes32)")), - abi.encode(HEVM_ADDRESS, bytes32("failed"), bytes32(uint256(0x01))) - ) - ); - status; // Silence compiler warnings - } - _failed = true; - } - - function hasHEVMContext() internal view returns (bool) { - uint256 hevmCodeSize = 0; - assembly { - hevmCodeSize := extcodesize(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D) - } - return hevmCodeSize > 0; - } - - modifier logs_gas() { - uint256 startGas = gasleft(); - _; - uint256 endGas = gasleft(); - emit log_named_uint("gas", startGas - endGas); - } - - function assertTrue(bool condition) internal { - if (!condition) { - emit log("Error: Assertion Failed"); - fail(); - } - } - - function assertTrue(bool condition, string memory err) internal { - if (!condition) { - emit log_named_string("Error", err); - assertTrue(condition); - } - } - - function assertEq(address a, address b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [address]"); - emit log_named_address(" Expected", b); - emit log_named_address(" Actual", a); - fail(); - } - } - - function assertEq(address a, address b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq(bytes32 a, bytes32 b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [bytes32]"); - emit log_named_bytes32(" Expected", b); - emit log_named_bytes32(" Actual", a); - fail(); - } - } - - function assertEq(bytes32 a, bytes32 b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq32(bytes32 a, bytes32 b) internal { - assertEq(a, b); - } - - function assertEq32(bytes32 a, bytes32 b, string memory err) internal { - assertEq(a, b, err); - } - - function assertEq(int256 a, int256 b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [int]"); - emit log_named_int(" Expected", b); - emit log_named_int(" Actual", a); - fail(); - } - } - - function assertEq(int256 a, int256 b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEq(uint256 a, uint256 b) internal { - if (a != b) { - emit log("Error: a == b not satisfied [uint]"); - emit log_named_uint(" Expected", b); - emit log_named_uint(" Actual", a); - fail(); - } - } - - function assertEq(uint256 a, uint256 b, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function assertEqDecimal(int256 a, int256 b, uint256 decimals) internal { - if (a != b) { - emit log("Error: a == b not satisfied [decimal int]"); - emit log_named_decimal_int(" Expected", b, decimals); - emit log_named_decimal_int(" Actual", a, decimals); - fail(); - } - } - - function assertEqDecimal(int256 a, int256 b, uint256 decimals, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEqDecimal(a, b, decimals); - } - } - - function assertEqDecimal(uint256 a, uint256 b, uint256 decimals) internal { - if (a != b) { - emit log("Error: a == b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Expected", b, decimals); - emit log_named_decimal_uint(" Actual", a, decimals); - fail(); - } - } - - function assertEqDecimal(uint256 a, uint256 b, uint256 decimals, string memory err) internal { - if (a != b) { - emit log_named_string("Error", err); - assertEqDecimal(a, b, decimals); - } - } - - function assertGt(uint256 a, uint256 b) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - - function assertGt(uint256 a, uint256 b, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGt(a, b); - } - } - - function assertGt(int256 a, int256 b) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - - function assertGt(int256 a, int256 b, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGt(a, b); - } - } - - function assertGtDecimal(int256 a, int256 b, uint256 decimals) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - - function assertGtDecimal(int256 a, int256 b, uint256 decimals, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGtDecimal(a, b, decimals); - } - } - - function assertGtDecimal(uint256 a, uint256 b, uint256 decimals) internal { - if (a <= b) { - emit log("Error: a > b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - - function assertGtDecimal(uint256 a, uint256 b, uint256 decimals, string memory err) internal { - if (a <= b) { - emit log_named_string("Error", err); - assertGtDecimal(a, b, decimals); - } - } - - function assertGe(uint256 a, uint256 b) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - - function assertGe(uint256 a, uint256 b, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGe(a, b); - } - } - - function assertGe(int256 a, int256 b) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - - function assertGe(int256 a, int256 b, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGe(a, b); - } - } - - function assertGeDecimal(int256 a, int256 b, uint256 decimals) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - - function assertGeDecimal(int256 a, int256 b, uint256 decimals, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - - function assertGeDecimal(uint256 a, uint256 b, uint256 decimals) internal { - if (a < b) { - emit log("Error: a >= b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - - function assertGeDecimal(uint256 a, uint256 b, uint256 decimals, string memory err) internal { - if (a < b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - - function assertLt(uint256 a, uint256 b) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - - function assertLt(uint256 a, uint256 b, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLt(a, b); - } - } - - function assertLt(int256 a, int256 b) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - - function assertLt(int256 a, int256 b, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLt(a, b); - } - } - - function assertLtDecimal(int256 a, int256 b, uint256 decimals) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - - function assertLtDecimal(int256 a, int256 b, uint256 decimals, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLtDecimal(a, b, decimals); - } - } - - function assertLtDecimal(uint256 a, uint256 b, uint256 decimals) internal { - if (a >= b) { - emit log("Error: a < b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - - function assertLtDecimal(uint256 a, uint256 b, uint256 decimals, string memory err) internal { - if (a >= b) { - emit log_named_string("Error", err); - assertLtDecimal(a, b, decimals); - } - } - - function assertLe(uint256 a, uint256 b) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [uint]"); - emit log_named_uint(" Value a", a); - emit log_named_uint(" Value b", b); - fail(); - } - } - - function assertLe(uint256 a, uint256 b, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLe(a, b); - } - } - - function assertLe(int256 a, int256 b) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [int]"); - emit log_named_int(" Value a", a); - emit log_named_int(" Value b", b); - fail(); - } - } - - function assertLe(int256 a, int256 b, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLe(a, b); - } - } - - function assertLeDecimal(int256 a, int256 b, uint256 decimals) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [decimal int]"); - emit log_named_decimal_int(" Value a", a, decimals); - emit log_named_decimal_int(" Value b", b, decimals); - fail(); - } - } - - function assertLeDecimal(int256 a, int256 b, uint256 decimals, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertLeDecimal(a, b, decimals); - } - } - - function assertLeDecimal(uint256 a, uint256 b, uint256 decimals) internal { - if (a > b) { - emit log("Error: a <= b not satisfied [decimal uint]"); - emit log_named_decimal_uint(" Value a", a, decimals); - emit log_named_decimal_uint(" Value b", b, decimals); - fail(); - } - } - - function assertLeDecimal(uint256 a, uint256 b, uint256 decimals, string memory err) internal { - if (a > b) { - emit log_named_string("Error", err); - assertGeDecimal(a, b, decimals); - } - } - - function assertEq(string memory a, string memory b) internal { - if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { - emit log("Error: a == b not satisfied [string]"); - emit log_named_string(" Expected", b); - emit log_named_string(" Actual", a); - fail(); - } - } - - function assertEq(string memory a, string memory b, string memory err) internal { - if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { - emit log_named_string("Error", err); - assertEq(a, b); - } - } - - function checkEq0(bytes memory a, bytes memory b) internal pure returns (bool ok) { - ok = true; - if (a.length == b.length) { - for (uint256 i = 0; i < a.length; i++) { - if (a[i] != b[i]) { - ok = false; - } - } - } else { - ok = false; - } - } - - function assertEq0(bytes memory a, bytes memory b) internal { - if (!checkEq0(a, b)) { - emit log("Error: a == b not satisfied [bytes]"); - emit log_named_bytes(" Expected", b); - emit log_named_bytes(" Actual", a); - fail(); - } - } - - function assertEq0(bytes memory a, bytes memory b, string memory err) internal { - if (!checkEq0(a, b)) { - emit log_named_string("Error", err); - assertEq0(a, b); - } - } - - function dealToken(address token, address to, uint256 give, bool adjust) internal { - // get current balance - (, bytes memory balData) = token.call(abi.encodeWithSelector(0x70a08231, to)); - uint256 prevBal = abi.decode(balData, (uint256)); - - // update balance - stdstore.target(token).sig(0x70a08231).with_key(to).checked_write(give); - - // update total supply - if (adjust) { - (, bytes memory totSupData) = token.call(abi.encodeWithSelector(0x18160ddd)); - uint256 totSup = abi.decode(totSupData, (uint256)); - if (give < prevBal) { - totSup -= (prevBal - give); - } else { - totSup += (give - prevBal); - } - stdstore.target(token).sig(0x18160ddd).checked_write(totSup); - } - } -} diff --git a/contracts/test/lib/MathUtil.sol b/contracts/test/mocks/GeneralMock.sol similarity index 57% rename from contracts/test/lib/MathUtil.sol rename to contracts/test/mocks/GeneralMock.sol index c3312a87..c4d90511 100644 --- a/contracts/test/lib/MathUtil.sol +++ b/contracts/test/mocks/GeneralMock.sol @@ -3,8 +3,10 @@ // (c) Gearbox Holdings, 2022 pragma solidity ^0.8.10; -library MathUtil { - function min(uint256 a, uint256 b) internal pure returns (uint256) { - return a < b ? a : b; +contract GeneralMock { + bytes public data; + + fallback() external { + data = msg.data; } } diff --git a/contracts/test/mocks/credit/CreditManagerTestInternal.sol b/contracts/test/mocks/credit/CreditManagerTestInternal.sol index 360e251c..b8e60596 100644 --- a/contracts/test/mocks/credit/CreditManagerTestInternal.sol +++ b/contracts/test/mocks/credit/CreditManagerTestInternal.sol @@ -8,7 +8,7 @@ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import {CreditManagerV3, ClosureAction} from "../../../credit/CreditManagerV3.sol"; import {IPriceOracleV2} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; -import {IPoolQuotaKeeper, QuotaUpdate, TokenLT} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper} from "../../../interfaces/IPoolQuotaKeeper.sol"; import {CollateralTokenData} from "../../../interfaces/ICreditManagerV3.sol"; // EXCEPTIONS @@ -24,34 +24,36 @@ contract CreditManagerTestInternal is CreditManagerV3 { /// @dev Constructor /// @param _poolService Address of pool service - constructor(address _poolService, address _withdrawManager) CreditManagerV3(_poolService, _withdrawManager) {} + constructor(address _poolService, address _withdrawalManager) CreditManagerV3(_poolService, _withdrawalManager) {} function setCumulativeDropAtFastCheck(address creditAccount, uint16 value) external { // cumulativeDropAtFastCheckRAY[creditAccount] = value; } - function calcNewCumulativeIndex( - uint256 borrowedAmount, - uint256 delta, - uint256 cumulativeIndexNow, - uint256 cumulativeIndexOpen, - bool isIncrease - ) external pure returns (uint256 newCumulativeIndex) { - newCumulativeIndex = - _calcNewCumulativeIndex(borrowedAmount, delta, cumulativeIndexNow, cumulativeIndexOpen, isIncrease); - } + // function calcNewCumulativeIndex( + // uint256 borrowedAmount, + // uint256 delta, + // uint256 cumulativeIndexNow, + // uint256 cumulativeIndexOpen, + // bool isIncrease + // ) external pure returns (uint256 newCumulativeIndex) { + // newCumulativeIndex = + // _calcNewCumulativeIndex(borrowedAmount, delta, cumulativeIndexNow, cumulativeIndexOpen, isIncrease); + // } - function calcClosePaymentsPure( - uint256 totalValue, - ClosureAction closureActionType, - uint256 borrowedAmount, - uint256 borrowedAmountWithInterest - ) external view returns (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) { - return calcClosePayments(totalValue, closureActionType, borrowedAmount, borrowedAmountWithInterest); - } + // function calcClosePaymentsPure( + // uint256 totalValue, + // ClosureAction closureActionType, + // uint256 borrowedAmount, + // uint256 borrowedAmountWithInterest + // ) external view returns (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) { + // return calcClosePayments(totalValue, closureActionType, borrowedAmount, borrowedAmountWithInterest); + // } - function transferAssetsTo(address creditAccount, address to, bool convertWETH, uint256 enabledTokenMask) external { - _transferAssetsTo(creditAccount, to, convertWETH, enabledTokenMask); + function transferAssetsTo(address creditAccount, address to, bool convertWETH, uint256 enabledTokensMask) + external + { + _transferAssetsTo(creditAccount, to, convertWETH, enabledTokensMask); } function safeTokenTransfer(address creditAccount, address token, address to, uint256 amount, bool convertToETH) @@ -67,7 +69,7 @@ contract CreditManagerTestInternal is CreditManagerV3 { function getCreditAccountParameters(address creditAccount) external view - returns (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexNow) + returns (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow) { return _getCreditAccountParameters(creditAccount); } @@ -84,8 +86,8 @@ contract CreditManagerTestInternal is CreditManagerV3 { return collateralTokensData[tokenMask]; } - function setEnabledTokenMask(address creditAccount, uint256 enabledTokenMask) external { - creditAccountInfo[creditAccount].enabledTokensMask = uint248(enabledTokenMask); + function setenabledTokensMask(address creditAccount, uint256 enabledTokensMask) external { + creditAccountInfo[creditAccount].enabledTokensMask = uint248(enabledTokensMask); } function getSlotBytes(uint256 slotNum) external view returns (bytes32 slotVal) { diff --git a/contracts/test/mocks/pool/CreditManagerMockForPoolTest.sol b/contracts/test/mocks/pool/CreditManagerMockForPoolTest.sol index 6a10749b..a1a7a608 100644 --- a/contracts/test/mocks/pool/CreditManagerMockForPoolTest.sol +++ b/contracts/test/mocks/pool/CreditManagerMockForPoolTest.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.10; import {IPool4626} from "../../../interfaces/IPool4626.sol"; -import {IPoolQuotaKeeper, QuotaUpdate} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper} from "../../../interfaces/IPoolQuotaKeeper.sol"; import "../../lib/constants.sol"; contract CreditManagerMockForPoolTest { @@ -47,11 +47,12 @@ contract CreditManagerMockForPoolTest { result = creditAccount; } - function updateQuotas(address _creditAccount, QuotaUpdate[] memory quotaUpdates) + function updateQuota(address _creditAccount, address token, int96 quotaChange) external - returns (uint256 caQuotaInterestChange, uint256 tokensToEnable, uint256 tokensToDisable) + returns (uint256 caQuotaInterestChange, bool tokensToEnable, uint256 tokensToDisable) { - return IPoolQuotaKeeper(IPool4626(pool).poolQuotaKeeper()).updateQuotas(_creditAccount, quotaUpdates); + (caQuotaInterestChange,,) = + IPoolQuotaKeeper(IPool4626(pool).poolQuotaKeeper()).updateQuota(_creditAccount, token, quotaChange); } function addToken(address token, uint256 mask) external { diff --git a/contracts/test/mocks/pool/GaugeMock.sol b/contracts/test/mocks/pool/GaugeMock.sol index aea76caa..667516c1 100644 --- a/contracts/test/mocks/pool/GaugeMock.sol +++ b/contracts/test/mocks/pool/GaugeMock.sol @@ -20,7 +20,7 @@ import {IGearStaking} from "../../../interfaces/IGearStaking.sol"; import {RAY, SECONDS_PER_YEAR, MAX_WITHDRAW_FEE} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; -import {Errors} from "@gearbox-protocol/core-v2/contracts/libraries/Errors.sol"; + import {Pool4626} from "../../../pool/Pool4626.sol"; import "forge-std/console.sol"; diff --git a/contracts/test/mocks/pool/PoolServiceMock.sol b/contracts/test/mocks/pool/PoolServiceMock.sol index c69fd81a..f5f2ff70 100644 --- a/contracts/test/mocks/pool/PoolServiceMock.sol +++ b/contracts/test/mocks/pool/PoolServiceMock.sol @@ -225,15 +225,15 @@ contract PoolServiceMock is IPoolService { // function calcCumulativeIndexAtBorrowMore( // uint256 amount, // uint256 dAmount, - // uint256 cumulativeIndexAtOpen + // uint256 cumulativeIndexLastUpdate // ) external view override returns (uint256) { // return // (calcLinearCumulative_RAY() * - // (cumulativeIndexAtOpen) * + // (cumulativeIndexLastUpdate) * // (amount + dAmount)) / // (calcLinearCumulative_RAY() * // amount + // dAmount * - // cumulativeIndexAtOpen); + // cumulativeIndexLastUpdate); // } } diff --git a/contracts/test/mocks/support/PolicyManagerInternal.sol b/contracts/test/mocks/support/PolicyManagerInternal.sol new file mode 100644 index 00000000..95c52fc4 --- /dev/null +++ b/contracts/test/mocks/support/PolicyManagerInternal.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {PolicyManager} from "../../../support/risk-controller/PolicyManager.sol"; + +contract PolicyManagerInternal is PolicyManager { + constructor(address _addressProvider) PolicyManager(_addressProvider) {} + + function checkPolicy(address contractAddress, string memory paramName, uint256 oldValue, uint256 newValue) + external + returns (bool) + { + return _checkPolicy(contractAddress, paramName, oldValue, newValue); + } + + function checkPolicy(bytes32 policyHash, uint256 oldValue, uint256 newValue) external returns (bool) { + return _checkPolicy(policyHash, oldValue, newValue); + } +} diff --git a/contracts/test/suites/CreditFacadeTestSuite.sol b/contracts/test/suites/CreditFacadeTestSuite.sol index 82deb1b6..d9544da9 100644 --- a/contracts/test/suites/CreditFacadeTestSuite.sol +++ b/contracts/test/suites/CreditFacadeTestSuite.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.10; import {CreditFacadeV3} from "../../credit/CreditFacadeV3.sol"; -import {CreditConfigurator} from "../../credit/CreditConfigurator.sol"; +import {CreditConfigurator} from "../../credit/CreditConfiguratorV3.sol"; import {CreditManagerV3} from "../../credit/CreditManagerV3.sol"; -import {WithdrawManager} from "../../support/WithdrawManager.sol"; +import {WithdrawalManager} from "../../support/WithdrawalManager.sol"; -import {AccountFactoryV2} from "../../core/AccountFactory.sol"; +import {AccountFactoryV3} from "../../core/AccountFactoryV3.sol"; import {CreditManagerFactory} from "../../factories/CreditManagerFactory.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; @@ -68,6 +68,8 @@ contract CreditFacadeTestSuite is PoolDeployer { CreditManagerOpts memory cmOpts = creditConfig.getCreditOpts(); + cmOpts.expirable = withExpiration; + if (withDegenNFT) { degenNFT = new DegenNFT( address(addressProvider), @@ -75,12 +77,13 @@ contract CreditFacadeTestSuite is PoolDeployer { "Gear-Degen" ); - evm.prank(CONFIGURATOR); - + vm.prank(CONFIGURATOR); degenNFT.setMinter(CONFIGURATOR); + + cmOpts.degenNFT = address(degenNFT); } - cmOpts.withdrawManager = address(withdrawManager); + cmOpts.withdrawalManager = address(withdrawalManager); CreditManagerFactory cmf = new CreditManagerFactory( address(poolMock), @@ -92,110 +95,40 @@ contract CreditFacadeTestSuite is PoolDeployer { creditFacade = cmf.creditFacade(); creditConfigurator = cmf.creditConfigurator(); + vm.prank(CONFIGURATOR); cr.addCreditManager(address(creditManager)); - console.log("AF", accountFactoryVer); if (withDegenNFT) { + vm.prank(CONFIGURATOR); degenNFT.addCreditFacade(address(creditFacade)); } + if (withExpiration) { + vm.prank(CONFIGURATOR); + creditConfigurator.setExpirationDate(uint40(block.timestamp + 1)); + } + if (accountFactoryVer == 2) { - AccountFactoryV2(address(af)).addCreditManager(address(creditManager)); + vm.prank(CONFIGURATOR); + AccountFactoryV3(address(af)).addCreditManager(address(creditManager), 1); + } + + if (supportQuotas) { + vm.prank(CONFIGURATOR); + poolQuotaKeeper.addCreditManager(address(creditManager)); } - evm.label(address(poolMock), "Pool"); - evm.label(address(creditFacade), "CreditFacadeV3"); - evm.label(address(creditManager), "CreditManagerV3"); - evm.label(address(creditConfigurator), "CreditConfigurator"); + vm.label(address(poolMock), "Pool"); + vm.label(address(creditFacade), "CreditFacadeV3"); + vm.label(address(creditManager), "CreditManagerV3"); + vm.label(address(creditConfigurator), "CreditConfigurator"); tokenTestSuite.mint(underlying, USER, creditAccountAmount); tokenTestSuite.mint(underlying, FRIEND, creditAccountAmount); - evm.prank(USER); - IERC20(underlying).approve(address(creditManager), type(uint256).max); - evm.prank(FRIEND); - IERC20(underlying).approve(address(creditManager), type(uint256).max); - - addressProvider.transferOwnership(CONFIGURATOR); - acl.transferOwnership(CONFIGURATOR); - - evm.startPrank(CONFIGURATOR); - - acl.claimOwnership(); - addressProvider.claimOwnership(); - - evm.stopPrank(); - } - - function testFacadeWithDegenNFT() external { - degenNFT = new DegenNFT( - address(addressProvider), - "DegenNFT", - "Gear-Degen" - ); - - evm.startPrank(CONFIGURATOR); - - degenNFT.setMinter(CONFIGURATOR); - - creditFacade = new CreditFacadeV3( - address(creditManager), - address(degenNFT), - - false - ); - - creditConfigurator.setCreditFacade(address(creditFacade), true); - - degenNFT.addCreditFacade(address(creditFacade)); - - evm.stopPrank(); - } - - function testFacadeWithExpiration() external { - evm.startPrank(CONFIGURATOR); - - creditFacade = new CreditFacadeV3( - address(creditManager), - address(0), - - true - ); - - creditConfigurator.setCreditFacade(address(creditFacade), true); - creditConfigurator.setExpirationDate(uint40(block.timestamp + 1)); - - evm.stopPrank(); - } - - function testFacadeWithQuotas() external { - poolMock.setSupportsQuotas(true); - - CreditManagerFactory cmf = new CreditManagerFactory( - address(poolMock), - creditConfig.getCreditOpts(), - 0 - ); - - creditManager = cmf.creditManager(); - creditFacade = cmf.creditFacade(); - creditConfigurator = cmf.creditConfigurator(); - - assertTrue(creditManager.supportsQuotas(), "Credit Manager does not support quotas"); - - evm.startPrank(CONFIGURATOR); - cr.addCreditManager(address(creditManager)); - poolQuotaKeeper.addCreditManager(address(creditManager)); - evm.stopPrank(); - - evm.label(address(poolMock), "Pool"); - evm.label(address(creditFacade), "CreditFacadeV3"); - evm.label(address(creditManager), "CreditManagerV3"); - evm.label(address(creditConfigurator), "CreditConfigurator"); - - evm.prank(USER); + vm.prank(USER); IERC20(underlying).approve(address(creditManager), type(uint256).max); - evm.prank(FRIEND); + vm.prank(FRIEND); IERC20(underlying).approve(address(creditManager), type(uint256).max); } } diff --git a/contracts/test/suites/CreditManagerTestSuite.sol b/contracts/test/suites/CreditManagerTestSuite.sol index af72364f..39046d0a 100644 --- a/contracts/test/suites/CreditManagerTestSuite.sol +++ b/contracts/test/suites/CreditManagerTestSuite.sol @@ -4,11 +4,11 @@ pragma solidity ^0.8.10; import {CreditManagerV3} from "../../credit/CreditManagerV3.sol"; -import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfigurator.sol"; +import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfiguratorV3.sol"; import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWETH.sol"; -import {WithdrawManager} from "../../support/WithdrawManager.sol"; -import {AccountFactoryV2} from "../../core/AccountFactory.sol"; +import {WithdrawalManager} from "../../support/WithdrawalManager.sol"; +import {AccountFactoryV3} from "../../core/AccountFactoryV3.sol"; import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; @@ -57,15 +57,14 @@ contract CreditManagerTestSuite is PoolDeployer { tokenTestSuite = creditConfig.tokenTestSuite(); creditManager = internalSuite - ? new CreditManagerTestInternal(address(poolMock), address(withdrawManager)) - : new CreditManagerV3(address(poolMock), address(withdrawManager)); + ? new CreditManagerTestInternal(address(poolMock), address(withdrawalManager)) + : new CreditManagerV3(address(poolMock), address(withdrawalManager)); creditFacade = msg.sender; creditManager.setCreditConfigurator(CONFIGURATOR); - evm.startPrank(CONFIGURATOR); - + vm.startPrank(CONFIGURATOR); creditManager.setCreditFacade(creditFacade); creditManager.setParams( @@ -82,38 +81,33 @@ contract CreditManagerTestSuite is PoolDeployer { if (collateralTokens[i].token != underlying) { address token = collateralTokens[i].token; creditManager.addToken(token); - creditManager.setLiquidationThreshold(token, collateralTokens[i].liquidationThreshold); + creditManager.setCollateralTokenData( + token, + collateralTokens[i].liquidationThreshold, + collateralTokens[i].liquidationThreshold, + type(uint40).max, + 0 + ); } } - evm.stopPrank(); + cr.addCreditManager(address(creditManager)); assertEq(creditManager.creditConfigurator(), CONFIGURATOR, "Configurator wasn't set"); - cr.addCreditManager(address(creditManager)); - if (supportsQuotas) { poolQuotaKeeper.addCreditManager(address(creditManager)); - // poolQuotaKeeper.setGauge(CONFIGURATOR); } if (accountFactoryVer == 2) { - AccountFactoryV2(address(af)).addCreditManager(address(creditManager)); + AccountFactoryV3(address(af)).addCreditManager(address(creditManager), 1); } + vm.stopPrank(); + // Approve USER & LIQUIDATOR to credit manager tokenTestSuite.approve(underlying, USER, address(creditManager)); tokenTestSuite.approve(underlying, LIQUIDATOR, address(creditManager)); - - addressProvider.transferOwnership(CONFIGURATOR); - acl.transferOwnership(CONFIGURATOR); - - evm.startPrank(CONFIGURATOR); - - acl.claimOwnership(); - addressProvider.claimOwnership(); - - evm.stopPrank(); } /// @@ -124,7 +118,7 @@ contract CreditManagerTestSuite is PoolDeployer { external returns ( uint256 borrowedAmount, - uint256 cumulativeIndexAtOpen, + uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexAtClose, address creditAccount ) @@ -136,38 +130,42 @@ contract CreditManagerTestSuite is PoolDeployer { public returns ( uint256 borrowedAmount, - uint256 cumulativeIndexAtOpen, + uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexAtClose, address creditAccount ) { // Set up real value, which should be configired before CM would be launched - evm.prank(CONFIGURATOR); - creditManager.setLiquidationThreshold( - underlying, uint16(PERCENTAGE_FACTOR - DEFAULT_FEE_LIQUIDATION - DEFAULT_LIQUIDATION_PREMIUM) + vm.prank(CONFIGURATOR); + creditManager.setCollateralTokenData( + underlying, + uint16(PERCENTAGE_FACTOR - DEFAULT_FEE_LIQUIDATION - DEFAULT_LIQUIDATION_PREMIUM), + uint16(PERCENTAGE_FACTOR - DEFAULT_FEE_LIQUIDATION - DEFAULT_LIQUIDATION_PREMIUM), + type(uint40).max, + 0 ); borrowedAmount = _borrowedAmount; - cumulativeIndexAtOpen = RAY; - poolMock.setCumulative_RAY(cumulativeIndexAtOpen); + cumulativeIndexLastUpdate = RAY; + poolMock.setCumulative_RAY(cumulativeIndexLastUpdate); - evm.prank(creditFacade); + vm.prank(creditFacade); // Existing address case - creditAccount = creditManager.openCreditAccount(borrowedAmount, USER); + creditAccount = creditManager.openCreditAccount(borrowedAmount, USER, false); // Increase block number cause it's forbidden to close credit account in the same block - evm.roll(block.number + 1); + vm.roll(block.number + 1); - cumulativeIndexAtClose = (cumulativeIndexAtOpen * 12) / 10; + cumulativeIndexAtClose = (cumulativeIndexLastUpdate * 12) / 10; poolMock.setCumulative_RAY(cumulativeIndexAtClose); } function makeTokenQuoted(address token, uint16 rate, uint96 limit) external { require(supportsQuotas, "Test suite does not support quotas"); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); gaugeMock.addQuotaToken(token, rate); poolQuotaKeeper.setTokenLimit(token, limit); @@ -178,6 +176,6 @@ contract CreditManagerTestSuite is PoolDeployer { creditManager.setQuotedMask(limitedMask | tokenMask); - evm.stopPrank(); + vm.stopPrank(); } } diff --git a/contracts/test/suites/GenesisFactory.sol b/contracts/test/suites/GenesisFactory.sol index d8db606a..b903277b 100644 --- a/contracts/test/suites/GenesisFactory.sol +++ b/contracts/test/suites/GenesisFactory.sol @@ -10,7 +10,7 @@ import {ContractsRegister} from "@gearbox-protocol/core-v2/contracts/core/Contra import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; import {DataCompressor} from "@gearbox-protocol/core-v2/contracts/core/DataCompressor.sol"; import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; -import {AccountFactoryV2} from "../../core/AccountFactory.sol"; +import {AccountFactoryV3} from "../../core/AccountFactoryV3.sol"; import {WETHGateway} from "../../support/WETHGateway.sol"; import {PriceOracle, PriceFeedConfig} from "@gearbox-protocol/core-v2/contracts/oracles/PriceOracle.sol"; @@ -54,7 +54,7 @@ contract GenesisFactory is Ownable { accountFactory = address(af); } else { - accountFactory = address(new AccountFactoryV2( address(addressProvider))); // T:[GD-1] + accountFactory = address(new AccountFactoryV3( address(addressProvider))); // T:[GD-1] } addressProvider.setAccountFactory(accountFactory); // T:[GD-1] diff --git a/contracts/test/suites/PoolDeployer.sol b/contracts/test/suites/PoolDeployer.sol index 740665b9..e897d5eb 100644 --- a/contracts/test/suites/PoolDeployer.sol +++ b/contracts/test/suites/PoolDeployer.sol @@ -11,14 +11,15 @@ import {ContractsRegister} from "@gearbox-protocol/core-v2/contracts/core/Contra import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; import {GenesisFactory} from "./GenesisFactory.sol"; import {PoolFactory, PoolOpts} from "@gearbox-protocol/core-v2/contracts/factories/PoolFactory.sol"; -import {WithdrawManager} from "../../support/WithdrawManager.sol"; +import {WithdrawalManager} from "../../support/WithdrawalManager.sol"; -import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfigurator.sol"; +import {CreditManagerOpts, CollateralToken} from "../../credit/CreditConfiguratorV3.sol"; import {PoolServiceMock} from "../mocks/pool/PoolServiceMock.sol"; import {GaugeMock} from "../mocks/pool/GaugeMock.sol"; import {PoolQuotaKeeper} from "../../pool/PoolQuotaKeeper.sol"; import "../lib/constants.sol"; +import {Test} from "forge-std/Test.sol"; import {ITokenTestSuite} from "../interfaces/ITokenTestSuite.sol"; @@ -27,16 +28,9 @@ struct PoolCreditOpts { CreditManagerOpts creditOpts; } -// struct CollateralTokensItem { -// Tokens token; -// uint16 liquidationThreshold; -// } - /// @title CreditManagerTestSuite /// @notice Deploys contract for unit testing of CreditManagerV3.sol -contract PoolDeployer is DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract PoolDeployer is Test { AddressProvider public addressProvider; GenesisFactory public gp; AccountFactory public af; @@ -44,7 +38,7 @@ contract PoolDeployer is DSTest { PoolQuotaKeeper public poolQuotaKeeper; GaugeMock public gaugeMock; ContractsRegister public cr; - WithdrawManager public withdrawManager; + WithdrawalManager public withdrawalManager; ACL public acl; IPriceOracleV2Ext public priceOracle; @@ -84,7 +78,7 @@ contract PoolDeployer is DSTest { cr = ContractsRegister(addressProvider.getContractsRegister()); - withdrawManager = new WithdrawManager(address(addressProvider)); + withdrawalManager = new WithdrawalManager(address(addressProvider), 1 days); underlying = _underlying; @@ -101,10 +95,20 @@ contract PoolDeployer is DSTest { gaugeMock = new GaugeMock(address(poolMock)); - evm.label(address(gaugeMock), "Gauge"); + vm.label(address(gaugeMock), "Gauge"); poolQuotaKeeper.setGauge(address(gaugeMock)); poolMock.setPoolQuotaKeeper(address(poolQuotaKeeper)); + + addressProvider.transferOwnership(CONFIGURATOR); + acl.transferOwnership(CONFIGURATOR); + + vm.startPrank(CONFIGURATOR); + + acl.claimOwnership(); + addressProvider.claimOwnership(); + + vm.stopPrank(); } } diff --git a/contracts/test/suites/PoolQuotaKeeperTestSuite.sol b/contracts/test/suites/PoolQuotaKeeperTestSuite.sol index a0945baa..29a62915 100644 --- a/contracts/test/suites/PoolQuotaKeeperTestSuite.sol +++ b/contracts/test/suites/PoolQuotaKeeperTestSuite.sol @@ -8,7 +8,7 @@ import {ContractsRegister} from "@gearbox-protocol/core-v2/contracts/core/Contra import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; import {DieselToken} from "@gearbox-protocol/core-v2/contracts/tokens/DieselToken.sol"; -import {IPool4626, Pool4626Opts} from "../../interfaces/IPool4626.sol"; +import {IPool4626} from "../../interfaces/IPool4626.sol"; import {TestPoolService} from "@gearbox-protocol/core-v2/contracts/test/mocks/pool/TestPoolService.sol"; import {Tokens} from "../config/Tokens.sol"; @@ -26,6 +26,7 @@ import {PoolQuotaKeeper} from "../../pool/PoolQuotaKeeper.sol"; import {GaugeMock} from "../mocks/pool/GaugeMock.sol"; import {PoolServiceMock} from "../mocks/pool/PoolServiceMock.sol"; +import {Test} from "forge-std/Test.sol"; uint256 constant liquidityProviderInitBalance = 100 ether; uint256 constant addLiquidity = 10 ether; @@ -34,9 +35,7 @@ uint16 constant referral = 12333; /// @title PoolServiceTestSuite /// @notice Deploys contract for unit testing of PoolService.sol -contract PoolQuotaKeeperTestSuite { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract PoolQuotaKeeperTestSuite is Test { ACL public acl; WETHMock public weth; @@ -53,7 +52,7 @@ contract PoolQuotaKeeperTestSuite { address public treasury; constructor(ITokenTestSuite _tokenTestSuite, address _underlying) { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); acl = new ACL(); weth = WETHMock(payable(_tokenTestSuite.wethToken())); @@ -74,25 +73,25 @@ contract PoolQuotaKeeperTestSuite { poolQuotaKeeper = new PoolQuotaKeeper(address(pool4626)); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); pool4626.connectPoolQuotaManager(address(poolQuotaKeeper)); gaugeMock = new GaugeMock(address(pool4626)); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); poolQuotaKeeper.setGauge(address(gaugeMock)); - evm.stopPrank(); + vm.stopPrank(); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cmMock = new CreditManagerMockForPoolTest(address(pool4626)); cr.addPool(address(pool4626)); cr.addCreditManager(address(cmMock)); - evm.label(address(pool4626), "Pool"); + vm.label(address(pool4626), "Pool"); - evm.stopPrank(); + vm.stopPrank(); } } diff --git a/contracts/test/suites/PoolServiceTestSuite.sol b/contracts/test/suites/PoolServiceTestSuite.sol index c3cd6d93..660040a8 100644 --- a/contracts/test/suites/PoolServiceTestSuite.sol +++ b/contracts/test/suites/PoolServiceTestSuite.sol @@ -8,7 +8,7 @@ import {ContractsRegister} from "@gearbox-protocol/core-v2/contracts/core/Contra import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; import {DieselToken} from "@gearbox-protocol/core-v2/contracts/tokens/DieselToken.sol"; -import {IPool4626, Pool4626Opts} from "../../interfaces/IPool4626.sol"; +import {IPool4626} from "../../interfaces/IPool4626.sol"; import {TestPoolService} from "@gearbox-protocol/core-v2/contracts/test/mocks/pool/TestPoolService.sol"; import {Tokens} from "../config/Tokens.sol"; @@ -27,6 +27,8 @@ import {GaugeMock} from "../mocks/pool/GaugeMock.sol"; import {Pool4626_USDT} from "../../pool/Pool4626_USDT.sol"; +import {Test} from "forge-std/Test.sol"; + uint256 constant liquidityProviderInitBalance = 100 ether; uint256 constant addLiquidity = 10 ether; uint256 constant removeLiquidity = 5 ether; @@ -34,9 +36,7 @@ uint16 constant referral = 12333; /// @title PoolServiceTestSuite /// @notice Deploys contract for unit testing of PoolService.sol -contract PoolServiceTestSuite { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract PoolServiceTestSuite is Test { ACL public acl; WETHMock public weth; @@ -64,7 +64,7 @@ contract PoolServiceTestSuite { false ); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); acl = new ACL(); weth = WETHMock(payable(_tokenTestSuite.wethToken())); @@ -90,14 +90,21 @@ contract PoolServiceTestSuite { } catch {} if (is4626) { - Pool4626Opts memory opts = Pool4626Opts({ - addressProvider: address(addressProvider), - underlyingToken: _underlying, - interestRateModel: address(linearIRModel), - expectedLiquidityLimit: type(uint256).max, - supportsQuotas: supportQuotas - }); - pool4626 = isFeeToken ? new Pool4626_USDT(opts) : new Pool4626(opts); + pool4626 = isFeeToken + ? new Pool4626_USDT({ + _addressProvider: address(addressProvider), + _underlyingToken: _underlying, + _interestRateModel: address(linearIRModel), + _expectedLiquidityLimit: type(uint256).max, + _supportsQuotas: supportQuotas + }) + : new Pool4626({ + _addressProvider: address(addressProvider), + _underlyingToken: _underlying, + _interestRateModel: address(linearIRModel), + _expectedLiquidityLimit: type(uint256).max, + _supportsQuotas: supportQuotas + }); newPool = address(pool4626); if (supportQuotas) { @@ -112,40 +119,40 @@ contract PoolServiceTestSuite { ); newPool = address(poolService); dieselToken = DieselToken(poolService.dieselToken()); - evm.label(address(dieselToken), "DieselToken"); + vm.label(address(dieselToken), "DieselToken"); } - evm.stopPrank(); + vm.stopPrank(); - evm.prank(USER); + vm.prank(USER); underlying.approve(newPool, type(uint256).max); - evm.prank(INITIAL_LP); + vm.prank(INITIAL_LP); underlying.approve(newPool, type(uint256).max); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cmMock = new CreditManagerMockForPoolTest(newPool); cr.addPool(newPool); cr.addCreditManager(address(cmMock)); - evm.label(newPool, "Pool"); + vm.label(newPool, "Pool"); - // evm.label(address(underlying), "UnderlyingToken"); + // vm.label(address(underlying), "UnderlyingToken"); - evm.stopPrank(); + vm.stopPrank(); } function _deployAndConnectPoolQuotaKeeper() internal { poolQuotaKeeper = new PoolQuotaKeeper(address(pool4626)); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); pool4626.connectPoolQuotaManager(address(poolQuotaKeeper)); gaugeMock = new GaugeMock(address(pool4626)); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); poolQuotaKeeper.setGauge(address(gaugeMock)); } } diff --git a/contracts/test/suites/TokensTestSuite.sol b/contracts/test/suites/TokensTestSuite.sol index 282afc96..94cc553d 100644 --- a/contracts/test/suites/TokensTestSuite.sol +++ b/contracts/test/suites/TokensTestSuite.sol @@ -17,13 +17,13 @@ import {ERC20FeeMock} from "../mocks/token/ERC20FeeMock.sol"; import {PriceFeedMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/oracles/PriceFeedMock.sol"; -import "../lib/test.sol"; +import {Test} from "forge-std/Test.sol"; import {TokensTestSuiteHelper} from "./TokensTestSuiteHelper.sol"; import {TokensData, TestToken} from "../config/TokensData.sol"; import {Tokens} from "../config/Tokens.sol"; -contract TokensTestSuite is DSTest, TokensData, TokensTestSuiteHelper { +contract TokensTestSuite is Test, TokensData, TokensTestSuiteHelper { mapping(Tokens => address) public addressOf; mapping(Tokens => string) public symbols; mapping(Tokens => uint256) public prices; @@ -65,7 +65,7 @@ contract TokensTestSuite is DSTest, TokensData, TokensTestSuiteHelper { t = new ERC20Mock(token.symbol, token.symbol, token.decimals); } - evm.label(address(t), token.symbol); + vm.label(address(t), token.symbol); AggregatorV3Interface priceFeed = new PriceFeedMock(token.price, 8); diff --git a/contracts/test/suites/TokensTestSuiteHelper.sol b/contracts/test/suites/TokensTestSuiteHelper.sol index 04c19fc4..b904ed35 100644 --- a/contracts/test/suites/TokensTestSuiteHelper.sol +++ b/contracts/test/suites/TokensTestSuiteHelper.sol @@ -13,8 +13,9 @@ import {ITokenTestSuite} from "../interfaces/ITokenTestSuite.sol"; import {ERC20Mock} from "@gearbox-protocol/core-v2/contracts/test/mocks/token/ERC20Mock.sol"; import "../lib/constants.sol"; -contract TokensTestSuiteHelper is DSTest, ITokenTestSuite { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); +import {Test} from "forge-std/Test.sol"; + +contract TokensTestSuiteHelper is Test, ITokenTestSuite { address public wethToken; function topUpWETH() public payable override { @@ -22,13 +23,13 @@ contract TokensTestSuiteHelper is DSTest, ITokenTestSuite { } function topUpWETH(address onBehalfOf, uint256 value) public override { - evm.prank(onBehalfOf); + vm.prank(onBehalfOf); IWETH(wethToken).deposit{value: value}(); } function mint(address token, address to, uint256 amount) public virtual override { if (token == wethToken) { - evm.deal(address(this), amount); + vm.deal(address(this), amount); IWETH(wethToken).deposit{value: amount}(); IERC20(token).transfer(to, amount); } else { @@ -45,7 +46,7 @@ contract TokensTestSuiteHelper is DSTest, ITokenTestSuite { } function approve(address token, address holder, address targetContract, uint256 amount) public override { - evm.prank(holder); + vm.prank(holder); IERC20(token).approve(targetContract, amount); } diff --git a/contracts/test/unit/adapters/AbstractAdapter.t.sol b/contracts/test/unit/adapters/AbstractAdapter.t.sol index 83f950a3..b7ff795f 100644 --- a/contracts/test/unit/adapters/AbstractAdapter.t.sol +++ b/contracts/test/unit/adapters/AbstractAdapter.t.sol @@ -18,7 +18,6 @@ import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; import {CreditFacadeTestHelper} from "../../helpers/CreditFacadeTestHelper.sol"; import {CONFIGURATOR, USER} from "../../lib/constants.sol"; -import {DSTest} from "../../lib/test.sol"; import {AdapterMock} from "../../mocks/adapters/AdapterMock.sol"; import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; @@ -26,9 +25,11 @@ import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks import {CreditFacadeTestSuite} from "../../suites/CreditFacadeTestSuite.sol"; import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; +import {Test} from "forge-std/Test.sol"; + /// @title AbstractAdapterTest /// @notice Designed for unit test purposes only -contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { +contract AbstractAdapterTest is Test, BalanceHelper, CreditFacadeTestHelper { TargetContractMock targetMock; AdapterMock adapterMock; @@ -56,11 +57,11 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { address(targetMock) ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(address(targetMock), address(adapterMock)); - evm.label(address(adapterMock), "AdapterMock"); - evm.label(address(targetMock), "TargetContractMock"); + vm.label(address(adapterMock), "AdapterMock"); + vm.label(address(targetMock), "TargetContractMock"); usdc = tokenTestSuite.addressOf(Tokens.USDC); dai = tokenTestSuite.addressOf(Tokens.DAI); @@ -72,10 +73,10 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { /// @notice [AA-1]: Constructor reverts when passed zero-address as credit manager or target contract function test_AA_01_constructor_reverts_on_zero_address() public { - evm.expectRevert(); + vm.expectRevert(); new AdapterMock(address(0), address(0)); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); new AdapterMock(address(creditManager), address(0)); } @@ -94,15 +95,15 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { /// @notice [AA-3]: `creditFacadeOnly` functions revert if called not by the credit facade function test_AA_03_creditFacadeOnly_function_reverts_if_called_not_by_credit_facade() public { - evm.expectRevert(CallerNotCreditFacadeException.selector); - evm.prank(USER); + vm.expectRevert(CallerNotCreditFacadeException.selector); + vm.prank(USER); adapterMock.dumbCall(0, 0); } /// @notice [AA-4]: AbstractAdapter uses correct credit account function test_AA_04_adapter_uses_correct_credit_account() public { - evm.expectRevert(ExternalCallCreditAccountNotSetException.selector); - evm.prank(address(creditFacade)); + vm.expectRevert(ExternalCallCreditAccountNotSetException.selector); + vm.prank(address(creditFacade)); adapterMock.creditAccount(); address creditAccount = _openExternalCallCreditAccount(); @@ -111,7 +112,7 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { /// @notice [AA-5]: `_getMaskOrRevert` works correctly function test_AA_05_getMaskOrRevert_works_correctly() public { - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); adapterMock.getMaskOrRevert(address(0xdead)); assertEq( @@ -124,8 +125,8 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { function test_AA_06_approveToken_correctly_passes_to_credit_manager() public { _openExternalCallCreditAccount(); - evm.expectCall(address(creditManager), abi.encodeCall(creditManager.approveCreditAccount, (usdc, 10))); - evm.prank(USER); + vm.expectCall(address(creditManager), abi.encodeCall(creditManager.approveCreditAccount, (usdc, 10))); + vm.prank(USER); adapterMock.approveToken(usdc, 10); } @@ -135,8 +136,8 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { bytes memory callData = adapterMock.dumbCallData(); - evm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); - evm.prank(USER); + vm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); + vm.prank(USER); adapterMock.execute(callData); } @@ -148,9 +149,9 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { for (uint256 dt = 0; dt < 2; ++dt) { bool disableTokenIn = dt == 1; - evm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); + vm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); - evm.prank(USER); + vm.prank(USER); (uint256 tokensToEnable, uint256 tokensToDisable,) = adapterMock.executeSwapNoApprove(usdc, dai, callData, disableTokenIn); @@ -170,13 +171,13 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { for (uint256 dt = 0; dt < 2; ++dt) { bool disableTokenIn = dt == 1; - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(creditManager.approveCreditAccount, (usdc, type(uint256).max)) ); - evm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); - evm.expectCall(address(creditManager), abi.encodeCall(creditManager.approveCreditAccount, (usdc, 1))); + vm.expectCall(address(creditManager), abi.encodeCall(creditManager.executeOrder, (callData))); + vm.expectCall(address(creditManager), abi.encodeCall(creditManager.approveCreditAccount, (usdc, 1))); - evm.prank(USER); + vm.prank(USER); (uint256 tokensToEnable, uint256 tokensToDisable,) = adapterMock.executeSwapSafeApprove(usdc, dai, callData, disableTokenIn); @@ -199,8 +200,8 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { for (uint256 dt; dt < 2; ++dt) { bool disableTokenIn = dt == 1; for (uint256 sa; sa < 2; ++sa) { - evm.expectRevert(TokenNotAllowedException.selector); - evm.prank(USER); + vm.expectRevert(TokenNotAllowedException.selector); + vm.prank(USER); if (sa == 1) { adapterMock.executeSwapSafeApprove(tokenIn, tokenOut, callData, disableTokenIn); } else { @@ -217,7 +218,7 @@ contract AbstractAdapterTest is DSTest, BalanceHelper, CreditFacadeTestHelper { function _openExternalCallCreditAccount() internal returns (address creditAccount) { (creditAccount,) = _openTestCreditAccount(); - evm.prank(address(creditFacade)); - creditManager.setCaForExternalCall(creditAccount); + vm.prank(address(creditFacade)); + creditManager.setCreditAccountForExternalCall(creditAccount); } } diff --git a/contracts/test/unit/credit/CreditConfigurator.t.sol b/contracts/test/unit/credit/CreditConfigurator.t.sol index 490ff222..c83d9625 100644 --- a/contracts/test/unit/credit/CreditConfigurator.t.sol +++ b/contracts/test/unit/credit/CreditConfigurator.t.sol @@ -6,10 +6,10 @@ pragma solidity ^0.8.10; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; -import {WithdrawManager} from "../../../support/WithdrawManager.sol"; -import {CreditConfigurator, CreditManagerOpts, CollateralToken} from "../../../credit/CreditConfigurator.sol"; +import {WithdrawalManager} from "../../../support/WithdrawalManager.sol"; +import {CreditConfigurator, CreditManagerOpts, CollateralToken} from "../../../credit/CreditConfiguratorV3.sol"; import {ICreditManagerV3, ICreditManagerV3Events} from "../../../interfaces/ICreditManagerV3.sol"; -import {ICreditConfiguratorEvents} from "../../../interfaces/ICreditConfigurator.sol"; +import {ICreditConfiguratorEvents} from "../../../interfaces/ICreditConfiguratorV3.sol"; import {IAdapter} from "@gearbox-protocol/core-v2/contracts/interfaces/adapters/IAdapter.sol"; import {BotList} from "../../../support/BotList.sol"; @@ -38,20 +38,20 @@ import {CreditConfig} from "../../config/CreditConfig.sol"; import {CollateralTokensItem} from "../../config/CreditConfig.sol"; +import {Test} from "forge-std/Test.sol"; + /// @title CreditConfiguratorTest /// @notice Designed for unit test purposes only -contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfiguratorEvents { +contract CreditConfiguratorTest is Test, ICreditManagerV3Events, ICreditConfiguratorEvents { using AddressList for address[]; - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - TokensTestSuite tokenTestSuite; CreditFacadeTestSuite cct; CreditManagerV3 public creditManager; CreditFacadeV3 public creditFacade; CreditConfigurator public creditConfigurator; - WithdrawManager public withdrawManager; + WithdrawalManager public withdrawalManager; address underlying; AdapterMock adapter1; @@ -79,7 +79,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig creditManager = cct.creditManager(); creditFacade = cct.creditFacade(); creditConfigurator = cct.creditConfigurator(); - withdrawManager = cct.withdrawManager(); + withdrawalManager = cct.withdrawalManager(); TARGET_CONTRACT = address(new TargetContractMock()); @@ -251,11 +251,11 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig maxBorrowedAmount: uint128(150000 * WAD), collateralTokens: cTokens, degenNFT: address(0), - withdrawManager: address(0), + withdrawalManager: address(0), expirable: false }); - creditManager = new CreditManagerV3(address(cct.poolMock()), address(withdrawManager)); + creditManager = new CreditManagerV3(address(cct.poolMock()), address(withdrawalManager)); creditFacade = new CreditFacadeV3( address(creditManager), creditOpts.degenNFT, @@ -273,10 +273,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig creditManager.setCreditConfigurator(creditConfiguratorAddr); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetTokenLiquidationThreshold(underlying, DEFAULT_UNDERLYING_LT); - evm.expectEmit(false, false, false, false); + vm.expectEmit(false, false, false, false); emit FeesUpdated( DEFAULT_FEE_INTEREST, DEFAULT_FEE_LIQUIDATION, @@ -285,23 +285,23 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig DEFAULT_LIQUIDATION_PREMIUM_EXPIRED ); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit AllowToken(usdcToken); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetTokenLiquidationThreshold(usdcToken, 6000); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetCreditFacade(address(creditFacade)); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetPriceOracle(priceOracleAddress); /// todo: change - // evm.expectEmit(false, false, false, true); + // vm.expectEmit(false, false, false, true); // emit SetMaxDebtPerBlockMultiplier(uint128(150000 * WAD * DEFAULT_LIMIT_PER_BLOCK_MULTIPLIER)); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetBorrowingLimits(uint128(50 * WAD), uint128(150000 * WAD)); _deploy(configuratorByteCode, 0); @@ -309,77 +309,77 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-2]: all functions revert if called non-configurator function test_CC_02_all_functions_revert_if_called_non_configurator() public { - evm.startPrank(USER); + vm.startPrank(USER); // Token mgmt - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.addCollateralToken(DUMB_ADDRESS, 1); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.allowToken(DUMB_ADDRESS); // Contract mgmt - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.allowContract(DUMB_ADDRESS, DUMB_ADDRESS); // Credit manager mgmt - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.setFees(0, 0, 0, 0, 0); // Upgrades - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.setPriceOracle(); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.setCreditFacade(DUMB_ADDRESS, false); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.upgradeCreditConfigurator(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.setBotList(FRIEND); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.setMaxCumulativeLoss(0); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.resetCumulativeLoss(); - evm.stopPrank(); + vm.stopPrank(); } function test_CC_02A_forbidBorrowing_on_non_pausable_admin() public { - evm.expectRevert(CallerNotPausableAdminException.selector); + vm.expectRevert(CallerNotPausableAdminException.selector); creditConfigurator.forbidBorrowing(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidBorrowing(); } function test_CC_02B_controllerOnly_functions_revert_on_non_controller() public { - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.setLiquidationThreshold(DUMB_ADDRESS, uint16(0)); - evm.expectRevert(CallerNotPausableAdminException.selector); + vm.expectRevert(CallerNotPausableAdminException.selector); creditConfigurator.forbidToken(DUMB_ADDRESS); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.forbidContract(DUMB_ADDRESS); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.setLimits(0, 0); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.setMaxDebtPerBlockMultiplier(0); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.setMaxEnabledTokens(1); - evm.expectRevert(CallerNotControllerException.selector); - creditConfigurator.rampLiquidationThreshold(DUMB_ADDRESS, 0, 0, 0); + vm.expectRevert(CallerNotControllerException.selector); + creditConfigurator.rampLiquidationThreshold(DUMB_ADDRESS, 0, 0); } // @@ -388,23 +388,23 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-3]: addCollateralToken reverts for zero address or in priceFeed function test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.addCollateralToken(address(0), 9300); - evm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); creditConfigurator.addCollateralToken(DUMB_ADDRESS, 9300); - evm.expectRevert(IncorrectTokenContractException.selector); + vm.expectRevert(IncorrectTokenContractException.selector); creditConfigurator.addCollateralToken(address(this), 9300); address unknownPricefeedToken = address(new ERC20("TWPF", "Token without priceFeed")); - evm.expectRevert(IncorrectPriceFeedException.selector); + vm.expectRevert(IncorrectPriceFeedException.selector); creditConfigurator.addCollateralToken(unknownPricefeedToken, 9300); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-4]: addCollateralToken adds new token to creditManager @@ -413,10 +413,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address cLINKToken = tokenTestSuite.addressOf(Tokens.LUNA); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit AllowToken(cLINKToken); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.addCollateralToken(cLINKToken, 8800); assertEq(creditManager.collateralTokensCount(), tokensCountBefore + 1, "Incorrect tokens count"); @@ -432,18 +432,18 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-5]: setLiquidationThreshold reverts for underling token and incorrect values function test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(SetLTForUnderlyingException.selector); + vm.expectRevert(SetLTForUnderlyingException.selector); creditConfigurator.setLiquidationThreshold(underlying, 1); address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); uint16 maxAllowedLT = creditManager.liquidationThresholds(underlying); - evm.expectRevert(IncorrectLiquidationThresholdException.selector); + vm.expectRevert(IncorrectLiquidationThresholdException.selector); creditConfigurator.setLiquidationThreshold(usdcToken, maxAllowedLT + 1); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-6]: setLiquidationThreshold sets liquidation threshold in creditManager @@ -451,10 +451,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); uint16 newLT = 24; - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetTokenLiquidationThreshold(usdcToken, newLT); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setLiquidationThreshold(usdcToken, newLT); assertEq(creditManager.liquidationThresholds(usdcToken), newLT); @@ -462,21 +462,21 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-7]: allowToken and forbidToken reverts for unknown or underlying token function test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); creditConfigurator.allowToken(DUMB_ADDRESS); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); creditConfigurator.allowToken(underlying); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); creditConfigurator.forbidToken(DUMB_ADDRESS); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); creditConfigurator.forbidToken(underlying); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-8]: allowToken doesn't change forbidden mask if its already allowed @@ -484,7 +484,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); uint256 forbiddenMask = creditFacade.forbiddenTokenMask(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowToken(usdcToken); assertEq(creditFacade.forbiddenTokenMask(), forbiddenMask, "Incorrect forbidden mask"); @@ -497,13 +497,13 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); - // evm.prank(address(creditConfigurator)); + // vm.prank(address(creditConfigurator)); // creditManager.setForbidMask(tokenMask); - // evm.expectEmit(true, false, false, false); + // vm.expectEmit(true, false, false, false); // emit AllowToken(usdcToken); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.allowToken(usdcToken); // assertEq(creditManager.forbiddenTokenMask(), 0, "Incorrect forbidden mask"); @@ -514,12 +514,12 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); - // evm.prank(address(creditConfigurator)); + // vm.prank(address(creditConfigurator)); // creditManager.setForbidMask(tokenMask); // uint256 forbiddenMask = creditManager.forbiddenTokenMask(); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.forbidToken(usdcToken); // assertEq(creditManager.forbiddenTokenMask(), forbiddenMask, "Incorrect forbidden mask"); @@ -530,13 +530,13 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig // address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); // uint256 tokenMask = creditManager.getTokenMaskOrRevert(usdcToken); - // evm.prank(address(creditConfigurator)); + // vm.prank(address(creditConfigurator)); // creditManager.setForbidMask(0); - // evm.expectEmit(true, false, false, false); + // vm.expectEmit(true, false, false, false); // emit ForbidToken(usdcToken); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.forbidToken(usdcToken); // assertEq(creditManager.forbiddenTokenMask(), tokenMask, "Incorrect forbidden mask"); @@ -548,74 +548,74 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-12]: allowContract and forbidContract reverts for zero address function test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.allowContract(address(0), address(this)); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.allowContract(address(this), address(0)); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.forbidContract(address(0)); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-12A]: allowContract reverts for non contract addresses function test_CC_12A_allowContract_reverts_for_non_contract_addresses() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); creditConfigurator.allowContract(address(this), DUMB_ADDRESS); - evm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); creditConfigurator.allowContract(DUMB_ADDRESS, address(this)); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-12B]: allowContract reverts for non compartible adapter contract function test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); // Should be reverted, cause undelring token has no .creditManager() method - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.allowContract(address(this), underlying); // Should be reverted, cause it's conncted to another creditManager - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.allowContract(address(this), address(adapterDifferentCM)); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-13]: allowContract reverts for creditManager and creditFacade contracts function test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(TargetContractNotAllowedException.selector); + vm.expectRevert(TargetContractNotAllowedException.selector); creditConfigurator.allowContract(address(creditManager), DUMB_COMPARTIBLE_CONTRACT); - evm.expectRevert(TargetContractNotAllowedException.selector); + vm.expectRevert(TargetContractNotAllowedException.selector); creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(creditFacade)); - evm.expectRevert(TargetContractNotAllowedException.selector); + vm.expectRevert(TargetContractNotAllowedException.selector); creditConfigurator.allowContract(address(creditFacade), DUMB_COMPARTIBLE_CONTRACT); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-14]: allowContract: adapter could not be used twice function test_CC_14_allowContract_adapter_cannot_be_used_twice() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(adapter1)); - evm.expectRevert(AdapterUsedTwiceException.selector); + vm.expectRevert(AdapterUsedTwiceException.selector); creditConfigurator.allowContract(address(adapterDifferentCM), address(adapter1)); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-15]: allowContract allows targetContract <-> adapter and emits event @@ -623,9 +623,9 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address[] memory allowedContracts = creditConfigurator.allowedContracts(); uint256 allowedContractCount = allowedContracts.length; - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit AllowContract(TARGET_CONTRACT, address(adapter1)); assertTrue(!allowedContracts.includes(TARGET_CONTRACT), "Contract already added"); @@ -649,9 +649,9 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig // /// @dev [CC-15A]: allowContract allows universal adapter for universal contract // function test_CC_15A_allowContract_allows_universal_contract() public { - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); - // evm.expectEmit(true, true, false, false); + // vm.expectEmit(true, true, false, false); // emit AllowContract(UNIVERSAL_CONTRACT, address(adapter1)); // creditConfigurator.allowContract(UNIVERSAL_CONTRACT, address(adapter1)); @@ -661,7 +661,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-15A]: allowContract removes existing adapter function test_CC_15A_allowContract_removes_old_adapter_if_it_exists() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); AdapterMock adapter2 = new AdapterMock( @@ -669,7 +669,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig TARGET_CONTRACT ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter2)); assertEq(creditManager.contractToAdapter(TARGET_CONTRACT), address(adapter2), "Incorrect adapter"); @@ -685,15 +685,15 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-16]: forbidContract reverts for unknown contract function test_CC_16_forbidContract_reverts_for_unknown_contract() public { - evm.expectRevert(ContractIsNotAnAllowedAdapterException.selector); + vm.expectRevert(ContractIsNotAnAllowedAdapterException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidContract(TARGET_CONTRACT); } /// @dev [CC-17]: forbidContract forbids contract and emits event function test_CC_17_forbidContract_forbids_contract_and_emits_event() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); creditConfigurator.allowContract(DUMB_COMPARTIBLE_CONTRACT, address(adapter1)); address[] memory allowedContracts = creditConfigurator.allowedContracts(); @@ -702,7 +702,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig assertTrue(allowedContracts.includes(DUMB_COMPARTIBLE_CONTRACT), "Target contract wasnt found"); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit ForbidContract(DUMB_COMPARTIBLE_CONTRACT); creditConfigurator.forbidContract(DUMB_COMPARTIBLE_CONTRACT); @@ -720,7 +720,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig assertTrue(!allowedContracts.includes(DUMB_COMPARTIBLE_CONTRACT), "Target contract wasn't removed"); - evm.stopPrank(); + vm.stopPrank(); } // @@ -731,9 +731,9 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig function test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount() public { (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); - evm.expectRevert(IncorrectLimitsException.selector); + vm.expectRevert(IncorrectLimitsException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setLimits(maxBorrowedAmount, minBorrowedAmount); } @@ -743,9 +743,9 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig uint128 newMinBorrowedAmount = minBorrowedAmount + 1000; uint128 newMaxBorrowedAmount = maxBorrowedAmount + 1000; - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetBorrowingLimits(newMinBorrowedAmount, newMaxBorrowedAmount); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setLimits(newMinBorrowedAmount, newMaxBorrowedAmount); (minBorrowedAmount, maxBorrowedAmount) = creditFacade.debtLimits(); assertEq(minBorrowedAmount, newMinBorrowedAmount, "Incorrect minBorrowedAmount"); @@ -756,19 +756,19 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig function test_CC_23_setFees_reverts_for_incorrect_fees() public { (, uint16 feeLiquidation,, uint16 feeLiquidationExpired,) = creditManager.fees(); - evm.expectRevert(IncorrectParameterException.selector); + vm.expectRevert(IncorrectParameterException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setFees(PERCENTAGE_FACTOR, feeLiquidation, 0, 0, 0); - evm.expectRevert(IncorrectParameterException.selector); + vm.expectRevert(IncorrectParameterException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setFees(PERCENTAGE_FACTOR - 1, feeLiquidation, PERCENTAGE_FACTOR - feeLiquidation, 0, 0); - evm.expectRevert(IncorrectParameterException.selector); + vm.expectRevert(IncorrectParameterException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setFees( PERCENTAGE_FACTOR - 1, feeLiquidation, @@ -780,7 +780,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-25]: setFees updates LT for underlying and for all tokens which bigger than new LT function test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); (uint16 feeInterest,,,,) = creditManager.fees(); @@ -792,10 +792,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig uint256 wethLTBefore = creditManager.liquidationThresholds(wethToken); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetTokenLiquidationThreshold(usdcToken, uint16(expectedLT)); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetTokenLiquidationThreshold(underlying, uint16(expectedLT)); creditConfigurator.setFees( @@ -829,7 +829,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig uint16 newFeeLiquidationExpired = feeLiquidationExpired * 2; uint16 newLiquidationPremiumExpired = (PERCENTAGE_FACTOR - liquidationDiscountExpired) * 2; - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FeesUpdated( newFeeInterest, newFeeLiquidation, @@ -838,7 +838,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig newLiquidationPremiumExpired ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setFees( newFeeInterest, newFeeLiquidation, @@ -862,44 +862,44 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-28]: setPriceOracle upgrades priceOracleCorrectly and doesnt change facade function test_CC_28_setPriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cct.addressProvider().setPriceOracle(DUMB_ADDRESS); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetPriceOracle(DUMB_ADDRESS); creditConfigurator.setPriceOracle(); assertEq(address(creditManager.priceOracle()), DUMB_ADDRESS); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CC-29]: setPriceOracle upgrades priceOracleCorrectly and doesnt change facade function test_CC_29_setCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.setCreditFacade(address(0), false); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); creditConfigurator.upgradeCreditConfigurator(address(0)); - evm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); creditConfigurator.setCreditFacade(DUMB_ADDRESS, false); - evm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); + vm.expectRevert(abi.encodeWithSelector(AddressIsNotContractException.selector, DUMB_ADDRESS)); creditConfigurator.upgradeCreditConfigurator(DUMB_ADDRESS); - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.setCreditFacade(underlying, false); - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.upgradeCreditConfigurator(underlying); - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.setCreditFacade(address(adapterDifferentCM), false); - evm.expectRevert(IncompatibleContractException.selector); + vm.expectRevert(IncompatibleContractException.selector); creditConfigurator.upgradeCreditConfigurator(address(adapterDifferentCM)); } @@ -920,10 +920,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig true ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setCreditFacade(address(initialCf), migrateSettings); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setExpirationDate(uint40(block.timestamp + 1)); creditFacade = initialCf; @@ -940,10 +940,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig uint40 expirationDate = creditFacade.expirationDate(); (uint128 minBorrowedAmount, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetCreditFacade(address(cf)); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setCreditFacade(address(cf), migrateSettings); assertEq(address(creditManager.priceOracle()), cct.addressProvider().getPriceOracle()); @@ -979,7 +979,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address botList = address(new BotList(address(cct.addressProvider()))); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setBotList(botList); CreditFacadeV3 cf = new CreditFacadeV3( @@ -988,7 +988,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig false ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setCreditFacade(address(cf), migrateSettings); address botList2 = cf.botList(); @@ -999,10 +999,10 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-31]: uupgradeCreditConfigurator upgrades creditConfigurator function test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator() public { - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit CreditConfiguratorUpgraded(DUMB_COMPARTIBLE_CONTRACT); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.upgradeCreditConfigurator(DUMB_COMPARTIBLE_CONTRACT); assertEq(address(creditManager.creditConfigurator()), DUMB_COMPARTIBLE_CONTRACT); @@ -1018,17 +1018,17 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig // setUp(); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.setBorrowingAllowance(initialIDF); // (, bool isIncreaseDebtFobidden,) = creditFacade.params(); // if (isIncreaseDebtFobidden != isIDF) { - // evm.expectEmit(false, false, false, true); + // vm.expectEmit(false, false, false, true); // emit SetIncreaseDebtForbiddenMode(isIDF); // } - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.setBorrowingAllowance(isIDF); // (, isIncreaseDebtFobidden,) = creditFacade.params(); @@ -1042,16 +1042,16 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig function test_CC_33_setMaxDebtLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock() public { // (, uint128 maxBorrowedAmount) = creditFacade.debtLimits(); - // evm.prank(CONFIGURATOR); - // evm.expectRevert(IncorrectLimitsException.selector); + // vm.prank(CONFIGURATOR); + // vm.expectRevert(IncorrectLimitsException.selector); // creditConfigurator.setMaxDebtLimitPerBlock(maxBorrowedAmount - 1); // uint128 newLimitBlock = (maxBorrowedAmount * 12) / 10; - // evm.expectEmit(false, false, false, true); + // vm.expectEmit(false, false, false, true); // emit SetMaxDebtPerBlockMultiplier(newLimitBlock); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.setMaxDebtLimitPerBlock(newLimitBlock); // (uint128 maxBorrowedAmountPerBlock,,) = creditFacade.params(); @@ -1061,27 +1061,29 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-34]: setExpirationDate reverts if the new expiration date is stale, otherwise sets it function test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets() public { - cct.testFacadeWithExpiration(); - creditFacade = cct.creditFacade(); + // cct.testFacadeWithExpiration(); + // creditFacade = cct.creditFacade(); + + _setUp({withDegenNFT: false, expirable: true, supportQuotas: true}); uint40 expirationDate = creditFacade.expirationDate(); - evm.prank(CONFIGURATOR); - evm.expectRevert(IncorrectExpirationDateException.selector); + vm.prank(CONFIGURATOR); + vm.expectRevert(IncorrectExpirationDateException.selector); creditConfigurator.setExpirationDate(expirationDate); - evm.warp(block.timestamp + 10); + vm.warp(block.timestamp + 10); - evm.prank(CONFIGURATOR); - evm.expectRevert(IncorrectExpirationDateException.selector); + vm.prank(CONFIGURATOR); + vm.expectRevert(IncorrectExpirationDateException.selector); creditConfigurator.setExpirationDate(expirationDate + 1); uint40 newExpirationDate = uint40(block.timestamp + 1); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetExpirationDate(newExpirationDate); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setExpirationDate(newExpirationDate); expirationDate = creditFacade.expirationDate(); @@ -1091,13 +1093,13 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-37]: setMaxEnabledTokens works correctly and emits event function test_CC_37_setMaxEnabledTokens_works_correctly() public { - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); creditConfigurator.setMaxEnabledTokens(255); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetMaxEnabledTokens(255); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setMaxEnabledTokens(255); assertEq(creditManager.maxAllowedEnabledTokenLength(), 255, "Credit manager max enabled tokens incorrect"); @@ -1105,13 +1107,13 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-38]: addEmergencyLiquidator works correctly and emits event function test_CC_38_addEmergencyLiquidator_works_correctly() public { - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit AddEmergencyLiquidator(DUMB_ADDRESS); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); assertTrue( @@ -1121,16 +1123,16 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-39]: removeEmergencyLiquidator works correctly and emits event function test_CC_39_removeEmergencyLiquidator_works_correctly() public { - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.removeEmergencyLiquidator(DUMB_ADDRESS); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.addEmergencyLiquidator(DUMB_ADDRESS); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit RemoveEmergencyLiquidator(DUMB_ADDRESS); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.removeEmergencyLiquidator(DUMB_ADDRESS); assertTrue( @@ -1140,16 +1142,16 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-40]: forbidAdapter works correctly and emits event function test_CC_40_forbidAdapter_works_correctly() public { - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditConfigurator.forbidAdapter(DUMB_ADDRESS); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit ForbidAdapter(address(adapter1)); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidAdapter(address(adapter1)); assertEq( @@ -1163,7 +1165,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig /// @dev [CC-41]: allowedContracts migrate correctly function test_CC_41_allowedContracts_are_migrated_correctly_for_new_CC() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(TARGET_CONTRACT, address(adapter1)); CollateralToken[] memory cTokens; @@ -1173,7 +1175,7 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig maxBorrowedAmount: uint128(150000 * WAD), collateralTokens: cTokens, degenNFT: address(0), - withdrawManager: address(0), + withdrawalManager: address(0), expirable: false }); @@ -1208,27 +1210,27 @@ contract CreditConfiguratorTest is DSTest, ICreditManagerV3Events, ICreditConfig address dai = tokenTestSuite.addressOf(Tokens.DAI); address usdc = tokenTestSuite.addressOf(Tokens.USDC); - evm.expectRevert(SetLTForUnderlyingException.selector); - evm.prank(CONFIGURATOR); - creditConfigurator.rampLiquidationThreshold(dai, 9000, uint40(block.timestamp), 1); + vm.expectRevert(SetLTForUnderlyingException.selector); + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(dai, 9000, 1); - evm.expectRevert(IncorrectLiquidationThresholdException.selector); - evm.prank(CONFIGURATOR); - creditConfigurator.rampLiquidationThreshold(usdc, 9999, uint40(block.timestamp), 1); + vm.expectRevert(IncorrectLiquidationThresholdException.selector); + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(usdc, 9999, 1); uint16 initialLT = creditManager.liquidationThresholds(usdc); - evm.expectCall( - address(creditManager), - abi.encodeCall(CreditManagerV3.rampLiquidationThreshold, (usdc, 8900, uint40(block.timestamp + 5), 1000)) - ); + // vm.expectCall( + // address(creditManager), + // abi.encodeCall(CreditManagerV3.rampLiquidationThreshold, (usdc, 8900, uint40(block.timestamp + 5), 1000)) + // ); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ScheduleTokenLiquidationThresholdRamp( - usdc, initialLT, 8900, uint40(block.timestamp + 5), uint40(block.timestamp + 1005) + usdc, initialLT, 8900, uint40(block.timestamp), uint40(block.timestamp + 1000) ); - evm.prank(CONFIGURATOR); - creditConfigurator.rampLiquidationThreshold(usdc, 8900, uint40(block.timestamp + 5), 1000); + vm.prank(CONFIGURATOR); + creditConfigurator.rampLiquidationThreshold(usdc, 8900, 1000); } } diff --git a/contracts/test/unit/credit/CreditFacade.t.sol b/contracts/test/unit/credit/CreditFacade.t.sol index 424d08b6..16503c76 100644 --- a/contracts/test/unit/credit/CreditFacade.t.sol +++ b/contracts/test/unit/credit/CreditFacade.t.sol @@ -9,11 +9,11 @@ import {IWETH} from "@gearbox-protocol/core-v2/contracts/interfaces/external/IWE import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; -import {CreditAccount} from "@gearbox-protocol/core-v2/contracts/credit/CreditAccount.sol"; -import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; - import {BotList} from "../../../support/BotList.sol"; +import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; +import "../../../interfaces/IAccountFactory.sol"; +import "../../../interfaces/ICreditAccount.sol"; import "../../../interfaces/ICreditFacade.sol"; import { ICreditManagerV3, @@ -21,10 +21,10 @@ import { ClosureAction, ManageDebtAction } from "../../../interfaces/ICreditManagerV3.sol"; -import {AllowanceAction} from "../../../interfaces/ICreditConfigurator.sol"; +import {AllowanceAction} from "../../../interfaces/ICreditConfiguratorV3.sol"; import {ICreditFacadeEvents} from "../../../interfaces/ICreditFacade.sol"; import {IDegenNFT, IDegenNFTExceptions} from "@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol"; -import {IWithdrawManager} from "../../../interfaces/IWithdrawManager.sol"; +import {IWithdrawalManager} from "../../../interfaces/IWithdrawalManager.sol"; // DATA import {MultiCall, MultiCallOps} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; @@ -64,13 +64,7 @@ uint16 constant REFERRAL_CODE = 23; /// @title CreditFacadeTest /// @notice Designed for unit test purposes only -contract CreditFacadeTest is - DSTest, - BalanceHelper, - CreditFacadeTestHelper, - ICreditManagerV3Events, - ICreditFacadeEvents -{ +contract CreditFacadeTest is BalanceHelper, CreditFacadeTestHelper, ICreditManagerV3Events, ICreditFacadeEvents { using CreditFacadeCalls for CreditFacadeMulticaller; AccountFactory accountFactory; @@ -86,9 +80,13 @@ contract CreditFacadeTest is _setUp(_underlying, false, false, false, 1); } - function _setUp(Tokens _underlying, bool withDegenNFT, bool expirable, bool supportQuotas, uint8 accountFactoryVer) - internal - { + function _setUp( + Tokens _underlying, + bool withDegenNFT, + bool withExpiration, + bool supportQuotas, + uint8 accountFactoryVer + ) internal { tokenTestSuite = new TokensTestSuite(); tokenTestSuite.topUpWETH{value: 100 * WAD}(); @@ -97,7 +95,11 @@ contract CreditFacadeTest is _underlying ); - cft = new CreditFacadeTestSuite(creditConfig, withDegenNFT, expirable, supportQuotas, accountFactoryVer); + cft = new CreditFacadeTestSuite({ _creditConfig: creditConfig, + supportQuotas: supportQuotas, + withDegenNFT: withDegenNFT, + withExpiration: withExpiration, + accountFactoryVer: accountFactoryVer}); underlying = tokenTestSuite.addressOf(_underlying); creditManager = cft.creditManager(); @@ -112,11 +114,11 @@ contract CreditFacadeTest is address(targetMock) ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(address(targetMock), address(adapterMock)); - evm.label(address(adapterMock), "AdapterMock"); - evm.label(address(targetMock), "TargetContractMock"); + vm.label(address(adapterMock), "AdapterMock"); + vm.label(address(targetMock), "TargetContractMock"); } /// @@ -132,17 +134,17 @@ contract CreditFacadeTest is function _prepareForWETHTest(address tester) internal { address weth = tokenTestSuite.addressOf(Tokens.WETH); - evm.startPrank(tester); + vm.startPrank(tester); if (tester.balance > 0) { IWETH(weth).deposit{value: tester.balance}(); } IERC20(weth).transfer(address(this), tokenTestSuite.balanceOf(Tokens.WETH, tester)); - evm.stopPrank(); + vm.stopPrank(); expectBalance(Tokens.WETH, tester, 0); - evm.deal(tester, WETH_TEST_AMOUNT); + vm.deal(tester, WETH_TEST_AMOUNT); } function _checkForWETHTest() internal { @@ -156,7 +158,7 @@ contract CreditFacadeTest is } function _prepareMockCall() internal returns (bytes memory callData) { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.allowContract(address(targetMock), address(adapterMock)); callData = abi.encodeWithSignature("hello(string)", "world"); @@ -172,7 +174,7 @@ contract CreditFacadeTest is // /// @dev [FA-1]: constructor reverts for zero address // function test_FA_01_constructor_reverts_for_zero_address() public { - // evm.expectRevert(ZeroAddressException.selector); + // vm.expectRevert(ZeroAddressException.selector); // new CreditFacadeV3(address(0), address(0), address(0), false); // } @@ -187,7 +189,13 @@ contract CreditFacadeTest is assertTrue(creditFacade.whitelisted() == false, "Incorrect whitelisted"); - cft.testFacadeWithDegenNFT(); + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); creditFacade = cft.creditFacade(); assertEq(creditFacade.degenNFT(), address(cft.degenNFT()), "Incorrect degenNFT"); @@ -201,12 +209,12 @@ contract CreditFacadeTest is /// @dev [FA-2]: functions reverts if borrower has no account function test_FA_02_functions_reverts_if_borrower_has_no_account() public { - evm.expectRevert(CreditAccountNotExistsException.selector); - evm.prank(USER); + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); creditFacade.closeCreditAccount(DUMB_ADDRESS, FRIEND, 0, false, multicallBuilder()); - evm.expectRevert(CreditAccountNotExistsException.selector); - evm.prank(USER); + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); creditFacade.closeCreditAccount( DUMB_ADDRESS, FRIEND, @@ -220,12 +228,12 @@ contract CreditFacadeTest is ) ); - evm.expectRevert(CreditAccountNotExistsException.selector); - evm.prank(USER); + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); creditFacade.liquidateCreditAccount(DUMB_ADDRESS, DUMB_ADDRESS, 0, false, multicallBuilder()); - evm.expectRevert(CreditAccountNotExistsException.selector); - evm.prank(USER); + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); creditFacade.multicall( DUMB_ADDRESS, multicallBuilder( @@ -236,11 +244,11 @@ contract CreditFacadeTest is ) ); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.allowContract(address(targetMock), address(adapterMock)); - evm.expectRevert(CreditAccountNotExistsException.selector); - evm.prank(USER); + vm.expectRevert(CreditAccountNotExistsException.selector); + vm.prank(USER); creditFacade.transferAccountOwnership(DUMB_ADDRESS, FRIEND); } @@ -252,7 +260,7 @@ contract CreditFacadeTest is _prepareForWETHTest(); - evm.prank(USER); + vm.prank(USER); creditFacade.openCreditAccount{value: WETH_TEST_AMOUNT}( DAI_ACCOUNT_AMOUNT, USER, @@ -262,6 +270,7 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) }) ), + false, 0 ); _checkForWETHTest(); @@ -270,10 +279,10 @@ contract CreditFacadeTest is function test_FA_03C_closeCreditAccount_correctly_wraps_ETH() public { (address creditAccount,) = _openTestCreditAccount(); - evm.roll(block.number + 1); + vm.roll(block.number + 1); _prepareForWETHTest(); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount{value: WETH_TEST_AMOUNT}(creditAccount, USER, 0, false, multicallBuilder()); _checkForWETHTest(); } @@ -281,7 +290,7 @@ contract CreditFacadeTest is function test_FA_03D_liquidate_correctly_wraps_ETH() public { (address creditAccount,) = _openTestCreditAccount(); - evm.roll(block.number + 1); + vm.roll(block.number + 1); tokenTestSuite.burn(Tokens.DAI, creditAccount, tokenTestSuite.balanceOf(Tokens.DAI, creditAccount)); @@ -291,7 +300,7 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.DAI, LIQUIDATOR, DAI_ACCOUNT_AMOUNT); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); creditFacade.liquidateCreditAccount{value: WETH_TEST_AMOUNT}( creditAccount, LIQUIDATOR, 0, false, multicallBuilder() ); @@ -304,7 +313,7 @@ contract CreditFacadeTest is // MULTICALL _prepareForWETHTest(); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall{value: WETH_TEST_AMOUNT}( creditAccount, multicallBuilder( @@ -327,7 +336,7 @@ contract CreditFacadeTest is { (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); - evm.startPrank(USER); + vm.startPrank(USER); MultiCall[] memory calls = multicallBuilder( MultiCall({ @@ -335,22 +344,27 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) }) ); - evm.expectRevert(AccountTransferNotAllowedException.selector); - creditFacade.openCreditAccount(minBorrowedAmount, FRIEND, calls, 0); + vm.expectRevert(AccountTransferNotAllowedException.selector); + creditFacade.openCreditAccount(minBorrowedAmount, FRIEND, calls, false, 0); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [FA-4B]: openCreditAccount reverts if user has no NFT for degen mode function test_FA_04B_openCreditAccount_reverts_for_non_whitelisted_account() public { - cft.testFacadeWithDegenNFT(); - creditFacade = cft.creditFacade(); + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); - evm.expectRevert(IDegenNFTExceptions.InsufficientBalanceException.selector); + vm.expectRevert(IDegenNFTExceptions.InsufficientBalanceException.selector); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.openCreditAccount( minBorrowedAmount, FRIEND, @@ -360,18 +374,24 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) }) ), + false, 0 ); } /// @dev [FA-4C]: openCreditAccount opens account and burns token function test_FA_04C_openCreditAccount_burns_token_in_whitelisted_mode() public { - cft.testFacadeWithDegenNFT(); - creditFacade = cft.creditFacade(); + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: true, + withExpiration: false, + supportQuotas: false, + accountFactoryVer: 1 + }); IDegenNFT degenNFT = IDegenNFT(creditFacade.degenNFT()); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); degenNFT.mint(USER, 2); expectBalance(address(degenNFT), USER, 2); @@ -384,7 +404,7 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.DAI, USER, DAI_ACCOUNT_AMOUNT); - evm.prank(USER); + vm.prank(USER); creditFacade.openCreditAccount( DAI_ACCOUNT_AMOUNT, USER, @@ -394,6 +414,7 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT)) }) ), + false, 0 ); @@ -406,22 +427,22 @@ contract CreditFacadeTest is // address expectedCreditAccountAddress = accountFactory.head(); - // evm.prank(FRIEND); + // vm.prank(FRIEND); // creditFacade.approveAccountTransfer(USER, true); - // evm.expectCall( + // vm.expectCall( // address(creditManager), // abi.encodeCall( // "openCreditAccount(uint256,address)", (DAI_ACCOUNT_AMOUNT * LEVERAGE) / LEVERAGE_DECIMALS, FRIEND // ) // ); - // evm.expectEmit(true, true, false, true); + // vm.expectEmit(true, true, false, true); // emit OpenCreditAccount( // FRIEND, expectedCreditAccountAddress, (DAI_ACCOUNT_AMOUNT * LEVERAGE) / LEVERAGE_DECIMALS, REFERRAL_CODE // ); - // evm.expectCall( + // vm.expectCall( // address(creditManager), // abi.encodeCall( // "addCollateral(address,address,address,uint256)", @@ -432,10 +453,10 @@ contract CreditFacadeTest is // ) // ); - // evm.expectEmit(true, true, false, true); + // vm.expectEmit(true, true, false, true); // emit AddCollateral(creditAccount, FRIEND, underlying, DAI_ACCOUNT_AMOUNT); - // evm.prank(USER); + // vm.prank(USER); // creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, FRIEND, LEVERAGE, REFERRAL_CODE); // } @@ -443,7 +464,7 @@ contract CreditFacadeTest is function test_FA_07_openCreditAccountMulticall_reverts_if_borrowing_forbidden() public { (uint256 minBorrowedAmount,) = creditFacade.debtLimits(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidBorrowing(); MultiCall[] memory calls = multicallBuilder( @@ -453,14 +474,14 @@ contract CreditFacadeTest is }) ); - evm.expectRevert(BorrowedBlockLimitException.selector); - evm.prank(USER); - creditFacade.openCreditAccount(minBorrowedAmount, USER, calls, 0); + vm.expectRevert(BorrowedBlockLimitException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(minBorrowedAmount, USER, calls, false, 0); } /// @dev [FA-8]: openCreditAccount runs operations in correct order function test_FA_08_openCreditAccountMulticall_runs_operations_in_correct_order() public { - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.approveAccountTransfer(USER, true); RevocationPair[] memory revocations = new RevocationPair[](1); @@ -485,35 +506,36 @@ contract CreditFacadeTest is // EXPECTED STACK TRACE & EVENTS - evm.expectCall( - address(creditManager), abi.encodeCall(ICreditManagerV3.openCreditAccount, (DAI_ACCOUNT_AMOUNT, FRIEND)) + vm.expectCall( + address(creditManager), + abi.encodeCall(ICreditManagerV3.openCreditAccount, (DAI_ACCOUNT_AMOUNT, FRIEND, false)) ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit OpenCreditAccount(expectedCreditAccountAddress, FRIEND, USER, DAI_ACCOUNT_AMOUNT, REFERRAL_CODE); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit StartMultiCall(expectedCreditAccountAddress); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.addCollateral, (USER, expectedCreditAccountAddress, underlying, DAI_ACCOUNT_AMOUNT) ) ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit AddCollateral(expectedCreditAccountAddress, underlying, DAI_ACCOUNT_AMOUNT); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.revokeAdapterAllowances, (expectedCreditAccountAddress, revocations)) ); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, @@ -521,8 +543,8 @@ contract CreditFacadeTest is ) ); - evm.prank(USER); - creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, FRIEND, calls, REFERRAL_CODE); + vm.prank(USER); + creditFacade.openCreditAccount(DAI_ACCOUNT_AMOUNT, FRIEND, calls, false, REFERRAL_CODE); } /// @dev [FA-9]: openCreditAccount cant open credit account with hf <1; @@ -530,15 +552,15 @@ contract CreditFacadeTest is uint256 amount, uint8 token1 ) public { - evm.assume(amount > 10000 && amount < DAI_ACCOUNT_AMOUNT); - evm.assume(token1 > 0 && token1 < creditManager.collateralTokensCount()); + vm.assume(amount > 10000 && amount < DAI_ACCOUNT_AMOUNT); + vm.assume(token1 > 0 && token1 < creditManager.collateralTokensCount()); tokenTestSuite.mint(Tokens.DAI, address(creditManager.poolService()), type(uint96).max); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setMaxDebtPerBlockMultiplier(type(uint8).max); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setLimits(1, type(uint96).max); (address collateral,) = creditManager.collateralTokens(token1); @@ -560,10 +582,10 @@ contract CreditFacadeTest is bool shouldRevert = twvUSD < borrowedAmountUSD; if (shouldRevert) { - evm.expectRevert(NotEnoughCollateralException.selector); + vm.expectRevert(NotEnoughCollateralException.selector); } - evm.prank(USER); + vm.prank(USER); creditFacade.openCreditAccount( DAI_ACCOUNT_AMOUNT, USER, @@ -573,15 +595,16 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (collateral, amount)) }) ), + false, REFERRAL_CODE ); } /// @dev [FA-10]: decrease debt during openCreditAccount function test_FA_10_decrease_debt_forbidden_during_openCreditAccount() public { - evm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); - evm.prank(USER); + vm.prank(USER); creditFacade.openCreditAccount( DAI_ACCOUNT_AMOUNT, @@ -592,6 +615,7 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.decreaseDebt, 812) }) ), + false, REFERRAL_CODE ); } @@ -608,9 +632,9 @@ contract CreditFacadeTest is tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); tokenTestSuite.approve(Tokens.DAI, FRIEND, address(creditManager)); - evm.roll(2); + vm.roll(2); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setMaxDebtPerBlockMultiplier(1); MultiCall[] memory calls = multicallBuilder( @@ -620,13 +644,13 @@ contract CreditFacadeTest is }) ); - evm.prank(FRIEND); - creditFacade.openCreditAccount(_maxDebt - _minDebt, FRIEND, calls, 0); + vm.prank(FRIEND); + creditFacade.openCreditAccount(_maxDebt - _minDebt, FRIEND, calls, false, 0); - evm.expectRevert(BorrowedBlockLimitException.selector); + vm.expectRevert(BorrowedBlockLimitException.selector); - evm.prank(USER); - creditFacade.openCreditAccount(_minDebt + 1, USER, calls, 0); + vm.prank(USER); + creditFacade.openCreditAccount(_minDebt + 1, USER, calls, false, 0); } /// @dev [FA-11B]: openCreditAccount reverts if amount < minAmount or amount > maxAmount @@ -642,13 +666,13 @@ contract CreditFacadeTest is }) ); - evm.expectRevert(BorrowAmountOutOfLimitsException.selector); - evm.prank(USER); - creditFacade.openCreditAccount(minBorrowedAmount - 1, USER, calls, 0); + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(minBorrowedAmount - 1, USER, calls, false, 0); - evm.expectRevert(BorrowAmountOutOfLimitsException.selector); - evm.prank(USER); - creditFacade.openCreditAccount(maxBorrowedAmount + 1, USER, calls, 0); + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.prank(USER); + creditFacade.openCreditAccount(maxBorrowedAmount + 1, USER, calls, false, 0); } // @@ -665,40 +689,44 @@ contract CreditFacadeTest is MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) ); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (creditAccount))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit StartMultiCall(creditAccount); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ExecuteOrder(address(targetMock)); - evm.expectCall(creditAccount, abi.encodeCall(CreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); - evm.expectCall(address(targetMock), DUMB_CALLDATA); + vm.expectCall(address(targetMock), DUMB_CALLDATA); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (address(1)))); - - evm.expectCall( - address(creditManager), - abi.encodeCall( - ICreditManagerV3.closeCreditAccount, - (creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, FRIEND, 1, 10, DAI_ACCOUNT_AMOUNT, true) - ) + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) ); - evm.expectEmit(true, true, false, false); + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // ICreditManagerV3.closeCreditAccount, + // (creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, FRIEND, 1, 10, DAI_ACCOUNT_AMOUNT, true) + // ) + // ); + + vm.expectEmit(true, true, false, false); emit CloseCreditAccount(creditAccount, USER, FRIEND); // increase block number, cause it's forbidden to close ca in the same block - evm.roll(block.number + 1); + vm.roll(block.number + 1); - evm.prank(USER); + vm.prank(USER); creditFacade.closeCreditAccount(creditAccount, FRIEND, 10, true, calls); assertEq0(targetMock.callData(), DUMB_CALLDATA, "Incorrect calldata"); @@ -711,13 +739,13 @@ contract CreditFacadeTest is // _openTestCreditAccount(); - // evm.roll(block.number + 1); + // vm.roll(block.number + 1); - // evm.expectRevert(ForbiddenDuringClosureException.selector); + // vm.expectRevert(ForbiddenDuringClosureException.selector); // // It's used dumb calldata, cause all calls to creditFacade are forbidden - // evm.prank(USER); + // vm.prank(USER); // creditFacade.closeCreditAccount( // FRIEND, 0, true, multicallBuilder(MultiCall({target: address(creditFacade), callData: DUMB_CALLDATA})) // ); @@ -731,9 +759,9 @@ contract CreditFacadeTest is function test_FA_14_liquidateCreditAccount_reverts_if_hf_is_greater_than_1() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectRevert(CreditAccountNotLiquidatableException.selector); + vm.expectRevert(CreditAccountNotLiquidatableException.selector); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); creditFacade.liquidateCreditAccount(creditAccount, LIQUIDATOR, 0, true, multicallBuilder()); } @@ -751,51 +779,55 @@ contract CreditFacadeTest is // EXPECTED STACK TRACE & EVENTS - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (creditAccount))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit StartMultiCall(creditAccount); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit ExecuteOrder(address(targetMock)); - evm.expectCall(creditAccount, abi.encodeCall(CreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); - evm.expectCall(address(targetMock), DUMB_CALLDATA); + vm.expectCall(address(targetMock), DUMB_CALLDATA); - evm.expectEmit(false, false, false, false); + vm.expectEmit(false, false, false, false); emit FinishMultiCall(); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (address(1)))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); // Total value = 2 * DAI_ACCOUNT_AMOUNT, cause we have x2 leverage uint256 totalValue = 2 * DAI_ACCOUNT_AMOUNT; uint256 debtWithInterest = DAI_ACCOUNT_AMOUNT; - evm.expectCall( - address(creditManager), - abi.encodeCall( - ICreditManagerV3.closeCreditAccount, - ( - creditAccount, - ClosureAction.LIQUIDATE_ACCOUNT, - totalValue, - LIQUIDATOR, - FRIEND, - 1, - 10, - debtWithInterest, - true - ) - ) - ); + // vm.expectCall( + // address(creditManager), + // abi.encodeCall( + // ICreditManagerV3.closeCreditAccount, + // ( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // 1, + // 10, + // debtWithInterest, + // true + // ) + // ) + // ); - evm.expectEmit(true, true, true, true); + vm.expectEmit(true, true, true, true); emit LiquidateCreditAccount(creditAccount, USER, LIQUIDATOR, FRIEND, ClosureAction.LIQUIDATE_ACCOUNT, 0); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); } @@ -815,7 +847,7 @@ contract CreditFacadeTest is _makeAccountsLiquitable(); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); @@ -825,7 +857,7 @@ contract CreditFacadeTest is /// @dev [FA-15B]: CreditFacade is paused after too much cumulative loss from liquidations function test_FA_15B_liquidateCreditAccount_pauses_CreditFacade_on_too_much_loss() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setMaxCumulativeLoss(1); (address creditAccount,) = _openTestCreditAccount(); @@ -838,7 +870,7 @@ contract CreditFacadeTest is _makeAccountsLiquitable(); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); assertTrue(creditFacade.paused(), "Credit manager was not paused"); @@ -857,9 +889,9 @@ contract CreditFacadeTest is (address creditAccount,) = _openTestCreditAccount(); _makeAccountsLiquitable(); - evm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, ADD_COLLATERAL_PERMISSION)); + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, ADD_COLLATERAL_PERMISSION)); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); // It's used dumb calldata, cause all calls to creditFacade are forbidden creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); @@ -875,38 +907,38 @@ contract CreditFacadeTest is _openTestCreditAccount(); _makeAccountsLiquitable(); - evm.expectRevert(ZeroAddressException.selector); + vm.expectRevert(ZeroAddressException.selector); - evm.prank(LIQUIDATOR); + vm.prank(LIQUIDATOR); // It's used dumb calldata, cause all calls to creditFacade are forbidden creditFacade.liquidateCreditAccount(USER, address(0), 10, true, calls); } - // - // INCREASE & DECREASE DEBT - // + // // + // // INCREASE & DECREASE DEBT + // // /// @dev [FA-17]: increaseDebt executes function as expected function test_FA_17_increaseDebt_executes_actions_as_expected() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.manageDebt, (creditAccount, 512, 1, ManageDebtAction.INCREASE_DEBT)) ); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit IncreaseDebt(creditAccount, 512); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -925,9 +957,9 @@ contract CreditFacadeTest is uint8 maxDebtPerBlockMultiplier = creditFacade.maxDebtPerBlockMultiplier(); (, uint128 maxDebt) = creditFacade.debtLimits(); - evm.expectRevert(BorrowedBlockLimitException.selector); + vm.expectRevert(BorrowedBlockLimitException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -949,9 +981,9 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.DAI, address(cft.poolMock()), amount); - evm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -967,12 +999,12 @@ contract CreditFacadeTest is function test_FA_18C_increaseDebt_revets_isIncreaseDebtForbidden_is_enabled() public { (address creditAccount,) = _openTestCreditAccount(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidBorrowing(); - evm.expectRevert(BorrowedBlockLimitException.selector); + vm.expectRevert(BorrowedBlockLimitException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -990,7 +1022,7 @@ contract CreditFacadeTest is address link = tokenTestSuite.addressOf(Tokens.LINK); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1001,12 +1033,12 @@ contract CreditFacadeTest is ) ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.forbidToken(link); - evm.expectRevert(ForbiddenTokensException.selector); + vm.expectRevert(ForbiddenTokensException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1022,22 +1054,22 @@ contract CreditFacadeTest is function test_FA_19_decreaseDebt_executes_actions_as_expected() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.manageDebt, (creditAccount, 512, 1, ManageDebtAction.DECREASE_DEBT)) ); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit DecreaseDebt(creditAccount, 512); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1059,9 +1091,9 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.DAI, address(cft.poolMock()), amount); - evm.expectRevert(BorrowAmountOutOfLimitsException.selector); + vm.expectRevert(BorrowAmountOutOfLimitsException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1088,12 +1120,12 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.USDC, USER, 512); tokenTestSuite.approve(Tokens.USDC, USER, address(creditManager)); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, 512)) ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit AddCollateral(creditAccount, usdcToken, 512); // TODO: change test @@ -1105,7 +1137,7 @@ contract CreditFacadeTest is }) ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); expectBalance(Tokens.USDC, creditAccount, 512); @@ -1116,7 +1148,7 @@ contract CreditFacadeTest is function test_FA_21C_addCollateral_optimizes_enabled_tokens() public { (address creditAccount,) = _openTestCreditAccount(); - evm.prank(USER); + vm.prank(USER); creditFacade.approveAccountTransfer(FRIEND, true); address usdcToken = tokenTestSuite.addressOf(Tokens.USDC); @@ -1124,12 +1156,12 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.USDC, FRIEND, 512); tokenTestSuite.approve(Tokens.USDC, FRIEND, address(creditManager)); - // evm.expectCall( + // vm.expectCall( // address(creditManager), // abi.encodeCall(ICreditManagerV3.checkEnabledTokensLength.selector, creditAccount) // ); - // evm.prank(FRIEND); + // vm.prank(FRIEND); // creditFacade.addCollateral(USER, usdcToken, 512); } @@ -1141,9 +1173,9 @@ contract CreditFacadeTest is function test_FA_22_multicall_reverts_if_calldata_length_is_less_than_4_bytes() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectRevert(IncorrectCallDataException.selector); + vm.expectRevert(IncorrectCallDataException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder(MultiCall({target: address(creditFacade), callData: bytes("123")})) ); @@ -1155,9 +1187,9 @@ contract CreditFacadeTest is bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); - evm.expectRevert(UnknownMethodException.selector); + vm.expectRevert(UnknownMethodException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder(MultiCall({target: address(creditFacade), callData: DUMB_CALLDATA})) ); @@ -1169,9 +1201,9 @@ contract CreditFacadeTest is bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); - evm.expectRevert(TargetContractNotAllowedException.selector); + vm.expectRevert(TargetContractNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder(MultiCall({target: address(creditManager), callData: DUMB_CALLDATA})) ); @@ -1182,9 +1214,9 @@ contract CreditFacadeTest is (address creditAccount,) = _openTestCreditAccount(); bytes memory DUMB_CALLDATA = abi.encodeWithSignature("hello(string)", "world"); - evm.expectRevert(TargetContractNotAllowedException.selector); + vm.expectRevert(TargetContractNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder(MultiCall({target: DUMB_ADDRESS, callData: DUMB_CALLDATA})) ); @@ -1200,38 +1232,38 @@ contract CreditFacadeTest is uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit StartMultiCall(creditAccount); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT)) ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit AddCollateral(creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.manageDebt, (creditAccount, 256, usdcMask | 1, ManageDebtAction.INCREASE_DEBT) ) ); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit IncreaseDebt(creditAccount, 256); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 3, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1257,38 +1289,38 @@ contract CreditFacadeTest is uint256 usdcMask = creditManager.getTokenMaskOrRevert(usdcToken); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit StartMultiCall(creditAccount); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.addCollateral, (USER, creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT)) ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit AddCollateral(creditAccount, usdcToken, USDC_EXCHANGE_AMOUNT); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.manageDebt, (creditAccount, 256, usdcMask | 1, ManageDebtAction.DECREASE_DEBT) ) ); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit DecreaseDebt(creditAccount, 256); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 3, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1308,9 +1340,9 @@ contract CreditFacadeTest is function test_FA_28_multicall_reverts_for_decrease_opeartion_after_increase_one() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); + vm.expectRevert(abi.encodeWithSelector(NoPermissionException.selector, DECREASE_DEBT_PERMISSION)); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1338,33 +1370,37 @@ contract CreditFacadeTest is MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) ); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (creditAccount))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit StartMultiCall(creditAccount); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ExecuteOrder(address(targetMock)); - evm.expectCall(creditAccount, abi.encodeCall(CreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); - evm.expectCall(address(targetMock), DUMB_CALLDATA); + vm.expectCall(address(targetMock), DUMB_CALLDATA); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (address(1)))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall(creditAccount, calls); } @@ -1378,17 +1414,17 @@ contract CreditFacadeTest is // cft.testFacadeWithDegenNFT(); // creditFacade = cft.creditFacade(); - // evm.expectRevert(AccountTransferNotAllowedException.selector); - // evm.prank(USER); + // vm.expectRevert(AccountTransferNotAllowedException.selector); + // vm.prank(USER); // creditFacade.transferAccountOwnership(DUMB_ADDRESS); // } /// @dev [FA-33]: transferAccountOwnership reverts if "to" user doesn't provide allowance function test_FA_33_transferAccountOwnership_reverts_if_to_user_doesnt_provide_allowance() public { (address creditAccount,) = _openTestCreditAccount(); - evm.expectRevert(AccountTransferNotAllowedException.selector); + vm.expectRevert(AccountTransferNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.transferAccountOwnership(creditAccount, DUMB_ADDRESS); } @@ -1396,14 +1432,14 @@ contract CreditFacadeTest is function test_FA_34_transferAccountOwnership_reverts_if_hf_less_1() public { (address creditAccount,) = _openTestCreditAccount(); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.approveAccountTransfer(USER, true); _makeAccountsLiquitable(); - evm.expectRevert(CantTransferLiquidatableAccountException.selector); + vm.expectRevert(CantTransferLiquidatableAccountException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.transferAccountOwnership(creditAccount, FRIEND); } @@ -1411,17 +1447,17 @@ contract CreditFacadeTest is function test_FA_35_transferAccountOwnership_transfers_account_if_its_allowed() public { (address creditAccount,) = _openTestCreditAccount(); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.approveAccountTransfer(USER, true); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall(ICreditManagerV3.transferAccountOwnership, (creditAccount, FRIEND)) ); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit TransferAccount(creditAccount, USER, FRIEND); - evm.prank(USER); + vm.prank(USER); creditFacade.transferAccountOwnership(creditAccount, FRIEND); // assertEq( @@ -1431,7 +1467,7 @@ contract CreditFacadeTest is /// @dev [FA-36]: checkAndUpdateBorrowedBlockLimit doesn't change block limit if maxBorrowedAmountPerBlock = type(uint128).max function test_FA_36_checkAndUpdateBorrowedBlockLimit_doesnt_change_block_limit_if_set_to_max() public { - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditConfigurator.setMaxDebtLimitPerBlock(type(uint128).max); // (uint64 blockLastUpdate, uint128 borrowedInBlock) = creditFacade.getTotalBorrowedInBlock(); @@ -1459,7 +1495,7 @@ contract CreditFacadeTest is // assertEq(blockLastUpdate, block.number, "blockLastUpdate"); // assertEq(borrowedInBlock, DAI_ACCOUNT_AMOUNT, "Incorrect borrowedInBlock"); - // evm.prank(USER); + // vm.prank(USER); // creditFacade.multicall( // multicallBuilder( // MultiCall({ @@ -1475,9 +1511,9 @@ contract CreditFacadeTest is // assertEq(borrowedInBlock, DAI_ACCOUNT_AMOUNT + DAI_EXCHANGE_AMOUNT, "Incorrect borrowedInBlock"); // // switch to new block - // evm.roll(block.number + 1); + // vm.roll(block.number + 1); - // evm.prank(USER); + // vm.prank(USER); // creditFacade.multicall( // multicallBuilder( // MultiCall({ @@ -1501,18 +1537,18 @@ contract CreditFacadeTest is function test_FA_38_transferAccountOwnership_with_allowed_to_transfers_account() public { assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == false, "Transfer is unexpectedly allowed "); - evm.expectEmit(true, true, false, true); - emit AllowAccountTransfer(USER, FRIEND, true); + vm.expectEmit(true, true, false, true); + emit SetAccountTransferAllowance(USER, FRIEND, true); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.approveAccountTransfer(USER, true); assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == true, "Transfer is unexpectedly not allowed "); - evm.expectEmit(true, true, false, true); - emit AllowAccountTransfer(USER, FRIEND, false); + vm.expectEmit(true, true, false, true); + emit SetAccountTransferAllowance(USER, FRIEND, false); - evm.prank(FRIEND); + vm.prank(FRIEND); creditFacade.approveAccountTransfer(USER, false); assertTrue(creditFacade.transfersAllowed(USER, FRIEND) == false, "Transfer is unexpectedly allowed "); } @@ -1530,7 +1566,7 @@ contract CreditFacadeTest is tokenTestSuite.mint(Tokens.USDC, creditAccount, 100); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1575,7 +1611,7 @@ contract CreditFacadeTest is // ENABLES USDC - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1647,21 +1683,17 @@ contract CreditFacadeTest is /// @dev [FA-44]: setContractToAdapter reverts if called non-configurator function test_FA_44_config_functions_revert_if_called_non_configurator() public { - evm.expectRevert(CallerNotConfiguratorException.selector); - evm.prank(USER); + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); creditFacade.setDebtLimits(100, 100, 100); - evm.expectRevert(CallerNotConfiguratorException.selector); - evm.prank(USER); + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); creditFacade.setBotList(FRIEND); - evm.expectRevert(CallerNotConfiguratorException.selector); - evm.prank(USER); - creditFacade.addEmergencyLiquidator(DUMB_ADDRESS); - - evm.expectRevert(CallerNotConfiguratorException.selector); - evm.prank(USER); - creditFacade.removeEmergencyLiquidator(DUMB_ADDRESS); + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.ALLOW); } /// CHECK SLIPPAGE PROTECTION @@ -1689,7 +1721,7 @@ contract CreditFacadeTest is tokenTestSuite.approve(Tokens.DAI, USER, address(creditManager)); tokenTestSuite.approve(Tokens.LINK, USER, address(creditManager)); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1700,8 +1732,8 @@ contract CreditFacadeTest is ); for (uint256 i = 0; i < 2; i++) { - evm.prank(USER); - evm.expectRevert( + vm.prank(USER); + vm.expectRevert( abi.encodeWithSelector( BalanceLessThanMinimumDesiredException.selector, ((i == 0) ? underlying : tokenLINK) ) @@ -1739,8 +1771,8 @@ contract CreditFacadeTest is expectedBalances[0] = Balance({token: underlying, balance: expectedDAI}); (address creditAccount,) = _openTestCreditAccount(); - evm.prank(USER); - evm.expectRevert(ExpectedBalancesAlreadySetException.selector); + vm.prank(USER); + vm.expectRevert(ExpectedBalancesAlreadySetException.selector); creditFacade.multicall( creditAccount, @@ -1761,14 +1793,19 @@ contract CreditFacadeTest is /// @dev [FA-46]: openCreditAccount and openCreditAccount no longer work if the CreditFacadeV3 is expired function test_FA_46_openCreditAccount_reverts_on_expired_CreditFacade() public { - cft.testFacadeWithExpiration(); - creditFacade = cft.creditFacade(); + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); - evm.warp(block.timestamp + 1); + vm.warp(block.timestamp + 1); - evm.expectRevert(NotAllowedAfterExpirationException.selector); + vm.expectRevert(NotAllowedAfterExpirationException.selector); - evm.prank(USER); + vm.prank(USER); creditFacade.openCreditAccount( DAI_ACCOUNT_AMOUNT, USER, @@ -1778,20 +1815,26 @@ contract CreditFacadeTest is callData: abi.encodeCall(ICreditFacadeMulticall.addCollateral, (underlying, DAI_ACCOUNT_AMOUNT / 4)) }) ), + false, 0 ); } /// @dev [FA-47]: liquidateExpiredCreditAccount should not work before the CreditFacadeV3 is expired function test_FA_47_liquidateExpiredCreditAccount_reverts_before_expiration() public { - cft.testFacadeWithExpiration(); - creditFacade = cft.creditFacade(); + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); _openTestCreditAccount(); - // evm.expectRevert(CantLiquidateNonExpiredException.selector); + // vm.expectRevert(CantLiquidateNonExpiredException.selector); - // evm.prank(LIQUIDATOR); + // vm.prank(LIQUIDATOR); // creditFacade.liquidateExpiredCreditAccount(USER, LIQUIDATOR, 0, false, multicallBuilder()); } @@ -1799,17 +1842,21 @@ contract CreditFacadeTest is function test_FA_48_liquidateExpiredCreditAccount_reverts_on_CreditFacade_with_no_expiration() public { _openTestCreditAccount(); - // evm.expectRevert(CantLiquidateNonExpiredException.selector); + // vm.expectRevert(CantLiquidateNonExpiredException.selector); - // evm.prank(LIQUIDATOR); + // vm.prank(LIQUIDATOR); // creditFacade.liquidateExpiredCreditAccount(USER, LIQUIDATOR, 0, false, multicallBuilder()); } /// @dev [FA-49]: liquidateExpiredCreditAccount works correctly and emits events function test_FA_49_liquidateExpiredCreditAccount_works_correctly_after_expiration() public { - cft.testFacadeWithExpiration(); - creditFacade = cft.creditFacade(); - + _setUp({ + _underlying: Tokens.DAI, + withDegenNFT: false, + withExpiration: true, + supportQuotas: false, + accountFactoryVer: 1 + }); (address creditAccount, uint256 balance) = _openTestCreditAccount(); bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); @@ -1818,64 +1865,64 @@ contract CreditFacadeTest is MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) ); - evm.warp(block.timestamp + 1); - evm.roll(block.number + 1); + vm.warp(block.timestamp + 1); + vm.roll(block.number + 1); - (uint256 borrowedAmount, uint256 borrowedAmountWithInterest,) = - creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (uint256 borrowedAmount, uint256 borrowedAmountWithInterest,) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); - (, uint256 remainingFunds,,) = creditManager.calcClosePayments( - balance, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, borrowedAmount, borrowedAmountWithInterest - ); + // (, uint256 remainingFunds,,) = creditManager.calcClosePayments( + // balance, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, borrowedAmount, borrowedAmountWithInterest + // ); - // EXPECTED STACK TRACE & EVENTS + // // EXPECTED STACK TRACE & EVENTS - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (creditAccount))); + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount))); - evm.expectEmit(true, false, false, false); - emit StartMultiCall(creditAccount); + // vm.expectEmit(true, false, false, false); + // emit StartMultiCall(creditAccount); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); - evm.expectEmit(true, false, false, false); - emit ExecuteOrder(address(targetMock)); + // vm.expectEmit(true, false, false, false); + // emit ExecuteOrder(address(targetMock)); - evm.expectCall(creditAccount, abi.encodeCall(CreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + // vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); - evm.expectCall(address(targetMock), DUMB_CALLDATA); + // vm.expectCall(address(targetMock), DUMB_CALLDATA); - evm.expectEmit(false, false, false, false); - emit FinishMultiCall(); + // vm.expectEmit(false, false, false, false); + // emit FinishMultiCall(); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (address(1)))); - // Total value = 2 * DAI_ACCOUNT_AMOUNT, cause we have x2 leverage - uint256 totalValue = balance; + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1)))); + // // Total value = 2 * DAI_ACCOUNT_AMOUNT, cause we have x2 leverage + // uint256 totalValue = balance; - evm.expectCall( - address(creditManager), - abi.encodeCall( - ICreditManagerV3.closeCreditAccount, - ( - creditAccount, - ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, - totalValue, - LIQUIDATOR, - FRIEND, - 1, - 10, - DAI_ACCOUNT_AMOUNT, - true - ) - ) - ); + // // vm.expectCall( + // // address(creditManager), + // // abi.encodeCall( + // // ICreditManagerV3.closeCreditAccount, + // // ( + // // creditAccount, + // // ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // // totalValue, + // // LIQUIDATOR, + // // FRIEND, + // // 1, + // // 10, + // // DAI_ACCOUNT_AMOUNT, + // // true + // // ) + // // ) + // // ); - evm.expectEmit(true, true, false, true); - emit LiquidateCreditAccount( - creditAccount, USER, LIQUIDATOR, FRIEND, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, remainingFunds - ); + // vm.expectEmit(true, true, false, true); + // emit LiquidateCreditAccount( + // creditAccount, USER, LIQUIDATOR, FRIEND, ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, remainingFunds + // ); - evm.prank(LIQUIDATOR); - creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); + // vm.prank(LIQUIDATOR); + // creditFacade.liquidateCreditAccount(creditAccount, FRIEND, 10, true, calls); } /// @@ -1888,11 +1935,11 @@ contract CreditFacadeTest is address token = tokenTestSuite.addressOf(Tokens.USDC); - // evm.expectCall( + // vm.expectCall( // address(creditManager), abi.encodeCall(ICreditManagerV3.checkAndEnableToken.selector, token) // ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1912,7 +1959,7 @@ contract CreditFacadeTest is address token = tokenTestSuite.addressOf(Tokens.USDC); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1923,9 +1970,9 @@ contract CreditFacadeTest is ) ); - // evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.disableToken.selector, token)); + // vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.disableToken.selector, token)); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -1957,31 +2004,31 @@ contract CreditFacadeTest is // 2 * USDC_ACCOUNT_AMOUNT * (PERCENTAGE_FACTOR - DEFAULT_LIQUIDATION_PREMIUM - DEFAULT_FEE_LIQUIDATION) // ) / PERCENTAGE_FACTOR - USDC_ACCOUNT_AMOUNT - 1 - 1; // second -1 because we add 1 to helper balance - // evm.roll(block.number + 1); + // vm.roll(block.number + 1); - // evm.prank(address(creditConfigurator)); + // vm.prank(address(creditConfigurator)); // CreditManagerV3(address(creditManager)).setLiquidationThreshold(usdc, 1); // ERC20BlacklistableMock(usdc).setBlacklisted(USER, true); - // evm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawManager.isBlacklisted, (usdc, USER))); + // vm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawalManager.isBlacklisted, (usdc, USER))); - // evm.expectCall( + // vm.expectCall( // address(creditManager), abi.encodeCall(ICreditManagerV3.transferAccountOwnership, (USER, blacklistHelper)) // ); - // evm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawManager.addWithdrawal, (usdc, USER, expectedAmount))); + // vm.expectCall(blacklistHelper, abi.encodeCall(IWithdrawalManager.addWithdrawal, (usdc, USER, expectedAmount))); - // evm.expectEmit(true, false, false, true); + // vm.expectEmit(true, false, false, true); // emit UnderlyingSentToBlacklistHelper(USER, expectedAmount); - // evm.prank(LIQUIDATOR); + // vm.prank(LIQUIDATOR); // creditFacade.liquidateCreditAccount(USER, FRIEND, 0, true, multicallBuilder()); - // assertEq(IWithdrawManager(blacklistHelper).claimable(usdc, USER), expectedAmount, "Incorrect claimable amount"); + // assertEq(IWithdrawalManager(blacklistHelper).claimable(usdc, USER), expectedAmount, "Incorrect claimable amount"); - // evm.prank(USER); - // IWithdrawManager(blacklistHelper).claim(usdc, FRIEND2); + // vm.prank(USER); + // IWithdrawalManager(blacklistHelper).claim(usdc, FRIEND2); // assertEq(tokenTestSuite.balanceOf(Tokens.USDC, FRIEND2), expectedAmount, "Transferred amount incorrect"); // } @@ -1998,9 +2045,9 @@ contract CreditFacadeTest is // ERC20BlacklistableMock(usdc).setBlacklisted(USER, true); - // evm.expectRevert(NotAllowedForBlacklistedAddressException.selector); + // vm.expectRevert(NotAllowedForBlacklistedAddressException.selector); - // evm.prank(USER); + // vm.prank(USER); // creditFacade.openCreditAccount( // USDC_ACCOUNT_AMOUNT, // USER, @@ -2020,13 +2067,13 @@ contract CreditFacadeTest is BotList botList = new BotList(address(cft.addressProvider())); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditConfigurator.setBotList(address(botList)); /// ???? address bot = address(new TargetContractMock()); - evm.prank(USER); + vm.prank(USER); botList.setBotPermissions(bot, type(uint192).max); bytes memory DUMB_CALLDATA = adapterMock.dumbCallData(); @@ -2035,45 +2082,49 @@ contract CreditFacadeTest is MultiCall({target: address(adapterMock), callData: abi.encodeCall(AdapterMock.dumbCall, (0, 0))}) ); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (creditAccount))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (creditAccount)) + ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit StartMultiCall(creditAccount); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); + vm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.executeOrder, (DUMB_CALLDATA))); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ExecuteOrder(address(targetMock)); - evm.expectCall(creditAccount, abi.encodeCall(CreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); + vm.expectCall(creditAccount, abi.encodeCall(ICreditAccount.execute, (address(targetMock), DUMB_CALLDATA))); - evm.expectCall(address(targetMock), DUMB_CALLDATA); + vm.expectCall(address(targetMock), DUMB_CALLDATA); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit FinishMultiCall(); - evm.expectCall(address(creditManager), abi.encodeCall(ICreditManagerV3.setCaForExternalCall, (address(1)))); + vm.expectCall( + address(creditManager), abi.encodeCall(ICreditManagerV3.setCreditAccountForExternalCall, (address(1))) + ); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, 1, new uint256[](0), PERCENTAGE_FACTOR) ) ); - evm.prank(bot); + vm.prank(bot); creditFacade.botMulticall(creditAccount, calls); - evm.expectRevert(NotApprovedBotException.selector); + vm.expectRevert(NotApprovedBotException.selector); creditFacade.botMulticall( creditAccount, multicallBuilder(MultiCall({target: address(adapterMock), callData: DUMB_CALLDATA})) ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); botList.setBotForbiddenStatus(bot, true); - evm.expectRevert(NotApprovedBotException.selector); - evm.prank(bot); + vm.expectRevert(NotApprovedBotException.selector); + vm.prank(bot); creditFacade.botMulticall(creditAccount, calls); } @@ -2084,16 +2135,16 @@ contract CreditFacadeTest is uint256[] memory collateralHints = new uint256[](1); collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); - uint256 enabledTokensMap = creditManager.enabledTokensMap(creditAccount); + uint256 enabledTokensMap = creditManager.enabledTokensMaskOf(creditAccount); - evm.expectCall( + vm.expectCall( address(creditManager), abi.encodeCall( ICreditManagerV3.fullCollateralCheck, (creditAccount, enabledTokensMap, collateralHints, 10001) ) ); - evm.prank(USER); + vm.prank(USER); creditFacade.multicall( creditAccount, multicallBuilder( @@ -2110,20 +2161,14 @@ contract CreditFacadeTest is // /// @dev [FA-62]: addEmergencyLiquidator correctly sets value - function test_FA_62_addEmergencyLiquidator_works_correctly() public { - evm.prank(address(creditConfigurator)); - creditFacade.addEmergencyLiquidator(DUMB_ADDRESS); + function test_FA_62_setEmergencyLiquidator_works_correctly() public { + vm.prank(address(creditConfigurator)); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.ALLOW); assertTrue(creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Value was not set"); - } - - /// @dev [FA-63]: removeEmergencyLiquidator correctly sets value - function test_FA_63_removeEmergencyLiquidator_works_correctly() public { - evm.prank(address(creditConfigurator)); - creditFacade.addEmergencyLiquidator(DUMB_ADDRESS); - evm.prank(address(creditConfigurator)); - creditFacade.removeEmergencyLiquidator(DUMB_ADDRESS); + vm.prank(address(creditConfigurator)); + creditFacade.setEmergencyLiquidator(DUMB_ADDRESS, AllowanceAction.FORBID); assertTrue(!creditFacade.canLiquidateWhilePaused(DUMB_ADDRESS), "Value was is still set"); } diff --git a/contracts/test/unit/credit/CreditManager.t.sol b/contracts/test/unit/credit/CreditManager.t.sol index c501d3ed..b34745dc 100644 --- a/contracts/test/unit/credit/CreditManager.t.sol +++ b/contracts/test/unit/credit/CreditManager.t.sol @@ -18,7 +18,7 @@ import { import {IPriceOracleV2, IPriceOracleV2Ext} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; import {IWETHGateway} from "../../../interfaces/IWETHGateway.sol"; -import {IWithdrawManager} from "../../../interfaces/IWithdrawManager.sol"; +import {IWithdrawalManager} from "../../../interfaces/IWithdrawalManager.sol"; import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; @@ -59,15 +59,15 @@ import {CreditConfig} from "../../config/CreditConfig.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; + +import {Test} from "forge-std/Test.sol"; import "forge-std/console.sol"; /// @title AddressRepository /// @notice Stores addresses of deployed contracts -contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { +contract CreditManagerTest is Test, ICreditManagerV3Events, BalanceHelper { using BitMask for uint256; - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - CreditManagerTestSuite cms; IAddressProvider addressProvider; @@ -78,7 +78,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { PoolServiceMock poolMock; IPriceOracleV2 priceOracle; IWETHGateway wethGateway; - IWithdrawManager withdrawManager; + IWithdrawalManager withdrawalManager; ACL acl; address underlying; @@ -104,7 +104,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { af = cms.af(); poolMock = cms.poolMock(); - withdrawManager = cms.withdrawManager(); + withdrawalManager = cms.withdrawalManager(); creditManager = cms.creditManager(); @@ -118,7 +118,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { internal returns ( uint256 borrowedAmount, - uint256 cumulativeIndexAtOpen, + uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexAtClose, address creditAccount ) @@ -128,7 +128,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function expectTokenIsEnabled(address creditAccount, Tokens t, bool expectedState) internal { bool state = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(t)) - & creditManager.enabledTokensMap(creditAccount) != 0; + & creditManager.enabledTokensMaskOf(creditAccount) != 0; assertTrue( state == expectedState, string( @@ -153,11 +153,11 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { ERC20Mock t = new ERC20Mock("new token", "nt", 18); PriceFeedMock pf = new PriceFeedMock(10**8, 8); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); creditManager.addToken(address(t)); IPriceOracleV2Ext(address(priceOracle)).addPriceFeed(address(t), address(pf)); - creditManager.setLiquidationThreshold(address(t), 8000); - evm.stopPrank(); + creditManager.setCollateralTokenData(address(t), 8000, 8000, type(uint40).max, 0); + vm.stopPrank(); t.mint(creditAccount, balance); @@ -233,7 +233,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// /// @dev [CM-1]: credit manager reverts if were called non-creditFacade function test_CM_01_constructor_sets_correct_values() public { - creditManager = new CreditManagerV3(address(poolMock), address(withdrawManager)); + creditManager = new CreditManagerV3(address(poolMock), address(withdrawalManager)); assertEq(address(creditManager.poolService()), address(poolMock), "Incorrect poolSerivice"); @@ -273,26 +273,26 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_02_credit_account_management_functions_revert_if_not_called_by_creditFacadeCall() public { assertEq(creditManager.creditFacade(), address(this)); - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotCreditFacadeException.selector); - creditManager.openCreditAccount(200000, address(this)); + vm.expectRevert(CallerNotCreditFacadeException.selector); + creditManager.openCreditAccount(200000, address(this), false); - // evm.expectRevert(CallerNotCreditFacadeException.selector); + // vm.expectRevert(CallerNotCreditFacadeException.selector); // creditManager.closeCreditAccount( // DUMB_ADDRESS, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false // ); - evm.expectRevert(CallerNotCreditFacadeException.selector); + vm.expectRevert(CallerNotCreditFacadeException.selector); creditManager.manageDebt(DUMB_ADDRESS, 100, 0, ManageDebtAction.INCREASE_DEBT); - evm.expectRevert(CallerNotCreditFacadeException.selector); + vm.expectRevert(CallerNotCreditFacadeException.selector); creditManager.addCollateral(DUMB_ADDRESS, DUMB_ADDRESS, DUMB_ADDRESS, 100); - evm.expectRevert(CallerNotCreditFacadeException.selector); + vm.expectRevert(CallerNotCreditFacadeException.selector); creditManager.transferAccountOwnership(DUMB_ADDRESS, DUMB_ADDRESS); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CM-3]:credit account execution functions revert if were called non-creditFacade & non-adapters @@ -306,18 +306,18 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_03_credit_account_execution_functions_revert_if_not_called_by_creditFacade_or_adapters() public { assertEq(creditManager.creditFacade(), address(this)); - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotAdapterException.selector); + vm.expectRevert(CallerNotAdapterException.selector); creditManager.approveCreditAccount(DUMB_ADDRESS, 100); - evm.expectRevert(CallerNotAdapterException.selector); + vm.expectRevert(CallerNotAdapterException.selector); creditManager.executeOrder(bytes("0")); - evm.expectRevert(CallerNotCreditFacadeException.selector); + vm.expectRevert(CallerNotCreditFacadeException.selector); creditManager.fullCollateralCheck(DUMB_ADDRESS, 0, new uint256[](0), 10000); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CM-4]:credit account configuration functions revert if were called non-configurator @@ -334,33 +334,33 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_04_credit_account_configurator_functions_revert_if_not_called_by_creditConfigurator() public { assertEq(creditManager.creditFacade(), address(this)); - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.addToken(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setParams(0, 0, 0, 0, 0); - evm.expectRevert(CallerNotConfiguratorException.selector); - creditManager.setLiquidationThreshold(DUMB_ADDRESS, 0); + vm.expectRevert(CallerNotConfiguratorException.selector); + creditManager.setCollateralTokenData(DUMB_ADDRESS, 0, 0, 0, 0); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setContractAllowance(DUMB_ADDRESS, DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setCreditFacade(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setPriceOracle(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setCreditConfigurator(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setMaxEnabledTokens(255); - evm.stopPrank(); + vm.stopPrank(); } // TODO: REMOVE OUTDATED @@ -374,36 +374,36 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // /// All these functions have whenNotPaused modifier // function test_CM_05_pause_pauses_management_functions() public { // address root = acl.owner(); - // evm.prank(root); + // vm.prank(root); // acl.addPausableAdmin(root); - // evm.prank(root); + // vm.prank(root); // creditManager.pause(); // assertEq(creditManager.creditFacade(), address(this)); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.openCreditAccount(200000, address(this)); - // // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // // vm.expectRevert(bytes(PAUSABLE_ERROR)); // // creditManager.closeCreditAccount( // // DUMB_ADDRESS, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false // // ); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.manageDebt(DUMB_ADDRESS, 100, ManageDebtAction.INCREASE_DEBT); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.addCollateral(DUMB_ADDRESS, DUMB_ADDRESS, DUMB_ADDRESS, 100); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.transferAccountOwnership(DUMB_ADDRESS, DUMB_ADDRESS); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.approveCreditAccount(DUMB_ADDRESS, DUMB_ADDRESS, 100); - // evm.expectRevert(bytes(PAUSABLE_ERROR)); + // vm.expectRevert(bytes(PAUSABLE_ERROR)); // creditManager.executeOrder(DUMB_ADDRESS, bytes("dd")); // } @@ -418,15 +418,15 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// - transferOwnership function test_CM_06A_management_functions_revert_if_account_does_not_exist() public { - // evm.expectRevert(CreditAccountNotExistsException.selector); + // vm.expectRevert(CreditAccountNotExistsException.selector); // creditManager.getCreditAccountOrRevert(USER); - // evm.expectRevert(CreditAccountNotExistsException.selector); + // vm.expectRevert(CreditAccountNotExistsException.selector); // creditManager.closeCreditAccount( // USER, ClosureAction.LIQUIDATE_ACCOUNT, 0, DUMB_ADDRESS, DUMB_ADDRESS, type(uint256).max, false // ); - evm.expectRevert(CreditAccountNotExistsException.selector); + vm.expectRevert(CreditAccountNotExistsException.selector); creditManager.transferAccountOwnership(USER, DUMB_ADDRESS); } @@ -437,16 +437,16 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_06B_extenrnal_ca_only_functions_revert_when_ec_is_not_set() public { address token = tokenTestSuite.addressOf(Tokens.DAI); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); - evm.prank(ADAPTER); - evm.expectRevert(ExternalCallCreditAccountNotSetException.selector); + vm.prank(ADAPTER); + vm.expectRevert(ExternalCallCreditAccountNotSetException.selector); creditManager.approveCreditAccount(token, 100); // / TODO: decide about test - evm.prank(ADAPTER); - evm.expectRevert(ExternalCallCreditAccountNotSetException.selector); + vm.prank(ADAPTER); + vm.expectRevert(ExternalCallCreditAccountNotSetException.selector); creditManager.executeOrder(bytes("dd")); } @@ -458,7 +458,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_07_openCreditAccount_reverts_if_address_exists() public { // // Existing address case // creditManager.openCreditAccount(1, USER); - // evm.expectRevert(UserAlreadyHasAccountException.selector); + // vm.expectRevert(UserAlreadyHasAccountException.selector); // creditManager.openCreditAccount(1, USER); } @@ -471,13 +471,13 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { poolMock.setCumulative_RAY(cumulativeAtOpen); // Existing address case - address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER); + address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, false); assertEq(creditAccount, expectedCreditAccount, "Incorrecct credit account address"); - (uint256 debt, uint256 cumulativeIndexAtOpen,,,,) = creditManager.creditAccountInfo(creditAccount); + (uint256 debt, uint256 cumulativeIndexLastUpdate,,,,) = creditManager.creditAccountInfo(creditAccount); assertEq(debt, DAI_ACCOUNT_AMOUNT, "Incorrect borrowed amount set in CA"); - assertEq(cumulativeIndexAtOpen, cumulativeAtOpen, "Incorrect cumulativeIndexAtOpen set in CA"); + assertEq(cumulativeIndexLastUpdate, cumulativeAtOpen, "Incorrect cumulativeIndexLastUpdate set in CA"); assertEq(ICreditAccount(creditAccount).since(), blockAtOpen, "Incorrect since set in CA"); @@ -485,7 +485,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { assertEq(poolMock.lendAmount(), DAI_ACCOUNT_AMOUNT, "Incorrect DAI_ACCOUNT_AMOUNT in Pool call"); assertEq(poolMock.lendAccount(), creditAccount, "Incorrect credit account in lendCreditAccount call"); // assertEq(creditManager.creditAccounts(USER), creditAccount, "Credit account is not associated with user"); - assertEq(creditManager.enabledTokensMap(creditAccount), 0, "Incorrect enabled token mask"); + assertEq(creditManager.enabledTokensMaskOf(creditAccount), 0, "Incorrect enabled token mask"); } // @@ -506,11 +506,11 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); // Increase block number cause it's forbidden to close credit account in the same block - evm.roll(block.number + 1); + vm.roll(block.number + 1); - creditManager.closeCreditAccount( - creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 0, 0, DAI_ACCOUNT_AMOUNT, false - ); + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 0, 0, DAI_ACCOUNT_AMOUNT, false + // ); assertEq( creditAccount, @@ -518,7 +518,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { "credit account is not in accountFactory tail!" ); - // evm.expectRevert(CreditAccountNotExistsException.selector); + // vm.expectRevert(CreditAccountNotExistsException.selector); // creditManager.getCreditAccountOrRevert(USER); } @@ -530,15 +530,19 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// Send all assets: false /// function test_CM_10_close_credit_account_returns_underlying_token_if_not_liquidated() public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexAtClose, address creditAccount) = - _openCreditAccount(); + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); - uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen - borrowedAmount; + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; (uint16 feeInterest,,,,) = creditManager.fees(); @@ -546,26 +550,26 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 amountToPool = borrowedAmount + interestAccrued + profit; - evm.expectCall( + vm.expectCall( address(poolMock), abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) ); - (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - USER, - FRIEND, - 1, - 0, - DAI_ACCOUNT_AMOUNT + interestAccrued, - false - ); + // (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // 1, + // 0, + // DAI_ACCOUNT_AMOUNT + interestAccrued, + // false + // ); - assertEq(remainingFunds, 0, "Remaining funds is not zero!"); + // assertEq(remainingFunds, 0, "Remaining funds is not zero!"); - assertEq(loss, 0, "Loss is not zero"); + // assertEq(loss, 0, "Loss is not zero"); expectBalance(Tokens.DAI, creditAccount, 1); @@ -582,15 +586,19 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// Send all assets: false /// function test_CM_11_close_credit_account_charges_caller_if_underlying_token_not_enough() public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexAtClose, address creditAccount) = - _openCreditAccount(); + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); // Transfer funds to USER account to be able to cover extra cost tokenTestSuite.mint(Tokens.DAI, USER, borrowedAmount); - uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen - borrowedAmount; + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; (uint16 feeInterest,,,,) = creditManager.fees(); @@ -598,25 +606,25 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 amountToPool = borrowedAmount + interestAccrued + profit; - evm.expectCall( + vm.expectCall( address(poolMock), abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) ); - (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - USER, - FRIEND, - 1, - 0, - DAI_ACCOUNT_AMOUNT + interestAccrued, - false - ); - assertEq(remainingFunds, 0, "Remaining funds is not zero!"); + // (uint256 remainingFunds, uint256 loss) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // 1, + // 0, + // DAI_ACCOUNT_AMOUNT + interestAccrued, + // false + // ); + // assertEq(remainingFunds, 0, "Remaining funds is not zero!"); - assertEq(loss, 0, "Loss is not zero"); + // assertEq(loss, 0, "Loss is not zero"); expectBalance(Tokens.DAI, creditAccount, 1, "Credit account balance != 1"); @@ -645,11 +653,12 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { address creditAccount; { - uint256 cumulativeIndexAtOpen; + uint256 cumulativeIndexLastUpdate; uint256 cumulativeIndexAtClose; - (borrowedAmount, cumulativeIndexAtOpen, cumulativeIndexAtClose, creditAccount) = _openCreditAccount(); + (borrowedAmount, cumulativeIndexLastUpdate, cumulativeIndexAtClose, creditAccount) = + _openCreditAccount(); - interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen - borrowedAmount; + interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; } uint256 poolBalanceBefore = tokenTestSuite.balanceOf(Tokens.DAI, address(poolMock)); @@ -666,7 +675,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { { uint256 loss = borrowedAmount + interestAccrued - amountToPool; - evm.expectCall( + vm.expectCall( address(poolMock), abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, 0, loss) ); @@ -674,9 +683,9 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { { uint256 a = borrowedAmount + interestAccrued; - (uint256 remainingFunds,) = creditManager.closeCreditAccount( - creditAccount, action, borrowedAmount, LIQUIDATOR, FRIEND, 1, 0, a, false - ); + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, action, borrowedAmount, LIQUIDATOR, FRIEND, 1, 0, a, false + // ); } expectBalance(Tokens.DAI, creditAccount, 1, "Credit account balance != 1"); @@ -715,11 +724,12 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 totalValue; uint256 interestAccrued; { - uint256 cumulativeIndexAtOpen; + uint256 cumulativeIndexLastUpdate; uint256 cumulativeIndexAtClose; - (borrowedAmount, cumulativeIndexAtOpen, cumulativeIndexAtClose, creditAccount) = _openCreditAccount(); + (borrowedAmount, cumulativeIndexLastUpdate, cumulativeIndexAtClose, creditAccount) = + _openCreditAccount(); - interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen - borrowedAmount; + interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; uint16 feeInterest; uint16 feeLiquidation; @@ -770,7 +780,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { expectBalance(Tokens.DAI, creditAccount, borrowedAmount, "creditAccount has incorrect initial balance"); - evm.expectCall( + vm.expectCall( address(poolMock), abi.encodeWithSelector(IPoolService.repayCreditAccount.selector, borrowedAmount, profit, 0) ); @@ -781,17 +791,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 loss; uint256 a = borrowedAmount + interestAccrued; - (remainingFunds, loss) = creditManager.closeCreditAccount( - creditAccount, - i == 1 ? ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT : ClosureAction.LIQUIDATE_ACCOUNT, - totalValue, - LIQUIDATOR, - FRIEND, - 1, - 0, - a, - false - ); + // (remainingFunds, loss) = creditManager.closeCreditAccount( + // creditAccount, + // i == 1 ? ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT : ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // 1, + // 0, + // a, + // false + // ); assertLe(expectedRemainingFunds - remainingFunds, 2, "Incorrect remaining funds"); @@ -843,17 +853,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { creditManager.transferAccountOwnership(creditAccount, USER); - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - USER, - FRIEND, - wethTokenMask | usdcTokenMask | linkTokenMask, - wethTokenMask | usdcTokenMask, - DAI_ACCOUNT_AMOUNT, - false - ); + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // FRIEND, + // wethTokenMask | usdcTokenMask | linkTokenMask, + // wethTokenMask | usdcTokenMask, + // DAI_ACCOUNT_AMOUNT, + // false + // ); expectBalance(Tokens.WETH, FRIEND, 0); expectBalance(Tokens.WETH, creditAccount, WETH_EXCHANGE_AMOUNT); @@ -873,19 +883,23 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { _connectCreditManagerSuite(Tokens.WETH, false); /// CLOSURE CASE - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexAtClose, address creditAccount) = - _openCreditAccount(); + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = _openCreditAccount(); // Transfer additional borrowedAmount. After that underluying token balance = 2 * borrowedAmount tokenTestSuite.mint(Tokens.WETH, creditAccount, borrowedAmount); - uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen - borrowedAmount; + uint256 interestAccrued = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate - borrowedAmount; // creditManager.closeCreditAccount(USER, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 0, true); - creditManager.closeCreditAccount( - creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 1, 0, borrowedAmount + interestAccrued, true - ); + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.CLOSE_ACCOUNT, 0, USER, USER, 1, 0, borrowedAmount + interestAccrued, true + // ); expectBalance(Tokens.WETH, creditAccount, 1); @@ -920,17 +934,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); creditManager.transferAccountOwnership(creditAccount, USER); - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - USER, - USER, - wethTokenMask | daiTokenMask, - 0, - borrowedAmount, - true - ); + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // USER, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); expectBalance(Tokens.WETH, creditAccount, 1); @@ -961,17 +975,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); - (uint256 remainingFunds,) = creditManager.closeCreditAccount( - creditAccount, - ClosureAction.LIQUIDATE_ACCOUNT, - totalValue, - LIQUIDATOR, - FRIEND, - wethTokenMask | daiTokenMask, - 0, - borrowedAmount, - true - ); + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // totalValue, + // LIQUIDATOR, + // FRIEND, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); // checks that no eth were sent to USER account expectEthBalance(USER, 0); @@ -1005,17 +1019,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 wethTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); uint256 daiTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)); - (uint256 remainingFunds,) = creditManager.closeCreditAccount( - creditAccount, - ClosureAction.LIQUIDATE_ACCOUNT, - borrowedAmount, - LIQUIDATOR, - FRIEND, - wethTokenMask | daiTokenMask, - 0, - borrowedAmount, - true - ); + // (uint256 remainingFunds,) = creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount, + // LIQUIDATOR, + // FRIEND, + // wethTokenMask | daiTokenMask, + // 0, + // borrowedAmount, + // true + // ); expectBalance(Tokens.WETH, creditAccount, 1); @@ -1032,25 +1046,25 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-20]: manageDebt correctly increases debt function test_CM_20_manageDebt_correctly_increases_debt(uint128 amount) public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen,, address creditAccount) = cms.openCreditAccount(1); + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate,, address creditAccount) = cms.openCreditAccount(1); tokenTestSuite.mint(Tokens.DAI, address(poolMock), amount); - poolMock.setCumulative_RAY(cumulativeIndexAtOpen * 2); + poolMock.setCumulative_RAY(cumulativeIndexLastUpdate * 2); uint256 expectedNewCulumativeIndex = - (2 * cumulativeIndexAtOpen * (borrowedAmount + amount)) / (2 * borrowedAmount + amount); + (2 * cumulativeIndexLastUpdate * (borrowedAmount + amount)) / (2 * borrowedAmount + amount); - (uint256 newBorrowedAmount,) = + (uint256 newBorrowedAmount,,) = creditManager.manageDebt(creditAccount, amount, 1, ManageDebtAction.INCREASE_DEBT); assertEq(newBorrowedAmount, borrowedAmount + amount, "Incorrect returned newBorrowedAmount"); - assertLe( - (ICreditAccount(creditAccount).cumulativeIndexAtOpen() * (10 ** 6)) / expectedNewCulumativeIndex, - 10 ** 6, - "Incorrect cumulative index" - ); + // assertLe( + // (ICreditAccount(creditAccount).cumulativeIndexLastUpdate() * (10 ** 6)) / expectedNewCulumativeIndex, + // 10 ** 6, + // "Incorrect cumulative index" + // ); (uint256 debt,,,,,) = creditManager.creditAccountInfo(creditAccount); assertEq(debt, newBorrowedAmount, "Incorrect borrowedAmount"); @@ -1064,69 +1078,69 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-21]: manageDebt correctly decreases debt function test_CM_21_manageDebt_correctly_decreases_debt(uint128 amount) public { - tokenTestSuite.mint(Tokens.DAI, address(poolMock), (uint256(type(uint128).max) * 14) / 10); - - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexNow, address creditAccount) = - cms.openCreditAccount((uint256(type(uint128).max) * 14) / 10); + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), (uint256(type(uint128).max) * 14) / 10); - (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = + // cms.openCreditAccount((uint256(type(uint128).max) * 14) / 10); - uint256 expectedInterestAndFees; - uint256 expectedBorrowAmount; - if (amount >= totalDebt - borrowedAmount) { - expectedInterestAndFees = 0; - expectedBorrowAmount = totalDebt - amount; - } else { - expectedInterestAndFees = totalDebt - borrowedAmount - amount; - expectedBorrowAmount = borrowedAmount; - } - - (uint256 newBorrowedAmount,) = - creditManager.manageDebt(creditAccount, amount, 1, ManageDebtAction.DECREASE_DEBT); + // (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - assertEq(newBorrowedAmount, expectedBorrowAmount, "Incorrect returned newBorrowedAmount"); + // uint256 expectedInterestAndFees; + // uint256 expectedBorrowAmount; + // if (amount >= totalDebt - borrowedAmount) { + // expectedInterestAndFees = 0; + // expectedBorrowAmount = totalDebt - amount; + // } else { + // expectedInterestAndFees = totalDebt - borrowedAmount - amount; + // expectedBorrowAmount = borrowedAmount; + // } - if (amount >= totalDebt - borrowedAmount) { - (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (uint256 newBorrowedAmount,) = + // creditManager.manageDebt(creditAccount, amount, 1, ManageDebtAction.DECREASE_DEBT); - assertEq(newTotalDebt, newBorrowedAmount, "Incorrect new interest"); - } else { - (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // assertEq(newBorrowedAmount, expectedBorrowAmount, "Incorrect returned newBorrowedAmount"); - assertLt( - (RAY * (newTotalDebt - newBorrowedAmount)) / expectedInterestAndFees - RAY, - 10000, - "Incorrect new interest" - ); - } - uint256 cumulativeIndexAtOpenAfter; - { - uint256 debt; - (debt, cumulativeIndexAtOpenAfter,,,,) = creditManager.creditAccountInfo(creditAccount); - - assertEq(debt, newBorrowedAmount, "Incorrect borrowedAmount"); - } + // if (amount >= totalDebt - borrowedAmount) { + // (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - expectBalance(Tokens.DAI, creditAccount, borrowedAmount - amount, "Incorrect balance on credit account"); + // assertEq(newTotalDebt, newBorrowedAmount, "Incorrect new interest"); + // } else { + // (,, uint256 newTotalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - if (amount >= totalDebt - borrowedAmount) { - assertEq(cumulativeIndexAtOpenAfter, cumulativeIndexNow, "Incorrect cumulativeIndexAtOpen"); - } else { - CreditManagerTestInternal cmi = new CreditManagerTestInternal( - creditManager.poolService(), address(withdrawManager) - ); + // assertLt( + // (RAY * (newTotalDebt - newBorrowedAmount)) / expectedInterestAndFees - RAY, + // 10000, + // "Incorrect new interest" + // ); + // } + // uint256 cumulativeIndexLastUpdateAfter; + // { + // uint256 debt; + // (debt, cumulativeIndexLastUpdateAfter,,,,) = creditManager.creditAccountInfo(creditAccount); - { - (uint256 feeInterest,,,,) = creditManager.fees(); - amount = uint128((uint256(amount) * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest)); - } + // assertEq(debt, newBorrowedAmount, "Incorrect borrowedAmount"); + // } - assertEq( - cumulativeIndexAtOpenAfter, - cmi.calcNewCumulativeIndex(borrowedAmount, amount, cumulativeIndexNow, cumulativeIndexAtOpen, false), - "Incorrect cumulativeIndexAtOpen" - ); - } + // expectBalance(Tokens.DAI, creditAccount, borrowedAmount - amount, "Incorrect balance on credit account"); + + // if (amount >= totalDebt - borrowedAmount) { + // assertEq(cumulativeIndexLastUpdateAfter, cumulativeIndexNow, "Incorrect cumulativeIndexLastUpdate"); + // } else { + // CreditManagerTestInternal cmi = new CreditManagerTestInternal( + // creditManager.poolService(), address(withdrawalManager) + // ); + + // { + // (uint256 feeInterest,,,,) = creditManager.fees(); + // amount = uint128((uint256(amount) * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest)); + // } + + // assertEq( + // cumulativeIndexLastUpdateAfter, + // cmi.calcNewCumulativeIndex(borrowedAmount, amount, cumulativeIndexNow, cumulativeIndexLastUpdate, false), + // "Incorrect cumulativeIndexLastUpdate" + // ); + // } } // @@ -1174,7 +1188,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // creditManager.openCreditAccount(1, FRIEND); // // Existing account case - // evm.expectRevert(UserAlreadyHasAccountException.selector); + // vm.expectRevert(UserAlreadyHasAccountException.selector); // creditManager.transferAccountOwnership(FRIEND, USER); } @@ -1189,7 +1203,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // assertEq(creditManager.creditAccounts(FRIEND), creditAccount, "To account isn't correct"); - // evm.expectRevert(CreditAccountNotExistsException.selector); + // vm.expectRevert(CreditAccountNotExistsException.selector); // creditManager.getCreditAccountOrRevert(USER); } @@ -1200,23 +1214,23 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-25A]: approveCreditAccount reverts if the token is not added function test_CM_25A_approveCreditAccount_reverts_if_the_token_is_not_added() public { (,,, address creditAccount) = _openCreditAccount(); - creditManager.setCaForExternalCall(creditAccount); + creditManager.setCreditAccountForExternalCall(creditAccount); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(DUMB_ADDRESS, 100); } /// @dev [CM-26]: approveCreditAccount approves with desired allowance function test_CM_26_approveCreditAccount_approves_with_desired_allowance() public { (,,, address creditAccount) = _openCreditAccount(); - creditManager.setCaForExternalCall(creditAccount); + creditManager.setCreditAccountForExternalCall(creditAccount); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); // Case, when current allowance > Allowance_THRESHOLD @@ -1224,7 +1238,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { address dai = tokenTestSuite.addressOf(Tokens.DAI); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(dai, DAI_EXCHANGE_AMOUNT); expectAllowance(Tokens.DAI, creditAccount, DUMB_ADDRESS, DAI_EXCHANGE_AMOUNT); @@ -1233,20 +1247,20 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-27A]: approveCreditAccount works for ERC20 that revert if allowance > 0 before approve function test_CM_27A_approveCreditAccount_works_for_ERC20_with_approve_restrictions() public { (,,, address creditAccount) = _openCreditAccount(); - creditManager.setCaForExternalCall(creditAccount); + creditManager.setCreditAccountForExternalCall(creditAccount); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); address approveRevertToken = address(new ERC20ApproveRestrictedRevert()); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.addToken(approveRevertToken); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(approveRevertToken, DAI_EXCHANGE_AMOUNT); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(approveRevertToken, 2 * DAI_EXCHANGE_AMOUNT); expectAllowance(approveRevertToken, creditAccount, DUMB_ADDRESS, 2 * DAI_EXCHANGE_AMOUNT); @@ -1255,20 +1269,20 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // /// @dev [CM-27B]: approveCreditAccount works for ERC20 that returns false if allowance > 0 before approve function test_CM_27B_approveCreditAccount_works_for_ERC20_with_approve_restrictions() public { (,,, address creditAccount) = _openCreditAccount(); - creditManager.setCaForExternalCall(creditAccount); + creditManager.setCreditAccountForExternalCall(creditAccount); address approveFalseToken = address(new ERC20ApproveRestrictedFalse()); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.addToken(approveFalseToken); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(approveFalseToken, DAI_EXCHANGE_AMOUNT); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.approveCreditAccount(approveFalseToken, 2 * DAI_EXCHANGE_AMOUNT); expectAllowance(approveFalseToken, creditAccount, DUMB_ADDRESS, 2 * DAI_EXCHANGE_AMOUNT); @@ -1281,24 +1295,24 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-29]: executeOrder calls credit account method and emit event function test_CM_29_executeOrder_calls_credit_account_method_and_emit_event() public { (,,, address creditAccount) = _openCreditAccount(); - creditManager.setCaForExternalCall(creditAccount); + creditManager.setCreditAccountForExternalCall(creditAccount); TargetContractMock targetMock = new TargetContractMock(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, address(targetMock)); bytes memory callData = bytes("Hello, world!"); // we emit the event we expect to see. - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit ExecuteOrder(address(targetMock)); // stack trace check - evm.expectCall(creditAccount, abi.encodeWithSignature("execute(address,bytes)", address(targetMock), callData)); - evm.expectCall(address(targetMock), callData); + vm.expectCall(creditAccount, abi.encodeWithSignature("execute(address,bytes)", address(targetMock), callData)); + vm.expectCall(address(targetMock), callData); - evm.prank(ADAPTER); + vm.prank(ADAPTER); creditManager.executeOrder(callData); assertEq0(targetMock.callData(), callData, "Incorrect calldata"); @@ -1314,7 +1328,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { tokenTestSuite.mint(Tokens.USDC, creditAccount, USDC_ACCOUNT_AMOUNT); - evm.expectRevert(NotEnoughCollateralException.selector); + vm.expectRevert(NotEnoughCollateralException.selector); _baseFullCollateralCheck(creditAccount); // fullCollateralCheck doesn't revert when token is enabled @@ -1326,7 +1340,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-39]: fullCollateralCheck diables tokens if they have zero balance function test_CM_39_fullCollateralCheck_diables_tokens_if_they_have_zero_balance() public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexNow, address creditAccount) = + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = _openCreditAccount(); creditManager.transferAccountOwnership(creditAccount, address(this)); @@ -1334,7 +1348,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// TODO: CHANGE COMPUTATION - uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexAtOpen; + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; uint256 amountToRepayInLINK = ( @@ -1363,17 +1377,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-40]: fullCollateralCheck breaks loop if total >= borrowAmountPlusInterestRateUSD and pass the check function test_CM_40_fullCollateralCheck_breaks_loop_if_total_gte_borrowAmountPlusInterestRateUSD_and_pass_the_check( ) public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(withdrawManager)); + CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(withdrawalManager)); cms.cr().addCreditManager(address(cm)); cm.setCreditFacade(address(this)); cm.setPriceOracle(address(priceOracle)); - evm.stopPrank(); + vm.stopPrank(); - address creditAccount = cm.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER); + address creditAccount = cm.openCreditAccount(DAI_ACCOUNT_AMOUNT, USER, false); cm.transferAccountOwnership(creditAccount, address(this)); address revertToken = DUMB_ADDRESS; @@ -1383,13 +1397,15 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // If (total >= borrowAmountPlusInterestRateUSD) doesn't break the loop, it would be called // cause we enable this token using checkAndEnableToken. // If fullCollateralCheck doesn't revert, it means that the break works - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); cm.addToken(linkToken); cm.addToken(revertToken); - cm.setLiquidationThreshold(linkToken, creditConfig.lt(Tokens.LINK)); + cm.setCollateralTokenData( + linkToken, creditConfig.lt(Tokens.LINK), creditConfig.lt(Tokens.LINK), type(uint40).max, 0 + ); - evm.stopPrank(); + vm.stopPrank(); // cm.checkAndEnableToken(revertToken); // cm.checkAndEnableToken(linkToken); @@ -1410,30 +1426,30 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-41]: fullCollateralCheck reverts if CA has more than allowed enabled tokens function test_CM_41_fullCollateralCheck_reverts_if_CA_has_more_than_allowed_enabled_tokens() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); // We use clean CreditManagerV3 to have only one underlying token for testing - creditManager = new CreditManagerV3(address(poolMock), address(withdrawManager)); + creditManager = new CreditManagerV3(address(poolMock), address(withdrawalManager)); cms.cr().addCreditManager(address(creditManager)); creditManager.setCreditFacade(address(this)); creditManager.setPriceOracle(address(priceOracle)); - creditManager.setLiquidationThreshold(poolMock.underlyingToken(), 9300); - evm.stopPrank(); + creditManager.setCollateralTokenData(poolMock.underlyingToken(), 9300, 9300, type(uint40).max, 0); + vm.stopPrank(); - address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, address(this)); + address creditAccount = creditManager.openCreditAccount(DAI_ACCOUNT_AMOUNT, address(this), false); tokenTestSuite.mint(Tokens.DAI, creditAccount, 2 * DAI_ACCOUNT_AMOUNT); enableTokensMoreThanLimit(creditAccount); - evm.expectRevert(TooManyEnabledTokensException.selector); + vm.expectRevert(TooManyEnabledTokensException.selector); creditManager.fullCollateralCheck(creditAccount, 2 ** 13 - 1, new uint256[](0), 10000); } /// @dev [CM-41A]: fullCollateralCheck correctly disables the underlying when needed function test_CM_41A_fullCollateralCheck_correctly_dfisables_the_underlying_when_needed() public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexNow, address creditAccount) = + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = _openCreditAccount(); uint256 daiBalance = tokenTestSuite.balanceOf(Tokens.DAI, creditAccount); @@ -1444,7 +1460,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint256 totalTokens = creditManager.collateralTokensCount(); - uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexAtOpen; + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; (uint256 feeInterest,,,,) = creditManager.fees(); @@ -1467,7 +1483,9 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { creditManager.fullCollateralCheck(creditAccount, 2 ** (totalTokens) - 1, hints, 10000); assertEq( - creditManager.enabledTokensMap(creditAccount).calcEnabledTokens(), 1, "Incorrect number of tokens enabled" + creditManager.enabledTokensMaskOf(creditAccount).calcEnabledTokens(), + 1, + "Incorrect number of tokens enabled" ); } @@ -1483,78 +1501,78 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { bool enableWETH, uint16 minHealthFactor ) public { - evm.assume(borrowedAmount > WAD); + // vm.assume(borrowedAmount > WAD); - evm.assume(minHealthFactor > 10_000 && minHealthFactor < 50_000); + // vm.assume(minHealthFactor > 10_000 && minHealthFactor < 50_000); - tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); - (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); - creditManager.transferAccountOwnership(creditAccount, address(this)); + // (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); + // creditManager.transferAccountOwnership(creditAccount, address(this)); - if (daiBalance > borrowedAmount) { - tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); - } else { - tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); - } + // if (daiBalance > borrowedAmount) { + // tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); + // } else { + // tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); + // } - expectBalance(Tokens.DAI, creditAccount, daiBalance); + // expectBalance(Tokens.DAI, creditAccount, daiBalance); - mintBalance(creditAccount, Tokens.USDC, usdcBalance, enableUSDC); - mintBalance(creditAccount, Tokens.LINK, linkBalance, enableLINK); - mintBalance(creditAccount, Tokens.WETH, wethBalance, enableWETH); + // mintBalance(creditAccount, Tokens.USDC, usdcBalance, enableUSDC); + // mintBalance(creditAccount, Tokens.LINK, linkBalance, enableLINK); + // mintBalance(creditAccount, Tokens.WETH, wethBalance, enableWETH); - uint256 twvUSD = ( - tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) - * creditConfig.lt(Tokens.DAI) - ) / WAD; + // uint256 twvUSD = ( + // tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) + // * creditConfig.lt(Tokens.DAI) + // ) / WAD; - twvUSD += !enableUSDC - ? 0 - : ( - tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC) - * creditConfig.lt(Tokens.USDC) - ) / (10 ** 6); + // twvUSD += !enableUSDC + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC) + // * creditConfig.lt(Tokens.USDC) + // ) / (10 ** 6); - twvUSD += !enableLINK - ? 0 - : ( - tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK) - * creditConfig.lt(Tokens.LINK) - ) / WAD; + // twvUSD += !enableLINK + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK) + // * creditConfig.lt(Tokens.LINK) + // ) / WAD; - twvUSD += !enableWETH - ? 0 - : ( - tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) - * creditConfig.lt(Tokens.WETH) - ) / WAD; + // twvUSD += !enableWETH + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) + // * creditConfig.lt(Tokens.WETH) + // ) / WAD; - (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - uint256 debtUSD = borrowedAmountWithInterestAndFees * tokenTestSuite.prices(Tokens.DAI) * minHealthFactor / WAD; + // uint256 debtUSD = borrowedAmountWithInterestAndFees * tokenTestSuite.prices(Tokens.DAI) * minHealthFactor / WAD; - bool shouldRevert = twvUSD < debtUSD; + // bool shouldRevert = twvUSD < debtUSD; - uint256 enabledTokensMap = 1; + // uint256 enabledTokensMap = 1; - if (enableUSDC) { - enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); - } + // if (enableUSDC) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)); + // } - if (enableLINK) { - enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); - } + // if (enableLINK) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); + // } - if (enableWETH) { - enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); - } + // if (enableWETH) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + // } - if (shouldRevert) { - evm.expectRevert(NotEnoughCollateralException.selector); - } + // if (shouldRevert) { + // vm.expectRevert(NotEnoughCollateralException.selector); + // } - creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); + // creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); } // @@ -1574,134 +1592,134 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-43]: calcClosePayments computes function test_CM_43_calcClosePayments_test() public { - evm.prank(CONFIGURATOR); - - creditManager.setParams( - 1000, // feeInterest: 10% , it doesn't matter this test - 200, // feeLiquidation: 2%, it doesn't matter this test - 9500, // liquidationPremium: 5%, it doesn't matter this test - 100, // feeLiquidationExpired: 1% - 9800 // liquidationPremiumExpired: 2% - ); - - CalcClosePaymentsPureTestCase[7] memory cases = [ - CalcClosePaymentsPureTestCase({ - name: "CLOSURE", - totalValue: 0, - closureActionType: ClosureAction.CLOSE_ACCOUNT, - borrowedAmount: 1000, - borrowedAmountWithInterest: 1100, - amountToPool: 1110, // amountToPool = 1100 + 100 * 10% = 1110 - remainingFunds: 0, - profit: 10, // profit: 100 (interest) * 10% = 10 - loss: 0 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION WITH PROFIT & REMAINING FUNDS", - totalValue: 2000, - closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, - borrowedAmount: 1000, - borrowedAmountWithInterest: 1100, - amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 - remainingFunds: 749, //remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 - profit: 50, - loss: 0 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION WITH PROFIT & ZERO REMAINING FUNDS", - totalValue: 2100, - closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, - borrowedAmount: 900, - borrowedAmountWithInterest: 1900, - amountToPool: 1995, // amountToPool = 1900 + 1000 * 10% + 2100 * 2% = 2042, totalFunds = 2100 * 95% = 1995, so, amount to pool would be 1995 - remainingFunds: 0, // remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 - profit: 95, - loss: 0 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION WITH LOSS", - totalValue: 1000, - closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, - borrowedAmount: 900, - borrowedAmountWithInterest: 1900, - amountToPool: 950, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 95% = 950, So, amount to pool would be 950 - remainingFunds: 0, // 0, cause it's loss - profit: 0, - loss: 950 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION OF EXPIRED WITH PROFIT & REMAINING FUNDS", - totalValue: 2000, - closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, - borrowedAmount: 1000, - borrowedAmountWithInterest: 1100, - amountToPool: 1130, // amountToPool = 1100 + 100 * 10% + 2000 * 1% = 1130 - remainingFunds: 829, //remainingFunds: 2000 * (100% - 2%) - 1130 - 1 = 829 - profit: 30, - loss: 0 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION OF EXPIRED WITH PROFIT & ZERO REMAINING FUNDS", - totalValue: 2100, - closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, - borrowedAmount: 900, - borrowedAmountWithInterest: 2000, - amountToPool: 2058, // amountToPool = 2000 + 1100 * 10% + 2100 * 1% = 2131, totalFunds = 2100 * 98% = 2058, so, amount to pool would be 2058 - remainingFunds: 0, - profit: 58, - loss: 0 - }), - CalcClosePaymentsPureTestCase({ - name: "LIQUIDATION OF EXPIRED WITH LOSS", - totalValue: 1000, - closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, - borrowedAmount: 900, - borrowedAmountWithInterest: 1900, - amountToPool: 980, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 - remainingFunds: 0, // 0, cause it's loss - profit: 0, - loss: 920 - }) - // CalcClosePaymentsPureTestCase({ - // name: "LIQUIDATION WHILE PAUSED WITH REMAINING FUNDS", - // totalValue: 2000, - // closureActionType: ClosureAction.LIQUIDATE_PAUSED, - // borrowedAmount: 1000, - // borrowedAmountWithInterest: 1100, - // amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 - // remainingFunds: 849, //remainingFunds: 2000 - 1150 - 1 = 869 - // profit: 50, - // loss: 0 - // }), - // CalcClosePaymentsPureTestCase({ - // name: "LIQUIDATION OF EXPIRED WITH LOSS", - // totalValue: 1000, - // closureActionType: ClosureAction.LIQUIDATE_PAUSED, - // borrowedAmount: 900, - // borrowedAmountWithInterest: 1900, - // amountToPool: 1000, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 - // remainingFunds: 0, // 0, cause it's loss - // profit: 0, - // loss: 900 - // }) - ]; - - for (uint256 i = 0; i < cases.length; i++) { - (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) = creditManager - .calcClosePayments( - cases[i].totalValue, - cases[i].closureActionType, - cases[i].borrowedAmount, - cases[i].borrowedAmountWithInterest - ); + // vm.prank(CONFIGURATOR); + + // creditManager.setParams( + // 1000, // feeInterest: 10% , it doesn't matter this test + // 200, // feeLiquidation: 2%, it doesn't matter this test + // 9500, // liquidationPremium: 5%, it doesn't matter this test + // 100, // feeLiquidationExpired: 1% + // 9800 // liquidationPremiumExpired: 2% + // ); - assertEq(amountToPool, cases[i].amountToPool, string(abi.encodePacked(cases[i].name, ": amountToPool"))); - assertEq( - remainingFunds, cases[i].remainingFunds, string(abi.encodePacked(cases[i].name, ": remainingFunds")) - ); - assertEq(profit, cases[i].profit, string(abi.encodePacked(cases[i].name, ": profit"))); - assertEq(loss, cases[i].loss, string(abi.encodePacked(cases[i].name, ": loss"))); - } + // CalcClosePaymentsPureTestCase[7] memory cases = [ + // CalcClosePaymentsPureTestCase({ + // name: "CLOSURE", + // totalValue: 0, + // closureActionType: ClosureAction.CLOSE_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1110, // amountToPool = 1100 + 100 * 10% = 1110 + // remainingFunds: 0, + // profit: 10, // profit: 100 (interest) * 10% = 10 + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH PROFIT & REMAINING FUNDS", + // totalValue: 2000, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 + // remainingFunds: 749, //remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 + // profit: 50, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH PROFIT & ZERO REMAINING FUNDS", + // totalValue: 2100, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 1995, // amountToPool = 1900 + 1000 * 10% + 2100 * 2% = 2042, totalFunds = 2100 * 95% = 1995, so, amount to pool would be 1995 + // remainingFunds: 0, // remainingFunds: 2000 * (100% - 5%) - 1150 - 1 = 749 + // profit: 95, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION WITH LOSS", + // totalValue: 1000, + // closureActionType: ClosureAction.LIQUIDATE_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 950, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 95% = 950, So, amount to pool would be 950 + // remainingFunds: 0, // 0, cause it's loss + // profit: 0, + // loss: 950 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH PROFIT & REMAINING FUNDS", + // totalValue: 2000, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 1000, + // borrowedAmountWithInterest: 1100, + // amountToPool: 1130, // amountToPool = 1100 + 100 * 10% + 2000 * 1% = 1130 + // remainingFunds: 829, //remainingFunds: 2000 * (100% - 2%) - 1130 - 1 = 829 + // profit: 30, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH PROFIT & ZERO REMAINING FUNDS", + // totalValue: 2100, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 2000, + // amountToPool: 2058, // amountToPool = 2000 + 1100 * 10% + 2100 * 1% = 2131, totalFunds = 2100 * 98% = 2058, so, amount to pool would be 2058 + // remainingFunds: 0, + // profit: 58, + // loss: 0 + // }), + // CalcClosePaymentsPureTestCase({ + // name: "LIQUIDATION OF EXPIRED WITH LOSS", + // totalValue: 1000, + // closureActionType: ClosureAction.LIQUIDATE_EXPIRED_ACCOUNT, + // borrowedAmount: 900, + // borrowedAmountWithInterest: 1900, + // amountToPool: 980, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 + // remainingFunds: 0, // 0, cause it's loss + // profit: 0, + // loss: 920 + // }) + // // CalcClosePaymentsPureTestCase({ + // // name: "LIQUIDATION WHILE PAUSED WITH REMAINING FUNDS", + // // totalValue: 2000, + // // closureActionType: ClosureAction.LIQUIDATE_PAUSED, + // // borrowedAmount: 1000, + // // borrowedAmountWithInterest: 1100, + // // amountToPool: 1150, // amountToPool = 1100 + 100 * 10% + 2000 * 2% = 1150 + // // remainingFunds: 849, //remainingFunds: 2000 - 1150 - 1 = 869 + // // profit: 50, + // // loss: 0 + // // }), + // // CalcClosePaymentsPureTestCase({ + // // name: "LIQUIDATION OF EXPIRED WITH LOSS", + // // totalValue: 1000, + // // closureActionType: ClosureAction.LIQUIDATE_PAUSED, + // // borrowedAmount: 900, + // // borrowedAmountWithInterest: 1900, + // // amountToPool: 1000, // amountToPool = 1900 + 1000 * 10% + 1000 * 2% = 2020, totalFunds = 1000 * 98% = 980, So, amount to pool would be 980 + // // remainingFunds: 0, // 0, cause it's loss + // // profit: 0, + // // loss: 900 + // // }) + // ]; + + // for (uint256 i = 0; i < cases.length; i++) { + // (uint256 amountToPool, uint256 remainingFunds, uint256 profit, uint256 loss) = creditManager + // .calcClosePayments( + // cases[i].totalValue, + // cases[i].closureActionType, + // cases[i].borrowedAmount, + // cases[i].borrowedAmountWithInterest + // ); + + // assertEq(amountToPool, cases[i].amountToPool, string(abi.encodePacked(cases[i].name, ": amountToPool"))); + // assertEq( + // remainingFunds, cases[i].remainingFunds, string(abi.encodePacked(cases[i].name, ": remainingFunds")) + // ); + // assertEq(profit, cases[i].profit, string(abi.encodePacked(cases[i].name, ": profit"))); + // assertEq(loss, cases[i].loss, string(abi.encodePacked(cases[i].name, ": loss"))); + // } } // @@ -1733,10 +1751,10 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { address wethTokenAddr = tokenTestSuite.addressOf(Tokens.WETH); // creditManager.checkAndEnableToken(wethTokenAddr); - uint256 enabledTokenMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)) + uint256 enabledTokensMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.DAI)) | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); - cmi.transferAssetsTo(creditAccount, friend, convertToETH, enabledTokenMask); + cmi.transferAssetsTo(creditAccount, friend, convertToETH, enabledTokensMask); expectBalance(Tokens.DAI, creditAccount, borrowedAmount, "Underlying assets were transffered!"); @@ -1763,17 +1781,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { expectBalance(Tokens.LINK, friend, 0); creditManager.transferAccountOwnership(creditAccount, USER); - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.LIQUIDATE_ACCOUNT, - 0, - LIQUIDATOR, - friend, - enabledTokenMask, - 0, - DAI_ACCOUNT_AMOUNT, - false - ); + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // 0, + // LIQUIDATOR, + // friend, + // enabledTokensMask, + // 0, + // DAI_ACCOUNT_AMOUNT, + // false + // ); } } @@ -1814,9 +1832,9 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { expectBalance(Tokens.WETH, friend, WETH_TRANSFER); } - creditManager.closeCreditAccount( - creditAccount, ClosureAction.LIQUIDATE_ACCOUNT, 0, LIQUIDATOR, friend, 1, 0, DAI_ACCOUNT_AMOUNT, false - ); + // creditManager.closeCreditAccount( + // creditAccount, ClosureAction.LIQUIDATE_ACCOUNT, 0, LIQUIDATOR, friend, 1, 0, DAI_ACCOUNT_AMOUNT, false + // ); } } @@ -1847,42 +1865,42 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-47]: collateralTokens works as expected function test_CM_47_collateralTokens_works_as_expected(address newToken, uint16 newLT) public { - evm.assume(newToken != underlying && newToken != address(0)); + // vm.assume(newToken != underlying && newToken != address(0)); - evm.startPrank(CONFIGURATOR); + // vm.startPrank(CONFIGURATOR); - // reset connected tokens - CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(0)); + // // reset connected tokens + // CreditManagerV3 cm = new CreditManagerV3(address(poolMock), address(0)); - cm.setLiquidationThreshold(underlying, 9200); + // cm.setLiquidationThreshold(underlying, 9200); - (address token, uint16 lt) = cm.collateralTokens(0); - assertEq(token, underlying, "incorrect underlying token"); - assertEq(lt, 9200, "incorrect lt for underlying token"); + // (address token, uint16 lt) = cm.collateralTokens(0); + // assertEq(token, underlying, "incorrect underlying token"); + // assertEq(lt, 9200, "incorrect lt for underlying token"); - uint16 ltAlt = cm.liquidationThresholds(underlying); - assertEq(ltAlt, 9200, "incorrect lt for underlying token"); + // uint16 ltAlt = cm.liquidationThresholds(underlying); + // assertEq(ltAlt, 9200, "incorrect lt for underlying token"); - assertEq(cm.collateralTokensCount(), 1, "Incorrect length"); + // assertEq(cm.collateralTokensCount(), 1, "Incorrect length"); - cm.addToken(newToken); - assertEq(cm.collateralTokensCount(), 2, "Incorrect length"); - (token, lt) = cm.collateralTokens(1); + // cm.addToken(newToken); + // assertEq(cm.collateralTokensCount(), 2, "Incorrect length"); + // (token, lt) = cm.collateralTokens(1); - assertEq(token, newToken, "incorrect newToken token"); - assertEq(lt, 0, "incorrect lt for newToken token"); + // assertEq(token, newToken, "incorrect newToken token"); + // assertEq(lt, 0, "incorrect lt for newToken token"); - cm.setLiquidationThreshold(newToken, newLT); - (token, lt) = cm.collateralTokens(1); + // cm.setLiquidationThreshold(newToken, newLT); + // (token, lt) = cm.collateralTokens(1); - assertEq(token, newToken, "incorrect newToken token"); - assertEq(lt, newLT, "incorrect lt for newToken token"); + // assertEq(token, newToken, "incorrect newToken token"); + // assertEq(lt, newLT, "incorrect lt for newToken token"); - ltAlt = cm.liquidationThresholds(newToken); + // ltAlt = cm.liquidationThresholds(newToken); - assertEq(ltAlt, newLT, "incorrect lt for newToken token"); + // assertEq(ltAlt, newLT, "incorrect lt for newToken token"); - evm.stopPrank(); + // vm.stopPrank(); } // @@ -1895,7 +1913,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // assertEq(creditManager.getCreditAccountOrRevert(USER), creditAccount, "Incorrect credit account"); - // evm.expectRevert(CreditAccountNotExistsException.selector); + // vm.expectRevert(CreditAccountNotExistsException.selector); // creditManager.getCreditAccountOrRevert(DUMB_ADDRESS); // } @@ -1905,34 +1923,34 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-49]: calcCreditAccountAccruedInterest computes correctly function test_CM_49_calcCreditAccountAccruedInterest_computes_correctly(uint128 amount) public { - tokenTestSuite.mint(Tokens.DAI, address(poolMock), amount); - (,,, address creditAccount) = cms.openCreditAccount(amount); + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), amount); + // (,,, address creditAccount) = cms.openCreditAccount(amount); - uint256 expectedBorrowedAmount = amount; + // uint256 expectedBorrowedAmount = amount; - (, uint256 cumulativeIndexAtOpen,,,,) = creditManager.creditAccountInfo(creditAccount); + // (, uint256 cumulativeIndexLastUpdate,,,,) = creditManager.creditAccountInfo(creditAccount); - uint256 cumulativeIndexNow = poolMock._cumulativeIndex_RAY(); - uint256 expectedBorrowedAmountWithInterest = - (expectedBorrowedAmount * cumulativeIndexNow) / cumulativeIndexAtOpen; + // uint256 cumulativeIndexNow = poolMock._cumulativeIndex_RAY(); + // uint256 expectedBorrowedAmountWithInterest = + // (expectedBorrowedAmount * cumulativeIndexNow) / cumulativeIndexLastUpdate; - (uint256 feeInterest,,,,) = creditManager.fees(); + // (uint256 feeInterest,,,,) = creditManager.fees(); - uint256 expectedFee = - ((expectedBorrowedAmountWithInterest - expectedBorrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; + // uint256 expectedFee = + // ((expectedBorrowedAmountWithInterest - expectedBorrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; - (uint256 borrowedAmount, uint256 borrowedAmountWithInterest, uint256 borrowedAmountWithInterestAndFees) = - creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (uint256 borrowedAmount, uint256 borrowedAmountWithInterest, uint256 borrowedAmountWithInterestAndFees) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); - assertEq(borrowedAmount, expectedBorrowedAmount, "Incorrect borrowed amount"); - assertEq( - borrowedAmountWithInterest, expectedBorrowedAmountWithInterest, "Incorrect borrowed amount with interest" - ); - assertEq( - borrowedAmountWithInterestAndFees, - expectedBorrowedAmountWithInterest + expectedFee, - "Incorrect borrowed amount with interest and fees" - ); + // assertEq(borrowedAmount, expectedBorrowedAmount, "Incorrect borrowed amount"); + // assertEq( + // borrowedAmountWithInterest, expectedBorrowedAmountWithInterest, "Incorrect borrowed amount with interest" + // ); + // assertEq( + // borrowedAmountWithInterestAndFees, + // expectedBorrowedAmountWithInterest + expectedFee, + // "Incorrect borrowed amount with interest and fees" + // ); } // @@ -1946,17 +1964,17 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { (,,, address creditAccount) = _openCreditAccount(); - (uint256 expectedDebt, uint256 expectedCumulativeIndexAtOpen,,,,) = + (uint256 expectedDebt, uint256 expectedcumulativeIndexLastUpdate,,,,) = creditManager.creditAccountInfo(creditAccount); CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen,) = cmi.getCreditAccountParameters(creditAccount); + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate,) = cmi.getCreditAccountParameters(creditAccount); assertEq(borrowedAmount, expectedDebt, "Incorrect borrowed amount"); - assertEq(cumulativeIndexAtOpen, expectedCumulativeIndexAtOpen, "Incorrect cumulativeIndexAtOpen"); + assertEq(cumulativeIndexLastUpdate, expectedcumulativeIndexLastUpdate, "Incorrect cumulativeIndexLastUpdate"); - assertEq(cumulativeIndexAtOpen, expectedCumulativeIndexAtOpen, "cumulativeIndexAtOpen"); + assertEq(cumulativeIndexLastUpdate, expectedcumulativeIndexLastUpdate, "cumulativeIndexLastUpdate"); } // @@ -1971,7 +1989,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint16 s_feeLiquidationExpired = 1221; uint16 s_liquidationPremiumExpired = 7777; - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setParams( s_feeInterest, s_feeLiquidation, s_liquidationPremium, s_feeLiquidationExpired, s_liquidationPremiumExpired ); @@ -1996,26 +2014,26 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-52]: addToken reverts if token exists and if collateralTokens > 256 function test_CM_52_addToken_reverts_if_token_exists_and_if_collateralTokens_more_256() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); - evm.expectRevert(TokenAlreadyAddedException.selector); + vm.expectRevert(TokenAlreadyAddedException.selector); creditManager.addToken(underlying); for (uint256 i = creditManager.collateralTokensCount(); i < 248; i++) { creditManager.addToken(address(uint160(uint256(keccak256(abi.encodePacked(i)))))); } - evm.expectRevert(TooManyTokensException.selector); + vm.expectRevert(TooManyTokensException.selector); creditManager.addToken(DUMB_ADDRESS); - evm.stopPrank(); + vm.stopPrank(); } /// @dev [CM-53]: addToken adds token and set tokenMaskMap correctly function test_CM_53_addToken_adds_token_and_set_tokenMaskMap_correctly() public { uint256 count = creditManager.collateralTokensCount(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.addToken(DUMB_ADDRESS); assertEq(creditManager.collateralTokensCount(), count + 1, "collateralTokensCount want incremented"); @@ -2029,9 +2047,9 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-54]: setLiquidationThreshold reverts for unknown token function test_CM_54_setLiquidationThreshold_reverts_for_unknown_token() public { - evm.prank(CONFIGURATOR); - evm.expectRevert(TokenNotAllowedException.selector); - creditManager.setLiquidationThreshold(DUMB_ADDRESS, 1200); + vm.prank(CONFIGURATOR); + vm.expectRevert(TokenNotAllowedException.selector); + creditManager.setCollateralTokenData(DUMB_ADDRESS, 8000, 8000, type(uint40).max, 0); } // // @@ -2043,7 +2061,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // assertTrue(creditManager.forbiddenTokenMask() != expectedForbidMask, "expectedForbidMask is already the same"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.setForbidMask(expectedForbidMask); // assertEq(creditManager.forbiddenTokenMask(), expectedForbidMask, "ForbidMask is not set correctly"); @@ -2059,36 +2077,36 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { creditManager.adapterToContract(ADAPTER) != DUMB_ADDRESS, "adapterToContract(ADAPTER) is already the same" ); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); assertEq(creditManager.adapterToContract(ADAPTER), DUMB_ADDRESS, "adapterToContract is not set correctly"); assertEq(creditManager.contractToAdapter(DUMB_ADDRESS), ADAPTER, "adapterToContract is not set correctly"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, address(0)); assertEq(creditManager.adapterToContract(ADAPTER), address(0), "adapterToContract is not set correctly"); assertEq(creditManager.contractToAdapter(address(0)), address(0), "adapterToContract is not set correctly"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(ADAPTER, DUMB_ADDRESS); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setContractAllowance(address(0), DUMB_ADDRESS); assertEq(creditManager.adapterToContract(address(0)), address(0), "adapterToContract is not set correctly"); assertEq(creditManager.contractToAdapter(DUMB_ADDRESS), address(0), "adapterToContract is not set correctly"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.setContractAllowance(ADAPTER, UNIVERSAL_CONTRACT); // assertEq(creditManager.universalAdapter(), ADAPTER, "Universal adapter is not correctly set"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.setContractAllowance(address(0), UNIVERSAL_CONTRACT); // assertEq(creditManager.universalAdapter(), address(0), "Universal adapter is not correctly set"); @@ -2102,7 +2120,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_57A_setCreditFacade_updates_contract_correctly() public { assertTrue(creditManager.creditFacade() != DUMB_ADDRESS, "creditFacade( is already the same"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setCreditFacade(DUMB_ADDRESS); assertEq(creditManager.creditFacade(), DUMB_ADDRESS, "creditFacade is not set correctly"); @@ -2112,7 +2130,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_57_setPriceOracle_updates_contract_correctly() public { assertTrue(address(creditManager.priceOracle()) != DUMB_ADDRESS2, "priceOracle is already the same"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setPriceOracle(DUMB_ADDRESS2); assertEq(address(creditManager.priceOracle()), DUMB_ADDRESS2, "priceOracle is not set correctly"); @@ -2126,9 +2144,9 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_58_setCreditConfigurator_sets_creditConfigurator_correctly_and_emits_event() public { assertTrue(creditManager.creditConfigurator() != DUMB_ADDRESS, "creditConfigurator is already the same"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetCreditConfigurator(DUMB_ADDRESS); creditManager.setCreditConfigurator(DUMB_ADDRESS); @@ -2154,23 +2172,23 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // function test_CM_60_universal_adapter_can_call_adapter_restricted_functions() public { // TargetContractMock targetMock = new TargetContractMock(); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.setContractAllowance(ADAPTER, UNIVERSAL_CONTRACT_ADDRESS); // _openAccountAndTransferToCF(); - // evm.prank(ADAPTER); + // vm.prank(ADAPTER); // creditManager.approveCreditAccount(DUMB_ADDRESS, underlying, type(uint256).max); // bytes memory callData = bytes("Hello"); - // evm.prank(ADAPTER); + // vm.prank(ADAPTER); // creditManager.executeOrder(address(targetMock), callData); // } /// @dev [CM-61]: setMaxEnabledToken correctly sets value function test_CM_61_setMaxEnabledTokens_works_correctly() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setMaxEnabledTokens(255); assertEq(creditManager.maxAllowedEnabledTokenLength(), 255, "Incorrect max enabled tokens"); @@ -2180,22 +2198,22 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // /// and the payer is not set as emergency liquidator // function test_CM_64_closeCreditAccount_reverts_when_paused_and_liquidator_not_privileged() public { - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.pause(); - // evm.expectRevert("Pausable: paused"); + // vm.expectRevert("Pausable: paused"); // // creditManager.closeCreditAccount(USER, ClosureAction.LIQUIDATE_ACCOUNT, 0, LIQUIDATOR, FRIEND, 0, false); // } // /// @dev [CM-65]: Emergency liquidator can't close an account instead of liquidating // function test_CM_65_closeCreditAccount_reverts_when_paused_and_liquidator_tries_to_close() public { - // evm.startPrank(CONFIGURATOR); + // vm.startPrank(CONFIGURATOR); // creditManager.pause(); // creditManager.addEmergencyLiquidator(LIQUIDATOR); - // evm.stopPrank(); + // vm.stopPrank(); - // evm.expectRevert("Pausable: paused"); + // vm.expectRevert("Pausable: paused"); // // creditManager.closeCreditAccount(USER, ClosureAction.CLOSE_ACCOUNT, 0, LIQUIDATOR, FRIEND, 0, false); // } @@ -2207,52 +2225,52 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint128 delta, bool isIncrease ) public { - evm.assume(borrowedAmount > 100); - evm.assume(uint256(borrowedAmount) + uint256(delta) <= 2 ** 128 - 1); + // vm.assume(borrowedAmount > 100); + // vm.assume(uint256(borrowedAmount) + uint256(delta) <= 2 ** 128 - 1); - indexNow = indexNow < RAY ? indexNow + RAY : indexNow; - indexAtOpen = indexAtOpen < RAY ? indexAtOpen + RAY : indexNow; + // indexNow = indexNow < RAY ? indexNow + RAY : indexNow; + // indexAtOpen = indexAtOpen < RAY ? indexAtOpen + RAY : indexNow; - evm.assume(indexNow <= 100 * RAY); - evm.assume(indexNow >= indexAtOpen); - evm.assume(indexNow - indexAtOpen < 10 * RAY); + // vm.assume(indexNow <= 100 * RAY); + // vm.assume(indexNow >= indexAtOpen); + // vm.assume(indexNow - indexAtOpen < 10 * RAY); - uint256 interest = uint256((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); + // uint256 interest = uint256((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); - evm.assume(interest > 1); + // vm.assume(interest > 1); - if (!isIncrease && (delta > interest)) delta %= uint128(interest); + // if (!isIncrease && (delta > interest)) delta %= uint128(interest); - CreditManagerTestInternal cmi = new CreditManagerTestInternal( - creditManager.poolService(), address(withdrawManager) - ); + // CreditManagerTestInternal cmi = new CreditManagerTestInternal( + // creditManager.poolService(), address(withdrawalManager) + // ); - if (isIncrease) { - uint256 newIndex = cmi.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, true); + // if (isIncrease) { + // uint256 newIndex = CreditLogic.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, true); - uint256 newInterestError = ((borrowedAmount + delta) * indexNow) / newIndex - (borrowedAmount + delta) - - ((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); + // uint256 newInterestError = ((borrowedAmount + delta) * indexNow) / newIndex - (borrowedAmount + delta) + // - ((borrowedAmount * indexNow) / indexAtOpen - borrowedAmount); - uint256 newTotalDebt = ((borrowedAmount + delta) * indexNow) / newIndex; + // uint256 newTotalDebt = ((borrowedAmount + delta) * indexNow) / newIndex; - assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); - } else { - uint256 newIndex = cmi.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, false); + // assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); + // } else { + // uint256 newIndex = cmi.calcNewCumulativeIndex(borrowedAmount, delta, indexNow, indexAtOpen, false); - uint256 newTotalDebt = ((borrowedAmount * indexNow) / newIndex); - uint256 newInterestError = newTotalDebt - borrowedAmount - (interest - delta); + // uint256 newTotalDebt = ((borrowedAmount * indexNow) / newIndex); + // uint256 newInterestError = newTotalDebt - borrowedAmount - (interest - delta); - emit log_uint(indexNow); - emit log_uint(indexAtOpen); - emit log_uint(interest); - emit log_uint(delta); - emit log_uint(interest - delta); - emit log_uint(newTotalDebt); - emit log_uint(borrowedAmount); - emit log_uint(newInterestError); + // emit log_uint(indexNow); + // emit log_uint(indexAtOpen); + // emit log_uint(interest); + // emit log_uint(delta); + // emit log_uint(interest - delta); + // emit log_uint(newTotalDebt); + // emit log_uint(borrowedAmount); + // emit log_uint(newInterestError); - assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); - } + // assertLe((RAY * newInterestError) / newTotalDebt, 10000, "Interest error is larger than 10 ** -23"); + // } } // /// @dev [CM-67]: checkEmergencyPausable returns pause state and enable emergencyLiquidation if needed @@ -2261,23 +2279,23 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { // assertTrue(!p, "Incorrect paused() value for non-paused state"); // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.pause(); // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); // assertTrue(p, "Incorrect paused() value for paused state"); // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.unpause(); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.addEmergencyLiquidator(DUMB_ADDRESS); // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); // assertTrue(!p, "Incorrect paused() value for non-paused state"); // assertTrue(!creditManager.emergencyLiquidation(), "Emergency liquidation true when expected false"); - // evm.prank(CONFIGURATOR); + // vm.prank(CONFIGURATOR); // creditManager.pause(); // p = creditManager.checkEmergencyPausable(DUMB_ADDRESS, true); @@ -2291,14 +2309,14 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { /// @dev [CM-68]: fullCollateralCheck checks tokens in correct order function test_CM_68_fullCollateralCheck_is_evaluated_in_order_of_hints() public { - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexNow, address creditAccount) = + (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexNow, address creditAccount) = _openCreditAccount(); uint256 daiBalance = tokenTestSuite.balanceOf(Tokens.DAI, creditAccount); tokenTestSuite.burn(Tokens.DAI, creditAccount, daiBalance); - uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexAtOpen; + uint256 borrowAmountWithInterest = borrowedAmount * cumulativeIndexNow / cumulativeIndexLastUpdate; uint256 interestAccured = borrowAmountWithInterest - borrowedAmount; (uint256 feeInterest,,,,) = creditManager.fees(); @@ -2323,8 +2341,8 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { collateralHints[0] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)); collateralHints[1] = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); - evm.expectCall(tokenTestSuite.addressOf(Tokens.USDT), abi.encodeCall(IERC20.balanceOf, (creditAccount))); - evm.expectCall(tokenTestSuite.addressOf(Tokens.LINK), abi.encodeCall(IERC20.balanceOf, (creditAccount))); + vm.expectCall(tokenTestSuite.addressOf(Tokens.USDT), abi.encodeCall(IERC20.balanceOf, (creditAccount))); + vm.expectCall(tokenTestSuite.addressOf(Tokens.LINK), abi.encodeCall(IERC20.balanceOf, (creditAccount))); uint256 enabledTokensMap = 1 | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDC)) | creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)) @@ -2345,7 +2363,7 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { function test_CM_70_fullCollateralCheck_reverts_for_illegal_mask_in_hints() public { (,,, address creditAccount) = _openCreditAccount(); - evm.expectRevert(TokenNotAllowedException.selector); + vm.expectRevert(TokenNotAllowedException.selector); uint256[] memory ch = new uint256[](1); ch[0] = 3; @@ -2363,8 +2381,8 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { CreditManagerTestInternal cmi = CreditManagerTestInternal(address(creditManager)); - evm.prank(CONFIGURATOR); - cmi.rampLiquidationThreshold(usdc, 8500, uint40(block.timestamp), 3600 * 24 * 7); + vm.prank(CONFIGURATOR); + cmi.setCollateralTokenData(usdc, 8500, 9000, uint40(block.timestamp), 3600 * 24 * 7); CollateralTokenData memory cd = cmi.collateralTokensDataExt(cmi.getTokenMaskOrRevert(usdc)); @@ -2384,43 +2402,127 @@ contract CreditManagerTest is DSTest, ICreditManagerV3Events, BalanceHelper { uint24 duration, uint256 timestampCheck ) public { - initialLT = 1000 + (initialLT % (DEFAULT_UNDERLYING_LT - 999)); - newLT = 1000 + (newLT % (DEFAULT_UNDERLYING_LT - 999)); - duration = 3600 + (duration % (3600 * 24 * 90 - 3600)); + // initialLT = 1000 + (initialLT % (DEFAULT_UNDERLYING_LT - 999)); + // newLT = 1000 + (newLT % (DEFAULT_UNDERLYING_LT - 999)); + // duration = 3600 + (duration % (3600 * 24 * 90 - 3600)); - timestampCheck = block.timestamp + (timestampCheck % (duration + 1)); + // timestampCheck = block.timestamp + (timestampCheck % (duration + 1)); - address usdc = tokenTestSuite.addressOf(Tokens.USDC); + // address usdc = tokenTestSuite.addressOf(Tokens.USDC); - uint256 timestampStart = block.timestamp; + // uint256 timestampStart = block.timestamp; - evm.startPrank(CONFIGURATOR); - creditManager.setLiquidationThreshold(usdc, initialLT); - creditManager.rampLiquidationThreshold(usdc, newLT, uint40(block.timestamp), duration); - - assertEq(creditManager.liquidationThresholds(usdc), initialLT, "LT at ramping start incorrect"); - - uint16 expectedLT; - if (newLT >= initialLT) { - expectedLT = uint16( - uint256(initialLT) - + (uint256(newLT - initialLT) * (timestampCheck - timestampStart)) / uint256(duration) - ); - } else { - expectedLT = uint16( - uint256(initialLT) - - (uint256(initialLT - newLT) * (timestampCheck - timestampStart)) / uint256(duration) - ); - } + // vm.startPrank(CONFIGURATOR); + // creditManager.setCollateralTokenData(usdc, initialLT); + // creditManager.rampLiquidationThreshold(usdc, newLT, uint40(block.timestamp), duration); - evm.warp(timestampCheck); - uint16 actualLT = creditManager.liquidationThresholds(usdc); - uint16 diff = actualLT > expectedLT ? actualLT - expectedLT : expectedLT - actualLT; + // assertEq(creditManager.liquidationThresholds(usdc), initialLT, "LT at ramping start incorrect"); - assertLe(diff, 1, "LT off by more than 1"); + // uint16 expectedLT; + // if (newLT >= initialLT) { + // expectedLT = uint16( + // uint256(initialLT) + // + (uint256(newLT - initialLT) * (timestampCheck - timestampStart)) / uint256(duration) + // ); + // } else { + // expectedLT = uint16( + // uint256(initialLT) + // - (uint256(initialLT - newLT) * (timestampCheck - timestampStart)) / uint256(duration) + // ); + // } - evm.warp(timestampStart + duration + 1); + // vm.warp(timestampCheck); + // uint16 actualLT = creditManager.liquidationThresholds(usdc); + // uint16 diff = actualLT > expectedLT ? actualLT - expectedLT : expectedLT - actualLT; + + // assertLe(diff, 1, "LT off by more than 1"); + + // vm.warp(timestampStart + duration + 1); + + // assertEq(creditManager.liquidationThresholds(usdc), newLT, "LT at ramping end incorrect"); + } + + // /// @notice [UA-3]: UniversalAdapter `revokeAllowances` reverts if passed zero address + // function test_UA_03_revokeAllowances_reverts_if_passed_zero_address() public { + // _openTestCreditAccount(); + + // RevocationPair[] memory revocations = new RevocationPair[](1); + + // vm.prank(USER); + // revocations[0] = RevocationPair({spender: address(0), token: usdc}); + // vm.expectRevert(ZeroAddressException.selector); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(universalAdapter), + // callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) + // }) + // ) + // ); + + // vm.prank(USER); + // revocations[0] = RevocationPair({spender: address(targetMock1), token: address(0)}); + // vm.expectRevert(ZeroAddressException.selector); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(universalAdapter), + // callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) + // }) + // ) + // ); + // } - assertEq(creditManager.liquidationThresholds(usdc), newLT, "LT at ramping end incorrect"); - } + // /// @notice [UA-4]: UniversalAdapter `revokeAllowances` works as expected + // function test_UA_04_revokeAllowances_works_as_expected() public { + // (address creditAccount,) = _openTestCreditAccount(); + + // vm.prank(USER); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(adapterMock1), + // callData: abi.encodeCall(adapterMock1.approveToken, (usdc, 10)) + // }), + // MultiCall({ + // target: address(adapterMock1), + // callData: abi.encodeCall(adapterMock1.approveToken, (dai, 20)) + // }), + // MultiCall({ + // target: address(adapterMock2), + // callData: abi.encodeCall(adapterMock2.approveToken, (dai, 30)) + // }) + // ) + // ); + + // RevocationPair[] memory revocations = new RevocationPair[](3); + // revocations[0] = RevocationPair({spender: address(targetMock1), token: usdc}); + // revocations[1] = RevocationPair({spender: address(targetMock2), token: usdc}); + // revocations[2] = RevocationPair({spender: address(targetMock2), token: dai}); + + // vm.expectCall( + // address(creditManager), + // abi.encodeCall(ICreditManagerV3.approveCreditAccount, (address(targetMock1), usdc, 1)) + // ); + // vm.expectCall( + // address(creditManager), + // abi.encodeCall(ICreditManagerV3.approveCreditAccount, (address(targetMock2), dai, 1)) + // ); + + // vm.prank(USER); + // creditFacade.multicall( + // multicallBuilder( + // MultiCall({ + // target: address(universalAdapter), + // callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) + // }) + // ) + // ); + + // expectAllowance(usdc, creditAccount, address(targetMock1), 1); + // expectAllowance(dai, creditAccount, address(targetMock1), 20); + // expectAllowance(usdc, creditAccount, address(targetMock2), 0); + // expectAllowance(dai, creditAccount, address(targetMock2), 1); + // } + // } } diff --git a/contracts/test/unit/credit/CreditManager_Quotas.t.sol b/contracts/test/unit/credit/CreditManager_Quotas.t.sol index 703e6539..a50108fb 100644 --- a/contracts/test/unit/credit/CreditManager_Quotas.t.sol +++ b/contracts/test/unit/credit/CreditManager_Quotas.t.sol @@ -15,10 +15,11 @@ import { CollateralTokenData, ManageDebtAction } from "../../../interfaces/ICreditManagerV3.sol"; -import {IPoolQuotaKeeper, QuotaUpdate, TokenLT, AccountQuota} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper, AccountQuota} from "../../../interfaces/IPoolQuotaKeeper.sol"; import {IPriceOracleV2, IPriceOracleV2Ext} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceOracle.sol"; import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; +import {UNDERLYING_TOKEN_MASK} from "../../../libraries/BitMask.sol"; import {IPoolService} from "@gearbox-protocol/core-v2/contracts/interfaces/IPoolService.sol"; @@ -49,11 +50,10 @@ import {CreditConfig} from "../../config/CreditConfig.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; +import {Test} from "forge-std/Test.sol"; import "forge-std/console.sol"; -contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelper { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract CreditManagerQuotasTest is Test, ICreditManagerV3Events, BalanceHelper { CreditManagerTestSuite cms; IAddressProvider addressProvider; @@ -101,27 +101,27 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe cms.makeTokenQuoted(token, rate, limit); } - function _addManyLimitedTokens(uint256 numTokens, uint96 quota) - internal - returns (QuotaUpdate[] memory quotaChanges) - { - quotaChanges = new QuotaUpdate[](numTokens); + // function _addManyLimitedTokens(uint256 numTokens, uint96 quota) + // internal + // returns (QuotaUpdate[] memory quotaChanges) + // { + // quotaChanges = new QuotaUpdate[](numTokens); - for (uint256 i = 0; i < numTokens; i++) { - ERC20Mock t = new ERC20Mock("new token", "nt", 18); - PriceFeedMock pf = new PriceFeedMock(10**8, 8); + // for (uint256 i = 0; i < numTokens; i++) { + // ERC20Mock t = new ERC20Mock("new token", "nt", 18); + // PriceFeedMock pf = new PriceFeedMock(10**8, 8); - evm.startPrank(CONFIGURATOR); - creditManager.addToken(address(t)); - IPriceOracleV2Ext(address(priceOracle)).addPriceFeed(address(t), address(pf)); - creditManager.setLiquidationThreshold(address(t), 8000); - evm.stopPrank(); + // vm.startPrank(CONFIGURATOR); + // creditManager.addToken(address(t)); + // IPriceOracleV2Ext(address(priceOracle)).addPriceFeed(address(t), address(pf)); + // creditManager.setCollateralTokenData(address(t), 8000, 8000, type(uint40).max, 0); + // vm.stopPrank(); - _addQuotedToken(address(t), 100, type(uint96).max); + // _addQuotedToken(address(t), 100, type(uint96).max); - quotaChanges[i] = QuotaUpdate({token: address(t), quotaChange: int96(quota)}); - } - } + // quotaChanges[i] = QuotaUpdate({token: address(t), quotaChange: int96(quota)}); + // } + // } /// /// @@ -143,10 +143,10 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe uint256 quotedTokenMask = creditManager.quotedTokenMask(); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); creditManager.setQuotedMask(quotedTokenMask | usdcMask); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.setQuotedMask(quotedTokenMask | usdcMask); assertEq(creditManager.quotedTokenMask(), usdcMask | linkMask, "New limited mask is incorrect"); @@ -163,33 +163,39 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe assertEq(cumulativeQuotaInterest, 1, "SETUP: Cumulative quota interest was not updated correctly"); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: 100_000}); - quotaUpdates[1] = QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: 200_000}); - - evm.expectRevert(CallerNotCreditFacadeException.selector); - evm.prank(FRIEND); - creditManager.updateQuotas(creditAccount, quotaUpdates); + vm.expectRevert(CallerNotCreditFacadeException.selector); + vm.prank(FRIEND); + creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: 100_000 + }); - evm.expectCall( - address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + vm.expectCall( + address(poolQuotaKeeper), + abi.encodeCall( + IPoolQuotaKeeper.updateQuota, (creditAccount, tokenTestSuite.addressOf(Tokens.LINK), 100_000) + ) ); uint256 linkMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.LINK)); - uint256 usdtMask = creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.USDT)); - (uint256 tokensToEnable, uint256 tokensToDisable) = creditManager.updateQuotas(creditAccount, quotaUpdates); + (uint256 tokensToEnable, uint256 tokensToDisable) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: 100_000 + }); - assertEq(tokensToEnable, linkMask | usdtMask, "Incorrect tokensToEnble"); + assertEq(tokensToEnable, linkMask, "Incorrect tokensToEnble"); assertEq(tokensToDisable, 0, "Incorrect tokensToDisable"); - evm.warp(block.timestamp + 365 days); - - quotaUpdates[0] = QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: -100_000}); - quotaUpdates[1] = QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: -100_000}); - - (tokensToEnable, tokensToDisable) = creditManager.updateQuotas(creditAccount, quotaUpdates); + vm.warp(block.timestamp + 365 days); + (tokensToEnable, tokensToDisable) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: -100_000 + }); assertEq(tokensToEnable, 0, "Incorrect tokensToEnable"); assertEq(tokensToDisable, linkMask, "Incorrect tokensToDisable"); @@ -201,102 +207,104 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe "Cumulative quota interest was not updated correctly" ); - quotaUpdates[0] = QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDC), quotaChange: -100000}); - - evm.expectRevert(TokenIsNotQuotedException.selector); - creditManager.updateQuotas(creditAccount, quotaUpdates); + vm.expectRevert(TokenIsNotQuotedException.selector); + creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDC), + quotaChange: 100_000 + }); } /// @dev [CMQ-4]: Quotas are handled correctly on debt decrease: amount < quota interest case function test_CMQ_04_quotas_are_handled_correctly_at_repayment_partial_case() public { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); - (,,, address creditAccount) = cms.openCreditAccount(); - tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + // (,,, address creditAccount) = cms.openCreditAccount(); + // tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); - evm.expectCall( - address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) - ); + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); - (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); - /// We use fullCollateralCheck to update enabledTokenMask + // /// We use fullCollateralCheck to update enabledTokensMask - creditManager.fullCollateralCheck( - creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 - ); + // creditManager.fullCollateralCheck( + // creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 + // ); - evm.warp(block.timestamp + 365 days); + // vm.warp(block.timestamp + 365 days); - (uint16 feeInterest,,,,) = creditManager.fees(); + // (uint16 feeInterest,,,,) = creditManager.fees(); - uint256 amountRepaid = (PERCENTAGE_FACTOR + feeInterest) * WAD / 1_000; + // uint256 amountRepaid = (PERCENTAGE_FACTOR + feeInterest) * WAD / 1_000; - uint256 expectedQuotaInterestRepaid = (amountRepaid * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); + // uint256 expectedQuotaInterestRepaid = (amountRepaid * PERCENTAGE_FACTOR) / (PERCENTAGE_FACTOR + feeInterest); - (, uint256 totalDebtBefore, uint256 totalDebtBeforeFee) = - creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (, uint256 totalDebtBefore, uint256 totalDebtBeforeFee) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); - creditManager.manageDebt( - creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT - ); + // creditManager.manageDebt( + // creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT + // ); - (, uint256 totalDebtAfter, uint256 totalDebtAfterFee) = - creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (, uint256 totalDebtAfter, uint256 totalDebtAfterFee) = + // creditManager.calcCreditAccountAccruedInterest(creditAccount); - assertEq(totalDebtAfter, totalDebtBefore - expectedQuotaInterestRepaid, "Debt updated incorrectly"); + // assertEq(totalDebtAfter, totalDebtBefore - expectedQuotaInterestRepaid, "Debt updated incorrectly"); - assertEq(totalDebtAfterFee, totalDebtBeforeFee - amountRepaid, "Debt updated incorrectly"); + // assertEq(totalDebtAfterFee, totalDebtBeforeFee - amountRepaid, "Debt updated incorrectly"); } /// @dev [CMQ-5]: Quotas are handled correctly on debt decrease: amount >= quota interest case function test_CMQ_05_quotas_are_handled_correctly_at_repayment_full_case() public { - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 1000, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 1000, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); - (,,, address creditAccount) = cms.openCreditAccount(); - tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); + // (,,, address creditAccount) = cms.openCreditAccount(); + // tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); - evm.expectCall( - address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) - ); + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); - (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); - creditManager.fullCollateralCheck( - creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 - ); + // creditManager.fullCollateralCheck( + // creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 + // ); - evm.warp(block.timestamp + 365 days); + // vm.warp(block.timestamp + 365 days); - uint256 amountRepaid = 35 * WAD; + // uint256 amountRepaid = 35 * WAD; - (,, uint256 totalDebtBefore) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (,, uint256 totalDebtBefore) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - creditManager.manageDebt( - creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT - ); + // creditManager.manageDebt( + // creditAccount, amountRepaid, tokensToEnable | UNDERLYING_TOKEN_MASK, ManageDebtAction.DECREASE_DEBT + // ); - (,, uint256 cumulativeQuotaInterest,,,) = creditManager.creditAccountInfo(creditAccount); + // (,, uint256 cumulativeQuotaInterest,,,) = creditManager.creditAccountInfo(creditAccount); - assertEq(cumulativeQuotaInterest, 1, "Cumulative quota interest was not updated correctly"); + // assertEq(cumulativeQuotaInterest, 1, "Cumulative quota interest was not updated correctly"); - (,, uint256 totalDebtAfter) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (,, uint256 totalDebtAfter) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - assertEq(totalDebtAfter, totalDebtBefore - amountRepaid, "Debt updated incorrectly"); + // assertEq(totalDebtAfter, totalDebtBefore - amountRepaid, "Debt updated incorrectly"); } /// @dev [CMQ-6]: Quotas are disabled on closing an account @@ -304,36 +312,41 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 5_00, uint96(1_000_000 * WAD)); - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexAtClose, address creditAccount) = - cms.openCreditAccount(); + ( + uint256 borrowedAmount, + uint256 cumulativeIndexLastUpdate, + uint256 cumulativeIndexAtClose, + address creditAccount + ) = cms.openCreditAccount(); tokenTestSuite.mint(Tokens.DAI, creditAccount, DAI_ACCOUNT_AMOUNT * 2); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); - - evm.expectCall( - address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) - ); + uint256 enabledTokensMask = UNDERLYING_TOKEN_MASK; + (uint256 tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(100 * WAD)) + }); + enabledTokensMask |= tokensToEnable; - (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + (tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDT), + quotaChange: int96(uint96(200 * WAD)) + }); + enabledTokensMask |= tokensToEnable; - creditManager.fullCollateralCheck( - creditAccount, tokensToEnable | UNDERLYING_TOKEN_MASK, new uint256[](0), 10_000 - ); + creditManager.fullCollateralCheck(creditAccount, enabledTokensMask, new uint256[](0), 10_000); (uint16 feeInterest,,,,) = creditManager.fees(); - uint256 interestAccured = (borrowedAmount * cumulativeIndexAtClose / cumulativeIndexAtOpen - borrowedAmount) + uint256 interestAccured = (borrowedAmount * cumulativeIndexAtClose / cumulativeIndexLastUpdate - borrowedAmount) * (PERCENTAGE_FACTOR + feeInterest) / PERCENTAGE_FACTOR; uint256 expectedQuotasInterest = (100 * WAD * 10_00 / PERCENTAGE_FACTOR + 200 * WAD * 5_00 / PERCENTAGE_FACTOR) * (PERCENTAGE_FACTOR + feeInterest) / PERCENTAGE_FACTOR; - evm.warp(block.timestamp + 365 days); + vm.warp(block.timestamp + 365 days); tokenTestSuite.mint(Tokens.DAI, creditAccount, borrowedAmount); @@ -344,24 +357,24 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe // uint256 totalValue, // address payer, // address to, - // uint256 enabledTokenMask, + // uint256 enabledTokensMask, // uint256 skipTokensMask, // uint256 borrowedAmountWithInterest, // bool convertWETH - (, uint256 borrowedAmountWithInterest,) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.CLOSE_ACCOUNT, - 0, - USER, - USER, - tokensToEnable | UNDERLYING_TOKEN_MASK, - 0, - borrowedAmountWithInterest, - false - ); + // (, uint256 borrowedAmountWithInterest,) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.CLOSE_ACCOUNT, + // 0, + // USER, + // USER, + // tokensToEnable | UNDERLYING_TOKEN_MASK, + // 0, + // borrowedAmountWithInterest, + // false + // ); expectBalance( Tokens.DAI, @@ -370,15 +383,15 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe "Incorrect pool balance" ); - AccountQuota memory quota = - poolQuotaKeeper.getQuota(address(creditManager), creditAccount, tokenTestSuite.addressOf(Tokens.LINK)); + (uint96 quota, uint192 cumulativeIndexLU) = + poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.LINK)); - assertEq(uint256(quota.quota), 1, "Quota was not set to 0"); - // assertEq(uint256(quota.cumulativeIndexLU), 0, "Cumulative index was not updated"); + assertEq(uint256(quota), 1, "Quota was not set to 0"); + assertEq(uint256(cumulativeIndexLU), 0, "Cumulative index was not updated"); - quota = poolQuotaKeeper.getQuota(address(creditManager), creditAccount, tokenTestSuite.addressOf(Tokens.USDT)); - assertEq(uint256(quota.quota), 1, "Quota was not set to 0"); - // assertEq(uint256(quota.cumulativeIndexLU), 0, "Cumulative index was not updated"); + (quota, cumulativeIndexLU) = poolQuotaKeeper.getQuota(creditAccount, tokenTestSuite.addressOf(Tokens.USDT)); + assertEq(uint256(quota), 1, "Quota was not set to 0"); + assertEq(uint256(cumulativeIndexLU), 0, "Cumulative index was not updated"); } // /// @dev [CMQ-7] enableToken, disableToken and changeEnabledTokens do nothing for limited tokens @@ -418,114 +431,114 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe bool enableWETH, uint16 minHealthFactor ) public { - _connectCreditManagerSuite(Tokens.DAI, true); + // _connectCreditManagerSuite(Tokens.DAI, true); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDC), 500, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDC), 500, uint96(1_000_000 * WAD)); - evm.assume(borrowedAmount > WAD); - evm.assume(usdcQuota < type(uint96).max / 2); - evm.assume(linkQuota < type(uint96).max / 2); - evm.assume(minHealthFactor >= 10_000); + // vm.assume(borrowedAmount > WAD); + // vm.assume(usdcQuota < type(uint96).max / 2); + // vm.assume(linkQuota < type(uint96).max / 2); + // vm.assume(minHealthFactor >= 10_000); - console.log("ba", borrowedAmount); - // uint128 daiBalance, - // uint128 usdcBalance, - // uint128 linkBalance, - // uint128 wethBalance, - // uint96 usdcQuota, - // uint96 linkQuota, - // bool enableWETH, - // uint16 minHealthFactor) + // console.log("ba", borrowedAmount); + // // uint128 daiBalance, + // // uint128 usdcBalance, + // // uint128 linkBalance, + // // uint128 wethBalance, + // // uint96 usdcQuota, + // // uint96 linkQuota, + // // bool enableWETH, + // // uint16 minHealthFactor) - tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); + // tokenTestSuite.mint(Tokens.DAI, address(poolMock), borrowedAmount); - (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); - creditManager.transferAccountOwnership(creditAccount, address(this)); + // (,,, address creditAccount) = cms.openCreditAccount(borrowedAmount); + // creditManager.transferAccountOwnership(creditAccount, address(this)); - if (daiBalance > borrowedAmount) { - tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); - } else { - tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); - } + // if (daiBalance > borrowedAmount) { + // tokenTestSuite.mint(Tokens.DAI, creditAccount, daiBalance - borrowedAmount); + // } else { + // tokenTestSuite.burn(Tokens.DAI, creditAccount, borrowedAmount - daiBalance); + // } - expectBalance(Tokens.DAI, creditAccount, daiBalance); + // expectBalance(Tokens.DAI, creditAccount, daiBalance); - uint256 tokensToEnable; + // uint256 tokensToEnable; - { - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(linkQuota))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDC), quotaChange: int96(uint96(usdcQuota))}); + // { + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(linkQuota))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDC), quotaChange: int96(uint96(usdcQuota))}); - (tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); - } + // (tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + // } - uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; - if (enableWETH) { - enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); - } + // uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; + // if (enableWETH) { + // enabledTokensMap |= creditManager.getTokenMaskOrRevert(tokenTestSuite.addressOf(Tokens.WETH)); + // } - CreditManagerTestInternal(address(creditManager)).setEnabledTokenMask(creditAccount, enabledTokensMap); + // CreditManagerTestInternal(address(creditManager)).setenabledTokensMask(creditAccount, enabledTokensMap); - tokenTestSuite.mint(Tokens.WETH, creditAccount, wethBalance); - tokenTestSuite.mint(Tokens.USDC, creditAccount, usdcBalance); - tokenTestSuite.mint(Tokens.LINK, creditAccount, linkBalance); + // tokenTestSuite.mint(Tokens.WETH, creditAccount, wethBalance); + // tokenTestSuite.mint(Tokens.USDC, creditAccount, usdcBalance); + // tokenTestSuite.mint(Tokens.LINK, creditAccount, linkBalance); - uint256 twvUSD = ( - tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) - * creditConfig.lt(Tokens.DAI) - ) / WAD; + // uint256 twvUSD = ( + // tokenTestSuite.balanceOf(Tokens.DAI, creditAccount) * tokenTestSuite.prices(Tokens.DAI) + // * creditConfig.lt(Tokens.DAI) + // ) / WAD; - { - uint256 valueUsdc = - (tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC)) / (10 ** 6); + // { + // uint256 valueUsdc = + // (tokenTestSuite.balanceOf(Tokens.USDC, creditAccount) * tokenTestSuite.prices(Tokens.USDC)) / (10 ** 6); - uint256 quotaUsdc = usdcQuota > 1_000_000 * WAD ? 1_000_000 * WAD : usdcQuota; + // uint256 quotaUsdc = usdcQuota > 1_000_000 * WAD ? 1_000_000 * WAD : usdcQuota; - quotaUsdc = (quotaUsdc * tokenTestSuite.prices(Tokens.DAI)) / WAD; + // quotaUsdc = (quotaUsdc * tokenTestSuite.prices(Tokens.DAI)) / WAD; - uint256 tvIncrease = valueUsdc < quotaUsdc ? valueUsdc : quotaUsdc; + // uint256 tvIncrease = valueUsdc < quotaUsdc ? valueUsdc : quotaUsdc; - twvUSD += tvIncrease * creditConfig.lt(Tokens.USDC); - } + // twvUSD += tvIncrease * creditConfig.lt(Tokens.USDC); + // } - { - uint256 valueLink = - (tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK)) / WAD; + // { + // uint256 valueLink = + // (tokenTestSuite.balanceOf(Tokens.LINK, creditAccount) * tokenTestSuite.prices(Tokens.LINK)) / WAD; - uint256 quotaLink = linkQuota > 1_000_000 * WAD ? 1_000_000 * WAD : linkQuota; + // uint256 quotaLink = linkQuota > 1_000_000 * WAD ? 1_000_000 * WAD : linkQuota; - quotaLink = (quotaLink * tokenTestSuite.prices(Tokens.DAI)) / WAD; + // quotaLink = (quotaLink * tokenTestSuite.prices(Tokens.DAI)) / WAD; - uint256 tvIncrease = valueLink < quotaLink ? valueLink : quotaLink; + // uint256 tvIncrease = valueLink < quotaLink ? valueLink : quotaLink; - twvUSD += tvIncrease * creditConfig.lt(Tokens.LINK); - } + // twvUSD += tvIncrease * creditConfig.lt(Tokens.LINK); + // } - twvUSD += !enableWETH - ? 0 - : ( - tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) - * creditConfig.lt(Tokens.WETH) - ) / WAD; + // twvUSD += !enableWETH + // ? 0 + // : ( + // tokenTestSuite.balanceOf(Tokens.WETH, creditAccount) * tokenTestSuite.prices(Tokens.WETH) + // * creditConfig.lt(Tokens.WETH) + // ) / WAD; - (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (,, uint256 borrowedAmountWithInterestAndFees) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - uint256 debtUSD = (borrowedAmountWithInterestAndFees * minHealthFactor * tokenTestSuite.prices(Tokens.DAI)) - / PERCENTAGE_FACTOR / WAD; + // uint256 debtUSD = (borrowedAmountWithInterestAndFees * minHealthFactor * tokenTestSuite.prices(Tokens.DAI)) + // / PERCENTAGE_FACTOR / WAD; - twvUSD /= PERCENTAGE_FACTOR; + // twvUSD /= PERCENTAGE_FACTOR; - bool shouldRevert = twvUSD < debtUSD; + // bool shouldRevert = twvUSD < debtUSD; - if (shouldRevert) { - evm.expectRevert(NotEnoughCollateralException.selector); - } + // if (shouldRevert) { + // vm.expectRevert(NotEnoughCollateralException.selector); + // } - creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); + // creditManager.fullCollateralCheck(creditAccount, enabledTokensMap, new uint256[](0), minHealthFactor); } /// @dev [CMQ-9]: fullCollateralCheck does not check non-limited tokens if limited are enough to cover debt @@ -541,19 +554,26 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe uint256 tokenToEnable; { - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(1_000_000 * WAD))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDC), quotaChange: int96(uint96(1_000_000 * WAD))}); - - (tokenToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + (uint256 tokenToEnable1,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(1_000_000 * WAD)) + }); + + tokenToEnable |= tokenToEnable1; + + (tokenToEnable1,) = creditManager.updateQuota({ + creditAccount: creditAccount, + token: tokenTestSuite.addressOf(Tokens.USDC), + quotaChange: int96(uint96(1_000_000 * WAD)) + }); + tokenToEnable |= tokenToEnable1; } tokenTestSuite.mint(Tokens.USDC, creditAccount, RAY); tokenTestSuite.mint(Tokens.LINK, creditAccount, RAY); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); creditManager.addToken(DUMB_ADDRESS); // creditManager.checkAndEnableToken(DUMB_ADDRESS); @@ -573,50 +593,50 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe uint96 quotaLink, uint96 quotaUsdt ) public { - _connectCreditManagerSuite(Tokens.DAI, true); + // _connectCreditManagerSuite(Tokens.DAI, true); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); - _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.LINK), 10_00, uint96(1_000_000 * WAD)); + // _addQuotedToken(tokenTestSuite.addressOf(Tokens.USDT), 500, uint96(1_000_000 * WAD)); - (uint256 borrowedAmount, uint256 cumulativeIndexAtOpen, uint256 cumulativeIndexAtClose, address creditAccount) = - cms.openCreditAccount(); + // (uint256 borrowedAmount, uint256 cumulativeIndexLastUpdate, uint256 cumulativeIndexAtClose, address creditAccount) = + // cms.openCreditAccount(); - evm.assume(quotaLink < type(uint96).max / 2); - evm.assume(quotaUsdt < type(uint96).max / 2); + // vm.assume(quotaLink < type(uint96).max / 2); + // vm.assume(quotaUsdt < type(uint96).max / 2); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(quotaLink))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(quotaUsdt))}); + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + // quotaUpdates[0] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(quotaLink))}); + // quotaUpdates[1] = + // QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(quotaUsdt))}); - quotaLink = quotaLink > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaLink; - quotaUsdt = quotaUsdt > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaUsdt; + // quotaLink = quotaLink > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaLink; + // quotaUsdt = quotaUsdt > 1_000_000 * WAD ? uint96(1_000_000 * WAD) : quotaUsdt; - evm.expectCall( - address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) - ); + // vm.expectCall( + // address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.updateQuotas, (creditAccount, quotaUpdates)) + // ); - (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); + // (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); - uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; + // uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; - CreditManagerTestInternal(address(creditManager)).setEnabledTokenMask(creditAccount, enabledTokensMap); + // CreditManagerTestInternal(address(creditManager)).setenabledTokensMask(creditAccount, enabledTokensMap); - evm.warp(block.timestamp + 60 * 60 * 24 * 365); + // vm.warp(block.timestamp + 60 * 60 * 24 * 365); - (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); + // (,, uint256 totalDebt) = creditManager.calcCreditAccountAccruedInterest(creditAccount); - uint256 expectedTotalDebt = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexAtOpen; - expectedTotalDebt += (quotaLink * 1000 + quotaUsdt * 500) / PERCENTAGE_FACTOR; + // uint256 expectedTotalDebt = (borrowedAmount * cumulativeIndexAtClose) / cumulativeIndexLastUpdate; + // expectedTotalDebt += (quotaLink * 1000 + quotaUsdt * 500) / PERCENTAGE_FACTOR; - (uint16 feeInterest,,,,) = creditManager.fees(); + // (uint16 feeInterest,,,,) = creditManager.fees(); - expectedTotalDebt += ((expectedTotalDebt - borrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; + // expectedTotalDebt += ((expectedTotalDebt - borrowedAmount) * feeInterest) / PERCENTAGE_FACTOR; - uint256 diff = expectedTotalDebt > totalDebt ? expectedTotalDebt - totalDebt : totalDebt - expectedTotalDebt; + // uint256 diff = expectedTotalDebt > totalDebt ? expectedTotalDebt - totalDebt : totalDebt - expectedTotalDebt; - assertLe(diff, 2, "Total debt not equal"); + // assertLe(diff, 2, "Total debt not equal"); } // [DEPRECIATED]: We test that after full collateral @@ -628,7 +648,7 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe // QuotaUpdate[] memory quotaUpdates = _addManyLimitedTokens(maxTokens + 1, 100); - // evm.expectRevert(TooManyEnabledTokensException.selector); + // vm.expectRevert(TooManyEnabledTokensException.selector); // creditManager.updateQuotas(creditAccount, quotaUpdates); // } @@ -639,46 +659,45 @@ contract CreditManagerQuotasTest is DSTest, ICreditManagerV3Events, BalanceHelpe (,,, address creditAccount) = cms.openCreditAccount(); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); + uint256 enabledTokensMap = UNDERLYING_TOKEN_MASK; - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); - quotaUpdates[1] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.USDT), quotaChange: int96(uint96(200 * WAD))}); - (uint256 tokensToEnable,) = creditManager.updateQuotas(creditAccount, quotaUpdates); - - uint256 enabledTokensMap = tokensToEnable | UNDERLYING_TOKEN_MASK; - - TokenLT[] memory quotedTokens = new TokenLT[](creditManager.maxAllowedEnabledTokenLength() + 1); - - quotedTokens[1] = TokenLT({ + (uint256 tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, token: tokenTestSuite.addressOf(Tokens.LINK), - lt: creditManager.liquidationThresholds(tokenTestSuite.addressOf(Tokens.LINK)) + quotaChange: int96(uint96(100 * WAD)) }); + enabledTokensMap |= tokensToEnable; - quotedTokens[0] = TokenLT({ + (tokensToEnable,) = creditManager.updateQuota({ + creditAccount: creditAccount, token: tokenTestSuite.addressOf(Tokens.USDT), - lt: creditManager.liquidationThresholds(tokenTestSuite.addressOf(Tokens.USDT)) + quotaChange: int96(uint96(200 * WAD)) }); + enabledTokensMap |= tokensToEnable; - evm.expectCall(address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.setLimitsToZero, (quotedTokens))); - - creditManager.closeCreditAccount( - creditAccount, - ClosureAction.LIQUIDATE_ACCOUNT, - DAI_ACCOUNT_AMOUNT, - USER, - USER, - enabledTokensMap, - 0, - DAI_ACCOUNT_AMOUNT, - false - ); + address[] memory quotedTokens = new address[](creditManager.maxAllowedEnabledTokenLength() + 1); + + quotedTokens[0] = tokenTestSuite.addressOf(Tokens.LINK); + quotedTokens[1] = tokenTestSuite.addressOf(Tokens.USDT); + + // vm.expectCall(address(poolQuotaKeeper), abi.encodeCall(IPoolQuotaKeeper.setLimitsToZero, (quotedTokens))); + + // creditManager.closeCreditAccount( + // creditAccount, + // ClosureAction.LIQUIDATE_ACCOUNT, + // DAI_ACCOUNT_AMOUNT, + // USER, + // USER, + // enabledTokensMap, + // 0, + // DAI_ACCOUNT_AMOUNT, + // false + // ); for (uint256 i = 0; i < quotedTokens.length; ++i) { - if (quotedTokens[i].token == address(0)) continue; + if (quotedTokens[i] == address(0)) continue; - (, uint96 limit,,) = poolQuotaKeeper.totalQuotaParams(quotedTokens[i].token); + (, uint96 limit,,) = poolQuotaKeeper.totalQuotaParams(quotedTokens[i]); assertEq(limit, 1, "Limit was not zeroed"); } diff --git a/contracts/test/unit/credit/UniversalAdapter.t.sol b/contracts/test/unit/credit/UniversalAdapter.t.sol deleted file mode 100644 index 9eb990ff..00000000 --- a/contracts/test/unit/credit/UniversalAdapter.t.sol +++ /dev/null @@ -1,185 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2023 -pragma solidity ^0.8.17; - -// import {UNIVERSAL_CONTRACT} from "@gearbox-protocol/core-v2/contracts/libraries/Constants.sol"; -// import {MultiCall} from "@gearbox-protocol/core-v2/contracts/libraries/MultiCall.sol"; -// import {TargetContractMock} from "@gearbox-protocol/core-v2/contracts/test/mocks/adapters/TargetContractMock.sol"; - -// import {UniversalAdapter, RevocationPair} from "../../../adapters/UniversalAdapter.sol"; -// import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; -// import {ICreditManagerV3} from "../../../interfaces/ICreditManagerV3.sol"; -// import "../../../interfaces/IExceptions.sol"; - -// // CONSTANTS -// import {CONFIGURATOR, USER} from "../../lib/constants.sol"; - -// // HELPERS -// import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; -// import {CreditFacadeTestHelper} from "../../helpers/CreditFacadeTestHelper.sol"; - -// // MOCKS -// import {AdapterMock} from "../../mocks/adapters/AdapterMock.sol"; - -// // SUITES -// import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -// import {Tokens} from "../../config/Tokens.sol"; -// import {CreditFacadeTestSuite} from "../../suites/CreditFacadeTestSuite.sol"; -// import {CreditConfig} from "../../config/CreditConfig.sol"; - -// /// @title Universal adapter test -// /// @notice Designed for unit test purposes only -// contract UniversalAdapterTest is BalanceHelper, CreditFacadeTestHelper { -// UniversalAdapter universalAdapter; - -// TargetContractMock targetMock1; -// TargetContractMock targetMock2; -// AdapterMock adapterMock1; -// AdapterMock adapterMock2; - -// address dai; -// address usdc; - -// /// ----- /// -// /// SETUP /// -// /// ----- /// - -// function setUp() public { -// // balance helper setup -// tokenTestSuite = new TokensTestSuite(); - -// // credit facade helper setup -// CreditConfig creditConfig = new CreditConfig( -// tokenTestSuite, -// Tokens.DAI -// ); -// cft = new CreditFacadeTestSuite(creditConfig); -// underlying = tokenTestSuite.addressOf(Tokens.DAI); -// creditManager = cft.creditManager(); -// creditFacade = cft.creditFacade(); -// creditConfigurator = cft.creditConfigurator(); - -// // universal adapter setup -// universalAdapter = new UniversalAdapter(address(creditManager)); - -// targetMock1 = new TargetContractMock(); -// targetMock2 = new TargetContractMock(); -// adapterMock1 = new AdapterMock(address(creditManager), address(targetMock1)); -// adapterMock2 = new AdapterMock(address(creditManager), address(targetMock2)); - -// evm.startPrank(CONFIGURATOR); -// creditConfigurator.allowContract(address(targetMock1), address(adapterMock1)); -// creditConfigurator.allowContract(address(targetMock2), address(adapterMock2)); -// creditConfigurator.allowContract(UNIVERSAL_CONTRACT, address(universalAdapter)); -// evm.stopPrank(); - -// evm.label(address(adapterMock1), "AdapterMock1"); -// evm.label(address(targetMock1), "TargetContractMock1"); -// evm.label(address(adapterMock2), "AdapterMock1"); -// evm.label(address(targetMock2), "TargetContractMock1"); - -// usdc = tokenTestSuite.addressOf(Tokens.USDC); -// dai = tokenTestSuite.addressOf(Tokens.DAI); -// } - -// /// ----- /// -// /// TESTS /// -// /// ----- /// - -// /// @notice [UA-1]: UniversalAdapter constructor sets correct values -// function test_UA_01_constructor_sets_correct_values() public { -// assertEq(address(universalAdapter.creditManager()), address(creditManager), "Incorrect credit manager address"); -// assertEq(universalAdapter.targetContract(), UNIVERSAL_CONTRACT, "Incorrect target contract address"); -// } - -// /// @notice [UA-2]: UniversalAdapter `revokeAllowances` reverts if called not from multicall -// function test_UA_02_revokeAllowances_reverts_if_called_not_from_multicall() public { -// evm.prank(USER); -// evm.expectRevert(CallerNotCreditFacadeException.selector); -// universalAdapter.revokeAdapterAllowances(new RevocationPair[](0)); -// } - -// /// @notice [UA-3]: UniversalAdapter `revokeAllowances` reverts if passed zero address -// function test_UA_03_revokeAllowances_reverts_if_passed_zero_address() public { -// _openTestCreditAccount(); - -// RevocationPair[] memory revocations = new RevocationPair[](1); - -// evm.prank(USER); -// revocations[0] = RevocationPair({spender: address(0), token: usdc}); -// evm.expectRevert(ZeroAddressException.selector); -// creditFacade.multicall( -// multicallBuilder( -// MultiCall({ -// target: address(universalAdapter), -// callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) -// }) -// ) -// ); - -// evm.prank(USER); -// revocations[0] = RevocationPair({spender: address(targetMock1), token: address(0)}); -// evm.expectRevert(ZeroAddressException.selector); -// creditFacade.multicall( -// multicallBuilder( -// MultiCall({ -// target: address(universalAdapter), -// callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) -// }) -// ) -// ); -// } - -// /// @notice [UA-4]: UniversalAdapter `revokeAllowances` works as expected -// function test_UA_04_revokeAllowances_works_as_expected() public { -// (address creditAccount,) = _openTestCreditAccount(); - -// evm.prank(USER); -// creditFacade.multicall( -// multicallBuilder( -// MultiCall({ -// target: address(adapterMock1), -// callData: abi.encodeCall(adapterMock1.approveToken, (usdc, 10)) -// }), -// MultiCall({ -// target: address(adapterMock1), -// callData: abi.encodeCall(adapterMock1.approveToken, (dai, 20)) -// }), -// MultiCall({ -// target: address(adapterMock2), -// callData: abi.encodeCall(adapterMock2.approveToken, (dai, 30)) -// }) -// ) -// ); - -// RevocationPair[] memory revocations = new RevocationPair[](3); -// revocations[0] = RevocationPair({spender: address(targetMock1), token: usdc}); -// revocations[1] = RevocationPair({spender: address(targetMock2), token: usdc}); -// revocations[2] = RevocationPair({spender: address(targetMock2), token: dai}); - -// evm.expectCall( -// address(creditManager), -// abi.encodeCall(ICreditManagerV3.approveCreditAccount, (address(targetMock1), usdc, 1)) -// ); -// evm.expectCall( -// address(creditManager), -// abi.encodeCall(ICreditManagerV3.approveCreditAccount, (address(targetMock2), dai, 1)) -// ); - -// evm.prank(USER); -// creditFacade.multicall( -// multicallBuilder( -// MultiCall({ -// target: address(universalAdapter), -// callData: abi.encodeCall(universalAdapter.revokeAdapterAllowances, (revocations)) -// }) -// ) -// ); - -// expectAllowance(usdc, creditAccount, address(targetMock1), 1); -// expectAllowance(dai, creditAccount, address(targetMock1), 20); -// expectAllowance(usdc, creditAccount, address(targetMock2), 0); -// expectAllowance(dai, creditAccount, address(targetMock2), 1); -// } -// } diff --git a/contracts/test/unit/libraries/BitMask.t.sol b/contracts/test/unit/libraries/BitMask.t.sol new file mode 100644 index 00000000..cbd71997 --- /dev/null +++ b/contracts/test/unit/libraries/BitMask.t.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {IncorrectParameterException} from "../../../interfaces/IExceptions.sol"; +import {BitMask} from "../../../libraries/BitMask.sol"; + +import {TestHelper} from "../../lib/helper.sol"; +import "forge-std/console.sol"; + +/// @title BitMask logic test +/// @notice [BM]: Unit tests for bit mask library +contract BitMaskTest is TestHelper { + using BitMask for uint256; + + /// @notice U:[BM-1]: `calcIndex` reverts for zero value + function test_BM_01_calcIndex_reverts_for_zero_value() public { + vm.expectRevert(IncorrectParameterException.selector); + uint256(0).calcIndex(); + } + + /// @notice U:[BM-2]: `calcIndex` works correctly + function test_BM_02_calcIndex_works_correctly() public { + for (uint256 i = 0; i < 256; ++i) { + uint256 mask = 1 << i; + assertEq(mask.calcIndex(), i, "Incorrect index"); + } + } + + /// @notice U:[BM-3]: `calcEnabledTokens` works correctly + function test_BM_03_calcEnabledTokens_works_correctly(uint8 bitsToEnable, uint256 randomValue) public { + uint256 bitMask; + + for (uint256 i; i < bitsToEnable;) { + randomValue = uint256(keccak256(abi.encodePacked(randomValue))); + uint256 randMask = 1 << uint8(randomValue % 255); + if (randMask & bitMask == 0) { + bitMask |= randMask; + ++i; + } + } + + assertEq(bitMask.calcEnabledTokens(), bitsToEnable, "Incorrect bits computation"); + } + + /// @notice U:[BM-4]: `enable` & `disable` works correctly + function test_BM_04_enable_and_disable_works_correctly(uint8 bit) public { + uint256 mask; + mask = mask.enable(1 << bit); + assertEq(mask, 1 << bit, "Enable doesn't work"); + + mask = mask.disable(1 << bit); + assertEq(mask, 0, "Disable doesn't work"); + } + + /// @notice U:[BM-5]: `enableDisable` works correctly + function test_BM_05_enableDisable_works_correctly(uint8 bit) public { + uint256 mask; + + mask = mask.enableDisable(1 << bit, 0); + assertEq(mask, 1 << bit, "Enable doesn't work"); + + mask = mask.enableDisable(0, 1 << bit); + assertEq(mask, 0, "Disable doesn't work"); + } + + /// @notice U:[BM-6]: `enable` & `disable` works correctly + function test_BM_06_enable_and_disable_works_correctly(uint8 bit) public { + uint256 mask; + mask = mask.enable(1 << bit, 0); + assertEq(mask, 0, "Enable doesn't work"); + + mask = mask.enable(1 << bit, 1 << bit); + assertEq(mask, 1 << bit, "Enable doesn't work"); + + mask = mask.disable(1 << bit, 0); + assertEq(mask, 1 << bit, "Disable doesn't work"); + + mask = mask.disable(1 << bit, 1 << bit); + assertEq(mask, 0, "Disable doesn't work"); + } + + /// @notice U:[BM-7]: `enableWithSkip` works correctly + function test_BM_07_enableWithSkip_works_correctly(uint8 bit) public { + uint256 mask; + + mask = mask.enableDisable(1 << bit, 0, 0); + assertEq(mask, 0, "Enable doesn't work"); + + mask = mask.enableDisable(1 << bit, 0, 1 << bit); + assertEq(mask, 1 << bit, "Enable doesn't work"); + + mask = mask.enableDisable(0, 1 << bit, 0); + assertEq(mask, 1 << bit, "Disable doesn't work"); + + mask = mask.enableDisable(0, 1 << bit, 1 << bit); + assertEq(mask, 0, "Disable doesn't work"); + } +} diff --git a/contracts/test/unit/libraries/CreditAccountHelper.t copy.sol b/contracts/test/unit/libraries/CreditAccountHelper.t copy.sol new file mode 100644 index 00000000..29259147 --- /dev/null +++ b/contracts/test/unit/libraries/CreditAccountHelper.t copy.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {IncorrectParameterException} from "../../../interfaces/IExceptions.sol"; +import {CreditAccountHelper} from "../../../libraries/CreditAccountHelper.sol"; +import {ICreditAccount} from "../../../interfaces/ICreditAccount.sol"; + +import {CreditAccount} from "../../../core/CreditAccount.sol"; + +import {TestHelper} from "../../lib/helper.sol"; +import "forge-std/console.sol"; + +/// @title CreditAccountHelper logic test +/// @notice [CAH]: Unit tests for credit account helper +contract CreditAccountHelperTest is TestHelper { + /// @notice U:[CL-1]: `calcIndex` reverts for zero value + function test_CL_01_calcIndex_reverts_for_zero_value() public {} +} diff --git a/contracts/test/unit/libraries/CreditLogic.t.sol b/contracts/test/unit/libraries/CreditLogic.t.sol new file mode 100644 index 00000000..b5742542 --- /dev/null +++ b/contracts/test/unit/libraries/CreditLogic.t.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {IncorrectParameterException} from "../../../interfaces/IExceptions.sol"; +import {CreditLogic} from "../../../libraries/CreditLogic.sol"; + +import {TestHelper} from "../../lib/helper.sol"; +import "forge-std/console.sol"; + +/// @title BitMask logic test +/// @notice [BM]: Unit tests for bit mask library +contract CreditLogicTest is TestHelper { + /// @notice U:[CL-1]: `calcIndex` reverts for zero value + function test_CL_01_calcIndex_reverts_for_zero_value() public {} +} diff --git a/contracts/test/unit/libraries/WithdrawalsLogic.t.sol b/contracts/test/unit/libraries/WithdrawalsLogic.t.sol new file mode 100644 index 00000000..5e66ea98 --- /dev/null +++ b/contracts/test/unit/libraries/WithdrawalsLogic.t.sol @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {ClaimAction, ScheduledWithdrawal} from "../../../interfaces/IWithdrawalManager.sol"; +import {WithdrawalsLogic} from "../../../libraries/WithdrawalsLogic.sol"; + +import {TestHelper} from "../../lib/helper.sol"; + +enum ScheduleTask { + IMMATURE, + MATURE, + NON_SCHEDULED +} + +/// @title Withdrawals logic test +/// @notice [WL]: Unit tests for withdrawals library +contract WithdrawalsLogicTest is TestHelper { + using WithdrawalsLogic for ClaimAction; + using WithdrawalsLogic for ScheduledWithdrawal; + using WithdrawalsLogic for ScheduledWithdrawal[2]; + + ScheduledWithdrawal[2] withdrawals; + + address constant TOKEN = address(0xdead); + uint8 constant TOKEN_INDEX = 1; + uint256 constant AMOUNT = 1 ether; + + /// @notice [WL-1]: `clear` works correctly + function test_WL_01_clear_works_correctly() public { + _setupWithdrawalSlot(0, ScheduleTask.MATURE); + withdrawals[0].clear(); + assertEq(withdrawals[0].maturity, 1); + assertEq(withdrawals[0].amount, 1); + } + + /// @notice [WL-2]: `tokenMaskAndAmount` works correctly + function test_WL_02_tokenMaskAndAmount_works_correctly() public { + // before scheduling + (address token, uint256 mask, uint256 amount) = withdrawals[0].tokenMaskAndAmount(); + assertEq(token, address(0)); + assertEq(mask, 0); + assertEq(amount, 0); + + // after scheduling + _setupWithdrawalSlot(0, ScheduleTask.MATURE); + (token, mask, amount) = withdrawals[0].tokenMaskAndAmount(); + assertEq(token, TOKEN); + assertEq(mask, 1 << TOKEN_INDEX); + assertEq(amount, AMOUNT - 1); + + // after clearing + _setupWithdrawalSlot(0, ScheduleTask.NON_SCHEDULED); + (token, mask, amount) = withdrawals[0].tokenMaskAndAmount(); + assertEq(token, address(0)); + assertEq(mask, 0); + assertEq(amount, 0); + } + + struct FindFreeSlotCase { + string name; + ScheduleTask task0; + ScheduleTask task1; + bool expectedFound; + uint8 expectedSlot; + } + + /// @notice [WL-3]: `findFreeSlot` works correctly + function test_WL_03_findFreeSlot_works_correctly() public { + FindFreeSlotCase[4] memory cases = [ + FindFreeSlotCase({ + name: "both slots non-scheduled", + task0: ScheduleTask.NON_SCHEDULED, + task1: ScheduleTask.NON_SCHEDULED, + expectedFound: true, + expectedSlot: 0 + }), + FindFreeSlotCase({ + name: "slot 0 non-scheduled, slot 1 scheduled", + task0: ScheduleTask.NON_SCHEDULED, + task1: ScheduleTask.MATURE, + expectedFound: true, + expectedSlot: 0 + }), + FindFreeSlotCase({ + name: "slot 0 scheduled, slot 1 non-scheduled", + task0: ScheduleTask.MATURE, + task1: ScheduleTask.NON_SCHEDULED, + expectedFound: true, + expectedSlot: 1 + }), + FindFreeSlotCase({ + name: "both slots scheduled", + task0: ScheduleTask.MATURE, + task1: ScheduleTask.MATURE, + expectedFound: false, + expectedSlot: 0 + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + _setupWithdrawalSlot(0, cases[i].task0); + _setupWithdrawalSlot(1, cases[i].task1); + + (bool found, uint8 slot) = withdrawals.findFreeSlot(); + assertEq(found, cases[i].expectedFound, _testCaseErr(cases[i].name, "incorrect found value")); + if (found) { + assertEq(slot, cases[i].expectedSlot, _testCaseErr(cases[i].name, "incorrect slot")); + } + } + } + + struct ClaimOrCancelAllowedCase { + string name; + ClaimAction action; + ScheduleTask task; + bool expectedResult; + } + + /// @notice [WL-4]: `claimAllowed` works correctly + function test_WL_04_claimAllowed_works_correctly() public { + ClaimOrCancelAllowedCase[12] memory cases = [ + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.IMMATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.IMMATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.IMMATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.IMMATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.MATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.MATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.MATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.MATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + _setupWithdrawalSlot(0, cases[i].task); + assertEq( + cases[i].action.claimAllowed(withdrawals[0].maturity), + cases[i].expectedResult, + _testCaseErr(cases[i].name, "incorrect result") + ); + } + } + + /// @notice [WL-5]: `cancelAllowed` works correctly + function test_WL_05_cancelAllowed_works_correctly() public { + ClaimOrCancelAllowedCase[12] memory cases = [ + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.IMMATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.IMMATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.IMMATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "immature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.IMMATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.MATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.MATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.MATURE, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "mature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.MATURE, + expectedResult: true + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }), + ClaimOrCancelAllowedCase({ + name: "non-scheduled withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.NON_SCHEDULED, + expectedResult: false + }) + ]; + + for (uint256 i; i < cases.length; ++i) { + _setupWithdrawalSlot(0, cases[i].task); + assertEq( + cases[i].action.cancelAllowed(withdrawals[0].maturity), + cases[i].expectedResult, + _testCaseErr(cases[i].name, "incorrect result") + ); + } + } + + /// ------- /// + /// HELPERS /// + /// ------- /// + + function _setupWithdrawalSlot(uint8 slot, ScheduleTask task) internal { + if (task == ScheduleTask.NON_SCHEDULED) { + withdrawals[slot].clear(); + } else { + uint40 maturity = task == ScheduleTask.MATURE ? uint40(block.timestamp - 1) : uint40(block.timestamp + 1); + withdrawals[slot] = + ScheduledWithdrawal({maturity: maturity, amount: 1 ether, token: address(0xdead), tokenIndex: 1}); + } + } +} diff --git a/contracts/test/unit/pool/LinearInterestRateModel.t.sol b/contracts/test/unit/pool/LinearInterestRateModel.t.sol index 0c3b5fcb..6f88e114 100644 --- a/contracts/test/unit/pool/LinearInterestRateModel.t.sol +++ b/contracts/test/unit/pool/LinearInterestRateModel.t.sol @@ -10,21 +10,19 @@ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; // TEST import "../../lib/constants.sol"; -import "../../lib/StringUtils.sol"; + import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; +import {TestHelper} from "../../lib/helper.sol"; import "forge-std/console.sol"; /// @title pool /// @notice Business logic for borrowing liquidity pools -contract LinearInterestRateModelTest is DSTest { +contract LinearInterestRateModelTest is TestHelper { using Math for uint256; - using StringUtils for string; - - CheatCodes evm = CheatCodes(HEVM_ADDRESS); LinearInterestRateModel irm; @@ -40,10 +38,6 @@ contract LinearInterestRateModelTest is DSTest { ); } - function _testCaseErr(string memory caseName, string memory err) internal pure returns (string memory) { - return string("\nCase: ").concat(caseName).concat("\n").concat("Error: ").concat(err); - } - // // TESTS // @@ -163,7 +157,7 @@ contract LinearInterestRateModelTest is DSTest { for (uint256 i; i < cases.length; ++i) { IncorrectParamCase memory testCase = cases[i]; - evm.expectRevert(IncorrectParameterException.selector); + vm.expectRevert(IncorrectParameterException.selector); irm = new LinearInterestRateModel( testCase.U_1, testCase.U_2, @@ -315,7 +309,7 @@ contract LinearInterestRateModelTest is DSTest { expectedLiquidity: 100, availableLiquidity: 60, /// EXPECTED VALUES - // 15% + 5% (r1) * 40% (utilisation) / 80% (u1) + // 15% (rBase) + 5% (r1) * 40% (utilisation) / 80% (u1) expectedBorrowRate: (15_00 + 5_00 * 40 / 80) * RAY / PERCENTAGE_FACTOR, expectedAvailableToBorrow: 55, expectedRevert: false @@ -459,7 +453,7 @@ contract LinearInterestRateModelTest is DSTest { ); if (testCase.expectedRevert) { - evm.expectRevert(BorrowingMoreU2ForbiddenException.selector); + vm.expectRevert(BorrowingMoreU2ForbiddenException.selector); } irm.calcBorrowRate(testCase.expectedLiquidity, testCase.availableLiquidity, true); diff --git a/contracts/test/unit/pool/Pool4626.t.sol b/contracts/test/unit/pool/Pool4626.t.sol index 82542e9d..fcadd129 100644 --- a/contracts/test/unit/pool/Pool4626.t.sol +++ b/contracts/test/unit/pool/Pool4626.t.sol @@ -6,14 +6,14 @@ pragma solidity ^0.8.10; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; -import {IPoolQuotaKeeper, QuotaUpdate} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper} from "../../../interfaces/IPoolQuotaKeeper.sol"; import {LinearInterestRateModel} from "../../../pool/LinearInterestRateModel.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {Pool4626} from "../../../pool/Pool4626.sol"; -import {IPool4626Events, Pool4626Opts} from "../../../interfaces/IPool4626.sol"; -import {IERC4626Events} from "../../../interfaces/IERC4626.sol"; +import {IPool4626Events} from "../../../interfaces/IPool4626.sol"; +import {IERC4626Events} from "../../interfaces/IERC4626.sol"; import {IInterestRateModel} from "../../../interfaces/IInterestRateModel.sol"; @@ -27,8 +27,6 @@ import { PoolServiceTestSuite } from "../../suites/PoolServiceTestSuite.sol"; -import "@gearbox-protocol/core-v2/contracts/libraries/Errors.sol"; - import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; import {Tokens} from "../../config/Tokens.sol"; import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; @@ -36,11 +34,12 @@ import {ERC20FeeMock} from "../../mocks/token/ERC20FeeMock.sol"; import {PoolQuotaKeeper} from "../../../pool/PoolQuotaKeeper.sol"; // TEST +import {TestHelper} from "../../lib/helper.sol"; +import "forge-std/console.sol"; + import "../../lib/constants.sol"; -import "../../lib/StringUtils.sol"; -import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; -import "forge-std/console.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; @@ -49,11 +48,8 @@ uint256 constant fee = 6000; /// @title pool /// @notice Business logic for borrowing liquidity pools -contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events { +contract Pool4626Test is TestHelper, BalanceHelper, IPool4626Events, IERC4626Events { using Math for uint256; - using StringUtils for string; - - CheatCodes evm = CheatCodes(HEVM_ADDRESS); PoolServiceTestSuite psts; PoolQuotaKeeper pqk; @@ -117,12 +113,12 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events if (utilisation > 0) _borrowToUtilisation(utilisation); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setWithdrawFee(withdrawFee); } function _connectAndSetLimit() internal { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), type(uint128).max); } @@ -141,7 +137,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events } function _updateBorrowrate() internal { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.updateInterestRateModel(address(irm)); } @@ -152,20 +148,16 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events function _initPoolLiquidity(uint256 availableLiquidity, uint256 dieselRate) internal { assertEq(pool.convertToAssets(RAY), RAY, "Incorrect diesel rate!"); - evm.prank(INITIAL_LP); + vm.prank(INITIAL_LP); pool.mint(availableLiquidity, INITIAL_LP); - evm.prank(INITIAL_LP); + vm.prank(INITIAL_LP); pool.burn((availableLiquidity * (dieselRate - RAY)) / dieselRate); // assertEq(pool.expectedLiquidityLU(), availableLiquidity * dieselRate / RAY, "ExpectedLU is not correct!"); assertEq(pool.convertToAssets(RAY), dieselRate, "Incorrect diesel rate!"); } - function _testCaseErr(string memory caseName, string memory err) internal pure returns (string memory) { - return string("\nCase: ").concat(caseName).concat("\n").concat("Error: ").concat(err); - } - // // TESTS // @@ -194,84 +186,93 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // [P4-2]: constructor reverts for zero addresses function test_P4_02_constructor_reverts_for_zero_addresses() public { - Pool4626Opts memory opts = Pool4626Opts({ - addressProvider: address(0), - underlyingToken: underlying, - interestRateModel: address(psts.linearIRModel()), - expectedLiquidityLimit: type(uint128).max, - supportsQuotas: false + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider: address(0), + _underlyingToken: underlying, + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false }); - evm.expectRevert(ZeroAddressException.selector); - new Pool4626(opts); + // opts.addressProvider = address(psts.addressProvider()); + // opts.interestRateModel = address(0); - opts.addressProvider = address(psts.addressProvider()); - opts.interestRateModel = address(0); - - evm.expectRevert(ZeroAddressException.selector); - new Pool4626(opts); + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider:address(psts.addressProvider()), + _underlyingToken: underlying, + _interestRateModel: address(0), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false + }); - opts.interestRateModel = address(psts.linearIRModel()); - opts.underlyingToken = address(0); + // opts.interestRateModel = address(psts.linearIRModel()); + // opts.underlyingToken = address(0); - evm.expectRevert(ZeroAddressException.selector); - new Pool4626(opts); + vm.expectRevert(ZeroAddressException.selector); + new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: address(0), + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: type(uint128).max, + _supportsQuotas: false + }); } // [P4-3]: constructor emits events function test_P4_03_constructor_emits_events() public { uint256 limit = 15890; - Pool4626Opts memory opts = Pool4626Opts({ - addressProvider: address(psts.addressProvider()), - underlyingToken: underlying, - interestRateModel: address(psts.linearIRModel()), - expectedLiquidityLimit: limit, - supportsQuotas: false - }); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetInterestRateModel(address(psts.linearIRModel())); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetExpectedLiquidityLimit(limit); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetTotalBorrowedLimit(limit); - new Pool4626(opts); + new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: underlying, + _interestRateModel: address(psts.linearIRModel()), + _expectedLiquidityLimit: limit, + _supportsQuotas: false + }); } // [P4-4]: addLiquidity, removeLiquidity, lendCreditAccount, repayCreditAccount reverts if contract is paused function test_P4_04_cannot_be_used_while_paused() public { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); acl.addPausableAdmin(CONFIGURATOR); pool.pause(); - evm.stopPrank(); + vm.stopPrank(); - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.deposit(addLiquidity, FRIEND); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.depositReferral(addLiquidity, FRIEND, referral); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.mint(addLiquidity, FRIEND); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.withdraw(removeLiquidity, FRIEND, FRIEND); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.redeem(removeLiquidity, FRIEND, FRIEND); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.lendCreditAccount(1, FRIEND); - evm.expectRevert(bytes(PAUSABLE_ERROR)); + vm.expectRevert(bytes(PAUSABLE_ERROR)); pool.repayCreditAccount(1, 0, 0); - evm.stopPrank(); + vm.stopPrank(); } struct DepositTestCase { @@ -353,18 +354,18 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events false ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Transfer(address(0), FRIEND, testCase.expectedShares); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Deposit(USER, FRIEND, testCase.amountToDeposit, testCase.expectedShares); if (withReferralCode) { - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit DepositWithReferral(USER, FRIEND, testCase.amountToDeposit, referral); } - evm.prank(USER); + vm.prank(USER); uint256 shares = withReferralCode ? pool.depositReferral(testCase.amountToDeposit, FRIEND, referral) : pool.deposit(testCase.amountToDeposit, FRIEND); @@ -473,13 +474,13 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events false ); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Transfer(address(0), FRIEND, testCase.desiredShares); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Deposit(USER, FRIEND, testCase.expectedAssetsWithdrawal, testCase.desiredShares); - evm.prank(USER); + vm.prank(USER); uint256 assets = pool.mint(testCase.desiredShares, FRIEND); expectBalance( @@ -523,7 +524,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events _setUpTestCase(asset, feeToken ? 60_00 : 0, 50_00, addLiquidity, 2 * RAY, 0, false); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setExpectedLiquidityLimit(1237882323 * WAD); uint256 assetsToReachLimit = pool.expectedLiquidityLimit() - pool.expectedLiquidity(); @@ -538,11 +539,11 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events if (j == 0) { // DEPOSIT CASE - evm.prank(USER); + vm.prank(USER); pool.deposit(assetsToReachLimit, FRIEND); } else { // MINT CASE - evm.prank(USER); + vm.prank(USER); pool.mint(sharesToReachLimit, FRIEND); } } @@ -682,19 +683,19 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events false ); - evm.prank(USER); + vm.prank(USER); pool.mint(testCase.sharesToMint, FRIEND); - evm.prank(FRIEND); + vm.prank(FRIEND); pool.approve(USER, approveCase == 0 ? testCase.expectedSharesBurnt + 1 : type(uint256).max); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Transfer(FRIEND, address(0), testCase.expectedSharesBurnt); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Withdraw(USER, FRIEND2, FRIEND, testCase.assetsToWithdraw, testCase.expectedSharesBurnt); - evm.prank(USER); + vm.prank(USER); uint256 shares = pool.withdraw(testCase.assetsToWithdraw, FRIEND2, FRIEND); expectBalance( @@ -880,19 +881,19 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events false ); - evm.prank(USER); + vm.prank(USER); pool.mint(testCase.sharesToMint, FRIEND); - evm.prank(FRIEND); + vm.prank(FRIEND); pool.approve(USER, approveCase == 0 ? testCase.sharesToRedeem + 1 : type(uint256).max); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Transfer(FRIEND, address(0), testCase.sharesToRedeem); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Withdraw(USER, FRIEND2, FRIEND, testCase.expectedAssetsDelivered, testCase.sharesToRedeem); - evm.prank(USER); + vm.prank(USER); uint256 assets = pool.redeem(testCase.sharesToRedeem, FRIEND2, FRIEND); expectBalance( @@ -950,7 +951,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events function test_P4_10_burn_works_as_expected() public { _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, false); - evm.prank(USER); + vm.prank(USER); pool.mint(addLiquidity, USER); expectBalance(address(pool), USER, addLiquidity, "SETUP: Incorrect USER balance"); @@ -963,7 +964,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events uint256 availableLiquidity = pool.availableLiquidity(); uint256 expectedLiquidity = pool.expectedLiquidity(); - evm.prank(USER); + vm.prank(USER); pool.burn(addLiquidity / 4); expectBalance(address(pool), USER, (addLiquidity * 3) / 4, "Incorrect USER balance"); @@ -992,10 +993,10 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events uint256 availableLiquidityBefore = pool.availableLiquidity(); uint256 expectedLiquidityBefore = pool.expectedLiquidity(); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Transfer(address(pool), creditAccount, borrowAmount); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Borrow(address(cmMock), creditAccount, borrowAmount); cmMock.lendCreditAccount(borrowAmount, creditAccount); @@ -1019,23 +1020,23 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events _setUpTestCase(Tokens.DAI, 0, 0, addLiquidity, 2 * RAY, 0, false); - evm.expectRevert(CreditManagerCantBorrowException.selector); + vm.expectRevert(CreditManagerCantBorrowException.selector); cmMock.lendCreditAccount(0, creditAccount); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), type(uint128).max); pool.setTotalBorrowedLimit(addLiquidity); - evm.stopPrank(); + vm.stopPrank(); - evm.expectRevert(CreditManagerCantBorrowException.selector); + vm.expectRevert(CreditManagerCantBorrowException.selector); cmMock.lendCreditAccount(addLiquidity + 1, creditAccount); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), addLiquidity); pool.setTotalBorrowedLimit(type(uint128).max); - evm.stopPrank(); + vm.stopPrank(); - evm.expectRevert(CreditManagerCantBorrowException.selector); + vm.expectRevert(CreditManagerCantBorrowException.selector); cmMock.lendCreditAccount(addLiquidity + 1, creditAccount); } @@ -1048,14 +1049,14 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events _setUpTestCase(Tokens.DAI, 0, 0, addLiquidity, 2 * RAY, 0, false); /// Case for unknown CM - evm.expectRevert(CallerNotCreditManagerException.selector); - evm.prank(USER); + vm.expectRevert(CallerNotCreditManagerException.selector); + vm.prank(USER); pool.repayCreditAccount(1, 0, 0); /// Case for CM with zero debt assertEq(pool.creditManagerBorrowed(address(cmMock)), 0, "SETUP: Incorrect CM limit"); - evm.expectRevert(CallerNotCreditManagerException.selector); + vm.expectRevert(CallerNotCreditManagerException.selector); cmMock.repayCreditAccount(1, 0, 0); } @@ -1223,7 +1224,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events address treasury = pool.treasury(); - evm.prank(INITIAL_LP); + vm.prank(INITIAL_LP); pool.transfer(treasury, testCase.sharesInTreasury); cmMock.lendCreditAccount(testCase.borrowBefore, creditAccount); @@ -1231,16 +1232,16 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events assertEq(pool.totalBorrowed(), testCase.borrowBefore, "SETUP: incorrect totalBorrowed"); assertEq(pool.creditManagerBorrowed(address(cmMock)), testCase.borrowBefore, "SETUP: Incorrect CM limit"); - evm.startPrank(creditAccount); + vm.startPrank(creditAccount); IERC20(pool.asset()).transfer(address(pool), testCase.borrowAmount + testCase.profit - testCase.loss); - evm.stopPrank(); + vm.stopPrank(); if (testCase.uncoveredLoss > 0) { - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ReceiveUncoveredLoss(address(cmMock), testCase.uncoveredLoss); } - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit Repay(address(cmMock), testCase.borrowAmount, testCase.profit, testCase.loss); uint256 dieselRate = pool.convertToAssets(RAY); @@ -1297,7 +1298,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events uint256 timeWarp = 180 days; - evm.warp(block.timestamp + timeWarp); + vm.warp(block.timestamp + timeWarp); uint256 borrowRate = pool.borrowRate(); @@ -1316,7 +1317,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events _setUpTestCase(Tokens.DAI, 0, 50_00, addLiquidity, 2 * RAY, 0, supportQuotas); if (supportQuotas) { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); psts.gaugeMock().addQuotaToken(tokenTestSuite.addressOf(Tokens.LINK), 100_00); pqk.addCreditManager(address(cmMock)); @@ -1325,23 +1326,21 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events pqk.setTokenLimit(tokenTestSuite.addressOf(Tokens.LINK), uint96(WAD * 100_000)); - QuotaUpdate[] memory qu = new QuotaUpdate[](1); - qu[0] = QuotaUpdate({ + cmMock.updateQuota({ + _creditAccount: DUMB_ADDRESS, token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(int256(quotaInterestPerYear)) }); - cmMock.updateQuotas(DUMB_ADDRESS, qu); - psts.gaugeMock().updateEpoch(); - evm.stopPrank(); + vm.stopPrank(); } uint256 borrowRate = pool.borrowRate(); uint256 timeWarp = 365 days; - evm.warp(block.timestamp + timeWarp); + vm.warp(block.timestamp + timeWarp); uint256 expectedInterest = ((addLiquidity / 2) * borrowRate) / RAY; uint256 expectedLiquidity = addLiquidity + expectedInterest + (supportQuotas ? quotaInterestPerYear : 0); @@ -1394,7 +1393,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events assertEq(pool.quotaRevenue(), 0, "SETUP: Incorrect quotaRevenue"); assertEq(pool.expectedLiquidityLU(), 0, "SETUP: Incorrect expectedLiquidityLU"); - evm.prank(POOL_QUOTA_KEEPER); + vm.prank(POOL_QUOTA_KEEPER); pool.updateQuotaRevenue(qu1); assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#1: Incorrect lastQuotaRevenuUpdate"); @@ -1404,11 +1403,11 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events uint256 year = 365 days; - evm.warp(block.timestamp + year); + vm.warp(block.timestamp + year); uint96 qu2 = uint96(WAD * 15); - evm.prank(POOL_QUOTA_KEEPER); + vm.prank(POOL_QUOTA_KEEPER); pool.updateQuotaRevenue(qu2); assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#2: Incorrect lastQuotaRevenuUpdate"); @@ -1416,11 +1415,11 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events assertEq(pool.expectedLiquidityLU(), qu1 / PERCENTAGE_FACTOR, "#2: Incorrect expectedLiquidityLU"); - evm.warp(block.timestamp + year); + vm.warp(block.timestamp + year); uint96 dqu = uint96(WAD * 5); - evm.prank(POOL_QUOTA_KEEPER); + vm.prank(POOL_QUOTA_KEEPER); pool.changeQuotaRevenue(-int96(dqu)); assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "#3: Incorrect lastQuotaRevenuUpdate"); @@ -1431,34 +1430,34 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // [P4-18]: connectCreditManager, forbidCreditManagerToBorrow, newInterestRateModel, setExpecetedLiquidityLimit reverts if called with non-configurator function test_P4_18_admin_functions_revert_on_non_admin() public { - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); pool.setCreditManagerLimit(DUMB_ADDRESS, 1); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); pool.updateInterestRateModel(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); pool.connectPoolQuotaManager(DUMB_ADDRESS); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); pool.setExpectedLiquidityLimit(0); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); pool.setTotalBorrowedLimit(0); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); pool.setWithdrawFee(0); - evm.stopPrank(); + vm.stopPrank(); } // [P4-19]: setCreditManagerLimit reverts if not in register function test_P4_19_connectCreditManager_reverts_if_not_in_register() public { - evm.expectRevert(RegisteredCreditManagerOnlyException.selector); + vm.expectRevert(RegisteredCreditManagerOnlyException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(DUMB_ADDRESS, 1); } @@ -1466,9 +1465,9 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events function test_P4_20_connectCreditManager_fails_on_incompatible_CM() public { cmMock.changePoolService(DUMB_ADDRESS); - evm.expectRevert(IncompatibleCreditManagerException.selector); + vm.expectRevert(IncompatibleCreditManagerException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), 1); } @@ -1477,13 +1476,13 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events address[] memory cms = pool.creditManagers(); assertEq(cms.length, 0, "Credit manager is already connected!"); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit AddCreditManager(address(cmMock)); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit BorrowLimitChanged(address(cmMock), 230); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), 230); cms = pool.creditManagers(); @@ -1492,10 +1491,10 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events assertEq(pool.creditManagerLimit(address(cmMock)), 230, "#1: Incorrect CM limit"); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit BorrowLimitChanged(address(cmMock), 150); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), 150); cms = pool.creditManagers(); @@ -1503,7 +1502,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events assertEq(cms[0], address(cmMock), "#2: Credit manager is not connected!"); assertEq(pool.creditManagerLimit(address(cmMock)), 150, "#2: Incorrect CM limit"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setCreditManagerLimit(address(cmMock), type(uint256).max); assertEq(pool.creditManagerLimit(address(cmMock)), type(uint256).max, "#3: Incorrect CM limit"); @@ -1526,17 +1525,17 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events false ); - evm.expectEmit(true, false, false, false); + vm.expectEmit(true, false, false, false); emit SetInterestRateModel(address(newIR)); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.updateInterestRateModel(address(newIR)); assertEq(address(pool.interestRateModel()), address(newIR), "Interest rate model was not set correctly"); // Add elUpdate - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.updateInterestRateModel(address(newIR)); assertEq( @@ -1545,46 +1544,45 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events } // [P4-23]: connectPoolQuotaManager updates quotaRevenue and emits event + function test_P4_23_connectPoolQuotaManager_updates_quotaRevenue_and_emits_event() public { - Pool4626Opts memory opts = Pool4626Opts({ - addressProvider: address(psts.addressProvider()), - underlyingToken: tokenTestSuite.addressOf(Tokens.DAI), - interestRateModel: address(irm), - expectedLiquidityLimit: type(uint256).max, - supportsQuotas: true + pool = new Pool4626({ + _addressProvider: address(psts.addressProvider()), + _underlyingToken: tokenTestSuite.addressOf(Tokens.DAI), + _interestRateModel: address(irm), + _expectedLiquidityLimit: type(uint256).max, + _supportsQuotas: true }); - pool = new Pool4626(opts); - pqk = new PoolQuotaKeeper(address(pool)); address POOL_QUOTA_KEEPER = address(pqk); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit SetPoolQuotaKeeper(POOL_QUOTA_KEEPER); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); uint96 qu = uint96(WAD * 10); assertEq(pool.poolQuotaKeeper(), POOL_QUOTA_KEEPER, "Incorrect Pool QuotaKeeper"); - evm.prank(POOL_QUOTA_KEEPER); + vm.prank(POOL_QUOTA_KEEPER); pool.updateQuotaRevenue(qu); uint256 year = 365 days; - evm.warp(block.timestamp + year); + vm.warp(block.timestamp + year); PoolQuotaKeeper pqk2 = new PoolQuotaKeeper(address(pool)); address POOL_QUOTA_KEEPER2 = address(pqk2); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit SetPoolQuotaKeeper(POOL_QUOTA_KEEPER2); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER2); assertEq(pool.lastQuotaRevenueUpdate(), block.timestamp, "Incorrect lastQuotaRevenuUpdate"); @@ -1595,10 +1593,10 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // [P4-24]: setExpectedLiquidityLimit() sets limit & emits event function test_P4_24_setExpectedLiquidityLimit_correct_and_emits_event() public { - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetExpectedLiquidityLimit(10005); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setExpectedLiquidityLimit(10005); assertEq(pool.expectedLiquidityLimit(), 10005, "expectedLiquidityLimit not set correctly"); @@ -1606,10 +1604,10 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // [P4-25]: setTotalBorrowedLimit sets limit & emits event function test_P4_25_setTotalBorrowedLimit_correct_and_emits_event() public { - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetTotalBorrowedLimit(10005); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setTotalBorrowedLimit(10005); assertEq(pool.totalBorrowedLimit(), 10005, "totalBorrowedLimit not set correctly"); @@ -1617,15 +1615,15 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // [P4-26]: setWithdrawFee works correctly function test_P4_26_setWithdrawFee_works_correctly() public { - evm.expectRevert(IncorrectParameterException.selector); + vm.expectRevert(IncorrectParameterException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setWithdrawFee(101); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetWithdrawFee(50); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.setWithdrawFee(50); assertEq(pool.withdrawFee(), 50, "withdrawFee not set correctly"); @@ -1732,7 +1730,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events address(pool) ); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); psts.cr().addCreditManager(address(cmMock2)); pool.updateInterestRateModel(address(newIR)); @@ -1747,7 +1745,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events pool.setCreditManagerLimit(address(cmMock2), testCase.cmBorrowLimit); - evm.stopPrank(); + vm.stopPrank(); assertEq( pool.creditManagerCanBorrow(address(cmMock2)), @@ -1832,13 +1830,13 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events if (supportQuotas) { address POOL_QUOTA_KEEPER = address(pqk); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pool.connectPoolQuotaManager(POOL_QUOTA_KEEPER); - evm.prank(POOL_QUOTA_KEEPER); + vm.prank(POOL_QUOTA_KEEPER); pool.updateQuotaRevenue(testCase.quotaRevenue); } @@ -1850,7 +1848,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events uint256 depositAmount = addLiquidity / 10; uint256 sharesGot = pool.previewDeposit(depositAmount); - evm.warp(block.timestamp + 365 days); + vm.warp(block.timestamp + 365 days); uint256 depositInAYear = pool.previewRedeem(sharesGot); @@ -1873,7 +1871,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // function test_PX_23_diesel_conversion_is_correct() public { // _connectAndSetLimit(); - // evm.prank(USER); + // vm.prank(USER); // pool.deposit(addLiquidity, USER); // address ca = cmMock.getCreditAccountOrRevert(DUMB_ADDRESS); @@ -1882,7 +1880,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // uint256 timeWarp = 365 days; - // evm.warp(block.timestamp + timeWarp); + // vm.warp(block.timestamp + timeWarp); // uint256 dieselRate = pool.getDieselRate_RAY(); @@ -1899,7 +1897,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // function test_PX_28_expectedLiquidity_correct() public { // _connectAndSetLimit(); - // evm.prank(USER); + // vm.prank(USER); // pool.deposit(addLiquidity, USER); // address ca = cmMock.getCreditAccountOrRevert(DUMB_ADDRESS); @@ -1909,7 +1907,7 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // uint256 borrowRate = pool.borrowRate(); // uint256 timeWarp = 365 days; - // evm.warp(block.timestamp + timeWarp); + // vm.warp(block.timestamp + timeWarp); // uint256 expectedInterest = ((addLiquidity / 2) * borrowRate) / RAY; // uint256 expectedLiquidity = pool.expectedLiquidityLU() + expectedInterest; @@ -1919,8 +1917,8 @@ contract Pool4626Test is DSTest, BalanceHelper, IPool4626Events, IERC4626Events // // [P4-35]: updateInterestRateModel reverts on zero address // function test_PX_35_updateInterestRateModel_reverts_on_zero_address() public { - // evm.expectRevert(ZeroAddressException.selector); - // evm.prank(CONFIGURATOR); + // vm.expectRevert(ZeroAddressException.selector); + // vm.prank(CONFIGURATOR); // pool.updateInterestRateModel(address(0)); // } } diff --git a/contracts/test/unit/pool/PoolQuotaKeeper.t.sol b/contracts/test/unit/pool/PoolQuotaKeeper.t.sol index 1b9ddbb6..8daca4f9 100644 --- a/contracts/test/unit/pool/PoolQuotaKeeper.t.sol +++ b/contracts/test/unit/pool/PoolQuotaKeeper.t.sol @@ -5,13 +5,7 @@ pragma solidity ^0.8.10; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import { - IPoolQuotaKeeper, - QuotaUpdate, - IPoolQuotaKeeperEvents, - TokenLT, - TokenQuotaParams -} from "../../../interfaces/IPoolQuotaKeeper.sol"; +import {IPoolQuotaKeeper, IPoolQuotaKeeperEvents, TokenQuotaParams} from "../../../interfaces/IPoolQuotaKeeper.sol"; import {IGauge} from "../../../interfaces/IGauge.sol"; import {IPool4626} from "../../../interfaces/IPool4626.sol"; @@ -23,8 +17,6 @@ import {ACL} from "@gearbox-protocol/core-v2/contracts/core/ACL.sol"; import {CreditManagerMockForPoolTest} from "../../mocks/pool/CreditManagerMockForPoolTest.sol"; import {addLiquidity, referral, PoolQuotaKeeperTestSuite} from "../../suites/PoolQuotaKeeperTestSuite.sol"; -import "@gearbox-protocol/core-v2/contracts/libraries/Errors.sol"; - import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; import {Tokens} from "../../config/Tokens.sol"; import {BalanceHelper} from "../../helpers/BalanceHelper.sol"; @@ -34,21 +26,19 @@ import {GaugeMock} from "../../mocks/pool/GaugeMock.sol"; // TEST import "../../lib/constants.sol"; -import "../../lib/StringUtils.sol"; + import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; +import {TestHelper} from "../../lib/helper.sol"; import "forge-std/console.sol"; /// @title pool /// @notice Business logic for borrowing liquidity pools -contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { +contract PoolQuotaKeeperTest is TestHelper, BalanceHelper, IPoolQuotaKeeperEvents { using Math for uint256; - using StringUtils for string; - - CheatCodes evm = CheatCodes(HEVM_ADDRESS); PoolQuotaKeeperTestSuite psts; PoolQuotaKeeper pqk; @@ -79,10 +69,6 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { gaugeMock = psts.gaugeMock(); } - function _testCaseErr(string memory caseName, string memory err) internal pure returns (string memory) { - return string("\nCase: ").concat(caseName).concat("\n").concat("Error: ").concat(err); - } - // // TESTS // @@ -95,48 +81,46 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { // [PQK-2]: configuration functions revert if called nonConfigurator(nonController) function test_PQK_02_configuration_functions_reverts_if_call_nonConfigurator() public { - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); pqk.setGauge(DUMB_ADDRESS); - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); pqk.addCreditManager(DUMB_ADDRESS); - evm.expectRevert(CallerNotControllerException.selector); + vm.expectRevert(CallerNotControllerException.selector); pqk.setTokenLimit(DUMB_ADDRESS, 1); - evm.stopPrank(); + vm.stopPrank(); } // [PQK-3]: gaugeOnly funcitons revert if called by non-gauge contract function test_PQK_03_gaugeOnly_funcitons_reverts_if_called_by_non_gauge() public { - evm.startPrank(USER); + vm.startPrank(USER); - evm.expectRevert(CallerNotGaugeException.selector); + vm.expectRevert(CallerNotGaugeException.selector); pqk.addQuotaToken(DUMB_ADDRESS); - evm.expectRevert(CallerNotGaugeException.selector); + vm.expectRevert(CallerNotGaugeException.selector); pqk.updateRates(); - evm.stopPrank(); + vm.stopPrank(); } // [PQK-4]: creditManagerOnly funcitons revert if called by non registered creditManager function test_PQK_04_gaugeOnly_funcitons_reverts_if_called_by_non_gauge() public { - evm.startPrank(USER); + vm.startPrank(USER); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - evm.expectRevert(CallerNotCreditManagerException.selector); - pqk.updateQuotas(DUMB_ADDRESS, quotaUpdates); + vm.expectRevert(CallerNotCreditManagerException.selector); + pqk.updateQuota(DUMB_ADDRESS, address(1), 0); - TokenLT[] memory tokensLT = new TokenLT[](1); - evm.expectRevert(CallerNotCreditManagerException.selector); - pqk.removeQuotas(DUMB_ADDRESS, tokensLT); + vm.expectRevert(CallerNotCreditManagerException.selector); + pqk.removeQuotas(DUMB_ADDRESS, new address[](1), false); - evm.expectRevert(CallerNotCreditManagerException.selector); - pqk.accrueQuotaInterest(DUMB_ADDRESS, tokensLT); - evm.stopPrank(); + vm.expectRevert(CallerNotCreditManagerException.selector); + pqk.accrueQuotaInterest(DUMB_ADDRESS, new address[](1)); + vm.stopPrank(); } // [PQK-5]: addQuotaToken adds token and set parameters correctly @@ -145,10 +129,10 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { assertEq(tokens.length, 0, "SETUP: tokens set unexpectedly has tokens"); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit NewQuotaTokenAdded(DUMB_ADDRESS); - evm.prank(pqk.gauge()); + vm.prank(pqk.gauge()); pqk.addQuotaToken(DUMB_ADDRESS); tokens = pqk.quotedTokens(); @@ -169,11 +153,11 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { // [PQK-6]: addQuotaToken reverts on adding the same token twice function test_PQK_06_addQuotaToken_reverts_on_adding_the_same_token_twice() public { address gauge = pqk.gauge(); - evm.prank(gauge); + vm.prank(gauge); pqk.addQuotaToken(DUMB_ADDRESS); - evm.prank(gauge); - evm.expectRevert(TokenAlreadyAddedException.selector); + vm.prank(gauge); + vm.expectRevert(TokenAlreadyAddedException.selector); pqk.addQuotaToken(DUMB_ADDRESS); } @@ -189,17 +173,17 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { string memory caseName = caseIndex == 1 ? "With totalQuoted" : "Without totalQuotae"; setUp(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gaugeMock.addQuotaToken(DAI, DAI_QUOTA_RATE); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gaugeMock.addQuotaToken(USDC, USDC_QUOTA_RATE); int96 daiQuota; int96 usdcQuota; if (caseIndex == 1) { - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); pqk.addCreditManager(address(cmMock)); pqk.setTokenLimit(DAI, uint96(100_000 * WAD)); @@ -208,35 +192,31 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { cmMock.addToken(DAI, 1); cmMock.addToken(USDC, 2); - evm.stopPrank(); + vm.stopPrank(); daiQuota = int96(uint96(100 * WAD)); usdcQuota = int96(uint96(200 * WAD)); - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](2); - - quotaUpdates[0] = QuotaUpdate({token: DAI, quotaChange: daiQuota}); - quotaUpdates[1] = QuotaUpdate({token: USDC, quotaChange: usdcQuota}); - - cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); + cmMock.updateQuota({_creditAccount: DUMB_ADDRESS, token: DAI, quotaChange: daiQuota}); + cmMock.updateQuota({_creditAccount: DUMB_ADDRESS, token: USDC, quotaChange: usdcQuota}); } - evm.warp(block.timestamp + 365 days); + vm.warp(block.timestamp + 365 days); address[] memory tokens = new address[](2); tokens[0] = DAI; tokens[1] = USDC; - evm.expectCall(address(gaugeMock), abi.encodeCall(IGauge.getRates, tokens)); + vm.expectCall(address(gaugeMock), abi.encodeCall(IGauge.getRates, tokens)); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit UpdateTokenQuotaRate(DAI, DAI_QUOTA_RATE); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit UpdateTokenQuotaRate(USDC, USDC_QUOTA_RATE); uint96 expectedQuotaRevenue = uint96(DAI_QUOTA_RATE * uint96(daiQuota) + USDC_QUOTA_RATE * uint96(usdcQuota)); - evm.expectCall(address(pool), abi.encodeCall(IPool4626.updateQuotaRevenue, expectedQuotaRevenue)); + vm.expectCall(address(pool), abi.encodeCall(IPool4626.updateQuotaRevenue, expectedQuotaRevenue)); gaugeMock.updateEpoch(); @@ -272,20 +252,20 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { function test_PQK_08_setGauge_works_as_expected() public { pqk = new PoolQuotaKeeper(address(pool)); - evm.startPrank(CONFIGURATOR); + vm.startPrank(CONFIGURATOR); assertEq(pqk.gauge(), address(0), "SETUP: incorrect address at start"); - evm.warp(block.timestamp + 2 days); + vm.warp(block.timestamp + 2 days); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit SetGauge(address(gaugeMock)); pqk.setGauge(address(gaugeMock)); uint256 gaugeUpdateTimestamp = block.timestamp; - evm.warp(block.timestamp + 2 days); + vm.warp(block.timestamp + 2 days); assertEq(pqk.gauge(), address(gaugeMock), "gauge address wasnt updated"); assertEq(pqk.lastQuotaRateUpdate(), gaugeUpdateTimestamp, "lastQuotaRateUpdate wasnt updated"); @@ -294,21 +274,21 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { pqk.setGauge(address(gaugeMock)); assertEq(pqk.lastQuotaRateUpdate(), gaugeUpdateTimestamp, "lastQuotaRateUpdate was unexpectedly updated"); - evm.stopPrank(); + vm.stopPrank(); } // [PQK-9]: addCreditManager works as expected function test_PQK_09_addCreditManager_reverts_for_non_cm_contract() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); - evm.expectRevert(RegisteredCreditManagerOnlyException.selector); + vm.expectRevert(RegisteredCreditManagerOnlyException.selector); pqk.addCreditManager(DUMB_ADDRESS); cmMock.changePoolService(DUMB_ADDRESS); - evm.expectRevert(IncompatibleCreditManagerException.selector); + vm.expectRevert(IncompatibleCreditManagerException.selector); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pqk.addCreditManager(address(cmMock)); } @@ -320,10 +300,10 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { assertEq(managers.length, 0, "SETUP: at least one creditmanager is unexpectedly connected"); - evm.expectEmit(true, true, false, false); + vm.expectEmit(true, true, false, false); emit AddCreditManager(address(cmMock)); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pqk.addCreditManager(address(cmMock)); managers = pqk.creditManagers(); @@ -331,7 +311,7 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { assertEq(managers[0], address(cmMock), "Incorrect address was added to creditManagerSet"); // check that funciton works correctly for another one step - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pqk.addCreditManager(address(cmMock)); managers = pqk.creditManagers(); @@ -341,8 +321,8 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { // [PQK-11]: setTokenLimit reverts for unregistered token function test_PQK_11_reverts_for_unregistered_token() public { - evm.expectRevert(TokenIsNotQuotedException.selector); - evm.prank(CONFIGURATOR); + vm.expectRevert(TokenIsNotQuotedException.selector); + vm.prank(CONFIGURATOR); pqk.setTokenLimit(DUMB_ADDRESS, 1); } @@ -351,12 +331,12 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { function test_PQK_12_setTokenLimit_works_as_expected() public { uint96 limit = 435_223_999; - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gaugeMock.addQuotaToken(DUMB_ADDRESS, 11); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); - evm.expectEmit(true, true, false, true); + vm.expectEmit(true, true, false, true); emit SetTokenLimit(DUMB_ADDRESS, limit); pqk.setTokenLimit(DUMB_ADDRESS, limit); @@ -368,15 +348,15 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { // [PQK-13]: updateQuotas reverts for unregistered token function test_PQK_13_updateQuotas_reverts_for_unregistered_token() public { - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](1); - quotaUpdates[0] = - QuotaUpdate({token: tokenTestSuite.addressOf(Tokens.LINK), quotaChange: int96(uint96(100 * WAD))}); - - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); pqk.addCreditManager(address(cmMock)); - evm.expectRevert(TokenIsNotQuotedException.selector); - cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); + vm.expectRevert(TokenIsNotQuotedException.selector); + cmMock.updateQuota({ + _creditAccount: DUMB_ADDRESS, + token: tokenTestSuite.addressOf(Tokens.LINK), + quotaChange: int96(uint96(100 * WAD)) + }); } struct QuotaTest { @@ -411,129 +391,129 @@ contract PoolQuotaKeeperTest is DSTest, BalanceHelper, IPoolQuotaKeeperEvents { uint256 expectedInAYearEnableTokenMaskUpdated; } - // [PQK-14]: updateQuotas works as expected - function test_PQK_14_updateQuotas_works_as_expected() public { - UpdateQuotasTestCase[1] memory cases = [ - UpdateQuotasTestCase({ - name: "Quota simple test", - /// SETUP - quotaLen: 2, - initialQuotas: [ - QuotaTest({token: Tokens.DAI, change: 100, limit: 10_000, rate: 10_00, expectedTotalQuotedAfter: 100}), - QuotaTest({token: Tokens.USDC, change: 150, limit: 1_000, rate: 20_00, expectedTotalQuotedAfter: 150}) - ], - initialEnabledTokens: 0, - /// expected - expectedQuotaRevenueChange: 0, - expectedCaQuotaInterestChange: 0, - expectedEnableTokenMaskUpdated: 3, - // In 1 YEAR - quotasInAYear: [ - QuotaTestInAYear({token: Tokens.DAI, change: 100, expectedTotalQuotedAfter: 200}), - QuotaTestInAYear({token: Tokens.USDC, change: -100, expectedTotalQuotedAfter: 50}) - ], - expectedInAYearQuotaRevenueChange: 0, - expectedInAYearCaQuotaInterestChange: 0, - expectedInAYearEnableTokenMaskUpdated: 3 - }) - ]; - for (uint256 i; i < cases.length; ++i) { - UpdateQuotasTestCase memory testCase = cases[i]; - - setUp(); - evm.startPrank(CONFIGURATOR); - - pqk.addCreditManager(address(cmMock)); - - QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](testCase.quotaLen); - - for (uint256 j; j < testCase.quotaLen; ++j) { - address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); - cmMock.addToken(token, 1 << (j)); - gaugeMock.addQuotaToken(token, testCase.initialQuotas[j].rate); - pqk.setTokenLimit(token, uint96(testCase.initialQuotas[j].limit)); - - quotaUpdates[j] = QuotaUpdate({token: token, quotaChange: testCase.initialQuotas[j].change}); - } - - evm.stopPrank(); - - int128 quBefore = int128(pool.quotaRevenue()); - - /// UPDATE QUOTAS - - uint256 tokensToEnable; - uint256 tokensToDisable; - uint256 caQuotaInterestChange; - (caQuotaInterestChange, tokensToEnable, tokensToDisable) = cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); - - // assertEq( - // enableTokenMaskUpdated, - // testCase.expectedEnableTokenMaskUpdated, - // _testCaseErr(testCase.name, "Incorrece enable token mask") - // ); - - assertEq( - caQuotaInterestChange, - testCase.expectedCaQuotaInterestChange, - _testCaseErr(testCase.name, "Incorrece caQuotaInterestChange") - ); - - assertEq( - quBefore - int128(pool.quotaRevenue()), - testCase.expectedQuotaRevenueChange, - _testCaseErr(testCase.name, "Incorrece QuotaRevenueChange") - ); - - for (uint256 j; j < testCase.quotaLen; ++j) { - address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); - (uint96 totalQuoted,,,) = pqk.totalQuotaParams(token); - - assertEq( - totalQuoted, - testCase.initialQuotas[j].expectedTotalQuotedAfter, - _testCaseErr(testCase.name, "Incorrect expectedTotalQuotedAfter") - ); - } - evm.warp(block.timestamp + 365 days); - - for (uint256 j; j < testCase.quotaLen; ++j) { - address token = tokenTestSuite.addressOf(testCase.quotasInAYear[j].token); - - quotaUpdates[j] = QuotaUpdate({token: token, quotaChange: testCase.quotasInAYear[j].change}); - } - - (caQuotaInterestChange, tokensToEnable, tokensToDisable) = cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); - - // TODO: change the test - // assertEq( - // enableTokenMaskUpdatedInAYear, - // testCase.expectedInAYearEnableTokenMaskUpdated, - // _testCaseErr(testCase.name, "Incorrect enable token mask in a year") - // ); - - assertEq( - caQuotaInterestChange, - testCase.expectedInAYearCaQuotaInterestChange, - _testCaseErr(testCase.name, "Incorrect caQuotaInterestChange in a year") - ); - - assertEq( - quBefore - int128(pool.quotaRevenue()), - testCase.expectedInAYearQuotaRevenueChange, - _testCaseErr(testCase.name, "Incorrect QuotaRevenueChange in a year") - ); - - for (uint256 j; j < testCase.quotaLen; ++j) { - address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); - (uint96 totalQuoted,,,) = pqk.totalQuotaParams(token); - - assertEq( - totalQuoted, - testCase.quotasInAYear[j].expectedTotalQuotedAfter, - _testCaseErr(testCase.name, "Incorrect expectedTotalQuotedAfter in a year") - ); - } - } - } + // // [PQK-14]: updateQuotas works as expected + // function test_PQK_14_updateQuotas_works_as_expected() public { + // UpdateQuotasTestCase[1] memory cases = [ + // UpdateQuotasTestCase({ + // name: "Quota simple test", + // /// SETUP + // quotaLen: 2, + // initialQuotas: [ + // QuotaTest({token: Tokens.DAI, change: 100, limit: 10_000, rate: 10_00, expectedTotalQuotedAfter: 100}), + // QuotaTest({token: Tokens.USDC, change: 150, limit: 1_000, rate: 20_00, expectedTotalQuotedAfter: 150}) + // ], + // initialEnabledTokens: 0, + // /// expected + // expectedQuotaRevenueChange: 0, + // expectedCaQuotaInterestChange: 0, + // expectedEnableTokenMaskUpdated: 3, + // // In 1 YEAR + // quotasInAYear: [ + // QuotaTestInAYear({token: Tokens.DAI, change: 100, expectedTotalQuotedAfter: 200}), + // QuotaTestInAYear({token: Tokens.USDC, change: -100, expectedTotalQuotedAfter: 50}) + // ], + // expectedInAYearQuotaRevenueChange: 0, + // expectedInAYearCaQuotaInterestChange: 0, + // expectedInAYearEnableTokenMaskUpdated: 3 + // }) + // ]; + // for (uint256 i; i < cases.length; ++i) { + // UpdateQuotasTestCase memory testCase = cases[i]; + + // setUp(); + // vm.startPrank(CONFIGURATOR); + + // pqk.addCreditManager(address(cmMock)); + + // QuotaUpdate[] memory quotaUpdates = new QuotaUpdate[](testCase.quotaLen); + + // for (uint256 j; j < testCase.quotaLen; ++j) { + // address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); + // cmMock.addToken(token, 1 << (j)); + // gaugeMock.addQuotaToken(token, testCase.initialQuotas[j].rate); + // pqk.setTokenLimit(token, uint96(testCase.initialQuotas[j].limit)); + + // quotaUpdates[j] = QuotaUpdate({token: token, quotaChange: testCase.initialQuotas[j].change}); + // } + + // vm.stopPrank(); + + // int128 quBefore = int128(pool.quotaRevenue()); + + // /// UPDATE QUOTAS + + // uint256 tokensToEnable; + // uint256 tokensToDisable; + // uint256 caQuotaInterestChange; + // (caQuotaInterestChange, tokensToEnable, tokensToDisable) = cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); + + // // assertEq( + // // enableTokenMaskUpdated, + // // testCase.expectedEnableTokenMaskUpdated, + // // _testCaseErr(testCase.name, "Incorrece enable token mask") + // // ); + + // assertEq( + // caQuotaInterestChange, + // testCase.expectedCaQuotaInterestChange, + // _testCaseErr(testCase.name, "Incorrece caQuotaInterestChange") + // ); + + // assertEq( + // quBefore - int128(pool.quotaRevenue()), + // testCase.expectedQuotaRevenueChange, + // _testCaseErr(testCase.name, "Incorrece QuotaRevenueChange") + // ); + + // for (uint256 j; j < testCase.quotaLen; ++j) { + // address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); + // (uint96 totalQuoted,,,) = pqk.totalQuotaParams(token); + + // assertEq( + // totalQuoted, + // testCase.initialQuotas[j].expectedTotalQuotedAfter, + // _testCaseErr(testCase.name, "Incorrect expectedTotalQuotedAfter") + // ); + // } + // vm.warp(block.timestamp + 365 days); + + // for (uint256 j; j < testCase.quotaLen; ++j) { + // address token = tokenTestSuite.addressOf(testCase.quotasInAYear[j].token); + + // quotaUpdates[j] = QuotaUpdate({token: token, quotaChange: testCase.quotasInAYear[j].change}); + // } + + // (caQuotaInterestChange, tokensToEnable, tokensToDisable) = cmMock.updateQuotas(DUMB_ADDRESS, quotaUpdates); + + // // TODO: change the test + // // assertEq( + // // enableTokenMaskUpdatedInAYear, + // // testCase.expectedInAYearEnableTokenMaskUpdated, + // // _testCaseErr(testCase.name, "Incorrect enable token mask in a year") + // // ); + + // assertEq( + // caQuotaInterestChange, + // testCase.expectedInAYearCaQuotaInterestChange, + // _testCaseErr(testCase.name, "Incorrect caQuotaInterestChange in a year") + // ); + + // assertEq( + // quBefore - int128(pool.quotaRevenue()), + // testCase.expectedInAYearQuotaRevenueChange, + // _testCaseErr(testCase.name, "Incorrect QuotaRevenueChange in a year") + // ); + + // for (uint256 j; j < testCase.quotaLen; ++j) { + // address token = tokenTestSuite.addressOf(testCase.initialQuotas[j].token); + // (uint96 totalQuoted,,,) = pqk.totalQuotaParams(token); + + // assertEq( + // totalQuoted, + // testCase.quotasInAYear[j].expectedTotalQuotedAfter, + // _testCaseErr(testCase.name, "Incorrect expectedTotalQuotedAfter in a year") + // ); + // } + // } + // } } diff --git a/contracts/test/unit/support/BotList.t.sol b/contracts/test/unit/support/BotList.t.sol index 97e1edb5..3bd80942 100644 --- a/contracts/test/unit/support/BotList.t.sol +++ b/contracts/test/unit/support/BotList.t.sol @@ -20,11 +20,12 @@ import {Tokens} from "../../config/Tokens.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; +import {Test} from "forge-std/Test.sol"; +import "forge-std/console.sol"; + /// @title LPPriceFeedTest /// @notice Designed for unit test purposes only -contract BotListTest is IBotListEvents, DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - +contract BotListTest is Test, IBotListEvents { AddressProviderACLMock public addressProvider; BotList botList; @@ -32,7 +33,7 @@ contract BotListTest is IBotListEvents, DSTest { TokensTestSuite tokenTestSuite; function setUp() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); addressProvider = new AddressProviderACLMock(); tokenTestSuite = new TokensTestSuite(); @@ -54,13 +55,13 @@ contract BotListTest is IBotListEvents, DSTest { /// @dev [BL-2]: setDAOFee works correctly function test_BL_02_setDAOFee_works_correctly() public { - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); botList.setDAOFee(1); - evm.expectEmit(false, false, false, true); + vm.expectEmit(false, false, false, true); emit SetBotDAOFee(15); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); botList.setDAOFee(15); assertEq(botList.daoFee(), 15, "DAO fee incorrect"); @@ -68,36 +69,36 @@ contract BotListTest is IBotListEvents, DSTest { /// @dev [BL-3]: increaseBotFunding works correctly function test_BL_03_increaseBotFunding_works_correctly() public { - evm.deal(USER, 10 ether); + vm.deal(USER, 10 ether); - evm.expectRevert(AmountCantBeZeroException.selector); + vm.expectRevert(AmountCantBeZeroException.selector); botList.increaseBotFunding(FRIEND); - evm.expectRevert(InvalidBotException.selector); - evm.prank(USER); + vm.expectRevert(InvalidBotException.selector); + vm.prank(USER); botList.increaseBotFunding{value: 1 ether}(FRIEND); - evm.prank(USER); + vm.prank(USER); botList.setBotPermissions(address(addressProvider), type(uint192).max); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); botList.setBotForbiddenStatus(address(addressProvider), true); - evm.expectRevert(InvalidBotException.selector); - evm.prank(USER); + vm.expectRevert(InvalidBotException.selector); + vm.prank(USER); botList.increaseBotFunding{value: 1 ether}(address(addressProvider)); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); botList.setBotForbiddenStatus(address(addressProvider), false); - evm.prank(USER); + vm.prank(USER); botList.increaseBotFunding{value: 1 ether}(address(addressProvider)); (uint72 remainingFunds,,,) = botList.botFunding(USER, address(addressProvider)); assertEq(remainingFunds, 1 ether, "Remaining funds incorrect"); - evm.prank(USER); + vm.prank(USER); botList.increaseBotFunding{value: 1 ether}(address(addressProvider)); (remainingFunds,,,) = botList.botFunding(USER, address(addressProvider)); @@ -107,15 +108,15 @@ contract BotListTest is IBotListEvents, DSTest { /// @dev [BL-4]: decreaseBotFunding works correctly function test_BL_04_decreaseBotFunding_works_correctly() public { - evm.deal(USER, 10 ether); + vm.deal(USER, 10 ether); - evm.prank(USER); + vm.prank(USER); botList.setBotPermissions(address(addressProvider), type(uint192).max); - evm.prank(USER); + vm.prank(USER); botList.increaseBotFunding{value: 2 ether}(address(addressProvider)); - evm.prank(USER); + vm.prank(USER); botList.decreaseBotFunding(address(addressProvider), 1 ether); (uint72 remainingFunds,,,) = botList.botFunding(USER, address(addressProvider)); @@ -127,25 +128,25 @@ contract BotListTest is IBotListEvents, DSTest { /// @dev [BL-5]: setWeeklyAllowance works correctly function test_BL_05_setWeeklyAllowance_works_correctly() public { - evm.deal(USER, 10 ether); + vm.deal(USER, 10 ether); - evm.prank(USER); + vm.prank(USER); botList.setBotPermissions(address(addressProvider), type(uint192).max); - evm.prank(USER); + vm.prank(USER); botList.setWeeklyBotAllowance(address(addressProvider), 1 ether); (, uint72 maxWeeklyAllowance,,) = botList.botFunding(USER, address(addressProvider)); assertEq(maxWeeklyAllowance, 1 ether, "Incorrect new allowance"); - evm.prank(USER); + vm.prank(USER); botList.increaseBotFunding{value: 1 ether}(address(addressProvider)); - evm.prank(address(addressProvider)); + vm.prank(address(addressProvider)); botList.pullPayment(USER, 1 ether / 10); - evm.prank(USER); + vm.prank(USER); botList.setWeeklyBotAllowance(address(addressProvider), 1 ether / 2); uint72 remainingWeeklyAllowance; @@ -159,18 +160,18 @@ contract BotListTest is IBotListEvents, DSTest { /// @dev [BL-6]: pullPayment works correctly function test_BL_06_pullPayment_works_correctly() public { - evm.deal(USER, 10 ether); + vm.deal(USER, 10 ether); - evm.prank(USER); + vm.prank(USER); botList.setBotPermissions(address(addressProvider), type(uint192).max); - evm.prank(USER); + vm.prank(USER); botList.setWeeklyBotAllowance(address(addressProvider), 1 ether); - evm.prank(USER); + vm.prank(USER); botList.increaseBotFunding{value: 2 ether}(address(addressProvider)); - evm.prank(address(addressProvider)); + vm.prank(address(addressProvider)); botList.pullPayment(USER, 1 ether / 10); (uint72 remainingFunds,, uint72 remainingWeeklyAllowance,) = botList.botFunding(USER, address(addressProvider)); @@ -181,10 +182,10 @@ contract BotListTest is IBotListEvents, DSTest { assertEq(address(addressProvider).balance, 1 ether / 10, "Incorrect amount sent to bot"); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); botList.setDAOFee(10000); - evm.prank(address(addressProvider)); + vm.prank(address(addressProvider)); botList.pullPayment(USER, 1 ether / 10); (remainingFunds,, remainingWeeklyAllowance,) = botList.botFunding(USER, address(addressProvider)); diff --git a/contracts/test/unit/support/ControllerTimelock.t.sol b/contracts/test/unit/support/ControllerTimelock.t.sol new file mode 100644 index 00000000..a1105cbe --- /dev/null +++ b/contracts/test/unit/support/ControllerTimelock.t.sol @@ -0,0 +1,733 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {ControllerTimelock} from "../../../support/risk-controller/ControllerTimelock.sol"; +import {Policy} from "../../../support/risk-controller/PolicyManager.sol"; +import {GeneralMock} from "../../mocks/GeneralMock.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +import {ICreditManagerV3} from "../../../interfaces/ICreditManagerV3.sol"; +import {ICreditFacade} from "../../../interfaces/ICreditFacade.sol"; +import {ICreditConfigurator} from "../../../interfaces/ICreditConfiguratorV3.sol"; +import {IPool4626} from "../../../interfaces/IPool4626.sol"; +import {Pool4626} from "../../../pool/Pool4626.sol"; +import {ILPPriceFeed} from "../../../interfaces/ILPPriceFeed.sol"; +import {IControllerTimelockEvents, IControllerTimelockErrors} from "../../../interfaces/IControllerTimelock.sol"; + +// TEST +import "../../lib/constants.sol"; +import {Test} from "forge-std/Test.sol"; + +// MOCKS +import {AddressProviderACLMock} from "../../mocks/core/AddressProviderACLMock.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +contract ControllerTimelockTest is Test, IControllerTimelockEvents, IControllerTimelockErrors { + AddressProviderACLMock public addressProvider; + + ControllerTimelock public controllerTimelock; + + address admin; + address vetoAdmin; + + function setUp() public { + admin = makeAddr("ADMIN"); + vetoAdmin = makeAddr("VETO_ADMIN"); + + vm.prank(CONFIGURATOR); + addressProvider = new AddressProviderACLMock(); + controllerTimelock = new ControllerTimelock(address(addressProvider), admin, vetoAdmin); + } + + function _makeMocks() + internal + returns (address creditManager, address creditFacade, address creditConfigurator, address pool) + { + creditManager = address(new GeneralMock()); + creditFacade = address(new GeneralMock()); + creditConfigurator = address(new GeneralMock()); + pool = address(new GeneralMock()); + + vm.mockCall( + creditManager, abi.encodeWithSelector(ICreditManagerV3.creditFacade.selector), abi.encode(creditFacade) + ); + + vm.mockCall( + creditManager, + abi.encodeWithSelector(ICreditManagerV3.creditConfigurator.selector), + abi.encode(creditConfigurator) + ); + + vm.mockCall(creditManager, abi.encodeWithSelector(ICreditManagerV3.pool.selector), abi.encode(pool)); + + vm.prank(CONFIGURATOR); + controllerTimelock.setGroup(creditManager, "CM"); + + vm.label(creditManager, "CREDIT_MANAGER"); + vm.label(creditFacade, "CREDIT_FACADE"); + vm.label(creditConfigurator, "CREDIT_CONFIGURATOR"); + vm.label(pool, "POOL"); + } + + /// + /// + /// TESTS + /// + /// + + /// @dev [RCT-1]: setExpirationDate works correctly + function test_RCT_01_setExpirationDate_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "EXPIRATION_DATE")); + + vm.mockCall( + creditFacade, abi.encodeWithSelector(ICreditFacade.expirationDate.selector), abi.encode(block.timestamp) + ); + + vm.mockCall( + pool, abi.encodeWithSelector(IPool4626.creditManagerBorrowed.selector, creditManager), abi.encode(1234) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: block.timestamp + 5, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 5)); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 4)); + + // VERIFY THAT EXTRA CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 5)); + + vm.mockCall( + pool, abi.encodeWithSelector(IPool4626.creditManagerBorrowed.selector, creditManager), abi.encode(0) + ); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode( + creditConfigurator, + "setExpirationDate(uint40)", + abi.encode(block.timestamp + 5), + block.timestamp + 1 days + ) + ); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, + creditConfigurator, + "setExpirationDate(uint40)", + abi.encode(block.timestamp + 5), + uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 5)); + + vm.expectCall( + creditConfigurator, + abi.encodeWithSelector(ICreditConfigurator.setExpirationDate.selector, block.timestamp + 5) + ); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-2]: setLPPriceFeedLimiter works correctly + function test_RCT_02_setLPPriceFeedLimiter_works_correctly() public { + address lpPriceFeed = address(new GeneralMock()); + + vm.prank(CONFIGURATOR); + controllerTimelock.setGroup(lpPriceFeed, "LP_PRICE_FEED"); + + vm.mockCall(lpPriceFeed, abi.encodeWithSelector(ILPPriceFeed.lowerBound.selector), abi.encode(5)); + + bytes32 POLICY_CODE = keccak256(abi.encode("LP_PRICE_FEED", "LP_PRICE_FEED_LIMITER")); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 7, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.setLPPriceFeedLimiter(lpPriceFeed, 7); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setLPPriceFeedLimiter(lpPriceFeed, 8); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = + keccak256(abi.encode(lpPriceFeed, "setLimiter(uint256)", abi.encode(7), block.timestamp + 1 days)); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, lpPriceFeed, "setLimiter(uint256)", abi.encode(7), uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.setLPPriceFeedLimiter(lpPriceFeed, 7); + + vm.expectCall(lpPriceFeed, abi.encodeWithSelector(ILPPriceFeed.setLimiter.selector, 7)); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-3]: setMaxDebtPerBlockMultiplier works correctly + function test_RCT_03_setMaxDebtPerBlockMultiplier_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "MAX_DEBT_PER_BLOCK_MULTIPLIER")); + + vm.mockCall( + creditFacade, abi.encodeWithSelector(ICreditFacade.maxDebtPerBlockMultiplier.selector), abi.encode(3) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 4, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.setMaxDebtPerBlockMultiplier(creditManager, 4); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setMaxDebtPerBlockMultiplier(creditManager, 5); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode( + creditConfigurator, "setMaxDebtPerBlockMultiplier(uint8)", abi.encode(4), block.timestamp + 1 days + ) + ); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, + creditConfigurator, + "setMaxDebtPerBlockMultiplier(uint8)", + abi.encode(4), + uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.setMaxDebtPerBlockMultiplier(creditManager, 4); + + vm.expectCall( + creditConfigurator, abi.encodeWithSelector(ICreditConfigurator.setMaxDebtPerBlockMultiplier.selector, 4) + ); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-4]: setDebtLimits works correctly + function test_RCT_04_setDebtLimits_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE_1 = keccak256(abi.encode("CM", "MIN_DEBT")); + bytes32 POLICY_CODE_2 = keccak256(abi.encode("CM", "MAX_DEBT")); + + vm.mockCall(creditFacade, abi.encodeWithSelector(ICreditFacade.debtLimits.selector), abi.encode(10, 20)); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 15, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE_1, policy); + + policy = Policy({ + enabled: false, + flags: 1, + exactValue: 16, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE_2, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.setDebtLimits(creditManager, 15, 16); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setDebtLimits(creditManager, 5, 16); + + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setDebtLimits(creditManager, 15, 5); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode(creditConfigurator, "setLimits(uint128,uint128)", abi.encode(15, 16), block.timestamp + 1 days) + ); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, + creditConfigurator, + "setLimits(uint128,uint128)", + abi.encode(15, 16), + uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.setDebtLimits(creditManager, 15, 16); + + vm.expectCall(creditConfigurator, abi.encodeWithSelector(ICreditConfigurator.setLimits.selector, 15, 16)); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-5]: setCreditManagerDebtLimit works correctly + function test_RCT_05_setCreditManagerDebtLimit_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "CREDIT_MANAGER_DEBT_LIMIT")); + + vm.mockCall( + pool, abi.encodeWithSelector(IPool4626.creditManagerLimit.selector, creditManager), abi.encode(1e18) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 2e18, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.setCreditManagerDebtLimit(creditManager, 2e18); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.setCreditManagerDebtLimit(creditManager, 1e18); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode( + pool, + "setCreditManagerLimit(address,uint256)", + abi.encode(creditManager, 2e18), + block.timestamp + 1 days + ) + ); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, + pool, + "setCreditManagerLimit(address,uint256)", + abi.encode(creditManager, 2e18), + uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.setCreditManagerDebtLimit(creditManager, 2e18); + + vm.expectCall(pool, abi.encodeWithSelector(Pool4626.setCreditManagerLimit.selector, creditManager, 2e18)); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-6]: rampLiquidationThreshold works correctly + function test_RCT_06_rampLiquidationThreshold_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + address token = makeAddr("TOKEN"); + + vm.prank(CONFIGURATOR); + controllerTimelock.setGroup(token, "TOKEN"); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "TOKEN", "TOKEN_LT")); + + vm.mockCall( + creditManager, abi.encodeWithSelector(ICreditManagerV3.liquidationThresholds.selector), abi.encode(5000) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 6000, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS ONLY CALLABLE BY ADMIN + vm.expectRevert(CallerNotAdminException.selector); + vm.prank(USER); + controllerTimelock.rampLiquidationThreshold(creditManager, token, 6000, 7 days); + + // VERIFY THAT POLICY CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.rampLiquidationThreshold(creditManager, token, 5000, 7 days); + + // VERIFY THAT EXTRA CHECKS ARE PERFORMED + vm.expectRevert(ParameterChecksFailedException.selector); + vm.prank(admin); + controllerTimelock.rampLiquidationThreshold(creditManager, token, 6000, 1 days); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode( + creditConfigurator, + "rampLiquidationThreshold(address,uint16,uint24)", + abi.encode(token, 6000, 7 days), + block.timestamp + 1 days + ) + ); + + vm.expectEmit(true, false, false, true); + emit QueueTransaction( + txHash, + creditConfigurator, + "rampLiquidationThreshold(address,uint16,uint24)", + abi.encode(token, 6000, 7 days), + uint40(block.timestamp + 1 days) + ); + + vm.prank(admin); + controllerTimelock.rampLiquidationThreshold(creditManager, token, 6000, 7 days); + + vm.expectCall( + creditConfigurator, + abi.encodeWithSelector(ICreditConfigurator.rampLiquidationThreshold.selector, token, 6000, 7 days) + ); + + vm.warp(block.timestamp + 1 days); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after execution"); + } + + /// @dev [RCT-7]: cancelTransaction works correctly + function test_RCT_07_cancelTransaction_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "EXPIRATION_DATE")); + + vm.mockCall( + creditFacade, abi.encodeWithSelector(ICreditFacade.expirationDate.selector), abi.encode(block.timestamp) + ); + + vm.mockCall( + pool, abi.encodeWithSelector(IPool4626.creditManagerBorrowed.selector, creditManager), abi.encode(0) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: block.timestamp + 5, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode( + creditConfigurator, + "setExpirationDate(uint40)", + abi.encode(block.timestamp + 5), + block.timestamp + 1 days + ) + ); + + vm.prank(admin); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 5)); + + vm.expectRevert(CallerNotVetoAdminException.selector); + + vm.prank(admin); + controllerTimelock.cancelTransaction(txHash); + + vm.expectEmit(true, false, false, false); + emit CancelTransaction(txHash); + + vm.prank(vetoAdmin); + controllerTimelock.cancelTransaction(txHash); + + (bool queued,,,,) = controllerTimelock.queuedTransactions(txHash); + + assertTrue(!queued, "Transaction is still queued after cancelling"); + + vm.expectRevert(TxNotQueuedException.selector); + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + } + + /// @dev [RCT-8]: configuration functions work correctly + function test_RCT_08_cancelTransaction_works_correctly() public { + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + controllerTimelock.setAdmin(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + controllerTimelock.setVetoAdmin(DUMB_ADDRESS); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + controllerTimelock.setDelay(5); + + vm.expectEmit(true, false, false, false); + emit SetAdmin(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + controllerTimelock.setAdmin(DUMB_ADDRESS); + + assertEq(controllerTimelock.admin(), DUMB_ADDRESS, "Admin address was not set"); + + vm.expectEmit(true, false, false, false); + emit SetVetoAdmin(DUMB_ADDRESS); + + vm.prank(CONFIGURATOR); + controllerTimelock.setVetoAdmin(DUMB_ADDRESS); + + assertEq(controllerTimelock.vetoAdmin(), DUMB_ADDRESS, "Veto admin address was not set"); + + vm.expectEmit(false, false, false, true); + emit SetDelay(5); + + vm.prank(CONFIGURATOR); + controllerTimelock.setDelay(5); + + assertEq(controllerTimelock.delay(), 5, "Delay was not set"); + } + + /// @dev [RCT-9]: executeTransaction works correctly + function test_RCT_09_executeTransaction_works_correctly() public { + (address creditManager, address creditFacade, address creditConfigurator, address pool) = _makeMocks(); + + bytes32 POLICY_CODE = keccak256(abi.encode("CM", "EXPIRATION_DATE")); + + vm.mockCall( + creditFacade, abi.encodeWithSelector(ICreditFacade.expirationDate.selector), abi.encode(block.timestamp) + ); + + vm.mockCall( + pool, abi.encodeWithSelector(IPool4626.creditManagerBorrowed.selector, creditManager), abi.encode(0) + ); + + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: block.timestamp + 5, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + controllerTimelock.setPolicy(POLICY_CODE, policy); + + uint40 expirationDate = uint40(block.timestamp + 1 days); + + // VERIFY THAT THE FUNCTION IS QUEUED AND EXECUTED CORRECTLY + bytes32 txHash = keccak256( + abi.encode(creditConfigurator, "setExpirationDate(uint40)", abi.encode(block.timestamp + 5), expirationDate) + ); + + vm.prank(admin); + controllerTimelock.setExpirationDate(creditManager, uint40(block.timestamp + 5)); + + vm.expectRevert(CallerNotAdminException.selector); + + vm.prank(USER); + controllerTimelock.executeTransaction(txHash); + + vm.expectRevert(TxExecutedOutsideTimeWindowException.selector); + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + vm.warp(block.timestamp + 20 days); + + vm.expectRevert(TxExecutedOutsideTimeWindowException.selector); + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + + vm.warp(block.timestamp - 10 days); + + // vm.mockCallRevert( + // creditConfigurator, + // abi.encodeWithSelector( + // ICreditConfigurator.setExpirationDate.selector, + // expirationDate + // ), + // abi.encode("error") + // ); + + // vm.expectRevert(TxExecutionRevertedException.selector); + // vm.prank(admin); + // controllerTimelock.executeTransaction(txHash); + + // vm.clearMockedCalls(); + + vm.expectEmit(true, false, false, false); + emit ExecuteTransaction(txHash); + + vm.prank(admin); + controllerTimelock.executeTransaction(txHash); + } +} diff --git a/contracts/test/unit/support/GearStaking.t.sol b/contracts/test/unit/support/GearStaking.t.sol index cc32a9fb..eceb8884 100644 --- a/contracts/test/unit/support/GearStaking.t.sol +++ b/contracts/test/unit/support/GearStaking.t.sol @@ -24,11 +24,12 @@ import {Tokens} from "../../config/Tokens.sol"; // EXCEPTIONS import "../../../interfaces/IExceptions.sol"; -uint256 constant EPOCH_LENGTH = 7 days; +import {Test} from "forge-std/Test.sol"; +import "forge-std/console.sol"; -contract GearStakingTest is IGearStakingEvents, DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); +uint256 constant EPOCH_LENGTH = 7 days; +contract GearStakingTest is Test, IGearStakingEvents { address gearToken; AddressProviderACLMock public addressProvider; @@ -40,7 +41,7 @@ contract GearStakingTest is IGearStakingEvents, DSTest { TokensTestSuite tokenTestSuite; function setUp() public { - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); addressProvider = new AddressProviderACLMock(); tokenTestSuite = new TokensTestSuite(); @@ -53,7 +54,7 @@ contract GearStakingTest is IGearStakingEvents, DSTest { votingContract = new TargetContractMock(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gearStaking.setVotingContractStatus(address(votingContract), VotingContractStatus.ALLOWED); } @@ -63,7 +64,7 @@ contract GearStakingTest is IGearStakingEvents, DSTest { assertEq(gearStaking.getCurrentEpoch(), 0, "First epoch timestamp incorrect"); - evm.warp(block.timestamp + 1); + vm.warp(block.timestamp + 1); assertEq(gearStaking.getCurrentEpoch(), 1, "First epoch timestamp incorrect"); } @@ -81,12 +82,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { tokenTestSuite.mint(gearToken, USER, WAD); tokenTestSuite.approve(gearToken, USER, address(gearStaking)); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit DepositGear(USER, WAD); - evm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 2), ""))); + vm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 2), ""))); - evm.prank(USER); + vm.prank(USER); gearStaking.deposit(WAD, votes); assertEq(gearStaking.balanceOf(USER), WAD); @@ -107,7 +108,7 @@ contract GearStakingTest is IGearStakingEvents, DSTest { tokenTestSuite.mint(gearToken, USER, WAD); tokenTestSuite.approve(gearToken, USER, address(gearStaking)); - evm.prank(USER); + vm.prank(USER); gearStaking.deposit(WAD, votes); votes = new MultiVote[](1); @@ -118,12 +119,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "" }); - evm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.unvote, (USER, uint96(WAD / 2), ""))); + vm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.unvote, (USER, uint96(WAD / 2), ""))); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ScheduleGearWithdrawal(USER, WAD); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(WAD, FRIEND, votes); assertEq(gearStaking.balanceOf(USER), WAD); @@ -144,12 +145,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { tokenTestSuite.mint(gearToken, USER, WAD); tokenTestSuite.approve(gearToken, USER, address(gearStaking)); - evm.prank(USER); + vm.prank(USER); gearStaking.deposit(WAD, votes); TargetContractMock votingContract2 = new TargetContractMock(); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gearStaking.setVotingContractStatus(address(votingContract2), VotingContractStatus.ALLOWED); votes = new MultiVote[](3); @@ -174,15 +175,15 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "foobar" }); - evm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 2), "foo"))); + vm.expectCall(address(votingContract), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 2), "foo"))); - evm.expectCall(address(votingContract2), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 3), "bar"))); + vm.expectCall(address(votingContract2), abi.encodeCall(IVotingContract.vote, (USER, uint96(WAD / 3), "bar"))); - evm.expectCall( + vm.expectCall( address(votingContract2), abi.encodeCall(IVotingContract.unvote, (USER, uint96(WAD / 4), "foobar")) ); - evm.prank(USER); + vm.prank(USER); gearStaking.multivote(votes); assertEq(gearStaking.availableBalance(USER), (WAD - WAD / 2 - WAD / 3) + WAD / 4); @@ -201,10 +202,10 @@ contract GearStakingTest is IGearStakingEvents, DSTest { tokenTestSuite.mint(gearToken, USER, WAD); tokenTestSuite.approve(gearToken, USER, address(gearStaking)); - evm.prank(USER); + vm.prank(USER); gearStaking.deposit(WAD, votes); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gearStaking.setVotingContractStatus(address(votingContract), VotingContractStatus.NOT_ALLOWED); votes = new MultiVote[](1); @@ -215,9 +216,9 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "foo" }); - evm.expectRevert(VotingContractNotAllowedException.selector); + vm.expectRevert(VotingContractNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); gearStaking.multivote(votes); votes = new MultiVote[](1); @@ -228,12 +229,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "foo" }); - evm.expectRevert(VotingContractNotAllowedException.selector); + vm.expectRevert(VotingContractNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); gearStaking.multivote(votes); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gearStaking.setVotingContractStatus(address(votingContract), VotingContractStatus.UNVOTE_ONLY); votes = new MultiVote[](1); @@ -244,9 +245,9 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "foo" }); - evm.expectRevert(VotingContractNotAllowedException.selector); + vm.expectRevert(VotingContractNotAllowedException.selector); - evm.prank(USER); + vm.prank(USER); gearStaking.multivote(votes); votes = new MultiVote[](1); @@ -257,7 +258,7 @@ contract GearStakingTest is IGearStakingEvents, DSTest { extraData: "foo" }); - evm.prank(USER); + vm.prank(USER); gearStaking.multivote(votes); } @@ -268,25 +269,25 @@ contract GearStakingTest is IGearStakingEvents, DSTest { tokenTestSuite.mint(gearToken, USER, WAD); tokenTestSuite.approve(gearToken, USER, address(gearStaking)); - evm.prank(USER); + vm.prank(USER); gearStaking.deposit(WAD, votes); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(1000, FRIEND, votes); - evm.warp(block.timestamp + EPOCH_LENGTH); + vm.warp(block.timestamp + EPOCH_LENGTH); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(2000, FRIEND, votes); - evm.warp(block.timestamp + EPOCH_LENGTH); + vm.warp(block.timestamp + EPOCH_LENGTH); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(3000, FRIEND, votes); - evm.warp(block.timestamp + EPOCH_LENGTH); + vm.warp(block.timestamp + EPOCH_LENGTH); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(4000, FRIEND, votes); (uint256 withdrawableNow, uint256[4] memory withdrawableInEpochs) = gearStaking.getWithdrawableAmounts(USER); @@ -301,12 +302,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { assertEq(withdrawableNow, 0, "Incorrect withdrawable now"); - evm.warp(block.timestamp + 2 * EPOCH_LENGTH); + vm.warp(block.timestamp + 2 * EPOCH_LENGTH); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ClaimGearWithdrawal(USER, FRIEND, 3000); - evm.prank(USER); + vm.prank(USER); gearStaking.claimWithdrawals(FRIEND); (withdrawableNow, withdrawableInEpochs) = gearStaking.getWithdrawableAmounts(USER); @@ -327,12 +328,12 @@ contract GearStakingTest is IGearStakingEvents, DSTest { assertEq(tokenTestSuite.balanceOf(gearToken, FRIEND), 3000); - evm.warp(block.timestamp + EPOCH_LENGTH); + vm.warp(block.timestamp + EPOCH_LENGTH); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit ClaimGearWithdrawal(USER, FRIEND, 3000); - evm.prank(USER); + vm.prank(USER); gearStaking.withdraw(10000, FRIEND, votes); (withdrawableNow, withdrawableInEpochs) = gearStaking.getWithdrawableAmounts(USER); @@ -354,13 +355,13 @@ contract GearStakingTest is IGearStakingEvents, DSTest { /// @dev [GS-06]: setVotingContractStatus respects access control and emits event function test_GS_06_setVotingContractStatus_works_correctly() public { - evm.expectRevert(CallerNotConfiguratorException.selector); + vm.expectRevert(CallerNotConfiguratorException.selector); gearStaking.setVotingContractStatus(DUMB_ADDRESS, VotingContractStatus.ALLOWED); - evm.expectEmit(true, false, false, true); + vm.expectEmit(true, false, false, true); emit SetVotingContractStatus(DUMB_ADDRESS, VotingContractStatus.UNVOTE_ONLY); - evm.prank(CONFIGURATOR); + vm.prank(CONFIGURATOR); gearStaking.setVotingContractStatus(DUMB_ADDRESS, VotingContractStatus.UNVOTE_ONLY); } } diff --git a/contracts/test/unit/support/PolicyManager.t.sol b/contracts/test/unit/support/PolicyManager.t.sol new file mode 100644 index 00000000..86244b90 --- /dev/null +++ b/contracts/test/unit/support/PolicyManager.t.sol @@ -0,0 +1,435 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2022 +pragma solidity ^0.8.10; + +import {PolicyManager, Policy} from "../../../support/risk-controller/PolicyManager.sol"; +import {PolicyManagerInternal} from "../../mocks/support/PolicyManagerInternal.sol"; +import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v2/contracts/libraries/PercentageMath.sol"; + +// TEST +import "../../lib/constants.sol"; + +// MOCKS +import {AddressProviderACLMock} from "../../mocks/core/AddressProviderACLMock.sol"; +import {Test} from "forge-std/Test.sol"; + +// EXCEPTIONS +import "../../../interfaces/IExceptions.sol"; + +contract PolicyManagerTest is Test { + AddressProviderACLMock public addressProvider; + + PolicyManagerInternal public policyManager; + + function setUp() public { + vm.prank(CONFIGURATOR); + addressProvider = new AddressProviderACLMock(); + + policyManager = new PolicyManagerInternal(address(addressProvider)); + } + + /// + /// + /// TESTS + /// + /// + + /// @dev [PM-1]: setPolicy and getPolicy work correctly + function test_PM_01_setPolicy_getPolicy_setGroup_getGroup_work_correctly() public { + Policy memory policy = Policy({ + enabled: false, + flags: 2 + 4 + 16, + exactValue: 15, + minValue: 10, + maxValue: 20, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 1, + maxPctChange: 2, + minChange: 3, + maxChange: 4 + }); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertTrue(policy2.enabled, "Enabled not set by setPolicy"); + + assertEq(policy2.flags, 22, "Flags are incorrect"); + + assertEq(policy2.exactValue, 15, "exactValue is incorrect"); + + assertEq(policy2.minValue, 10, "minValue is incorrect"); + + assertEq(policy2.maxValue, 20, "maxValue is incorrect"); + + assertEq(policy2.referencePoint, 0, "referencePoint is incorrect"); + + assertEq(policy2.referencePointUpdatePeriod, 1 days, "referencePointUpdatePeriod is incorrect"); + + assertEq(policy2.referencePointTimestampLU, 0, "referencePointTimestampLU is incorrect"); + + assertEq(policy2.minPctChange, 1, "minPctChange is incorrect"); + + assertEq(policy2.maxPctChange, 2, "maxPctChange is incorrect"); + + assertEq(policy2.minChange, 3, "minChange is incorrect"); + + assertEq(policy2.maxChange, 4, "maxChange is incorrect"); + + vm.expectRevert(CallerNotConfiguratorException.selector); + vm.prank(USER); + policyManager.setGroup(DUMB_ADDRESS, "GROUP"); + + vm.prank(CONFIGURATOR); + policyManager.setGroup(DUMB_ADDRESS, "GROUP"); + + assertEq(policyManager.getGroup(DUMB_ADDRESS), "GROUP"); + } + + /// @dev [PM-2]: checkPolicy fails on disabled policy + function test_PM_02_checkPolicy_false_on_disabled() public { + Policy memory policy = Policy({ + enabled: false, + flags: 2 + 4 + 16, + exactValue: 15, + minValue: 10, + maxValue: 20, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 1, + maxPctChange: 2, + minChange: 3, + maxChange: 4 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + vm.prank(CONFIGURATOR); + policyManager.disablePolicy(bytes32(uint256(1))); + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), 0, 1)); + } + + /// @dev [PM-3]: checkPolicy exactValue works correctly + function test_PM_03_checkPolicy_exactValue_works_correctly(uint256 newValue) public { + Policy memory policy = Policy({ + enabled: false, + flags: 1, + exactValue: 15, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + assertTrue(newValue == 15 || !policyManager.checkPolicy(bytes32(uint256(1)), 0, newValue)); + } + + /// @dev [PM-4]: checkPolicy minValue works correctly + function test_PM_04_checkPolicy_minValue_works_correctly(uint256 minValue, uint256 newValue) public { + Policy memory policy = Policy({ + enabled: false, + flags: 2, + exactValue: 0, + minValue: minValue, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + assertTrue(newValue >= minValue || !policyManager.checkPolicy(bytes32(uint256(1)), 0, newValue)); + } + + /// @dev [PM-5]: checkPolicy maxValue works correctly + function test_PM_05_checkPolicy_maxValue_works_correctly(uint256 maxValue, uint256 newValue) public { + Policy memory policy = Policy({ + enabled: false, + flags: 4, + exactValue: 0, + minValue: 0, + maxValue: maxValue, + referencePoint: 0, + referencePointUpdatePeriod: 0, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + assertTrue(newValue <= maxValue || !policyManager.checkPolicy(bytes32(uint256(1)), 0, newValue)); + } + + /// @dev [PM-6]: checkPolicy correctly sets reference point and timestampLU + function test_PM_06_checkPolicy_correctly_sets_reference_point() public { + Policy memory policy = Policy({ + enabled: false, + flags: 8, + exactValue: 0, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + policyManager.checkPolicy(bytes32(uint256(1)), 20, 20); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertEq(policy2.referencePoint, 20, "Incorrect reference point"); + + assertEq(policy2.referencePointTimestampLU, block.timestamp, "Incorrect timestamp LU"); + } + + /// @dev [PM-7]: checkPolicy minChange works correctly + function test_PM_07_checkPolicy_minChange_works_correctly( + uint256 oldValue, + uint256 newValue1, + uint256 newValue2, + uint256 newValue3, + uint256 minChange + ) public { + Policy memory policy = Policy({ + enabled: false, + flags: 8, + exactValue: 0, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: minChange, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + uint256 diff = newValue1 > oldValue ? newValue1 - oldValue : oldValue - newValue1; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), oldValue, newValue1) || diff >= minChange); + + vm.warp(block.timestamp + 1); + + diff = newValue2 > oldValue ? newValue2 - oldValue : oldValue - newValue2; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue1, newValue2) || diff >= minChange); + + vm.warp(block.timestamp + 1 days); + + diff = newValue3 > newValue2 ? newValue3 - newValue2 : newValue2 - newValue3; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue2, newValue3) || diff >= minChange); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertEq(policy2.referencePoint, newValue2, "Incorrect reference point"); + + assertEq(policy2.referencePointTimestampLU, block.timestamp, "Incorrect timestamp LU"); + } + + /// @dev [PM-8]: checkPolicy maxChange works correctly + function test_PM_08_checkPolicy_maxChange_works_correctly( + uint256 oldValue, + uint256 newValue1, + uint256 newValue2, + uint256 newValue3, + uint256 maxChange + ) public { + Policy memory policy = Policy({ + enabled: false, + flags: 16, + exactValue: 0, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: 0, + minChange: 0, + maxChange: maxChange + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + uint256 diff = newValue1 > oldValue ? newValue1 - oldValue : oldValue - newValue1; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), oldValue, newValue1) || diff <= maxChange); + + vm.warp(block.timestamp + 1); + + diff = newValue2 > oldValue ? newValue2 - oldValue : oldValue - newValue2; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue1, newValue2) || diff <= maxChange); + + vm.warp(block.timestamp + 1 days); + + diff = newValue3 > newValue2 ? newValue3 - newValue2 : newValue2 - newValue3; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue2, newValue3) || diff <= maxChange); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertEq(policy2.referencePoint, newValue2, "Incorrect reference point"); + + assertEq(policy2.referencePointTimestampLU, block.timestamp, "Incorrect timestamp LU"); + } + + /// @dev [PM-9]: checkPolicy minPctChange works correctly + function test_PM_09_checkPolicy_minPctChange_works_correctly( + uint256 oldValue, + uint256 newValue1, + uint256 newValue2, + uint256 newValue3, + uint16 minPctChange + ) public { + vm.assume(oldValue > 0); + vm.assume(newValue2 > 0); + + vm.assume(oldValue < type(uint128).max); + vm.assume(newValue1 < type(uint128).max); + vm.assume(newValue2 < type(uint128).max); + vm.assume(newValue3 < type(uint128).max); + + Policy memory policy = Policy({ + enabled: false, + flags: 32, + exactValue: 0, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: minPctChange, + maxPctChange: 0, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + uint256 pctDiff = + (newValue1 > oldValue ? newValue1 - oldValue : oldValue - newValue1) * PERCENTAGE_FACTOR / oldValue; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), oldValue, newValue1) || pctDiff >= minPctChange); + vm.warp(block.timestamp + 1); + + pctDiff = (newValue2 > oldValue ? newValue2 - oldValue : oldValue - newValue2) * PERCENTAGE_FACTOR / oldValue; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue1, newValue2) || pctDiff >= minPctChange); + + vm.warp(block.timestamp + 1 days); + + pctDiff = + (newValue3 > newValue2 ? newValue3 - newValue2 : newValue2 - newValue3) * PERCENTAGE_FACTOR / newValue2; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue2, newValue3) || pctDiff >= minPctChange); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertEq(policy2.referencePoint, newValue2, "Incorrect reference point"); + + assertEq(policy2.referencePointTimestampLU, block.timestamp, "Incorrect timestamp LU"); + } + + /// @dev [PM-10]: checkPolicy maxPctChange works correctly + function test_PM_10_checkPolicy_maxPctChange_works_correctly( + uint256 oldValue, + uint256 newValue1, + uint256 newValue2, + uint256 newValue3, + uint16 maxPctChange + ) public { + vm.assume(oldValue > 0); + vm.assume(newValue2 > 0); + + vm.assume(oldValue < type(uint128).max); + vm.assume(newValue1 < type(uint128).max); + vm.assume(newValue2 < type(uint128).max); + vm.assume(newValue3 < type(uint128).max); + + Policy memory policy = Policy({ + enabled: false, + flags: 64, + exactValue: 0, + minValue: 0, + maxValue: 0, + referencePoint: 0, + referencePointUpdatePeriod: 1 days, + referencePointTimestampLU: 0, + minPctChange: 0, + maxPctChange: maxPctChange, + minChange: 0, + maxChange: 0 + }); + + vm.prank(CONFIGURATOR); + policyManager.setPolicy(bytes32(uint256(1)), policy); + + uint256 pctDiff = + (newValue1 > oldValue ? newValue1 - oldValue : oldValue - newValue1) * PERCENTAGE_FACTOR / oldValue; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), oldValue, newValue1) || pctDiff <= maxPctChange); + vm.warp(block.timestamp + 1); + + pctDiff = (newValue2 > oldValue ? newValue2 - oldValue : oldValue - newValue2) * PERCENTAGE_FACTOR / oldValue; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue1, newValue2) || pctDiff <= maxPctChange); + + vm.warp(block.timestamp + 1 days); + + pctDiff = + (newValue3 > newValue2 ? newValue3 - newValue2 : newValue2 - newValue3) * PERCENTAGE_FACTOR / newValue2; + + assertTrue(!policyManager.checkPolicy(bytes32(uint256(1)), newValue2, newValue3) || pctDiff <= maxPctChange); + + Policy memory policy2 = policyManager.getPolicy(bytes32(uint256(1))); + + assertEq(policy2.referencePoint, newValue2, "Incorrect reference point"); + + assertEq(policy2.referencePointTimestampLU, block.timestamp, "Incorrect timestamp LU"); + } +} diff --git a/contracts/test/unit/support/WithdrawManager.t.sol b/contracts/test/unit/support/WithdrawManager.t.sol deleted file mode 100644 index 53c428db..00000000 --- a/contracts/test/unit/support/WithdrawManager.t.sol +++ /dev/null @@ -1,143 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {WithdrawManager} from "../../../support/WithdrawManager.sol"; -import {IWithdrawManagerEvents} from "../../../interfaces/IWithdrawManager.sol"; - -// TEST -import "../../lib/constants.sol"; - -// MOCKS -import {AddressProviderACLMock} from "../../mocks/core/AddressProviderACLMock.sol"; -import {ERC20BlacklistableMock} from "../../mocks/token/ERC20Blacklistable.sol"; - -// SUITES -import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {Tokens} from "../../config/Tokens.sol"; - -// EXCEPTIONS - -import "../../../interfaces/IExceptions.sol"; - -/// @title LPPriceFeedTest -/// @notice Designed for unit test purposes only -contract WithdrawManagerTest is IWithdrawManagerEvents, DSTest { - CheatCodes evm = CheatCodes(HEVM_ADDRESS); - - AddressProviderACLMock public addressProvider; - - WithdrawManager withdrawManager; - - TokensTestSuite tokenTestSuite; - - address usdc; - - bool public isBlacklistableUnderlying = true; - - function setUp() public { - evm.prank(CONFIGURATOR); - addressProvider = new AddressProviderACLMock(); - - tokenTestSuite = new TokensTestSuite(); - - usdc = tokenTestSuite.addressOf(Tokens.USDC); - - withdrawManager = new WithdrawManager( - address(addressProvider) - - ); - } - - /// - /// - /// TESTS - /// - /// - - /// @dev [BH-1]: constructor sets correct values - function test_BH_01_constructor_sets_correct_values() public { - // assertEq(withdrawManager.usdc(), usdc, "USDC address incorrect"); - - // assertEq(withdrawManager.usdt(), DUMB_ADDRESS, "USDT address incorrect"); - } - - // /// @dev [BH-2]: isBlacklisted works correctly for all tokens - // function test_BH_02_isBlacklisted_works_correctly() public { - // ERC20BlacklistableMock(usdc).setBlacklisted(USER, true); - // ERC20BlacklistableMock(usdc).setBlackListed(USER, true); - - // evm.expectCall(usdc, abi.encodeWithSignature("isBlacklisted(address)", USER)); - - // bool status = withdrawManager.isBlacklisted(usdc, USER); - - // assertTrue(status, "Blacklisted status incorrect"); - - // withdrawManager = new WithdrawManager( - // address(addressProvider) - // ); - - // evm.expectCall(usdc, abi.encodeWithSignature("isBlackListed(address)", USER)); - - // status = withdrawManager.isBlacklisted(usdc, USER); - - // assertTrue(status, "Blacklisted status incorrect"); - // } - - // /// @dev [BH-3]: addCreditFacade / removeCreditFacade work correctly and revert on non-configurator - // function test_BH_03_add_removeCreditFacade_work_correctly() public { - // evm.prank(CONFIGURATOR); - // withdrawManager.addCreditFacade(address(this)); - - // assertTrue(withdrawManager.isSupportedCreditFacade(address(this)), "Incorrect credit facade status"); - - // evm.prank(CONFIGURATOR); - // withdrawManager.removeCreditFacade(address(this)); - - // assertTrue(!withdrawManager.isSupportedCreditFacade(address(this)), "Incorrect credit facade status"); - - // evm.expectRevert(CallerNotConfiguratorException.selector); - // evm.prank(DUMB_ADDRESS); - // withdrawManager.addCreditFacade(address(this)); - - // isBlacklistableUnderlying = false; - - // evm.expectRevert(CreditFacadeNonBlacklistable.selector); - // evm.prank(CONFIGURATOR); - // withdrawManager.addCreditFacade(address(this)); - // } - - // /// @dev [BH-4]: addWithdrawal works correctly and reverts on non-Credit Facade - // function test_BH_04_addWithdrawal_works_correctly() public { - // evm.prank(CONFIGURATOR); - // withdrawManager.addCreditFacade(address(this)); - - // withdrawManager.addWithdrawal(usdc, USER, 10000); - - // assertEq(withdrawManager.claimable(usdc, USER), 10000); - - // evm.expectRevert(CallerNotCreditFacadeException.selector); - // evm.prank(DUMB_ADDRESS); - // withdrawManager.addWithdrawal(usdc, USER, 10000); - // } - - // /// @dev [BH-5]: claim works correctly - // function test_BH_05_claim_works_correctly() public { - // evm.prank(CONFIGURATOR); - // withdrawManager.addCreditFacade(address(this)); - - // withdrawManager.addWithdrawal(usdc, USER, 10000); - - // tokenTestSuite.mint(Tokens.USDC, address(withdrawManager), 10000); - - // evm.prank(USER); - // withdrawManager.claim(usdc, FRIEND); - - // assertEq(tokenTestSuite.balanceOf(Tokens.USDC, FRIEND), 10000); - - // evm.expectRevert(NothingToClaimException.selector); - // evm.prank(USER); - // withdrawManager.claim(usdc, FRIEND); - // } -} diff --git a/contracts/test/unit/support/WithdrawalManager.t.sol b/contracts/test/unit/support/WithdrawalManager.t.sol new file mode 100644 index 00000000..c20b6bce --- /dev/null +++ b/contracts/test/unit/support/WithdrawalManager.t.sol @@ -0,0 +1,743 @@ +// SPDX-License-Identifier: UNLICENSED +// Gearbox Protocol. Generalized leverage for DeFi protocols +// (c) Gearbox Holdings, 2023 +pragma solidity ^0.8.17; + +import {ERC20Mock} from "@gearbox-protocol/core-v2/contracts/test/mocks/token/ERC20Mock.sol"; + +import {ClaimAction, IWithdrawalManagerEvents, ScheduledWithdrawal} from "../../../interfaces/IWithdrawalManager.sol"; +import { + AmountCantBeZeroException, + CallerNotConfiguratorException, + CallerNotCreditManagerException, + NoFreeWithdrawalSlotsException, + NothingToClaimException, + ZeroAddressException +} from "../../../interfaces/IExceptions.sol"; +import {WithdrawalManager} from "../../../support/WithdrawalManager.sol"; + +import {USER} from "../../lib/constants.sol"; +import {TestHelper} from "../../lib/helper.sol"; +import {AddressProviderACLMock} from "../../mocks/core/AddressProviderACLMock.sol"; +import {ERC20BlacklistableMock} from "../../mocks/token/ERC20Blacklistable.sol"; + +contract WithdrawalManagerHarness is WithdrawalManager { + constructor(address _addressProvider, uint40 _delay) WithdrawalManager(_addressProvider, _delay) {} + + function setWithdrawalSlot(address creditAccount, uint8 slot, ScheduledWithdrawal memory w) external { + _scheduled[creditAccount][slot] = w; + } + + function processScheduledWithdrawal(address creditAccount, uint8 slot, ClaimAction action, address to) + external + returns (bool scheduled, bool claimed, uint256 tokensToEnable) + { + return _processScheduledWithdrawal(_scheduled[creditAccount][slot], action, creditAccount, to); + } + + function claimScheduledWithdrawal(address creditAccount, uint8 slot, address to) external { + _claimScheduledWithdrawal(_scheduled[creditAccount][slot], creditAccount, to); + } + + function cancelScheduledWithdrawal(address creditAccount, uint8 slot) external returns (uint256 tokensToEnable) { + return _cancelScheduledWithdrawal(_scheduled[creditAccount][slot], creditAccount); + } +} + +enum ScheduleTask { + IMMATURE, + MATURE, + NON_SCHEDULED +} + +/// @title Withdrawal manager test +/// @notice [WM]: Unit tests for withdrawal manager +contract WithdrawalManagerTest is TestHelper, IWithdrawalManagerEvents { + WithdrawalManagerHarness manager; + AddressProviderACLMock acl; + ERC20BlacklistableMock token0; + ERC20Mock token1; + + address configurator; + address creditAccount; + address creditManager; + + uint40 constant DELAY = 1 days; + uint256 constant AMOUNT = 10 ether; + uint8 constant TOKEN0_INDEX = 0; + uint256 constant TOKEN0_MASK = 1; + + uint8 constant TOKEN1_INDEX = 1; + uint8 constant TOKEN1_MASK = 2; + + function setUp() public { + configurator = makeAddr("CONFIGURATOR"); + creditAccount = makeAddr("CREDIT_ACCOUNT"); + creditManager = makeAddr("CREDIT_MANAGER"); + + vm.startPrank(configurator); + acl = new AddressProviderACLMock(); + manager = new WithdrawalManagerHarness(address(acl), DELAY); + manager.setCreditManagerStatus(creditManager, true); + vm.stopPrank(); + + token0 = new ERC20BlacklistableMock("Test token 1", "TEST1", 18); + token1 = new ERC20Mock("Test token 2", "TEST2", 18); + } + + /// ------------- /// + /// GENERAL TESTS /// + /// ------------- /// + + /// @notice [WM-1]: Constructor sets correct values + function test_WM_01_constructor_sets_correct_values() public { + assertEq(manager.delay(), DELAY, "Incorrect delay"); + } + + /// @notice [WM-2]: External functions have correct access + function test_WM_02_external_functions_have_correct_access() public { + vm.startPrank(USER); + + vm.expectRevert(CallerNotCreditManagerException.selector); + manager.addImmediateWithdrawal(address(0), address(0), 0); + + vm.expectRevert(CallerNotCreditManagerException.selector); + manager.addScheduledWithdrawal(address(0), address(0), 0, 0); + + vm.expectRevert(CallerNotCreditManagerException.selector); + manager.claimScheduledWithdrawals(address(0), address(0), ClaimAction(0)); + + vm.expectRevert(CallerNotConfiguratorException.selector); + manager.setWithdrawalDelay(0); + + vm.expectRevert(CallerNotConfiguratorException.selector); + manager.setCreditManagerStatus(address(0), false); + + vm.stopPrank(); + } + + /// --------------------------- /// + /// IMMEDIATE WITHDRAWALS TESTS /// + /// --------------------------- /// + + /// @notice [WM-3]: `addImmediateWithdrawal` works correctly + function test_WM_03_addImmediateWithdrawal_works_correctly() public { + vm.startPrank(creditManager); + + // add first withdrawal + deal(address(token0), address(manager), AMOUNT); + + vm.expectEmit(true, true, false, true); + emit AddImmediateWithdrawal(USER, address(token0), AMOUNT); + + manager.addImmediateWithdrawal(USER, address(token0), AMOUNT); + + assertEq( + manager.immediateWithdrawals(USER, address(token0)), + AMOUNT, + "Incorrect claimable balance after adding first withdrawal" + ); + + // add second withdrawal in the same token + deal(address(token0), address(manager), AMOUNT); + + vm.expectEmit(true, true, false, true); + emit AddImmediateWithdrawal(USER, address(token0), AMOUNT); + + manager.addImmediateWithdrawal(USER, address(token0), AMOUNT); + + assertEq( + manager.immediateWithdrawals(USER, address(token0)), + 2 * AMOUNT, + "Incorrect claimable balance after adding second withdrawal" + ); + + vm.stopPrank(); + } + + /// @notice [WM-4A]: `claimImmediateWithdrawal` reverts on zero recipient + function test_WM_04A_claimImmediateWithdrawal_reverts_on_zero_recipient() public { + vm.expectRevert(ZeroAddressException.selector); + vm.prank(USER); + manager.claimImmediateWithdrawal(address(token0), address(0)); + } + + /// @notice [WM-4B]: `claimImmediateWithdrawal` reverts on nothing to claim + function test_WM_04B_claimImmediateWithdrawal_reverts_on_nothing_to_claim() public { + vm.expectRevert(NothingToClaimException.selector); + vm.prank(USER); + manager.claimImmediateWithdrawal(address(token0), address(USER)); + } + + /// @notice [WM-4C]: `claimImmediateWithdrawal` works correctly + function test_WM_04C_claimImmediateWithdrawal_works_correctly() public { + deal(address(token0), address(manager), AMOUNT); + + vm.prank(creditManager); + manager.addImmediateWithdrawal(USER, address(token0), 10 ether); + + vm.expectEmit(true, true, false, true); + emit ClaimImmediateWithdrawal(USER, address(token0), USER, AMOUNT - 1); + + vm.prank(USER); + manager.claimImmediateWithdrawal(address(token0), USER); + + assertEq(manager.immediateWithdrawals(USER, address(token0)), 1, "Incorrect claimable balance"); + assertEq(token0.balanceOf(USER), AMOUNT - 1, "Incorrect claimed amount"); + } + + /// ----------------------------------------------- /// + /// SCHEDULED WITHDRAWALS: EXTERNAL FUNCTIONS TESTS /// + /// ----------------------------------------------- /// + + /// @notice [WM-5A]: `addScheduledWithdrawal` reverts on zero amount + function test_WM_05A_addScheduledWithdrawal_reverts_on_zero_amount() public { + vm.expectRevert(AmountCantBeZeroException.selector); + vm.prank(creditManager); + manager.addScheduledWithdrawal(creditAccount, address(token0), 1, TOKEN0_INDEX); + } + + struct AddScheduledWithdrawalCase { + string name; + // scenario + ScheduleTask task0; + ScheduleTask task1; + // expected result + bool shouldRevert; + uint8 expectedSlot; + } + + /// @notice [WM-5B]: `addScheduledWithdrawal` works correctly + function test_WM_05B_addScheduledWithdrawal_works_correctly() public { + AddScheduledWithdrawalCase[4] memory cases = [ + AddScheduledWithdrawalCase({ + name: "both slots non-scheduled", + task0: ScheduleTask.NON_SCHEDULED, + task1: ScheduleTask.NON_SCHEDULED, + shouldRevert: false, + expectedSlot: 0 + }), + AddScheduledWithdrawalCase({ + name: "slot 0 non-scheduled, slot 1 scheduled", + task0: ScheduleTask.NON_SCHEDULED, + task1: ScheduleTask.MATURE, + shouldRevert: false, + expectedSlot: 0 + }), + AddScheduledWithdrawalCase({ + name: "slot 0 scheduled, slot 1 non-scheduled", + task0: ScheduleTask.MATURE, + task1: ScheduleTask.NON_SCHEDULED, + shouldRevert: false, + expectedSlot: 1 + }), + AddScheduledWithdrawalCase({ + name: "both slots scheduled", + task0: ScheduleTask.MATURE, + task1: ScheduleTask.MATURE, + shouldRevert: true, + expectedSlot: 0 + }) + ]; + + uint256 snapshot = vm.snapshot(); + for (uint256 i; i < cases.length; ++i) { + _addScheduledWithdrawal({slot: 0, task: cases[i].task0}); + _addScheduledWithdrawal({slot: 1, task: cases[i].task1}); + + uint40 expectedMaturity = uint40(block.timestamp) + DELAY; + + if (cases[i].shouldRevert) { + vm.expectRevert(NoFreeWithdrawalSlotsException.selector); + } else { + vm.expectEmit(true, true, false, true); + emit AddScheduledWithdrawal(creditAccount, address(token0), AMOUNT, expectedMaturity); + } + + vm.prank(creditManager); + manager.addScheduledWithdrawal(creditAccount, address(token0), AMOUNT, TOKEN0_INDEX); + + if (!cases[i].shouldRevert) { + ScheduledWithdrawal memory w = manager.scheduledWithdrawals(creditAccount)[cases[i].expectedSlot]; + assertEq(w.tokenIndex, TOKEN0_INDEX, _testCaseErr(cases[i].name, "incorrect token index")); + assertEq(w.token, address(token0), _testCaseErr(cases[i].name, "incorrect token")); + assertEq(w.maturity, expectedMaturity, _testCaseErr(cases[i].name, "incorrect maturity")); + assertEq(w.amount, AMOUNT, _testCaseErr(cases[i].name, "incorrect amount")); + } + + vm.revertTo(snapshot); + } + } + + /// @notice [WM-6A]: `claimScheduledWithdrawals` reverts on nothing to claim when action is `CLAIM` + function test_WM_06A_claimScheduledWithdrawals_reverts_on_nothing_to_claim() public { + _addScheduledWithdrawal({slot: 0, task: ScheduleTask.IMMATURE}); + _addScheduledWithdrawal({slot: 1, task: ScheduleTask.NON_SCHEDULED}); + vm.expectRevert(NothingToClaimException.selector); + vm.prank(creditManager); + manager.claimScheduledWithdrawals(creditAccount, USER, ClaimAction.CLAIM); + } + + struct ClaimScheduledWithdrawalsCase { + string name; + // scenario + ClaimAction action; + ScheduleTask task0; + ScheduleTask task1; + // expected result + bool shouldClaim0; + bool shouldClaim1; + bool shouldCancel0; + bool shouldCancel1; + bool expectedHasScheduled; + uint256 expectedTokensToEnable; + } + + /// @notice [WM-6B]: `claimScheduledWithdrawals` works correctly + function test_WM_06B_claimScheduledWithdrawals_works_correctly() public { + ClaimScheduledWithdrawalsCase[5] memory cases = [ + ClaimScheduledWithdrawalsCase({ + name: "action == CLAIM, slot 0 mature, slot 1 immature", + action: ClaimAction.CLAIM, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.IMMATURE, + shouldClaim0: true, + shouldClaim1: false, + shouldCancel0: false, + shouldCancel1: false, + expectedHasScheduled: true, + expectedTokensToEnable: 0 + }), + ClaimScheduledWithdrawalsCase({ + name: "action == CLAIM, slot 0 mature, slot 1 non-scheduled", + action: ClaimAction.CLAIM, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.NON_SCHEDULED, + shouldClaim0: true, + shouldClaim1: false, + shouldCancel0: false, + shouldCancel1: false, + expectedHasScheduled: false, + expectedTokensToEnable: 0 + }), + ClaimScheduledWithdrawalsCase({ + name: "action == CANCEL, slot 0 mature, slot 1 immature", + action: ClaimAction.CANCEL, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.IMMATURE, + shouldClaim0: true, + shouldClaim1: false, + shouldCancel0: false, + shouldCancel1: true, + expectedHasScheduled: false, + expectedTokensToEnable: TOKEN1_MASK + }), + ClaimScheduledWithdrawalsCase({ + name: "action == FORCE_CLAIM, slot 0 mature, slot 1 immature", + action: ClaimAction.FORCE_CLAIM, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.IMMATURE, + shouldClaim0: true, + shouldClaim1: true, + shouldCancel0: false, + shouldCancel1: false, + expectedHasScheduled: false, + expectedTokensToEnable: 0 + }), + ClaimScheduledWithdrawalsCase({ + name: "action == FORCE_CANCEL, slot 0 mature, slot 1 immature", + action: ClaimAction.FORCE_CANCEL, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.IMMATURE, + shouldClaim0: false, + shouldClaim1: false, + shouldCancel0: true, + shouldCancel1: true, + expectedHasScheduled: false, + expectedTokensToEnable: TOKEN0_MASK | TOKEN1_MASK + }) + ]; + + uint256 snapshot = vm.snapshot(); + for (uint256 i; i < cases.length; ++i) { + _addScheduledWithdrawal({slot: 0, task: cases[i].task0}); + _addScheduledWithdrawal({slot: 1, task: cases[i].task1}); + + if (cases[i].shouldClaim0) { + vm.expectEmit(true, true, false, false); + emit ClaimScheduledWithdrawal(creditAccount, address(token0), address(0), 0); + } + if (cases[i].shouldClaim1) { + vm.expectEmit(true, true, false, false); + emit ClaimScheduledWithdrawal(creditAccount, address(token1), address(0), 0); + } + if (cases[i].shouldCancel0) { + vm.expectEmit(true, true, false, false); + emit CancelScheduledWithdrawal(creditAccount, address(token0), 0); + } + if (cases[i].shouldCancel1) { + vm.expectEmit(true, true, false, false); + emit CancelScheduledWithdrawal(creditAccount, address(token1), 0); + } + + vm.prank(creditManager); + (bool hasScheduled, uint256 tokensToEnable) = + manager.claimScheduledWithdrawals(creditAccount, USER, cases[i].action); + + assertEq(hasScheduled, cases[i].expectedHasScheduled, _testCaseErr(cases[i].name, "incorrect hasScheduled")); + assertEq( + tokensToEnable, cases[i].expectedTokensToEnable, _testCaseErr(cases[i].name, "incorrect tokensToEnable") + ); + + vm.revertTo(snapshot); + } + } + + struct CancellableScheduledWithdrawalsCase { + string name; + // scenario + bool isForceCancel; + ScheduleTask task0; + ScheduleTask task1; + // expected results + address expectedToken0; + uint256 expectedAmount0; + address expectedToken1; + uint256 expectedAmount1; + } + + /// @notice [WM-7]: `cancellableScheduledWithdrawals` works correctly + function test_WM_07_cancellableScheduledWithdrawals_works_correctly() public { + CancellableScheduledWithdrawalsCase[4] memory cases = [ + CancellableScheduledWithdrawalsCase({ + name: "cancel, both slots mature", + isForceCancel: false, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.MATURE, + expectedToken0: address(0), + expectedAmount0: 0, + expectedToken1: address(0), + expectedAmount1: 0 + }), + CancellableScheduledWithdrawalsCase({ + name: "cancel, slot 0 immature, slot 1 mature", + isForceCancel: false, + task0: ScheduleTask.IMMATURE, + task1: ScheduleTask.MATURE, + expectedToken0: address(token0), + expectedAmount0: AMOUNT - 1, + expectedToken1: address(0), + expectedAmount1: 0 + }), + CancellableScheduledWithdrawalsCase({ + name: "force cancel, slot 0 immature, slot 1 mature", + isForceCancel: true, + task0: ScheduleTask.IMMATURE, + task1: ScheduleTask.MATURE, + expectedToken0: address(token0), + expectedAmount0: AMOUNT - 1, + expectedToken1: address(token1), + expectedAmount1: AMOUNT - 1 + }), + CancellableScheduledWithdrawalsCase({ + name: "force cancel, both slots mature", + isForceCancel: true, + task0: ScheduleTask.MATURE, + task1: ScheduleTask.MATURE, + expectedToken0: address(token0), + expectedAmount0: AMOUNT - 1, + expectedToken1: address(token1), + expectedAmount1: AMOUNT - 1 + }) + ]; + + uint256 snapshot = vm.snapshot(); + for (uint256 i; i < cases.length; ++i) { + _addScheduledWithdrawal({slot: 0, task: cases[i].task0}); + _addScheduledWithdrawal({slot: 1, task: cases[i].task1}); + + (address token0_, uint256 amount0, address token1_, uint256 amount1) = + manager.cancellableScheduledWithdrawals(creditAccount, cases[i].isForceCancel); + + assertEq(token0_, cases[i].expectedToken0, _testCaseErr(cases[i].name, "incorrect token0")); + assertEq(amount0, cases[i].expectedAmount0, _testCaseErr(cases[i].name, "incorrect amount0")); + assertEq(token1_, cases[i].expectedToken1, _testCaseErr(cases[i].name, "incorrect token0")); + assertEq(amount1, cases[i].expectedAmount1, _testCaseErr(cases[i].name, "incorrect amount1")); + + vm.revertTo(snapshot); + } + } + + /// ----------------------------------------------- /// + /// SCHEDULED WITHDRAWALS: INTERNAL FUNCTIONS TESTS /// + /// ----------------------------------------------- /// + + struct ProcessScheduledWithdrawalCase { + string name; + // scenario + ClaimAction action; + ScheduleTask task; + // expected result + bool shouldClaim; + bool shouldCancel; + bool expectedScheduled; + bool expectedClaimed; + uint256 expectedTokensToEnable; + } + + /// @notice [WM-8]: `_processScheduledWithdrawal` works correctly + function test_WM_08_processScheduledWithdrawal_works_correctly() public { + ProcessScheduledWithdrawalCase[12] memory cases = [ + ProcessScheduledWithdrawalCase({ + name: "immature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.IMMATURE, + shouldClaim: false, + shouldCancel: false, + expectedScheduled: true, + expectedClaimed: false, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "immature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.IMMATURE, + shouldClaim: false, + shouldCancel: true, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: TOKEN0_MASK + }), + ProcessScheduledWithdrawalCase({ + name: "immature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.IMMATURE, + shouldClaim: true, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: true, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "immature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.IMMATURE, + shouldClaim: false, + shouldCancel: true, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: TOKEN0_MASK + }), + ProcessScheduledWithdrawalCase({ + name: "mature withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.MATURE, + shouldClaim: true, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: true, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "mature withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.MATURE, + shouldClaim: true, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: true, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "mature withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.MATURE, + shouldClaim: true, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: true, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "mature withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.MATURE, + shouldClaim: false, + shouldCancel: true, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: TOKEN0_MASK + }), + // + ProcessScheduledWithdrawalCase({ + name: "non-scheduled withdrawal, action == CLAIM", + action: ClaimAction.CLAIM, + task: ScheduleTask.NON_SCHEDULED, + shouldClaim: false, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "non-scheduled withdrawal, action == CANCEL", + action: ClaimAction.CANCEL, + task: ScheduleTask.NON_SCHEDULED, + shouldClaim: false, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "non-scheduled withdrawal, action == FORCE_CLAIM", + action: ClaimAction.FORCE_CLAIM, + task: ScheduleTask.NON_SCHEDULED, + shouldClaim: false, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: 0 + }), + ProcessScheduledWithdrawalCase({ + name: "non-scheduled withdrawal, action == FORCE_CANCEL", + action: ClaimAction.FORCE_CANCEL, + task: ScheduleTask.NON_SCHEDULED, + shouldClaim: false, + shouldCancel: false, + expectedScheduled: false, + expectedClaimed: false, + expectedTokensToEnable: 0 + }) + ]; + + uint256 snapshot = vm.snapshot(); + for (uint256 i; i < cases.length; ++i) { + _addScheduledWithdrawal({slot: 0, task: cases[i].task}); + + if (cases[i].shouldClaim) { + vm.expectEmit(true, true, false, false); + emit ClaimScheduledWithdrawal(creditAccount, address(token0), address(0), 0); + } + if (cases[i].shouldCancel) { + vm.expectEmit(true, true, false, false); + emit CancelScheduledWithdrawal(creditAccount, address(token0), 0); + } + + (bool scheduled, bool claimed, uint256 tokensToEnable) = manager.processScheduledWithdrawal({ + creditAccount: creditAccount, + slot: 0, + action: cases[i].action, + to: USER + }); + + assertEq(scheduled, cases[i].expectedScheduled, _testCaseErr(cases[i].name, "incorrect scheduled")); + assertEq(claimed, cases[i].expectedClaimed, _testCaseErr(cases[i].name, "incorrect claimed")); + assertEq( + tokensToEnable, cases[i].expectedTokensToEnable, _testCaseErr(cases[i].name, "incorrect tokensToEnable") + ); + + vm.revertTo(snapshot); + } + } + + /// @notice [WM-9A]: `_claimScheduledWithdrawal` works correctly + function test_WM_09A_claimScheduledWithdrawal_works_correctly() public { + _addScheduledWithdrawal({slot: 0, task: ScheduleTask.MATURE}); + + vm.expectEmit(true, true, false, true); + emit ClaimScheduledWithdrawal(creditAccount, address(token0), USER, AMOUNT - 1); + + manager.claimScheduledWithdrawal({creditAccount: creditAccount, slot: 0, to: USER}); + + assertEq(token0.balanceOf(address(manager)), 1, "Incorrect manager balance"); + assertEq(token0.balanceOf(USER), AMOUNT - 1, "Incorrect recipient balance"); + + ScheduledWithdrawal memory w = manager.scheduledWithdrawals(creditAccount)[0]; + assertEq(w.maturity, 1, "Withdrawal not cleared"); + } + + /// @notice [WM-9B]: `_claimScheduledWithdrawal` works correctly with blacklisted recipient + function test_WM_09B_claimScheduledWithdrawal_works_correctly_with_blacklisted_recipient() public { + _addScheduledWithdrawal({slot: 0, task: ScheduleTask.MATURE}); + token0.setBlacklisted(USER, true); + + vm.expectEmit(true, true, false, true); + emit ClaimScheduledWithdrawal(creditAccount, address(token0), USER, AMOUNT - 1); + + vm.expectEmit(true, true, false, true); + emit AddImmediateWithdrawal(USER, address(token0), AMOUNT - 1); + + manager.claimScheduledWithdrawal({creditAccount: creditAccount, slot: 0, to: USER}); + + assertEq(token0.balanceOf(address(manager)), AMOUNT, "Incorrect manager balance"); + + ScheduledWithdrawal memory w = manager.scheduledWithdrawals(creditAccount)[0]; + assertEq(w.maturity, 1, "Withdrawal not cleared"); + } + + /// @notice [WM-10]: `_cancelScheduledWithdrawal` works correctly + function test_WM_10_cancelScheduledWithdrawal_works_correctly() public { + _addScheduledWithdrawal({slot: 0, task: ScheduleTask.MATURE}); + + vm.expectEmit(true, true, false, true); + emit CancelScheduledWithdrawal(creditAccount, address(token0), AMOUNT - 1); + + uint256 tokensToEnable = manager.cancelScheduledWithdrawal({creditAccount: creditAccount, slot: 0}); + + assertEq(token0.balanceOf(address(manager)), 1, "Incorrect manager balance"); + assertEq(token0.balanceOf(creditAccount), AMOUNT - 1, "Incorrect credit account balance"); + assertEq(tokensToEnable, TOKEN0_MASK, "Incorrect tokensToEnable"); + } + + /// ------------------- /// + /// CONFIGURATION TESTS /// + /// ------------------- /// + + /// @notice [WM-12]: `setWithdrawalDelay` works correctly + function test_WM_12_setWithdrawalDelay_works_correctly() public { + uint40 newDelay = 2 days; + + vm.expectEmit(false, false, false, true); + emit SetWithdrawalDelay(newDelay); + + vm.prank(configurator); + manager.setWithdrawalDelay(newDelay); + + assertEq(manager.delay(), newDelay, "Incorrect delay"); + } + + /// @notice [WM-11]: `setCreditManagerStatus` works correctly + function test_WM_11_setCreditManagerStatus_works_correctly() public { + address newCreditManager = makeAddr("NEW_CREDIT_MANAGER"); + + vm.expectEmit(true, false, false, true); + emit SetCreditManagerStatus(newCreditManager, true); + + vm.prank(configurator); + manager.setCreditManagerStatus(newCreditManager, true); + + assertTrue(manager.creditManagerStatus(newCreditManager), "Incorrect credit manager status"); + } + + /// ------- /// + /// HELPERS /// + /// ------- /// + + function _addScheduledWithdrawal(uint8 slot, ScheduleTask task) internal { + ScheduledWithdrawal memory withdrawal; + if (task == ScheduleTask.NON_SCHEDULED) { + withdrawal.amount = 1; + withdrawal.maturity = 1; + } else { + address token = slot == 0 ? address(token0) : address(token1); + deal(token, address(manager), AMOUNT); + withdrawal.amount = AMOUNT; + withdrawal.token = token; + withdrawal.tokenIndex = slot == 0 ? TOKEN0_INDEX : TOKEN1_INDEX; + withdrawal.maturity = + task == ScheduleTask.MATURE ? uint40(block.timestamp - 1) : uint40(block.timestamp + 1); + } + manager.setWithdrawalSlot(creditAccount, slot, withdrawal); + } +} diff --git a/contracts/test/unit/tokens/DegenNFT.t.sol b/contracts/test/unit/tokens/DegenNFT.t.sol deleted file mode 100644 index 04b62b82..00000000 --- a/contracts/test/unit/tokens/DegenNFT.t.sol +++ /dev/null @@ -1,269 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.10; - -import {CreditManagerV3} from "../../../credit/CreditManagerV3.sol"; -import {CreditFacadeV3} from "../../../credit/CreditFacadeV3.sol"; - -import {AccountFactory} from "@gearbox-protocol/core-v2/contracts/core/AccountFactory.sol"; - -import {ICreditManagerV3, ICreditManagerV3Events} from "../../../interfaces/ICreditManagerV3.sol"; - -import {AddressProvider} from "@gearbox-protocol/core-v2/contracts/core/AddressProvider.sol"; -import {IDegenNFT, IDegenNFTExceptions} from "@gearbox-protocol/core-v2/contracts/interfaces/IDegenNFT.sol"; -import {DegenNFT} from "@gearbox-protocol/core-v2/contracts/tokens/DegenNFT.sol"; - -import "../../lib/constants.sol"; -import {CreditFacadeTestHelper} from "../../helpers/CreditFacadeTestHelper.sol"; - -// EXCEPTIONS -import {NotImplementedException, CallerNotConfiguratorException} from "../../../interfaces/IExceptions.sol"; - -// SUITES -import {TokensTestSuite} from "../../suites/TokensTestSuite.sol"; -import {CreditFacadeTestSuite} from "../../suites/CreditFacadeTestSuite.sol"; -import {CreditConfig} from "../../config/CreditConfig.sol"; -import {Tokens} from "../../config/Tokens.sol"; - -uint256 constant WETH_TEST_AMOUNT = 5 * WAD; -uint16 constant REFERRAL_CODE = 23; - -/// @title CreditFacadeTest -/// @notice Designed for unit test purposes only -contract DegenNFTTest is DSTest, CreditFacadeTestHelper, IDegenNFTExceptions { - DegenNFT degenNFT; - AddressProvider addressProvider; - AccountFactory accountFactory; - - function setUp() public { - new Roles(); - - TokensTestSuite tokenTestSuite = new TokensTestSuite(); - tokenTestSuite.topUpWETH{value: 100 * WAD}(); - - CreditConfig creditConfig = new CreditConfig( - tokenTestSuite, - Tokens.DAI - ); - - cft = new CreditFacadeTestSuite(creditConfig, true, false, false, 1); - cft.testFacadeWithDegenNFT(); - - creditManager = cft.creditManager(); - creditFacade = cft.creditFacade(); - creditConfigurator = cft.creditConfigurator(); - degenNFT = DegenNFT(creditFacade.degenNFT()); - addressProvider = cft.addressProvider(); - - accountFactory = cft.af(); - } - - /// - /// - /// TESTS - /// - /// - - /// - /// Degen NFT specific functions - /// - - // @dev [DNFT-1]: constructor sets correct values - function test_DNFT_01_constructor_sets_correct_values() public { - assertEq(degenNFT.name(), "DegenNFT", "Incorrect name"); - - assertEq(degenNFT.symbol(), "Gear-Degen", "Incorrect symbol"); - } - - // @dev [DNFT-2A]: setBaseUri reverts on non-Configurator - function test_DNFT_02A_setBaseUri_reverts_on_non_Configurator() public { - evm.expectRevert(CallerNotConfiguratorException.selector); - degenNFT.setBaseUri("Degeneracy"); - } - - // @dev [DNFT-2B]: setMinter reverts on non-Configurator - function test_DNFT_02B_setMinter_reverts_on_non_Configurator() public { - evm.expectRevert(CallerNotConfiguratorException.selector); - degenNFT.setMinter(DUMB_ADDRESS); - } - - // @dev [DNFT-2C]: addCreditFacade reverts on non-Configurator - function test_DNFT_02C_addCreditFacade_reverts_on_non_Configurator() public { - evm.expectRevert(CallerNotConfiguratorException.selector); - degenNFT.addCreditFacade(DUMB_ADDRESS); - } - - // @dev [DNFT-2D]: removeCreditFacade reverts on non-Configurator - function test_DNFT_02D_addCreditFacade_reverts_on_non_Configurator() public { - evm.expectRevert(CallerNotConfiguratorException.selector); - degenNFT.removeCreditFacade(DUMB_ADDRESS); - } - - // @dev [DNFT-3]: mint reverts on non-Minter - function test_DNFT_03_mint_reverts_on_non_minter() public { - evm.expectRevert(abi.encodeWithSelector(MinterOnlyException.selector)); - evm.prank(FRIEND); - degenNFT.mint(USER, 1); - } - - // @dev [DNFT-4]: burn reverts on non-CreditFacadeV3 or configurator - function test_DNFT_04_burn_reverts_on_non_CreditFacade() public { - evm.expectRevert(abi.encodeWithSelector(CreditFacadeOrConfiguratorOnlyException.selector)); - evm.prank(FRIEND); - degenNFT.burn(USER, 1); - } - - // @dev [DNFT-5]: setBaseUri correctly sets URI - function test_DNFT_05_setBasUri_correctly_sets_uri() public { - evm.prank(CONFIGURATOR); - degenNFT.setBaseUri("Degeneracy"); - - assertEq(degenNFT.baseURI(), "Degeneracy", "Base URI was set incorrectly"); - } - - // @dev [DNFT-5A]: setMinter correctly sets minter - function test_DNFT_05A_setBasUri_correctly_sets_uri() public { - evm.prank(CONFIGURATOR); - degenNFT.setMinter(DUMB_ADDRESS); - - assertEq(degenNFT.minter(), DUMB_ADDRESS, "Minter was set incorrectly"); - } - - // @dev [DNFT-6]: addCreditFacade reverts on invalid address - function test_DNFT_06_addCreditFacade_reverts_on_invalid_address() public { - evm.expectRevert(InvalidCreditFacadeException.selector); - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(DUMB_ADDRESS); - - evm.expectRevert(InvalidCreditFacadeException.selector); - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(address(accountFactory)); - - ICreditManagerV3 fakeCM = new CreditManagerV3(creditManager.pool(), address(0)); - CreditFacadeV3 fakeCF = new CreditFacadeV3( - address(fakeCM), - DUMB_ADDRESS, - false - ); - - evm.expectRevert(InvalidCreditFacadeException.selector); - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(address(fakeCF)); - - fakeCF = new CreditFacadeV3( - address(creditManager), - DUMB_ADDRESS, - false - ); - - evm.expectRevert(InvalidCreditFacadeException.selector); - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(address(fakeCF)); - - fakeCF = new CreditFacadeV3( - address(creditManager), - address(degenNFT), - false - ); - - evm.expectRevert(InvalidCreditFacadeException.selector); - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(address(fakeCF)); - } - - // @dev [DNFT-7]: mint works correctly and updates all values - function test_DNFT_07_mint_is_correct() public { - evm.prank(CONFIGURATOR); - degenNFT.mint(USER, 3); - - assertEq(degenNFT.balanceOf(USER), 3, "User balance is incorrect"); - - for (uint256 i = 0; i < 3; i++) { - uint256 tokenId = (uint256(uint160(USER)) << 40) + i; - assertEq(degenNFT.ownerOf(tokenId), USER, "Owner of newly minted token is incorrect"); - } - - assertEq(degenNFT.totalSupply(), 3, "Total supply is incorrect"); - } - - // @dev [DNFT-8]: burn works correctly and updates all values - function test_DNFT_08_burn_is_correct() public { - evm.prank(CONFIGURATOR); - degenNFT.mint(USER, 3); - - evm.prank(address(creditFacade)); - degenNFT.burn(USER, 2); - - assertEq(degenNFT.balanceOf(USER), 1, "User balance is incorrect"); - - uint256 tokenId = uint256(uint160(USER)) + 2; - - evm.expectRevert("ERC721: invalid token ID"); - degenNFT.ownerOf(tokenId); - - tokenId = uint256(uint160(USER)) + 1; - - evm.expectRevert("ERC721: invalid token ID"); - degenNFT.ownerOf(tokenId); - - assertEq(degenNFT.totalSupply(), 1, "Total supply is incorrect"); - } - - // @dev [DNFT-8A]: burn reverts on insufficient balance - function test_DNFT_08A_burn_reverts_on_insufficient_balance() public { - evm.prank(CONFIGURATOR); - degenNFT.mint(USER, 3); - - evm.expectRevert(InsufficientBalanceException.selector); - evm.prank(CONFIGURATOR); - degenNFT.burn(USER, 4); - } - - // @dev [DNFT-9]: removeCreditFacade correctly sets value - function test_DNFT_09_removeCreditFacade_sets_value() public { - assertTrue(degenNFT.isSupportedCreditFacade(address(creditFacade)), "Expected Credit Facade is not added"); - - evm.prank(CONFIGURATOR); - degenNFT.removeCreditFacade(address(creditFacade)); - - assertTrue(!degenNFT.isSupportedCreditFacade(address(creditFacade)), "Credit Facade was not removed"); - } - - // @dev [DNFT-10]: addCreditFacade correctly sets value - function test_DNFT_10_addCreditFacade_sets_value() public { - assertTrue(degenNFT.isSupportedCreditFacade(address(creditFacade)), "Expected Credit Facade is not added"); - - evm.prank(CONFIGURATOR); - degenNFT.removeCreditFacade(address(creditFacade)); - - assertTrue(!degenNFT.isSupportedCreditFacade(address(creditFacade)), "Credit Facade was not removed"); - - evm.prank(CONFIGURATOR); - degenNFT.addCreditFacade(address(creditFacade)); - - assertTrue(degenNFT.isSupportedCreditFacade(address(creditFacade)), "Credit Facade was not added"); - } - - /// - /// ERC721 standard functions - /// - - // @dev [DNFT-11]: ERC721 transferability functions revert - function test_DNFT_11_transfer_and_approval_functions_revert() public { - evm.expectRevert(NotImplementedException.selector); - degenNFT.transferFrom(USER, USER, 0); - - evm.expectRevert(NotImplementedException.selector); - degenNFT.safeTransferFrom(USER, USER, 0); - - evm.expectRevert(NotImplementedException.selector); - degenNFT.safeTransferFrom(USER, USER, 0, ""); - - evm.expectRevert(NotImplementedException.selector); - degenNFT.setApprovalForAll(FRIEND, true); - - evm.expectRevert(NotImplementedException.selector); - degenNFT.approve(FRIEND, 0); - } -} diff --git a/contracts/traits/ACLNonReentrantTrait.sol b/contracts/traits/ACLNonReentrantTrait.sol index aa3c563c..34d754f4 100644 --- a/contracts/traits/ACLNonReentrantTrait.sol +++ b/contracts/traits/ACLNonReentrantTrait.sol @@ -10,7 +10,7 @@ import { ZeroAddressException, CallerNotConfiguratorException, CallerNotPausableAdminException, - CallerNotUnPausableAdminException, + CallerNotUnpausableAdminException, CallerNotControllerException } from "../interfaces/IExceptions.sol"; @@ -19,6 +19,9 @@ import {ACLTrait} from "./ACLTrait.sol"; /// @title ACL Trait /// @notice Utility class for ACL consumers abstract contract ACLNonReentrantTrait is ACLTrait, Pausable { + /// @dev Emitted when new external controller is set + event NewController(address indexed newController); + uint8 private constant _NOT_ENTERED = 1; uint8 private constant _ENTERED = 2; @@ -27,7 +30,21 @@ abstract contract ACLNonReentrantTrait is ACLTrait, Pausable { uint8 private _status = _NOT_ENTERED; - /// @dev Modifier that allow pausable admin to call only + /// @dev Ensures that caller is external controller (if it is set) or configurator + modifier controllerOnly() { + if (externalController) { + if (msg.sender != controller) { + revert CallerNotControllerException(); + } + } else { + if (!_acl.isConfigurator(msg.sender)) { + revert CallerNotControllerException(); + } + } + _; + } + + /// @dev Ensures that caller is pausable admin modifier pausableAdminsOnly() { if (!_acl.isPausableAdmin(msg.sender)) { revert CallerNotPausableAdminException(); @@ -35,6 +52,14 @@ abstract contract ACLNonReentrantTrait is ACLTrait, Pausable { _; } + /// @dev Ensures that caller is unpausable admin + modifier unpausableAdminsOnly() { + if (!_acl.isUnpausableAdmin(msg.sender)) { + revert CallerNotUnpausableAdminException(); + } + _; + } + /// @dev Prevents a contract from calling itself, directly or indirectly. /// Calling a `nonReentrant` function from another `nonReentrant` /// function is not supported. It is possible to prevent this from happening @@ -55,45 +80,23 @@ abstract contract ACLNonReentrantTrait is ACLTrait, Pausable { _status = _NOT_ENTERED; } - event NewController(address indexed newController); - /// @dev constructor /// @param addressProvider Address of address repository constructor(address addressProvider) ACLTrait(addressProvider) nonZeroAddress(addressProvider) { controller = IACL(AddressProvider(addressProvider).getACL()).owner(); } - /// @dev Reverts if msg.sender is not configurator - modifier controllerOnly() { - if (externalController) { - if (msg.sender != controller) { - revert CallerNotControllerException(); - } - } else { - if (!_acl.isConfigurator(msg.sender)) { - revert CallerNotControllerException(); - } - } - _; - } - - ///@dev Pause contract - function pause() external { - if (!_acl.isPausableAdmin(msg.sender)) { - revert CallerNotPausableAdminException(); - } + ///@dev Pauses contract + function pause() external virtual pausableAdminsOnly { _pause(); } - /// @dev Unpause contract - function unpause() external { - if (!_acl.isUnpausableAdmin(msg.sender)) { - revert CallerNotUnPausableAdminException(); - } - + /// @dev Unpauses contract + function unpause() external virtual unpausableAdminsOnly { _unpause(); } + /// @dev Sets new external controller function setController(address newController) external configuratorOnly { externalController = !_acl.isConfigurator(newController); controller = newController; diff --git a/contracts/traits/IERC20HelperTrait.sol b/contracts/traits/IERC20HelperTrait.sol deleted file mode 100644 index 61ea6acc..00000000 --- a/contracts/traits/IERC20HelperTrait.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -// Gearbox Protocol. Generalized leverage for DeFi protocols -// (c) Gearbox Holdings, 2022 -pragma solidity ^0.8.17; - -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; - -/// @title IERC20HelperTrait -/// @notice Saves size by providing internal call for balanceOf -abstract contract IERC20HelperTrait { - using SafeERC20 for IERC20; - - function _balanceOf(address token, address holder) internal view returns (uint256) { - return IERC20(token).balanceOf(holder); - } - - function _transferFrom(address token, address from, address to, uint256 amount) internal { - IERC20(token).safeTransferFrom(from, to, amount); - } -} diff --git a/lib/forge-std b/lib/forge-std index 066ff16c..73a504d2 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 066ff16c5c03e6f931cd041fd366bc4be1fae82a +Subproject commit 73a504d2cf6f37b7ce285b479f4c681f76e95f1b